# task-606.1 완료 보고서: 집단지성 채팅 코드 읽기 모드 구현

## SCQA

**S**: 집단지성 채팅(3봇: Gemini/Codex/Claude)이 라운드 로빈 방식으로 토론하며, 현재 Claude는 파일 시스템 접근 없이 일반 텍스트 응답만 가능하다.

**C**: 사용자가 "코드 구조를 분석해줘"와 같은 코드 분석 요청 시에도 Claude가 실제 파일을 읽지 못해 추측 기반 응답만 제공하며, 코드 토론의 정확도가 낮다.

**Q**: Claude가 코드 분석 요청을 자동 감지하여 파일을 읽고, 그 결과를 다른 봇들과 토론할 수 있도록 할 수 있는가?

**A**: 키워드 기반 코드 분석 감지 + Claude 우선 배정 + `--allowedTools Read,Grep,Glob` 전달 구조로 구현 완료. 229개 테스트 전체 통과, pyright 신규 타입 에러 0건. 봇 재시작 후 적용 가능.

## 작업 내용

### 1. discussion_manager.py — 코드 분석 감지 + Claude 우선 로직
- `CODE_ANALYSIS_KEYWORDS` 상수 (30개 한/영 키워드) 추가
- `detect_code_analysis()` 함수: 키워드 2개 이상 매칭 OR 파일 경로 패턴 감지
- `DiscussionState`에 `code_analysis_mode: bool = False` 필드 추가
- `on_user_message()`: 코드 분석 감지 시 `state.code_analysis_mode = True`, `current_turn = "claude_view_bot"` 설정
- `is_code_analysis_mode()` 공개 메서드 추가
- `stop_discussion()`에 `code_analysis_mode = False` 초기화 추가
- `_start_index` 라운드 로빈 회전은 기존과 동일하게 유지 (다음 일반 토론에 영향 없음)

### 2. engine.py — call_claude() code_analysis 파라미터
- `call_claude(prompt, timeout=180, code_analysis=False)` 시그니처 변경
- `code_analysis=True` 시 `--allowedTools Read,Grep,Glob` 추가
- `code_analysis=True` 시 `cwd="/home/jay/workspace"` (기본: `/tmp`)
- Edit, Write, Bash 등 쓰기 도구는 절대 포함하지 않음 (읽기 전용)

### 3. claude_bot.py — 코드 분석 프롬프트 보강
- `CODE_ANALYSIS_PROMPT_PREFIX` 상수 추가 (분석 모드 안내 + 프로젝트 경로 제공)
- `handle_message()`: `dm.is_code_analysis_mode(chat_id)` 체크 후 프롬프트 프리픽스 삽입 + `code_analysis=True` 전달
- memory 있는 경로와 폴백 경로 모두 적용

### 4. main_bot.py — trigger_next_bot_response() 연동
- `from claude_bot import CODE_ANALYSIS_PROMPT_PREFIX` 추가
- `trigger_next_bot_response()`에서 Claude 봇 + 코드 분석 모드일 때 `call_claude(context_prompt, code_analysis=True)` 직접 호출

## 생성/수정 파일 목록

| 파일 | 변경 유형 |
|------|-----------|
| `/home/jay/workspace/services/multimodel-bot/discussion_manager.py` | 수정 |
| `/home/jay/workspace/services/multimodel-bot/engine.py` | 수정 |
| `/home/jay/workspace/services/multimodel-bot/claude_bot.py` | 수정 |
| `/home/jay/workspace/services/multimodel-bot/main_bot.py` | 수정 |
| `/home/jay/workspace/services/multimodel-bot/tests/test_discussion_manager.py` | 수정 (12 테스트 추가) |
| `/home/jay/workspace/services/multimodel-bot/tests/test_engine.py` | 수정 (8 테스트 추가) |

## 테스트 결과

- pytest: **229 passed** (기존 209 + 신규 20)
- pyright: 신규 타입 에러 **0건** (기존 `reportMissingImports` 16건은 로컬 모듈 경로 이슈, 이번 수정과 무관)
- black/isort: 포매팅 완료

### 신규 테스트 목록 (20개)
- `TestDetectCodeAnalysis`: 6개 (키워드 2개 매칭, 경로 감지, 일반 메시지, 단일 키워드, 영어 지원)
- `TestDiscussionManagerCodeAnalysis`: 6개 (Claude 우선, 플래그 설정, 일반 메시지 미적용, is_code_analysis_mode, 미존재 chat_id, start_index 독립성)
- `TestCallClaude`: 8개 (정상 응답, allowedTools 미포함, allowedTools 포함, cwd 변경, 기본 cwd, 쓰기 도구 미포함, 타임아웃, CLAUDECODE 제거)

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **`stop_discussion()`에 `code_analysis_mode` 초기화 누락** — 토론 종료 시 플래그가 남아있으면 다음 토론에 영향을 줄 수 있음. `state.code_analysis_mode = False` 추가로 해결.
2. **`main_bot.py`에서 `trigger_next_bot_response` 내 Claude 분기 필요** — `call_fn`은 `code_analysis` 파라미터를 지원하지 않는 일반 호출 함수. Claude 코드 분석 모드에서만 `call_claude`를 직접 import하여 호출하도록 분기 추가.
3. **`on_user_message()`에서 `code_analysis_mode = False` 명시적 설정 필요** — 코드 분석이 아닌 일반 토론 시작 시 이전 state가 남아있을 수 있으므로, else 분기에서 `state.code_analysis_mode = False`를 명시적으로 설정.

## 주의사항
- **봇 재시작 필요**: 코드 변경 후 멀티모델 봇 프로세스를 재시작해야 적용됨
- **읽기 전용**: `--allowedTools`에 Edit, Write, Bash 등 쓰기 도구는 포함하지 않음
- **timeout 유지**: code_analysis 모드에서도 기본 180초 유지
