diff --git a/ideas/250929_happybell80_multi_ai_cli_integration.md b/ideas/250929_happybell80_multi_ai_cli_integration.md index 4e678a0..852f965 100644 --- a/ideas/250929_happybell80_multi_ai_cli_integration.md +++ b/ideas/250929_happybell80_multi_ai_cli_integration.md @@ -79,11 +79,21 @@ tmux attach -t ai-panel - **결과**: 균형잡힌 설계 결정 ## 구현 로드맵 -1. **Phase 1** (즉시): tmux 스크립트 작성 및 테스트 -2. **Phase 2** (1주): Python subprocess 래퍼 개발 -3. **Phase 3** (2주): FastAPI 백엔드 구축 -4. **Phase 4** (3주): 웹 UI 및 실시간 통신 -5. **Phase 5** (1개월): 세션 공유, 응답 분석 기능 + +### 개발 일정 +1. **Phase 0** (1-2일): 단일 CLI PoC - Claude만으로 PTY/파싱 검증 +2. **Phase 1** (즉시): tmux 스크립트 작성 및 테스트 +3. **Phase 2** (3-5일): Python pexpect 래퍼 개발 및 확장 +4. **Phase 3** (2주): FastAPI 백엔드 구축 +5. **Phase 4** (3주): 웹 UI 및 실시간 통신 +6. **Phase 5** (1개월): 세션 공유, 응답 분석 기능 + +### 산출물 +- **PoC 스크립트**: 단일 CLI 제어 검증 코드 +- **재현 스크립트**: 각종 에러 상황 시뮬레이션 +- **골든 로그**: raw/clean 출력 샘플 +- **파서 규칙 문서**: ANSI 제거, 프롬프트 패턴 +- **계약 테스트**: 어댑터 인터페이스 검증 ## 배포 방식 **UV 가상환경 사용** (Docker 대신) @@ -92,6 +102,40 @@ tmux attach -t ai-panel - tmux는 pipx로 설치 - FastAPI는 uv로 관리 +## PoC 개발 계획 + +### Phase 0: 단일 CLI 프로토타입 (1-2일) +- **대상**: Claude CLI만으로 시작 +- **기술**: pexpect (pty 대신) - PTY 제어, 타임아웃, 패턴 매칭에 강점 +- **검증 시나리오**: + - 정상 스트리밍 응답 + - 세션 만료 처리 + - Rate limit 대응 + - 느리거나 중단된 스트림 + - 프롬프트 미복귀 상황 + +### 메시지 스키마 (JSONL) +``` +{"type": "request", "model": "claude", "prompt": "...", "timestamp": "..."} +{"type": "chunk", "model": "claude", "content": "...", "timestamp": "..."} +{"type": "final", "model": "claude", "content": "...", "latency": 1.23} +{"type": "error", "model": "claude", "error": "session_expired", "timestamp": "..."} +``` + +### CLI 어댑터 계약 +- **인터페이스**: healthcheck() | ask()->async iterator | cancel() | resume() +- **모드**: PTY/STDIO 모드 지원 +- **정규화**: ANSI 제거, 프롬프트 재출현, 타임아웃 규칙 내장 + +### 파싱 규칙 +- **종료 판단**: 프롬프트 패턴 + 침묵 타임아웃(1-2초) + 길이 상한 +- **정규화**: 코드블록/표 정상화, fence 언어 보정 +- **골든 로그**: raw/clean 출력 비교로 파서 규칙 확정 + +### 에러 복구 전략 +- **분류**: Auth/Rate/Parse/Timeout +- **복구**: 지수 백오프, 재시도, 세션 만료시 수동 로그인 안내 + ## 기술적 고려사항 ### 세션 관리 @@ -100,9 +144,9 @@ tmux attach -t ai-panel - **헬스 체크**: claude me, gemini whoami로 세션 상태 확인 ### 입출력 제어 -- **PTY 사용**: Python pty 모듈로 실제 터미널 환경 시뮬레이션 +- **pexpect 사용**: pty 모듈보다 안정적, 패턴 매칭 우수 - **비동기 처리**: asyncio.subprocess로 여러 CLI 동시 제어 -- **입력 전송**: stdin.write() 후 flush() 필수 +- **입력 전송**: expect/send 메소드 활용 ### 응답 파싱 - **ANSI 코드 제거**: 색상 코드, 스피너, ASCII 아트 정규식 제거