PoC 개발 계획 추가: pexpect 기반 단일 CLI 검증

- Phase 0 추가: 1-2일 단일 CLI(Claude) PoC 개발
- pexpect 사용 (pty 대신) - 안정성과 패턴 매칭 우수
- JSONL 메시지 스키마 정의 (request/chunk/final/error)
- CLI 어댑터 계약 및 인터페이스 명시
- 파싱 규칙 및 에러 복구 전략 구체화
- 골든 로그 기반 테스트 체계
- 개발 일정 조정: PoC 1-2일 + 확장 3-5일
This commit is contained in:
happybell80 2025-09-29 16:03:05 +09:00
parent f136273b25
commit 1455a48f55

View File

@ -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 아트 정규식 제거