# 세션 관리 시스템 개선 4건 (task-1471.1 권고사항 구현)

## 작업 개요
task-1471.1 리서치 결과에서 도출된 4건의 개선 권고사항을 구현한다.
**핵심 원칙**: 관련 코드 전체를 확인하여 이질감 없이 통일화. 모듈화 원칙 준수.

## 작업 항목

### 1. AUTOCOMPACT_PCT_OVERRIDE 50→70 상향
**파일**: `/home/jay/.claude/settings.json`
**라인 4**: `"CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "50"` → `"70"`으로 변경
**근거**: 커뮤니티 권장 75%, Claude Code 내부 83% 상한 캡. 멀티봇 환경 안전 마진 5% 고려하여 70%.
**영향 범위**: 설정 1줄 변경. 단, SessionMonitor의 WARNING 임계값(70%)과 동일해지므로 의미적으로 맞는지 확인 필요.

### 2. ContextSummarizer에 선택적 LLM 요약 옵션 추가
**파일**: `/home/jay/workspace/utils/context_summarizer.py` (125줄)
- `generate_summary(turns, prev_summary)` 함수에 `use_llm=False` 파라미터 추가
- `use_llm=True`일 때: Anthropic API (haiku)로 구조화 요약 생성
- `use_llm=False`일 때: 기존 규칙 기반 로직 유지 (기본값)
- CRITICAL 시점에서만 `use_llm=True`로 호출 (session_auto_compress.py에서)
- **모듈화**: API 키는 `.env.keys`에서 로드 (하드코딩 금지). 모델명은 config/constants.json에 추가.
- **테스트**: `utils/tests/test_context_compressor.py` 내 context_summarizer 테스트 섹션에 use_llm=True 케이스 추가 (mock 사용)

### 3. Pre-compact 백업 훅 도입
**신규 파일**: `/home/jay/workspace/hooks/pre-compact-backup.sh`
- PostToolUse 훅 or 별도 PreCompact 이벤트로 압축 전 메시지 히스토리 백업
- 백업 경로: `memory/backups/pre-compact-{timestamp}.json`
- 최근 5건만 유지 (오래된 것 자동 삭제)
- `settings.json`의 hooks 섹션에 등록
- **참고**: claudefa.st Context Recovery Hook 패턴 참조
- 기존 `strategic-compact.sh`와 역할 충돌 없는지 확인

### 4. 토큰 추정 한국어 보정
**파일들**:
- `/home/jay/workspace/utils/context_compressor.py` (라인 22: `_CHARS_PER_TOKEN = 4`, 라인 25: `_estimate_tokens`)
- `/home/jay/workspace/utils/session_auto_compress.py` (라인 40: `_estimate_tokens_for_messages`)
- **통일화 필수**: 두 파일 모두 동일 로직 사용 중. 하나의 공용 함수로 통합하거나, context_compressor.py의 함수를 import해서 사용.
- 한국어 감지: 유니코드 범위 `\uAC00-\uD7AF` (한글 음절) 비율 체크
- 한국어 비율 > 30%이면 `chars / 2.5`, 아니면 `chars / 4`
- **모듈화**: `_CHARS_PER_TOKEN` 상수를 config/constants.json의 `token_estimation` 섹션으로 이동 검토

## 통일화 체크리스트
- [ ] `_estimate_tokens` 함수가 2곳에 중복 존재 → 단일 소스로 통합
- [ ] session_monitor.py의 기본 임계값(70%/85%)과 AUTOCOMPACT 70%의 정합성 확인
- [ ] strategic-compact.sh의 50 tool call 카운터와 새 pre-compact-backup.sh의 역할 분리 확인
- [ ] 모든 상수(임계값, 토큰 비율 등)가 config/constants.json에서 관리되는지 확인
- [ ] 테스트 파일 업데이트: test_session_auto_compress.py (585줄), test_context_compressor.py (410줄)

## 관련 파일 목록
- `/home/jay/.claude/settings.json` — AUTOCOMPACT + hooks 설정
- `/home/jay/workspace/utils/context_summarizer.py` — 요약 모듈 (125줄)
- `/home/jay/workspace/utils/context_compressor.py` — 압축 모듈 (192줄)
- `/home/jay/workspace/utils/session_auto_compress.py` — 세션 자동 압축 (292줄)
- `/home/jay/workspace/utils/session_monitor.py` — 세션 모니터 (334줄)
- `/home/jay/workspace/utils/session_resilience.py` — 세션 복원 (462줄)
- `/home/jay/workspace/hooks/strategic-compact.sh` — 전략적 압축 훅 (73줄)
- `/home/jay/workspace/tests/test_session_auto_compress.py` — 테스트 (585줄)
- `/home/jay/workspace/utils/tests/test_context_compressor.py` — 테스트 (410줄)
- `/home/jay/workspace/config/constants.json` — 상수 단일소스

## 리서치 참고
- 리서치 보고서: `/home/jay/workspace/memory/reports/task-1471.1.md`
- 커뮤니티 권장값, Claude Code 내부 캡, Factory.ai 벤치마크 등 상세 근거 포함

## 완료 기준
- 4건 모두 구현 + 테스트 PASS
- 기존 테스트 깨지지 않음
- 중복 코드 통합 완료
- config/constants.json에 새 상수 등록
- 코드 스타일/구조 이질감 없음
