# dispatch.py 요약
> 자동 생성: 2026-04-04 | 원본: 62.3KB, 1565줄

## 구조

### 독립 함수
- `_get_busy_bots_info` (line 189-224) — task-timers.json에서 running 상태 봇의 점유 정보 반환.
- `_find_available_bot` (line 227-268) — task-timers.json에서 running 상태 확인 후 가용 봇 반환.
- `_get_available_bots_with_teams` (line 271-290) — 전체 봇 중 busy가 아닌 가용 봇 목록과 기본 팀 매핑을 반환.
- `_read_bot_models` (line 293-314) — bot_settings.json에서 봇 키 해시별 모델 설정을 읽어 반환.
- `_patch_timer_metadata` (line 317-345) — task-timers.json에서 지정된 task_id 항목에 메타데이터 추가
- `get_dispatch_time` (line 348-351) — 현재 시간 + delay_seconds 후의 절대 시간 반환
- `_compute_next_id_from_timers` (line 354-387) — task-timers.json에서 다음 ID 계산 (이상치 필터링 적용)
- `generate_task_id` (line 390-453) — 자동 태스크 ID 생성 (카운터 파일 기반, 파일 락으로 중복 방지)
- `_sync_counter_if_needed` (line 456-481) — 외부 지정된 task_id가 카운터보다 크면 카운터를 업데이트한다.
- `build_prompt` (line 484-499) — 팀장에게 전달할 프롬프트 생성 (공통 모듈 위임)
- `_update_chain_task` (line 502-535) — chain.json 파일에서 해당 팀의 pending task에 task_id, dispatched_at, status=in_progress 기록
- `_cleanup_task` (line 538-588) — task-timers.json에서 해당 task_id의 reserved 또는 running 엔트리 삭제.
- `_warn_large_task_desc` (line 591-597) — 지시서 크기가 3000자 이상이면 Phase 분리 권고 WARNING 로그 출력
- `_check_referenced_file_sizes` (line 600-638) — task_desc에서 참조 파일을 추출하여 대용량 파일 경고 + 총 크기 한도 경고 반환.
- `_warn_research_impl_mix` (line 641-682) — 리서치+구현 혼합 지시서 감지 시 WARNING 로그 출력
- `_validate_composite_teams` (line 685-707) — composite teams 문자열 파싱 + 유효성 검증.
- `_dispatch_composite` (line 710-915) — 복합업무 임시팀 디스패치.
- `dispatch` (line 918-1335) — 작업을 독립 세션으로 디스패치
- `main` (line 1338-1560)

## 참조 가이드
_아래 항목은 키워드로 내용 찾기 예시입니다. offset/limit으로 해당 줄 범위만 읽으세요._
- `_get_busy_bots_info` 함수: line 189-224 읽기
- `_find_available_bot` 함수: line 227-268 읽기
- `_get_available_bots_with_teams` 함수: line 271-290 읽기
- `_read_bot_models` 함수: line 293-314 읽기
- `_patch_timer_metadata` 함수: line 317-345 읽기
