# Task: 멀티모델 봇 "사고 모드" 추가

## 개요
`/home/jay/workspace/services/multimodel-bot/` 의 3봇 통합 프로세스(main_bot.py)에
"사고 모드"를 추가한다. 봇이 즉시 답하지 않고, 이전 대화 맥락을 읽고 생각한 후 답변하는 방식.

## 현재 파일 구조
```
services/multimodel-bot/
├── config.py
├── engine.py           # call_gemini(), call_codex(), call_claude()
├── bot_utils.py        # should_respond(), send_response()
├── discussion_manager.py  # DiscussionManager, 토론 턴 관리
├── main_bot.py         # 3봇 통합 프로세스
├── gemini_bot.py       # handle_message (dm 파라미터 지원)
├── codex_bot.py
└── claude_bot.py
```

## 요구사항

### 1. 대화 맥락 수집
- 그룹챗 최근 N개 메시지를 메모리에 저장 (기본 20개)
- 메시지마다: 발신자(봇이름 or 유저), 내용, 시간
- 링 버퍼 형태로 오래된 메시지 자동 제거

### 2. "생각 중..." 표시
- 봇이 응답하기 전에 먼저 "🤔 생각 중..." 메시지를 전송
- AI 응답이 오면 "생각 중..." 메시지를 **삭제**하고 실제 답변을 전송
- 또는: "생각 중..." 메시지를 **편집(edit_message_text)**하여 실제 답변으로 교체 (더 깔끔)

### 3. 맥락 기반 프롬프트
각 엔진 호출 시, 단순히 유저 메시지만 보내는 게 아니라 맥락을 포함한 프롬프트를 구성:

```
[이전 대화]
잼민이: 저는 이 방식이 효율적이라고 생각합니다...
코덱스: 동의하지만, 성능 측면에서는...
제이회장님: 그럼 두 가지를 비교해봐

[현재 질문/발언]
제이회장님: 메모리 사용량은 어떻게 되지?

너는 {봇이름}이다. 위 대화를 읽고, 너의 관점에서 자연스럽게 답변해라.
이전 발언들을 참고하되 중복되지 않는 새로운 관점을 제시해라.
```

### 4. 순차 응답 (동시 X)
- 유저 메시지가 오면 3봇이 동시에 답하지 않고 **순차적으로** 응답
- 순서: 랜덤 또는 라운드 로빈
- 각 봇 사이에 자연스러운 딜레이 (이전 봇 응답 완료 후 다음 봇 시작)
- 각 봇은 이전 봇의 답변도 맥락에 포함하여 응답 (대화가 자연스럽게 이어짐)

### 5. 봇별 페르소나
프롬프트에 각 봇의 성격을 부여:
- **잼민이 (Gemini)**: Google의 시각. 실용적, 데이터 중심.
- **코덱스 (Codex)**: OpenAI의 시각. 코드 중심, 구현 지향.
- **클로디 (Claude)**: Anthropic의 시각. 신중하고 균형 잡힌 분석.

## 구현 가이드

### conversation_memory.py (신규)
```python
from collections import deque
from dataclasses import dataclass
from datetime import datetime

@dataclass
class ChatMessage:
    sender: str      # 봇이름 or "제이회장님"
    text: str
    timestamp: datetime
    is_bot: bool

class ConversationMemory:
    def __init__(self, max_messages: int = 20):
        self._messages: dict[int, deque[ChatMessage]] = {}  # chat_id → messages

    def add_message(self, chat_id: int, sender: str, text: str, is_bot: bool): ...
    def get_context(self, chat_id: int, limit: int = 10) -> list[ChatMessage]: ...
    def format_context(self, chat_id: int, bot_name: str) -> str: ...
```

### 수정 대상
- `main_bot.py` — ConversationMemory 인스턴스 공유, 순차 응답 로직
- `gemini_bot.py`, `codex_bot.py`, `claude_bot.py` — handle_message에서 맥락 프롬프트 구성
- `engine.py` — 각 call_* 함수의 prompt에 맥락 문자열 전달 (시그니처 변경 불필요, prompt 자체를 맥락 포함으로 구성)

## 환경
- python-telegram-bot v22.6
- 토큰: source /home/jay/workspace/.env.keys
- 통합 실행: `python3 main_bot.py`

## 테스트
- 맥락 수집/포맷 단위 테스트
- "생각 중..." 메시지 전송/교체 테스트
- 순차 응답 순서 테스트
- 봇별 페르소나 프롬프트 포함 테스트