# 대시보드 파일 뷰어 기능 추가

## 배경
현재 작업 산출물(보고서, 광고 크리에이티브, 스토리라인 등)을 확인하려면 텔레그램으로 파일을 전송받아야 함. 대시보드에서 직접 파일을 클릭해서 내용을 볼 수 있으면 훨씬 편리함.

## 요구사항

### 1. 파일 뷰어 API
서버에 파일 내용을 반환하는 API 추가:
- **GET /api/file?path=<relative_path>** — 파일 내용 반환
- 보안: workspace 하위 경로만 허용 (path traversal 방지)
- 허용 경로 화이트리스트: `memory/reports/`, `memory/tasks/`, `memory/specs/`, `memory/meetings/`
- 마크다운 파일(.md)은 렌더링된 HTML로 반환하거나 원문 반환 (프론트에서 렌더링)
- 텍스트 파일(.txt, .json, .yaml 등)은 원문 반환

### 2. 파일 링크 연동
대시보드에서 산출물 파일 경로가 표시되는 곳에 클릭 가능한 링크 추가:
- **진행중/완료 작업 목록**: task 보고서 경로 클릭 → 대시보드 내에서 파일 열기
- 구현 방법: 파일 경로 텍스트를 클릭하면 모달/사이드패널에서 파일 내용 표시

### 3. 파일 뷰어 UI
- 모달 또는 사이드 패널로 파일 내용 표시
- 마크다운 렌더링 지원 (기존 대시보드에서 사용하는 md 렌더링 활용)
- 닫기 버튼
- 파일명/경로 표시
- 라이트 테마 준수

### 4. 작업 완료 시 산출물 파일 목록 표시
- 완료된 작업의 보고서(`memory/reports/task-XXXX.md`)를 자동 링크
- 작업에 관련된 산출물 파일들도 표시 (보고서 내 파일 경로 파싱)

## 수정 대상 파일
- `/home/jay/workspace/dashboard/server.py` — 파일 API 추가
- `/home/jay/workspace/dashboard/components/App.js` — 파일 뷰어 UI 추가

## 보안 주의
- **절대** workspace 상위 디렉토리 접근 불가 (../../ 등 차단)
- .env, .credentials, .keys 등 민감 파일 접근 차단
- 허용 확장자: .md, .txt, .json, .yaml, .py (읽기 전용)

## 검증
- 대시보드에서 완료된 작업의 보고서 링크 클릭 → 파일 내용 모달 표시
- 경로 조작 시도 시 에러 반환 확인
- 대시보드 서버 재시작 후 정상 동작 확인

## task-timer
- task_id: task-1129.1
- team: dev1-team