Update Multi-AI CLI integration doc with verified implementation
- Add implementation completed section (2025-09-29) - Document non-TTY pipe mode solution - Include verified CLI flags for Claude/Gemini/OpenAI - Add environment variables for forcing non-interactive mode - Replace pexpect with subprocess.exec approach
This commit is contained in:
parent
45f9c82d2c
commit
33926080a2
@ -17,6 +17,28 @@ status: idea
|
||||
- **51123 서버**: Claude만 설치
|
||||
- **51124 서버**: Claude, Gemini, OpenAI 모두 설치, 세션 파일 접근 가능
|
||||
|
||||
## 구현 완료 (2025-09-29)
|
||||
|
||||
### 핵심 해결책: 비-TTY 파이프 모드
|
||||
- **문제**: pexpect가 PTY 생성 → TUI 감지 → 대화형 모드 실행
|
||||
- **해결**: subprocess.exec + 파이프 + 환경변수로 TUI 회피
|
||||
- **검증**: 모든 CLI에서 non-interactive 모드 작동 확인
|
||||
|
||||
### CLI별 구현 방법
|
||||
- **Claude**: `claude -p "prompt" --output-format json` → JSON에서 'result' 필드 추출
|
||||
- **Gemini**: `gemini -p "prompt"` → stdout 라인별 스트리밍
|
||||
- **OpenAI**: `openai chat.completions.create --stream` → SSE 형식 파싱
|
||||
|
||||
### 환경변수 설정
|
||||
```python
|
||||
env = {
|
||||
'CI': '1', # CI 환경 표시
|
||||
'TERM': 'dumb', # 터미널 기능 없음
|
||||
'NO_COLOR': '1', # ANSI 컬러 비활성화
|
||||
'CLICOLOR': '0' # 추가 컬러 비활성화
|
||||
}
|
||||
```
|
||||
|
||||
## 목표
|
||||
여러 AI의 의견을 동시에 얻어 더 나은 의사결정을 내리고 개발 생산성 향상
|
||||
|
||||
@ -106,7 +128,7 @@ tmux attach -t ai-panel
|
||||
|
||||
### Phase 0: 단일 CLI 프로토타입
|
||||
- **대상**: Claude CLI만으로 시작
|
||||
- **기술**: pexpect (pty 대신) - PTY 제어, 타임아웃, 패턴 매칭에 강점
|
||||
- **기술**: subprocess.exec (파이프 모드) - PTY 회피로 TUI 방지
|
||||
- **검증 시나리오**:
|
||||
- 정상 스트리밍 응답
|
||||
- 세션 만료 처리
|
||||
@ -126,10 +148,10 @@ tmux attach -t ai-panel
|
||||
- **인터페이스**: healthcheck() | ask()->async iterator | cancel() | resume()
|
||||
- **모드**: PTY/STDIO 모드 지원
|
||||
- **정규화**: ANSI 제거, 프롬프트 재출현, 타임아웃 규칙 내장
|
||||
- **pexpect 패턴**:
|
||||
- Claude: "❯" 프롬프트, timeout=30
|
||||
- Gemini: ">" 프롬프트, timeout=25
|
||||
- Codex: ">>>" 프롬프트, timeout=20
|
||||
- **CLI 플래그** (2025-09-29 검증):
|
||||
- Claude: `-p "prompt" --output-format json` (result 필드 추출)
|
||||
- Gemini: `-p "prompt"` (stdout 스트리밍)
|
||||
- OpenAI: `chat.completions.create --stream` (SSE 파싱)
|
||||
|
||||
### 파싱 규칙
|
||||
- **종료 판단**: 프롬프트 패턴 + 침묵 타임아웃 + 길이 상한
|
||||
@ -152,9 +174,9 @@ tmux attach -t ai-panel
|
||||
- ~/.config/codex: 600 (user read/write only)
|
||||
|
||||
### 입출력 제어
|
||||
- **pexpect 사용**: pty 모듈보다 안정적, 패턴 매칭 우수
|
||||
- **파이프 모드 사용**: PTY 생성 회피로 TUI 방지 (2025-09-29 검증)
|
||||
- **비동기 처리**: asyncio.subprocess로 여러 CLI 동시 제어
|
||||
- **입력 전송**: expect/send 메소드 활용
|
||||
- **환경변수 강제**: CI=1 TERM=dumb NO_COLOR=1 CLICOLOR=0
|
||||
|
||||
### 응답 파싱
|
||||
- **ANSI 코드 제거**: 색상 코드, 스피너, ASCII 아트 정규식 제거
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user