# 카카오톡 정제 UI — Phase 1: 업로드 + 날짜 감지 + 정제 실행 + 프로그레스바

## Lv.3 작업 (Phase 2까지 한정승인 — Phase 1 완료 후 즉시 Phase 2 진행)

## 설계 문서 (반드시 먼저 읽을 것)
`/home/jay/workspace/memory/brainstorming/kakao-refine-dashboard/brainstorm-20260412.md`

## 기존 파이프라인 코드 (반드시 확인)
- `/home/jay/projects/insuwiki/scripts/kakao_knowledge/knowledge_extractor_v2.py` (946줄, offset/limit 사용)
- `/home/jay/projects/insuwiki/scripts/kakao_knowledge/__main__.py` (CLI 진입점)
- 실행 명령: `PYTHONPATH=scripts python3 -m scripts.kakao_knowledge pipeline-v2 <txt파일> --output <출력파일> --use-llm --batch-size 20`

## Phase 1 구현 범위

### 1. 파일 업로드 API (server.py)
- `POST /api/wiki/refine/upload` — txt 파일 업로드
- 저장 위치: `/home/jay/workspace/dashboard/data/refine-uploads/` (타임스탬프 디렉토리)
- 업로드 후 카카오톡 날짜 패턴 파싱: `-------- YYYY년 M월 D일 --------` 또는 `YYYY. M. D.` 형태
- 응답: `{dateRange: {start: "2026-01", end: "2026-04"}, months: ["2026-01", "2026-02", "2026-03", "2026-04"], filePath: "..."}`

### 2. 정제 실행 API (server.py)
- `POST /api/wiki/refine/start` — 정제 시작
  - body: `{filePath, selectedMonth, startInsightId}`
  - startInsightId: 기존 최대 ID + 1 자동 계산 (현재 insight-645 → 646부터)
  - subprocess로 pipeline-v2 실행 (백그라운드)
  - 진행 상태 파일: `/home/jay/workspace/dashboard/data/refine-status.json`
  - 동시 정제 방지: 락 파일 확인, 진행 중이면 `{error: "정제 작업 진행 중"}`
- `GET /api/wiki/refine/status` — 진행 상태 polling
  - 응답: `{status: "running|completed|cancelled|failed", progress: 75, currentStep: "Sonnet 추출 (45/60)", startedAt, estimatedRemaining}`
- `POST /api/wiki/refine/cancel` — 정제 취소
  - 이미 처리된 건 보존, subprocess 종료
  - status를 "cancelled"로 변경, 중간 결과 보존 (이어서 정제용)

### 3. 프론트엔드 (InsuWikiView.js)
InsuWiki 탭 최상단에 "카카오톡 정제" 섹션 추가:

```
[카카오톡 정제] (접을 수 있는 섹션)
┌─────────────────────────────────────┐
│ 📁 txt 파일을 드래그하거나 클릭하세요 │ ← 업로드 영역
├─────────────────────────────────────┤
│ 감지된 기간: 2026-01 ~ 2026-04      │ ← 업로드 후 표시
│ 정제할 월: [2026-03 ▼]              │ ← 드롭다운
│ [정제 시작]  [취소]                  │ ← 버튼
├─────────────────────────────────────┤
│ ████████████░░░░ 75% Sonnet 추출중  │ ← 프로그레스바 (진행 중일 때)
│ 예상 남은 시간: 약 20분              │
└─────────────────────────────────────┘
```

- 프로그레스바: 2초마다 `/api/wiki/refine/status` polling
- 탭 이동 후 복귀 시: status API 호출 → 진행 중이면 프로그레스바 자동 표시
- 동시 정제 방지: 진행 중이면 "정제 시작" 버튼 비활성화 + "정제 작업 진행 중" 메시지

### 4. 진행 상태 관리
pipeline-v2 실행 시 `--progress-file` 옵션 추가 (또는 로그 파일 파싱):
- 배치마다 `refine-status.json` 업데이트: `{status, progress, currentStep, processedThreads, totalThreads}`
- knowledge_extractor_v2.py 수정이 필요하면 최소한으로 (진행률 콜백 추가)

### 5. ID 연번 + 타임스탬프 산출물
- 기존 최대 ID 자동 감지: `data/insights/` 디렉토리에서 최대 번호 추출
- 산출물 파일명: `insights_v2_{YYYYMMDD}_{HHmm}.json`, `insights_{YYYYMMDD}_{HHmm}/insight-646.md`, `graph_{YYYYMMDD}_{HHmm}.json`
- 기존 파일 덮어쓰기 금지

## 수정 후
- 대시보드 재시작: `systemctl --user restart dashboard`

## 테스트
- 업로드 → 날짜 감지 정상
- 정제 시작 → 프로그레스바 표시
- 탭 이동 후 복귀 → 프로그레스 유지
- 동시 실행 방지 → "진행 중" 메시지
- 취소 → 처리된 건 보존

## Phase 2 연결
Phase 1 완료 후 즉시 Phase 2 진행:
- 리뷰 화면 (이상 항목 하이라이트)
- 정제 이력 테이블
- 중단 복구 ("이어서 정제")
- 승인 → Sync 이전 반영

## 보고서
`/home/jay/workspace/memory/reports/task-{TASK_ID}.md`