TODO.md의 5개 요구사항을 현재 코드베이스에 맞춰 바로 구현 가능한 수준으로 정리한다.
핵심 개선 포인트:
- 추상 설계를 파일/함수 단위 변경 계획으로 구체화
- 복구 루프, 코더 세션, 파이프라인의 상태 전이를 명시
- API/DB/SSE/UI를 한 번에 연결하는 End-to-End 설계
- 운영 안전장치(승인, 리소스 제한, 호환성) 포함
session_id는submit_run에서 확정 후execute_run까지 동일하게 사용한다.- follow-up 발화는 독립 질의로 처리하지 않고
History + recent run summary를 강제 주입한다. - 로컬 파일 의도는
filesystem/*우선 라우팅 정책을 planner/tool-caller prompt에 유지한다. node_token_chunk저장은 직렬 큐를 유지하고token_seq를 추가해 재정렬 가능성을 높인다.- JSONL은 세션 단위 직렬 append와 concatenated JSON 복구(replay tolerant)를 유지한다.
- SSE는 UTF-8 경계 보존 파서를 사용하고, 프론트/백 모두 청크 경계 회귀 테스트를 추가한다.
현재 verify_completion이 불완전(INCOMPLETE)이어도 종료되는 문제를 수정한다.
검증 실패 시 자동으로 원인 진단, 복구 그래프 생성, 재실행, 재검증 루프를 수행한다.
src/types.rssrc/orchestrator/mod.rssrc/runtime/graph.rssrc/memory/store.rssrc/interface/api.rsweb/src/lib/types.tsweb/src/components/status-badge.tsx
RunStatus::RecoveringRecoveryDiagnosisreasonfailure_class(tool_fail | context_missing | logic_gap | timeout)missing_rolesadditional_contextshould_retry
RunAttemptRecordrun_idnode_idattempt_nostage(primary | recovery)statusreason
diagnose_failure(task, results, reason) -> RecoveryDiagnosisbuild_recovery_graph(diagnosis, prior_results) -> ExecutionGraphexecute_recovery_attempt(run_id, attempt_no, graph)should_trigger_replan(verified, diagnosis, attempt_no) -> bool
running -> verification_incomplete -> recovering -> (running/recovering 반복) -> succeeded|failed
제한:
max_recovery_attempts = 2- 동일
failure_class2회 연속이면 즉시 실패 종료 - 복구 실행 총 시간 상한(예: 10분)
- DB:
run_attempts - API:
GET /v1/runs/{run_id}/attemptsPOST /v1/runs/{run_id}/replan(manual trigger, admin/debug)
Coder를 텍스트 생성 전용 LLM 노드에서 실제 코드 실행형 백엔드로 확장한다.
src/config.rssrc/types.rssrc/orchestrator/coder_backend.rs(신규)src/orchestrator/mod.rssrc/runtime/mod.rssrc/memory/store.rs
CODER_BACKEND=claude_code|codex|llmCODER_COMMANDCODER_ARGSCODER_WORKING_DIRCODER_TIMEOUT_MSCODER_MAX_PARALLEL
trait CoderBackendspawn_session(prompt, working_dir, on_chunk) -> session_idwait_completion(session_id, timeout) -> resultkill_session(session_id)detect_file_changes(session_id|working_dir) -> changed_files
구현체:
LlmCoderBackendClaudeCodeBackendCodexBackend
coder_session_startedcoder_output_chunkcoder_file_changedcoder_session_completed
이벤트 payload에 node_id, session_id, backend, stream, exit_code 포함.
복수 코더 노드를 병렬 실행하고, 각 세션 출력을 채팅에서 분리해 실시간 확인 가능하게 한다.
src/orchestrator/mod.rssrc/interface/api.rssrc/types.rsweb/src/lib/types.tsweb/src/components/agent-thinking.tsxweb/src/hooks/use-sse.ts
- Planner의
SubtaskPlan에서 코딩 서브태스크를 분리해coder_*노드 생성 - Coder role policy:
max_parallelism = min(4, CODER_MAX_PARALLEL) - 세션별 상태 추적:
running|completed|failed
기본 전략:
- 코더 세션별 git worktree 격리 실행
- 병합 순서:
backend -> frontend -> shared - 충돌 발생 시 자동 머지 중단 + Reviewer/Developer 피드백 루프 전환
채팅 화면 3패널:
- 좌: 세션/메모리
- 중: 대화 + 노드 타임라인
- 우: Run Inspector (코더 세션 탭 + 파일 변경 목록)
추가 카드:
Replan CardParallel Coder GridContext Source Card
단일 DAG를 넘어 기획 -> 리뷰 -> 개발 -> QA -> 배포 -> 알림 페이즈형 워크플로우를 지원한다.
src/types.rssrc/orchestrator/pipeline.rs(신규)src/interface/api.rssrc/memory/store.rsweb/src/app/pipelines/page.tsx(신규)web/src/app/pipelines/[id]/page.tsx(신규)
PipelineWorkflowPipelinePhasePipelineRolePhaseHookPipelineExecutionPhaseState
핵심 필드:
depends_onfeedback_targetmax_feedback_loopson_complete_hooks
PipelineExecutor::execute:
- 위상 정렬로 phase 실행 순서 계산
- phase prompt 조립(선행 결과 + 피드백)
- orchestrator run 실행/대기
- 승인/피드백 판단
- feedback loop 또는 다음 phase 이동
- hooks 실행
POST /v1/pipelinesGET /v1/pipelinesGET /v1/pipelines/{id}DELETE /v1/pipelines/{id}POST /v1/pipelines/{id}/executeGET /v1/pipeline-executions/{id}GET /v1/pipeline-executions/{id}/stream
대규모 프로젝트를 도메인별 오케스트레이터에 분배하고 상위 메타 오케스트레이터가 통합한다.
src/types.rssrc/orchestrator/meta.rs(신규)src/interface/api.rs(후속)
MetaTaskTaskPartitionMergeStrategyMetaExecutionResult
분배 예시:
core orchestratorfrontend orchestratorinfra orchestrator
run_attemptscoder_sessionspipeline_workflowspipeline_executionspipeline_phase_states
action_event(기존 확장)coder_output_chunk(세분화 가능)pipeline_phase_updaterun_terminal
- 자동
git commit/push는 기본 비활성 (AGENT_AUTO_PUSH=false) - destructive 작업은 정책 플래그 또는 명시 승인 필요
- 코더 세션별 리소스 제한
- 최대 동시 세션 수
- stdout/stderr 버퍼 상한
- 실행 timeout
- 복구 루프/피드백 루프 상한 고정
- 기능 플래그 기반 점진적 릴리즈
feature_recovery_loopfeature_cli_coderfeature_pipeline
- 신규
RunStatus::Recovering을 모르는 클라이언트는running으로 표시하도록 fallback - 신규 이벤트를 모르는 UI는 무시해도 동작하도록 이벤트 파서 방어 코딩
- 마이그레이션은 additive-first로 적용하고 구버전 필드 유지
필수 지표:
run_success_ratereplan_trigger_raterecovery_success_ratecoder_session_failure_ratepipeline_phase_retry_countmean_time_to_complete
로그 상관키:
session_idrun_idattempt_nopipeline_execution_id
- Phase 1: CLI Coder Backend
- 이유: 이후 병렬/파이프라인의 기반
- Phase 2: Recovery Loop + run_attempts
- 이유: 품질 회귀 방지 핵심
- Phase 3: Parallel Coder + Chat Inspector UI
- 이유: 사용자 가시성/생산성 확보
- Phase 4: Pipeline Engine + API/UI
- 이유: 역할기반 협업 자동화
- Phase 5: Meta-Orchestrator
- 이유: 상위 확장 기능
단계별 공통:
cargo buildcargo testcd web && npm run build
시나리오 테스트:
- 불완전 답변 유도 -> recovery loop 동작 확인
- codex/claude 백엔드 각각 실행 -> 출력/파일 변경 이벤트 확인
- 병렬 코더 실행 -> worktree 충돌 없는지 검증
- pipeline 실행 -> feedback loop + hook 수행 확인