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:
parent
f136273b25
commit
1455a48f55
@ -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 아트 정규식 제거
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user