# Task: AI집단지성 대화 메모리 지능화 (Phase 1/2)

## 목표
AI집단지성 그룹챗의 대화를 영속 저장 + 자동 요약하여, 봇들이 장기 맥락을 유지하고 의미있는 대화를 이어갈 수 있도록 개선한다.

## 현재 상태
- `conversation_memory.py`: 인메모리 deque (20개 메시지), 봇 재시작 시 소멸
- 아누 시스템과 연동 없음

## 변경 대상 파일
- `/home/jay/workspace/services/multimodel-bot/conversation_memory.py` — 영속화 + 요약 로직
- `/home/jay/workspace/services/multimodel-bot/main_bot.py` — /정리 명령어 + 봇 시작 시 로드
- `/home/jay/workspace/services/multimodel-bot/engine.py` — 요약 생성 시 Claude 호출

## Phase 1: 대화 영속화 + 자동 요약

### 1-1. 대화 영속화
- 대화를 `memory/groupchat/` 디렉토리에 날짜별 JSON 파일로 저장
  - 파일명: `memory/groupchat/2026-03-15.json`
  - 포맷: `[{sender, text, timestamp, is_bot, chat_id}, ...]`
- 메시지 수신 시 ConversationMemory에 추가하면서 동시에 파일에 append
- 인메모리 버퍼를 20개 → 50개로 확대
- **봇 시작 시**: 오늘 날짜 JSON에서 최근 50개 메시지를 로드하여 ConversationMemory 복원
- 디렉토리 생성: `os.makedirs('/home/jay/workspace/memory/groupchat', exist_ok=True)`

### 1-2. 세션 요약 자동 생성
- 50개 메시지가 쌓일 때마다 (또는 30분 무활동 시) 자동 요약 트리거
- 요약 생성: `call_claude()`를 활용하여 "최근 대화를 3~5줄로 핵심 요약해줘" 요청
- 요약 저장: `memory/groupchat/summaries/2026-03-15_001.json`
  ```json
  {
    "timestamp": "2026-03-15T17:30:00",
    "message_range": {"from": 1, "to": 50},
    "summary": "...",
    "key_topics": ["topic1", "topic2"],
    "participants": ["잼민이", "코덱스", "클로디"]
  }
  ```
- 봇들이 대화할 때 프롬프트에 **최근 요약 2~3개 + 최근 메시지 20개**를 함께 포함
  - `format_context()`를 수정하여 요약 컨텍스트 추가

### 1-3. 봇 컨텍스트 강화
- `format_context()`를 확장:
  ```
  [이전 대화 요약]
  - (요약1)
  - (요약2)

  [최근 대화]
  잼민이: ...
  코덱스: ...
  클로디: ...
  ```
- 이렇게 하면 봇들이 과거 대화 맥락을 유지하면서 응답 가능

## Phase 2: 아누 시스템 연동

### 2-1. `/정리` 명령어
- 그룹챗에서 `/정리` 입력 시:
  1. 현재까지의 대화를 Claude에게 요약 요청 (핵심 논점, 결론, 액션 아이템)
  2. 요약 결과를 `memory/groupchat/insights/` 디렉토리에 저장
     - 파일명: `memory/groupchat/insights/2026-03-15_insight_001.md`
  3. 아누 DM 채팅으로 요약 전송 (cokacdir --sendfile 또는 직접 Telegram API)
  4. 그룹챗에도 요약 결과 출력 (클로디가 전달)

### 2-2. 아누 참조 연결고리
- `memory/groupchat/insights/` 디렉토리의 파일들을 아누가 대화 시작 시 확인할 수 있도록
- done-watcher 패턴과 유사: 새 insight 파일 감지 → 아누가 참조

## 기술 스펙

### 파일 저장 방식
- JSON Lines (.jsonl) 포맷 사용 (append-friendly)
- 파일 잠금: `fcntl.flock()`으로 동시 쓰기 방지
- 로테이션: 날짜별 파일 자동 분리

### 요약 생성 비용 관리
- `call_claude()` 사용 (Sonnet — 빠르고 저렴)
- 50개 메시지 기준 약 2000-3000 토큰 입력, 200-500 토큰 출력
- 요약 프롬프트는 간결하게: "아래 대화의 핵심 논점과 결론을 3~5줄로 요약해줘"

### 에러 처리
- 파일 저장 실패 시 인메모리 버퍼에서만 동작 (graceful degradation)
- 요약 생성 실패 시 skip하고 다음 트리거 대기

## 검증
- 봇 재시작 후 이전 대화가 복원되는지 확인
- 50개 메시지 후 요약이 자동 생성되는지 확인
- `/정리` 명령어 실행 시 요약이 파일에 저장되고 그룹챗에 출력되는지 확인
- 봇 응답에 과거 맥락이 반영되는지 확인

## 테스트
- `conversation_memory.py`의 영속화/로드 로직에 대한 단위 테스트 작성
- 요약 생성 로직은 mock으로 테스트
