# AI Video Brief — 요약 보관함(좌측 목록 + DB 저장) 추가

**소요 시간**: 20분
**Context 사용량**: input 550k / output 30k tokens (추정값)

## 요청 내용

왼쪽에 요약된 영상의 제목 리스트를 보여주고, 클릭 시 해당 요약본을 본문에 표시.
요약 결과는 DB/파일에 저장해서, 이미 요약된 항목은 로컬 저장본을 불러와 표시.

## 구현 내용 (`ai_video_brief` 프로젝트)

### 백엔드
- `app/db.py` 신규 — SQLite 보관소 (`storage/summaries.db`, 파이썬 내장 sqlite3, 추가 의존성 없음)
  - summaries 테이블: id, video_id, url, title, duration, source, summary, transcript, created_at
- `app/main.py`
  - 요약 파이프라인 시작 시 `video_id`(없으면 URL)로 저장본 조회 → 있으면 **계산 없이 즉시 반환** (`result.cached=true`)
  - 요약 완료 시 DB에 자동 저장 (받아쓴 원문 포함)
  - 신규 API: `GET /api/summaries`(목록), `GET /api/summaries/{id}`(상세), `GET /api/summaries/{id}/transcript`(원문), `DELETE /api/summaries/{id}`(삭제)
  - `POST /api/jobs`에 `force` 옵션 — 저장본 무시하고 재요약

### 웹 화면 (2단 레이아웃으로 개편)
- 좌측 사이드바: 📚 요약 보관함 — 제목/날짜/길이/출처 목록, 클릭 시 본문에 표시
- 우측 본문: URL 입력 + 진행 중 작업 + 선택된 요약 상세
- 상세 화면 버튼: 📋 복사 / 📄 원문 보기 / 🔄 다시 요약(force) / 🗑 삭제
- 요약 작업 완료 시 목록 자동 갱신 + 해당 요약 자동 표시, 저장본 사용 시 "💾 저장본에서 불러옴" 배지

## 테스트 결과

- ✅ 요약 → DB 저장 → 목록 노출 확인
- ✅ 같은 영상 재요청 → 2초 내 저장본 반환 (`cached: True`)
- ✅ 상세/원문/삭제 API 정상
- ✅ 새 2단 화면 정상 서빙

## 다음 에이전트 참고

- `pkill -f "uvicorn app.main"`을 서버 재시작 명령과 **한 줄에 쓰면 안 됨** — 명령 문자열 자체가 패턴에 걸려 자기 셸이 죽는다 (exit 144). 별도 호출로 분리할 것.
- 서버 재시작: 구 프로세스 종료 후 `cd ai_video_brief && ./run.sh` 또는 nohup uvicorn.
