From 2b23d1cfbd08e8b39411754b389ddd3a25fbe5ed Mon Sep 17 00:00:00 2001
From: Warren
Date: Thu, 30 Apr 2026 15:07:02 +0800
Subject: [PATCH] feat: update core API, database layer, and worker modules
- Remove unused imports (n8n_search, universal_search, Client, Arc, etc.)
- Update API endpoints for identity, face recognition, search
- Fix postgres_db.rs search_videos parent_uuid column
- Add snapshot API and identity agent API
- Clean up backup files (.bak, .bak2)
---
docs/API_ACCESS.md | 230 --
docs/API_CURL_EXAMPLES.md | 586 ---
docs/API_ENDPOINTS.md | 321 --
docs/API_EXAMPLES.md | 771 ----
docs/API_INDEX.md | 119 -
docs/API_KEY_ARCHITECTURE.md | 195 -
docs/API_KEY_INTEGRATION_TESTS.md | 236 --
docs/API_KEY_MANAGEMENT.md | 713 ----
docs/API_KEY_OPTIMIZATION.md | 399 --
docs/API_N8N_GUIDE.md | 222 --
docs/API_QUICK_REFERENCE.md | 532 ---
docs/API_REFERENCE.md | 528 ---
docs/API_TRAINING_MARCOM.md | 391 --
docs/API_WORDPRESS_GUIDE.md | 325 --
docs/API_WORKFLOW_WORDPRESS_N8N.md | 461 ---
docs/ARCHITECTURE_EVALUATION.md | 331 --
docs/BACKUP_VERSIONING.md | 450 ---
docs/BUILD_VERSION_RECORD.md | 667 ----
docs/CACHE_ARCHITECTURE_PLAN.md | 1106 ------
docs/CHUNK_DATA_STRUCTURE.md | 379 --
docs/CHUNK_DESIGN.md | 534 ---
docs/CHUNK_SPEC.md | 1113 ------
docs/DEMO_MANUAL.md | 686 ----
docs/DEVELOPMENT_LOG.md | 540 ---
docs/DOCS_STANDARD.md | 474 ---
docs/DOCUMENT_EMBEDDING_STRATEGY.md | 167 -
docs/FILE_CHANGE_MANAGEMENT.md | 323 --
docs/FRESH_MAC_INSTALLATION.md | 707 ----
docs/INSTALL_CADDY.md | 467 ---
docs/INSTALL_GITEA.md | 410 --
docs/INSTALL_GITEA_MCP.md | 393 --
docs/INSTALL_MARIADB.md | 396 --
docs/INSTALL_MOMENTRY_API.md | 464 ---
docs/INSTALL_MONGODB.md | 392 --
docs/INSTALL_N8N.md | 489 ---
docs/INSTALL_OLLAMA.md | 375 --
docs/INSTALL_PHP.md | 395 --
docs/INSTALL_POSTGRESQL.md | 397 --
docs/INSTALL_QDRANT.md | 472 ---
docs/INSTALL_REDIS.md | 481 ---
docs/INSTALL_RUSTDESK.md | 300 --
docs/INSTALL_SFTPGO.md | 1061 -----
docs/INSTALL_WORDPRESS.md | 332 --
docs/JOB_WORKER_IMPLEMENTATION_PLAN.md | 682 ----
docs/JSON_OUTPUT_SPEC.md | 519 ---
docs/MAC_INSTALLATION_PLAN.md | 782 ----
docs/MOMENTRY_CORE_MONITORING.md | 674 ----
docs/MOMENTRY_CORE_REDIS_KEYS.md | 283 --
docs/MOMENTRY_RAG_PRESENTATION.md | 334 --
.../Momentry_Core_API.postman_collection.json | 127 -
docs/N8N_API_FIX_SUMMARY.md | 106 -
docs/N8N_DEMO.md | 249 --
docs/N8N_DEMO_EXECUTION_LOG.md | 355 --
docs/N8N_DEMO_WORKFLOW.md | 690 ----
docs/N8N_HTTP_REQUEST_GUIDE.md | 269 --
docs/N8N_INTEGRATION_GUIDE.md | 575 ---
docs/N8N_MCP_SETUP.md | 227 --
docs/N8N_MCP_TEST_REPORT.md | 194 -
docs/N8N_SETUP_COMPLETE.md | 152 -
docs/N8N_VIDEO_SEARCH_SUCCESS.md | 301 --
docs/N8N_VIEW_OUTPUT_GUIDE.md | 141 -
docs/N8N_WORKFLOW_VIDEO_RAG_MCP.md | 169 -
docs/NODEJS.md | 450 ---
docs/OPENCODE_GUIDE.md | 430 --
docs/OPENCODE_MCP_INSTALL.md | 535 ---
docs/PENDING_ISSUES.md | 813 ----
docs/PLAYGROUND_BINARY_IMPLEMENTATION.md | 392 --
docs/PROCESSING_PIPELINE.md | 292 --
docs/PYTHON.md | 568 ---
docs/RUST_DEVELOPMENT.md | 990 -----
docs/SEARCH_PROMPTS.md | 121 -
docs/SERVICES.md | 1074 -----
docs/SERVICE_ADDITION_GUIDE.md | 698 ----
docs/SFTPGO_DEMO_USER.md | 504 ---
docs/TEST_AND_BENCHMARK_PLAN.md | 1201 ------
docs/USER_MANAGEMENT_PLAN.md | 425 --
docs/USER_MANUAL.md | 481 ---
docs/VERSION_MANAGEMENT.md | 261 --
docs/VIDEO_PROCESSING_SPEC.md | 1347 -------
docs/VIDEO_REGISTRATION.md | 246 --
docs/YOLO_RESUME_INTEGRATION.md | 102 -
docs/n8n_workflow_simple.json | 123 -
docs/n8n_workflow_simple_test.json | 89 -
docs/n8n_workflow_video_rag_mcp.json | 109 -
docs/n8n_workflow_video_search.json | 138 -
docs/test_all.sh | 100 -
docs/test_momentry_api.sh | 33 -
docs/test_workflow.sh | 104 -
src/api/agent_api.rs | 36 +-
src/api/face_recognition.rs | 54 +-
src/api/five_w1h_agent_api.rs | 673 ++++
src/api/identities.rs | 569 ++-
src/api/identity_agent_api.rs | 603 +++
src/api/identity_api.rs | 480 ++-
src/api/identity_binding.rs | 10 +-
src/api/middleware.rs | 16 +-
src/api/mod.rs | 3 +
src/api/n8n_search.rs | 12 +-
src/api/person_identity.rs | 212 +-
src/api/person_identity.rs.bak | 2772 -------------
src/api/person_identity.rs.bak2 | 2774 -------------
src/api/search.rs | 3 -
src/api/server.rs | 1064 ++++-
src/api/snapshot_api.rs | 335 ++
src/api/universal_search.rs | 2 +-
src/api/who.rs | 6 +-
src/bin/test_bm25_simple.rs | 2 +-
src/bin/test_simplified_chinese.rs | 2 +-
src/bin/test_synonym_expansion.rs | 2 +-
src/cli/args.rs | 215 +
src/cli/mod.rs | 5 +
src/core/cache/redis_cache.rs | 131 +-
src/core/chunk/mod.rs | 2 +-
src/core/chunk/rule1_ingest.rs | 409 +-
src/core/config.rs | 36 +
src/core/db/mod.rs | 7 +-
src/core/db/postgres_db.rs | 1049 ++++-
src/core/db/redis_db.rs | 84 +-
src/core/db/sync_db.rs | 27 +-
src/core/ingestion.rs | 132 +-
src/core/person_identity.rs | 10 +-
src/core/probe/ffprobe.rs | 2 +
src/core/processor/face.rs | 59 +-
src/core/processor/mod.rs | 2 +
src/core/processor/snapshot_agent.rs | 491 +++
src/core/storage/mod.rs | 2 +
src/core/storage/snapshot_manager.rs | 268 ++
src/core/storage/uuid.rs | 162 +-
src/core/worker/job_runner.rs | 70 +-
src/lib.rs | 1 +
src/main.rs | 3511 ++---------------
src/playground.rs | 130 +-
src/processing/decision.rs | 296 ++
src/processing/handlers.rs | 421 ++
src/processing/mod.rs | 8 +
src/processing/modules/asr.rs | 49 +
src/processing/modules/asrx.rs | 49 +
src/processing/modules/caption.rs | 49 +
src/processing/modules/cut.rs | 49 +
src/processing/modules/face.rs | 49 +
src/processing/modules/mod.rs | 21 +
src/processing/modules/ocr.rs | 52 +
src/processing/modules/pose.rs | 50 +
src/processing/modules/story.rs | 53 +
src/processing/modules/yolo.rs | 49 +
src/watcher/watcher.rs | 76 +-
src/worker/job_worker.rs | 76 +-
src/worker/processor.rs | 623 ++-
148 files changed, 8553 insertions(+), 48637 deletions(-)
delete mode 100644 docs/API_ACCESS.md
delete mode 100644 docs/API_CURL_EXAMPLES.md
delete mode 100644 docs/API_ENDPOINTS.md
delete mode 100644 docs/API_EXAMPLES.md
delete mode 100644 docs/API_INDEX.md
delete mode 100644 docs/API_KEY_ARCHITECTURE.md
delete mode 100644 docs/API_KEY_INTEGRATION_TESTS.md
delete mode 100644 docs/API_KEY_MANAGEMENT.md
delete mode 100644 docs/API_KEY_OPTIMIZATION.md
delete mode 100644 docs/API_N8N_GUIDE.md
delete mode 100644 docs/API_QUICK_REFERENCE.md
delete mode 100644 docs/API_REFERENCE.md
delete mode 100644 docs/API_TRAINING_MARCOM.md
delete mode 100644 docs/API_WORDPRESS_GUIDE.md
delete mode 100644 docs/API_WORKFLOW_WORDPRESS_N8N.md
delete mode 100644 docs/ARCHITECTURE_EVALUATION.md
delete mode 100644 docs/BACKUP_VERSIONING.md
delete mode 100644 docs/BUILD_VERSION_RECORD.md
delete mode 100644 docs/CACHE_ARCHITECTURE_PLAN.md
delete mode 100644 docs/CHUNK_DATA_STRUCTURE.md
delete mode 100644 docs/CHUNK_DESIGN.md
delete mode 100644 docs/CHUNK_SPEC.md
delete mode 100644 docs/DEMO_MANUAL.md
delete mode 100644 docs/DEVELOPMENT_LOG.md
delete mode 100644 docs/DOCS_STANDARD.md
delete mode 100644 docs/DOCUMENT_EMBEDDING_STRATEGY.md
delete mode 100644 docs/FILE_CHANGE_MANAGEMENT.md
delete mode 100644 docs/FRESH_MAC_INSTALLATION.md
delete mode 100644 docs/INSTALL_CADDY.md
delete mode 100644 docs/INSTALL_GITEA.md
delete mode 100644 docs/INSTALL_GITEA_MCP.md
delete mode 100644 docs/INSTALL_MARIADB.md
delete mode 100644 docs/INSTALL_MOMENTRY_API.md
delete mode 100644 docs/INSTALL_MONGODB.md
delete mode 100644 docs/INSTALL_N8N.md
delete mode 100644 docs/INSTALL_OLLAMA.md
delete mode 100644 docs/INSTALL_PHP.md
delete mode 100644 docs/INSTALL_POSTGRESQL.md
delete mode 100644 docs/INSTALL_QDRANT.md
delete mode 100644 docs/INSTALL_REDIS.md
delete mode 100644 docs/INSTALL_RUSTDESK.md
delete mode 100644 docs/INSTALL_SFTPGO.md
delete mode 100644 docs/INSTALL_WORDPRESS.md
delete mode 100644 docs/JOB_WORKER_IMPLEMENTATION_PLAN.md
delete mode 100644 docs/JSON_OUTPUT_SPEC.md
delete mode 100644 docs/MAC_INSTALLATION_PLAN.md
delete mode 100644 docs/MOMENTRY_CORE_MONITORING.md
delete mode 100644 docs/MOMENTRY_CORE_REDIS_KEYS.md
delete mode 100644 docs/MOMENTRY_RAG_PRESENTATION.md
delete mode 100644 docs/Momentry_Core_API.postman_collection.json
delete mode 100644 docs/N8N_API_FIX_SUMMARY.md
delete mode 100644 docs/N8N_DEMO.md
delete mode 100644 docs/N8N_DEMO_EXECUTION_LOG.md
delete mode 100644 docs/N8N_DEMO_WORKFLOW.md
delete mode 100644 docs/N8N_HTTP_REQUEST_GUIDE.md
delete mode 100644 docs/N8N_INTEGRATION_GUIDE.md
delete mode 100644 docs/N8N_MCP_SETUP.md
delete mode 100644 docs/N8N_MCP_TEST_REPORT.md
delete mode 100644 docs/N8N_SETUP_COMPLETE.md
delete mode 100644 docs/N8N_VIDEO_SEARCH_SUCCESS.md
delete mode 100644 docs/N8N_VIEW_OUTPUT_GUIDE.md
delete mode 100644 docs/N8N_WORKFLOW_VIDEO_RAG_MCP.md
delete mode 100644 docs/NODEJS.md
delete mode 100644 docs/OPENCODE_GUIDE.md
delete mode 100644 docs/OPENCODE_MCP_INSTALL.md
delete mode 100644 docs/PENDING_ISSUES.md
delete mode 100644 docs/PLAYGROUND_BINARY_IMPLEMENTATION.md
delete mode 100644 docs/PROCESSING_PIPELINE.md
delete mode 100644 docs/PYTHON.md
delete mode 100644 docs/RUST_DEVELOPMENT.md
delete mode 100644 docs/SEARCH_PROMPTS.md
delete mode 100644 docs/SERVICES.md
delete mode 100644 docs/SERVICE_ADDITION_GUIDE.md
delete mode 100644 docs/SFTPGO_DEMO_USER.md
delete mode 100644 docs/TEST_AND_BENCHMARK_PLAN.md
delete mode 100644 docs/USER_MANAGEMENT_PLAN.md
delete mode 100644 docs/USER_MANUAL.md
delete mode 100644 docs/VERSION_MANAGEMENT.md
delete mode 100644 docs/VIDEO_PROCESSING_SPEC.md
delete mode 100644 docs/VIDEO_REGISTRATION.md
delete mode 100644 docs/YOLO_RESUME_INTEGRATION.md
delete mode 100644 docs/n8n_workflow_simple.json
delete mode 100644 docs/n8n_workflow_simple_test.json
delete mode 100644 docs/n8n_workflow_video_rag_mcp.json
delete mode 100644 docs/n8n_workflow_video_search.json
delete mode 100755 docs/test_all.sh
delete mode 100755 docs/test_momentry_api.sh
delete mode 100755 docs/test_workflow.sh
create mode 100644 src/api/five_w1h_agent_api.rs
create mode 100644 src/api/identity_agent_api.rs
delete mode 100644 src/api/person_identity.rs.bak
delete mode 100644 src/api/person_identity.rs.bak2
create mode 100644 src/api/snapshot_api.rs
create mode 100644 src/cli/args.rs
create mode 100644 src/cli/mod.rs
create mode 100644 src/core/processor/snapshot_agent.rs
create mode 100644 src/core/storage/snapshot_manager.rs
create mode 100644 src/processing/decision.rs
create mode 100644 src/processing/handlers.rs
create mode 100644 src/processing/mod.rs
create mode 100644 src/processing/modules/asr.rs
create mode 100644 src/processing/modules/asrx.rs
create mode 100644 src/processing/modules/caption.rs
create mode 100644 src/processing/modules/cut.rs
create mode 100644 src/processing/modules/face.rs
create mode 100644 src/processing/modules/mod.rs
create mode 100644 src/processing/modules/ocr.rs
create mode 100644 src/processing/modules/pose.rs
create mode 100644 src/processing/modules/story.rs
create mode 100644 src/processing/modules/yolo.rs
diff --git a/docs/API_ACCESS.md b/docs/API_ACCESS.md
deleted file mode 100644
index f5dd3db..0000000
--- a/docs/API_ACCESS.md
+++ /dev/null
@@ -1,230 +0,0 @@
-# Momentry Core API 存取指南
-
-| 項目 | 內容 |
-|------|------|
-| 版本 | V1.3 |
-| 日期 | 2026-03-25 |
-| 用途 | API 存取方式、端點與整合指南 |
-
----
-
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| V1.3 | 2026-03-25 | 更新: n8n 搜尋回傳 `file_path` 取代 `media_url`,新增 API Key 驗證說明 | OpenCode | deepseek-reasoner |
-| V1.2 | 2026-03-24 | 更新網址與服務列表 | Warren | OpenCode / MiniMax M2.5 |
-| V1.1 | 2026-03-23 | 初始版本 | Warren | OpenCode / MiniMax M2.5 |
-
----
-
-## 基本網址
-
-| 環境 | URL | 說明 |
-|------|-----|------|
-| **本地開發** | `http://localhost:3002` | 直接訪問 API,繞過反向代理 |
-| **外部訪問** | `https://api.momentry.ddns.net` | 通過 Caddy 反向代理訪問,需網路可達 |
-
-### 何時使用哪個 URL
-
-**使用 `localhost:3002`:**
-- 開發/測試環境
-- 直接在伺服器上操作
-- 當反向代理有問題時
-
-**使用 `api.momentry.ddns.net`:**
-- n8n workflow 中呼叫 API
-- 外部系統整合
-- 生產環境
-
-## 認證
-所有 `/api/v1/*` 端點(除了健康檢查 `/health` 與 `/health/detailed`)都需要 API Key 認證。
-
-請在請求標頭中加入:
-```
-X-API-Key: YOUR_API_KEY
-```
-
-**目前示範使用的 API Key**: `demo_api_key_12345`
-
-> **注意**: 正式環境請使用安全的 API Key 管理機制,避免在客戶端暴露 API Key。
-
----
-
-## 影片搜尋 API
-
-### 語意搜尋
-
-**端點:** `POST /api/v1/search`
-
-**請求:**
-```json
-{
- "query": "charade",
- "limit": 5,
- "uuid": "a1b10138a6bbb0cd"
-}
-```
-
-| 欄位 | 類型 | 必填 | 說明 |
-|------|------|------|------|
-| `query` | 字串 | 是 | 搜尋文字 |
-| `limit` | 整數 | 否 | 最大回傳結果數(預設 10) |
-| `uuid` | 字串 | 否 | 依影片 UUID 過濾 |
-
-**回應:**
-```json
-{
- "results": [
- {
- "uuid": "a1b10138a6bbb0cd",
- "chunk_id": "sentence_0006",
- "chunk_type": "sentence",
- "start_time": 48.8,
- "end_time": 55.44,
- "text": "fun plot twists, Woody Dialog and charming performances...",
- "score": 0.526
- }
- ],
- "query": "charade"
-}
-```
-
----
-
-### n8n 整合搜尋
-
-**端點:** `POST /api/v1/n8n/search`
-
-**請求:**
-```json
-{
- "query": "charade",
- "limit": 5
-}
-```
-
-**回應:**
-```json
-{
- "query": "charade",
- "count": 5,
- "hits": [
- {
- "id": "sentence_0006",
- "vid": "a1b10138a6bbb0cd",
- "start": 48.8,
- "end": 55.44,
- "title": "Chunk sentence_0006",
- "text": "fun plot twists...",
- "score": 0.526,
- "file_path": "/Users/accusys/momentry/var/sftpgo/data/demo/Old_Time_Movie_Show_-_Charade_1963.HD.mov"
- }
- ]
-}
-```
-
-> **注意**: API 現在返回 `file_path`(檔案系統路徑)而非 `media_url`(網頁 URL)。如需在網頁中播放影片,請將檔案路徑轉換為可訪問的 URL(例如透過 SFTPGo 分享連結)。
-
----
-
-## 影片管理 API
-
-### 列出所有影片
-**端點:** `GET /api/v1/videos`
-
-### 查詢影片資訊
-**端點:** `GET /api/v1/lookup?uuid={uuid}` 或 `GET /api/v1/lookup?path={path}`
-
-### 取得處理進度
-**端點:** `GET /api/v1/progress/{uuid}`
-
----
-
-## 區塊資料結構
-
-每個搜尋結果包含影片播放的時間資訊:
-
-| 欄位 | 說明 |
-|------|------|
-| `uuid` | 影片識別碼 |
-| `chunk_id` | 區塊唯一識別碼 |
-| `chunk_type` | 類型:`sentence`、`cut`、`time_based` |
-| `start_time` | 開始時間(秒) |
-| `end_time` | 結束時間(秒) |
-| `text` | 語音轉文字內容 |
-| `score` | 相關性分數(0-1) |
-
----
-
-## 整合範例
-
-### JavaScript/fetch
-```javascript
-const response = await fetch('http://localhost:3002/api/v1/search', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'X-API-Key': 'YOUR_API_KEY' // 替換為實際的 API Key
- },
- body: JSON.stringify({ query: 'charade', limit: 5 })
-});
-const data = await response.json();
-console.log(data.results);
-```
-
-### PHP/cURL
-```php
-$ch = curl_init('http://localhost:3002/api/v1/search');
-curl_setopt($ch, CURLOPT_POST, true);
-curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
- 'query' => 'charade',
- 'limit' => 5
-]));
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json',
- 'X-API-Key: YOUR_API_KEY' // 替換為實際的 API Key
-]);
-$response = curl_exec($ch);
-$data = json_decode($response, true);
-```
-
----
-
-## 影片嵌入網址
-
-> **重要**: API 現在返回 `file_path`(檔案系統路徑),而非直接可訪問的網址。您需要將檔案路徑轉換為 SFTPGo 分享連結才能嵌入影片。
-
-**檔案路徑轉換為網址:**
-- API 返回的 `file_path` 範例:`/Users/accusys/momentry/var/sftpgo/data/demo/video.mp4`
-- 對應的 SFTPGo 分享連結:`https://wp.momentry.ddns.net/demo/video.mp4`
-- 轉換方式:移除 `/Users/accusys/momentry/var/sftpgo/data/` 前綴,將剩餘路徑附加到 `https://wp.momentry.ddns.net/`
-
-**手動建立分享連結:**
-1. 開啟 SFTPGo Web UI:`http://localhost:8080`
-2. 使用帳號 `demo` / 密碼 `demopassword123` 登入
-3. 導航至 `Files` → 選擇影片檔案
-4. 點擊 `Share` → `Create Link`
-5. 複製產生的分享連結
-
-使用搜尋結果中的 `start_time` 和 `end_time` 來嵌入影片片段。
-
----
-
-## 服務列表
-
-| 服務 | 網址 | 用途 |
-|------|------|------|
-| Momentry API | `http://localhost:3002` | 核心 API |
-| SFTPGo | `http://localhost:8080` | 檔案儲存 |
-| Qdrant | `http://localhost:6333` | 向量搜尋 |
-| PostgreSQL | `localhost:5432` | 資料庫 |
-
----
-
-## 示範影片
-
-- **檔案:** `Old_Time_Movie_Show_-_Charade_1963.HD.mov`
-- **UUID:** `a1b10138a6bbb0cd`
-- **長度:** 約 6879 秒(約 1.9 小時)
-- **區塊數:** 3886 個(句子 + 場景 + 時間)
diff --git a/docs/API_CURL_EXAMPLES.md b/docs/API_CURL_EXAMPLES.md
deleted file mode 100644
index e6a6388..0000000
--- a/docs/API_CURL_EXAMPLES.md
+++ /dev/null
@@ -1,586 +0,0 @@
-# Momentry API 使用說明 (curl 範例)
-
-| 項目 | 內容 |
-|------|------|
-| 版本 | V1.4 |
-| 日期 | 2026-03-26 |
-| Base URL | `http://localhost:3002` |
-
----
-
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| V1.4 | 2026-03-26 | 新增: 任務管理端點 (`/api/v1/jobs`, `/api/v1/jobs/:uuid`),更新註冊端點回應格式 | OpenCode | deepseek-reasoner |
-| V1.3 | 2026-03-25 | 更新: n8n 搜尋回傳 `file_path` 取代 `media_url`,新增 API Key 驗證說明 | OpenCode | deepseek-reasoner |
-| V1.2 | 2026-03-23 | 建立 curl 範例文件 | Warren | OpenCode / MiniMax M2.5 |
-| V1.1 | 2026-03-18 | 創建文件 | Warren | OpenCode / MiniMax M2.5 |
-
----
-
-> **狀態說明**:
-> - ✅ **已實作**: 健康檢查、搜尋、影片管理端點
-> - ⚠️ **規劃中**: API Key 管理功能
-> - 🔧 **CLI**: 部分功能需使用命令列工具
-
----
-
-## 目錄
-
-1. [已實作端點](#1-已實作端點)
-2. [API Key 管理](#2-api-key-管理-規劃中)
-3. [影片管理](#3-影片管理)
-4. [查詢與搜索](#4-查詢與搜索)
-5. [系統狀態](#5-系統狀態)
-
----
-
-## URL 選擇指南
-
-### 兩種 URL 的使用情境
-
-| 環境 | URL | 說明 |
-|------|-----|------|
-| **本地開發** | `http://localhost:3002` | 直接訪問 API,繞過反向代理 |
-| **外部訪問** | `https://api.momentry.ddns.net` | 通過 Caddy 反向代理訪問,需網路可達 |
-
-### 何時使用 localhost:3002
-
-- ✅ 開發/測試環境
-- ✅ 直接在伺服器上操作
-- ✅ 當 Caddy/反向代理有問題時
-- ✅ 需要快速除錯時
-
-### 何時使用 api.momentry.ddns.net
-
-- ✅ n8n workflow 中呼叫 API
-- ✅ 外部系統整合
-- ✅ 生產環境
-- ✅ 從其他機器訪問
-
-### 快速切換範例
-
-```bash
-# 本地測試
-curl http://localhost:3002/health
-
-# 外部測試(功能相同)
-curl https://api.momentry.ddns.net/health
-```
-
-### 常見問題
-
-**Q: 為什麼有兩個 URL?**
-A: `localhost:3002` 是直接訪問,`api.momentry.ddns.net` 通過 Caddy 反向代理。
-
-**Q: 兩者功能相同嗎?**
-A: 是的,所有端點和功能完全相同。
-
-**Q: 502 錯誤時怎麼辦?**
-A: 如果 `api.momentry.ddns.net` 返回 502,檢查 Momentry API 服務是否運行:
-```bash
-launchctl list | grep momentry.api
-# 如果未運行
-sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist
-```
-
----
-
-## API 認證
-
-所有 `/api/v1/*` 端點(除了健康檢查)都需要 API Key 認證。請在請求標頭中加入:
-
-```
--H "X-API-Key: YOUR_API_KEY"
-```
-
-**目前示範使用的 API Key**: `demo_api_key_12345`
-
-> **注意**: 正式環境請使用安全的 API Key 管理機制。
-
----
-
-## 1. 已實作端點
-
-### 健康檢查
-
-```bash
-curl http://localhost:3002/health
-```
-
-**回應**:
-```json
-{"status":"ok","version":"0.1.0","uptime_ms":123456}
-```
-
-### 詳細健康檢查
-
-```bash
-curl http://localhost:3002/health/detailed
-```
-
----
-
-## 2. API Key 管理 *(規劃中)*
-
-> ⚠️ **此功能尚未實作**。以下為規劃中的 API 說明,僅供參考。
-
-### 2.1 建立 API Key
-
-```bash
-curl -X POST http://localhost:3002/api/v1/api-keys \
- -H "Content-Type: application/json" \
- -H "X-API-Key: your-admin-key" \
- -d '{
- "name": "my-service-key",
- "key_type": "service",
- "permissions": ["read", "write"],
- "ttl_days": 90
- }'
-```
-
-### 2.2 列出所有 API Keys
-
-```bash
-curl -X GET http://localhost:3002/api/v1/api-keys \
- -H "X-API-Key: your-admin-key"
-```
-
-### 2.3 驗證 API Key
-
-```bash
-curl -X GET http://localhost:3002/api/v1/api-keys/validate \
- -H "X-API-Key: key-to-validate"
-```
-
-### 2.4 撤銷 API Key
-
-```bash
-curl -X DELETE http://localhost:3002/api/v1/api-keys/msvc_a1b2c3d4_... \
- -H "X-API-Key: your-admin-key"
-```
-
-### 2.5 請求 Key 輪換
-
-```bash
-curl -X POST http://localhost:3002/api/v1/api-keys/msvc_a1b2c3d4_.../rotate \
- -H "X-API-Key: your-admin-key" \
- -H "Content-Type: application/json" \
- -d '{"reason": "scheduled_rotation"}'
-```
-
-### 2.6 取得統計資訊
-
-```bash
-curl -X GET http://localhost:3002/api/v1/api-keys/stats \
- -H "X-API-Key: your-admin-key"
-```
-
----
-
-## 3. 影片管理
-
-### 3.1 註冊影片 ✅
-
-```bash
-curl -X POST http://localhost:3002/api/v1/register \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{"path": "/path/to/video.mp4"}'
-```
-
-**回應範例**:
-
-```json
-{
- "uuid": "a1b2c3d4e5f6g7h8",
- "video_id": 1,
- "job_id": 123,
- "file_name": "video.mp4",
- "duration": 120.5,
- "width": 1920,
- "height": 1080,
- "already_exists": false
-}
-```
-
-### 3.2 列出所有影片 ✅
-
-```bash
-curl -H "X-API-Key: YOUR_API_KEY" http://localhost:3002/api/v1/videos
-```
-
-### 3.3 查詢影片 ✅
-
-```bash
-# 依 UUID 查詢
-curl -H "X-API-Key: YOUR_API_KEY" "http://localhost:3002/api/v1/lookup?uuid=a1b2c3d4e5f6g7h8"
-
-# 依路徑查詢
-curl -H "X-API-Key: YOUR_API_KEY" "http://localhost:3002/api/v1/lookup?path=/path/to/video.mp4"
-```
-
-### 3.4 處理影片 🔧 *(CLI - 非 API)*
-
-影片處理需要使用 CLI 命令:
-
-```bash
-# 處理影片(生成 ASR, CUT, YOLO, OCR, Face, Pose 資料)
-cargo run --bin momentry -- process
-
-# 或處理多個影片
-cargo run --bin momentry -- process
-```
-
-### 3.5 取得處理進度 ✅
-
-```bash
-curl -H "X-API-Key: YOUR_API_KEY" http://localhost:3002/api/v1/progress/
-```
-
-**回應範例**:
-
-```json
-{
- "uuid": "a1b2c3d4e5f6g7h8",
- "overall_progress": 75,
- "processors": [
- {
- "name": "asr",
- "status": "complete",
- "current": 100,
- "total": 100,
- "progress": 100,
- "message": "7 segments"
- },
- {
- "name": "cut",
- "status": "complete",
- "current": 134,
- "total": 134,
- "progress": 100,
- "message": "134 scenes"
- },
- {
- "name": "yolo",
- "status": "progress",
- "current": 5000,
- "total": 14315,
- "progress": 35,
- "message": "frame 5000"
- }
- ]
-}
-```
-
-### 3.6 任務管理 ✅
-
-```bash
-# 列出所有任務
-curl -H "X-API-Key: YOUR_API_KEY" http://localhost:3002/api/v1/jobs
-
-# 取得特定任務詳情
-curl -H "X-API-Key: YOUR_API_KEY" http://localhost:3002/api/v1/jobs/
-```
-
-**任務列表回應範例**:
-```json
-{
- "jobs": [
- {
- "id": 123,
- "uuid": "a1b2c3d4e5f6g7h8",
- "status": "pending",
- "current_processor": null,
- "progress_current": 0,
- "progress_total": 100,
- "created_at": "2026-03-26 10:30:00",
- "started_at": null
- }
- ]
-}
-```
-
-**任務詳情回應範例**:
-```json
-{
- "id": 123,
- "uuid": "a1b2c3d4e5f6g7h8",
- "status": "processing",
- "current_processor": "asr",
- "progress_current": 50,
- "progress_total": 100,
- "processors": [
- {
- "processor_type": "asr",
- "status": "complete",
- "started_at": "2026-03-26 10:30:00",
- "completed_at": "2026-03-26 10:35:00",
- "duration_secs": 300.5,
- "error_message": null
- },
- {
- "processor_type": "cut",
- "status": "pending",
- "started_at": null,
- "completed_at": null,
- "duration_secs": null,
- "error_message": null
- }
- ],
- "created_at": "2026-03-26 10:30:00",
- "started_at": "2026-03-26 10:30:00",
- "updated_at": "2026-03-26 10:35:00"
-}
-```
-
----
-
-## 4. 查詢與搜索
-
-### 4.1 語意搜尋 ✅
-
-```bash
-curl -X POST http://localhost:3002/api/v1/search \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{
- "query": "測試關鍵字",
- "limit": 5
- }'
-```
-
-**回應範例**:
-
-```json
-{
- "results": [
- {
- "uuid": "a1b2c3d4e5f6g7h8",
- "chunk_id": "sentence_0006",
- "chunk_type": "sentence",
- "start_time": 48.8,
- "end_time": 55.44,
- "text": "fun plot twists...",
- "score": 0.526
- }
- ],
- "query": "測試關鍵字"
-}
-```
-
-### 4.2 n8n 格式搜尋 ✅
-
-```bash
-curl -X POST http://localhost:3002/api/v1/n8n/search \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{
- "query": "測試關鍵字",
- "limit": 5
- }'
-```
-
-**回應範例**:
-
-```json
-{
- "query": "測試關鍵字",
- "count": 2,
- "hits": [
- {
- "id": "c_001",
- "vid": "a1b2c3d4e5f6g7h8",
- "start": 48.8,
- "end": 55.44,
- "title": "Chunk sentence_0006",
- "text": "fun plot twists...",
- "score": 0.92,
- "file_path": "/Users/accusys/momentry/var/sftpgo/data/demo/video.mp4"
- }
- ]
-}
-```
-
-### 4.3 混合搜尋 ✅
-
-```bash
-curl -X POST http://localhost:3002/api/v1/search/hybrid \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{
- "query": "測試關鍵字",
- "limit": 5
- }'
-```
-
----
-
-## 5. 系統狀態
-
-### 5.1 健康檢查 ✅
-
-```bash
-curl http://localhost:3002/health
-```
-
-**回應**:
-```json
-{"status":"ok","version":"0.1.0","uptime_ms":123456}
-```
-
-### 5.2 詳細健康檢查 ✅
-
-```bash
-curl http://localhost:3002/health/detailed
-```
-
-**回應範例**:
-
-```json
-{
- "status":"ok",
- "version":"0.1.0",
- "uptime_ms":123456,
- "services":{
- "postgres":{"status":"ok","latency_ms":42,"error":null},
- "redis":{"status":"ok","latency_ms":0,"error":null},
- "qdrant":{"status":"ok","latency_ms":15,"error":null}
- }
-}
-```
-
----
-
-## 6. n8n Webhook 測試
-
-### 測試 n8n Workflow
-
-**重要**: 測試前請先在 n8n UI 中點擊 "Execute workflow" 按鈕
-
-```bash
-# 測試 Video RAG Workflow (Test Mode)
-curl -X POST http://localhost:5678/webhook-test/video-rag-mcp \
- -H "Content-Type: application/json" \
- -d '{"query":"charade","limit":3}'
-
-# 帶有 UUID 過濾的搜尋
-curl -X POST http://localhost:5678/webhook-test/video-rag-mcp \
- -H "Content-Type: application/json" \
- -d '{"query":"woody","limit":5,"uuid":"a1b10138a6bbb0cd"}'
-```
-
-### 生產環境 Webhook
-
-**注意**: 工作流程必須處於 Active 狀態
-
-```bash
-curl -X POST http://localhost:5678/webhook/video-rag-mcp \
- -H "Content-Type: application/json" \
- -d '{"query":"charade","limit":3}'
-```
-
-### n8n Webhook 常見問題
-
-**Q: webhook-test 返回 404**
-A: 需要在 n8n UI 中點擊 "Execute workflow" 按鈕後才能使用 test webhook
-
-**Q: webhook (生產環境) 返回 404**
-A: 需要將工作流程切換為 Active 狀態 (右上角開關)
-
----
-
-## 附錄
-
-### A. 服務 URL 列表
-
-| 服務 | URL |
-|------|-----|
-| Momentry API (本地) | `http://localhost:3002` |
-| Momentry API (外部) | `https://api.momentry.ddns.net` |
-| n8n Web UI | `https://n8n.momentry.ddns.net` |
-| n8n Webhook Test | `http://localhost:5678/webhook-test/{workflow-name}` |
-| n8n Webhook Prod | `http://localhost:5678/webhook/{workflow-name}` |
-
-### B. 所有可用端點
-
-| 端點 | 方法 | 狀態 | 說明 |
-|------|------|------|------|
-| `/health` | GET | ✅ | 健康檢查 |
-| `/health/detailed` | GET | ✅ | 詳細健康檢查 |
-| `/api/v1/register` | POST | ✅ | 註冊影片 |
-| `/api/v1/search` | POST | ✅ | 語意搜尋 |
-| `/api/v1/n8n/search` | POST | ✅ | n8n 格式搜尋 |
-| `/api/v1/search/hybrid` | POST | ✅ | 混合搜尋 |
-| `/api/v1/lookup` | GET | ✅ | 查詢影片 |
-| `/api/v1/videos` | GET | ✅ | 列出所有影片 |
-| `/api/v1/progress/:uuid` | GET | ✅ | 處理進度 |
-| `/api/v1/jobs` | GET | ✅ | 任務列表 |
-| `/api/v1/jobs/:uuid` | GET | ✅ | 任務詳情 |
-| `/api/v1/api-keys` | * | ⚠️ | API Key 管理 (規劃中) |
-
-### C. 常見錯誤
-
-| HTTP 狀態 | 說明 | 解決方式 |
-|-----------|------|----------|
-| 200 | 成功 | - |
-| 400 | 請求格式錯誤 | 檢查 JSON 格式 |
-| 404 | 端點不存在或資源未找到 | 確認端點 URL 正確 |
-| 500 | 伺服器內部錯誤 | 檢查 API 服務日誌 |
-| **502** | **Bad Gateway** | **API 服務未啟動,見下方說明** |
-
-#### 502 Bad Gateway 錯誤
-
-**問題**: 外部 URL `https://api.momentry.ddns.net` 返回 502
-
-**原因**: Momentry Core API 服務未啟動
-
-**解決方式**:
-
-```bash
-# 1. 檢查服務狀態
-launchctl list | grep momentry.api
-
-# 2. 如果未啟動,手動啟動
-sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist
-
-# 3. 或使用本地測試(繞過反向代理)
-curl http://localhost:3002/health
-
-# 4. 檢查日誌
-tail -50 /Users/accusys/momentry/log/momentry_api.error.log
-```
-
-### D. 範例腳本
-
-```bash
-#!/bin/bash
-# api_test.sh - API 測試腳本
-
-API_URL="http://localhost:3002"
-
-# 健康檢查
-echo "=== Health Check ==="
-curl -s "$API_URL/health" | jq .
-
-# 搜尋
-echo -e "\n=== Search ==="
-curl -s -X POST "$API_URL/api/v1/search" \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{"query": "test", "limit": 3}' | jq .
-
-# 列出影片
-echo -e "\n=== Videos ==="
-curl -s -H "X-API-Key: YOUR_API_KEY" "$API_URL/api/v1/videos" | jq '.videos | length'
-```
-
----
-
-## 相關文件
-
-- [API_INDEX.md](./API_INDEX.md) - 文件總覽(起點)
-- [API_ENDPOINTS.md](./API_ENDPOINTS.md) - 端點完整說明
-- [API_N8N_GUIDE.md](./API_N8N_GUIDE.md) - n8n 使用範例
-- [API_WORDPRESS_GUIDE.md](./API_WORDPRESS_GUIDE.md) - WordPress 使用範例
diff --git a/docs/API_ENDPOINTS.md b/docs/API_ENDPOINTS.md
deleted file mode 100644
index a641fef..0000000
--- a/docs/API_ENDPOINTS.md
+++ /dev/null
@@ -1,321 +0,0 @@
-# Momentry Core API 端點總覽
-
-| 項目 | 內容 |
-|------|------|
-| 建立者 | Warren |
-| 建立時間 | 2026-03-18 |
-| 文件版本 | V1.3 |
-
----
-
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 |
-|------|------|------|--------|
-| V1.0 | 2026-03-18 | 創建文件 | OpenCode |
-| V1.1 | 2026-03-23 | 更新端點與實際一致 | OpenCode |
-| V1.2 | 2026-03-25 | 新增快取/刪除 API | OpenCode |
-| V1.3 | 2026-03-26 | 更新API回應格式 (media_url→file_path) | OpenCode |
-
----
-
-## Base URL
-
-| 環境 | URL |
-|------|-----|
-| 本地 | `http://localhost:3002` |
-| 外部 | `https://api.momentry.ddns.net` |
-
----
-
-## 認證
-
-除健康檢查端點外,所有 API 端點都需要 API Key。
-
-### Header 方式
-
-```bash
-curl -H "X-API-Key: your-api-key" http://localhost:3002/api/v1/videos
-```
-
-### 響應
-
-- `401 Unauthorized` - 缺少或無效的 API Key
-- `200 OK` - 認證成功
-
-### 取得 API Key
-
-使用 CLI 建立:
-
-```bash
-./target/release/momentry api-key create "My API Key" --key-type user
-```
-
----
-
-## 端點列表
-
-### 健康檢查(公開)
-
-| 方法 | 端點 | 說明 |
-|------|------|------|
-| GET | `/health` | 基本健康檢查 |
-| GET | `/health/detailed` | 詳細健康檢查(含服務狀態) |
-
-**範例**:
-```bash
-curl http://localhost:3002/health
-# {"status":"ok","version":"0.1.0","uptime_ms":123456}
-```
-
----
-
-### 影片搜尋
-
-| 方法 | 端點 | 說明 |
-|------|------|------|
-| POST | `/api/v1/search` | 語意搜尋(標準格式) |
-| POST | `/api/v1/n8n/search` | 語意搜尋(n8n 專用格式) |
-| POST | `/api/v1/search/hybrid` | 混合搜尋 |
-
-**標準搜尋** (`/api/v1/search`):
-```bash
-curl -X POST http://localhost:3002/api/v1/search \
- -H "Content-Type: application/json" \
- -H "X-API-Key: your-api-key" \
- -d '{"query": "test", "limit": 10}'
-```
-
-**n8n 格式搜尋** (`/api/v1/n8n/search`):
-```bash
-curl -X POST http://localhost:3002/api/v1/n8n/search \
- -H "Content-Type: application/json" \
- -H "X-API-Key: your-api-key" \
- -d '{"query": "test", "limit": 10}'
-```
-
----
-
-### 影片管理
-
-| 方法 | 端點 | 說明 |
-|------|------|------|
-| POST | `/api/v1/register` | 註冊影片 |
-| POST | `/api/v1/probe` | 探測影片資訊(不註冊) |
-| GET | `/api/v1/videos` | 列出所有影片 |
-| GET | `/api/v1/lookup` | 查詢影片資訊 |
-| GET | `/api/v1/progress/:uuid` | 取得處理進度 |
-
-**註冊影片**:
-```bash
-curl -X POST http://localhost:3002/api/v1/register \
- -H "Content-Type: application/json" \
- -H "X-API-Key: your-api-key" \
- -d '{"path": "/path/to/video.mp4"}'
-```
-
-**註冊回應範例**:
-```json
-{
- "uuid": "a1b10138a6bbb0cd",
- "video_id": 1,
- "job_id": 10,
- "file_name": "video.mp4",
- "duration": 120.5,
- "width": 1920,
- "height": 1080,
- "already_exists": false
-}
-```
-
-**探測影片** (不註冊,只取得影片資訊):
-```bash
-curl -X POST http://localhost:3002/api/v1/probe \
- -H "Content-Type: application/json" \
- -H "X-API-Key: your-api-key" \
- -d '{"path": "./demo/video.mp4"}'
-```
-
-**Probe 回應範例**:
-```json
-{
- "uuid": "a1b10138a6bbb0cd",
- "file_name": "video.mp4",
- "duration": 120.5,
- "width": 1920,
- "height": 1080,
- "fps": 30.0,
- "cached": false,
- "format": {
- "filename": "/path/to/video.mp4",
- "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
- "duration": "120.5",
- "size": "12345678",
- "bit_rate": "819200"
- },
- "streams": [
- {
- "index": 0,
- "codec_name": "h264",
- "codec_type": "video",
- "width": 1920,
- "height": 1080,
- "r_frame_rate": "30/1",
- "duration": "120.5"
- }
- ]
-}
-```
-
-**列出影片**:
-```bash
-curl -H "X-API-Key: your-api-key" http://localhost:3002/api/v1/videos
-```
-
-**查詢影片**:
-```bash
-curl -H "X-API-Key: your-api-key" "http://localhost:3002/api/v1/lookup?uuid=5dea6618a606e7c7"
-```
-
-**處理進度**:
-```bash
-curl -H "X-API-Key: your-api-key" http://localhost:3002/api/v1/progress/5dea6618a606e7c7
-```
-
----
-
-### 工作管理
-
-| 方法 | 端點 | 說明 |
-|------|------|------|
-| GET | `/api/v1/jobs` | 列出所有工作 |
-| GET | `/api/v1/jobs/:uuid` | 取得指定工作的詳細資訊 |
-
-**列出工作**:
-```bash
-curl -H "X-API-Key: your-api-key" http://localhost:3002/api/v1/jobs
-```
-
-**取得工作詳細資訊**:
-```bash
-curl -H "X-API-Key: your-api-key" http://localhost:3002/api/v1/jobs/a03485a40b2df2d3
-```
-
----
-
-### 系統管理
-
-| 方法 | 端點 | 說明 |
-|------|------|------|
-| POST | `/api/v1/config/cache` | 切換快取功能(管理員) |
-| POST | `/api/v1/unregister` | 刪除影片及其所有資料(管理員) |
-
-**快取設定**:
-```bash
-curl -X POST http://localhost:3002/api/v1/config/cache \
- -H "Content-Type: application/json" \
- -H "X-API-Key: your-api-key" \
- -d '{"enabled": true}'
-```
-
-**刪除影片**:
-```bash
-curl -X POST http://localhost:3002/api/v1/unregister \
- -H "Content-Type: application/json" \
- -H "X-API-Key: your-api-key" \
- -d '{"uuid": "5dea6618a606e7c7"}'
-```
-
----
-
-## 端點對照表
-
-| 功能 | n8n 使用 | WordPress 使用 | curl 測試 |
-|------|-----------|----------------|------------|
-| 健康檢查 | ✓ | ✓ | ✓ |
-| 語意搜尋 | ✓ (n8n格式) | ✓ (標準格式) | ✓ |
-| 影片探測 | ✓ | ✓ | ✓ |
-| 註冊影片 | ✓ | ✓ | ✓ |
-| 列出影片 | ✓ | ✓ | ✓ |
-| 查詢影片 | ✓ | ✓ | ✓ |
-| 處理進度 | ✓ | ✓ | ✓ |
-| 工作管理 | ✓ | ✓ | ✓ |
-| 快取設定 | ✓ (管理員) | ✓ (管理員) | ✓ (管理員) |
-| 刪除影片 | ✓ (管理員) | ✓ (管理員) | ✓ (管理員) |
-
----
-
-## 回應格式
-
-### n8n 格式 (`/api/v1/n8n/search`)
-```json
-{
- "query": "charade",
- "count": 10,
- "hits": [
- {
- "id": "sentence_0001",
- "vid": "a1b10138a6bbb0cd",
- "start": 48.8,
- "end": 55.44,
- "title": "Chunk sentence_0001",
- "text": "...",
- "score": 0.92,
- "file_path": "/Users/accusys/momentry/var/sftpgo/data/demo/video.mp4"
- }
- ]
-}
-```
-
-### 標準格式 (`/api/v1/search`)
-```json
-{
- "results": [
- {
- "uuid": "a1b10138a6bbb0cd",
- "chunk_id": "sentence_0001",
- "chunk_type": "sentence",
- "start_time": 48.8,
- "end_time": 55.44,
- "text": "...",
- "score": 0.92
- }
- ],
- "query": "charade"
-}
-```
-
----
-
-## HTTP 狀態碼
-
-| 狀態 | 說明 |
-|------|------|
-| 200 | 成功 |
-| 400 | 請求格式錯誤 |
-| 404 | 端點或資源不存在 |
-| 500 | 伺服器內部錯誤 |
-| 502 | API 服務未啟動 |
-
----
-
-## 錯誤處理
-
-### 502 Bad Gateway
-
-**原因**: Momentry API 服務未啟動
-
-**解決**:
-```bash
-sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist
-```
-
----
-
-## 相關文件
-
-- [API_INDEX.md](./API_INDEX.md) - 文件總覽(起點)
-- [API_EXAMPLES.md](./API_EXAMPLES.md) - **完整範例總覽(curl / n8n / WordPress)**
-- [API_N8N_GUIDE.md](./API_N8N_GUIDE.md) - n8n 詳細指南
-- [API_WORDPRESS_GUIDE.md](./API_WORDPRESS_GUIDE.md) - WordPress 詳細指南
-- [API_CURL_EXAMPLES.md](./API_CURL_EXAMPLES.md) - curl 範例
diff --git a/docs/API_EXAMPLES.md b/docs/API_EXAMPLES.md
deleted file mode 100644
index b1ac92d..0000000
--- a/docs/API_EXAMPLES.md
+++ /dev/null
@@ -1,771 +0,0 @@
-# Momentry Core API 使用範例總覽
-
-| 項目 | 內容 |
-|------|------|
-| 版本 | V2.1 |
-| 日期 | 2026-03-26 |
-| Base URL (本地) | `http://localhost:3002` |
-| Base URL (外部) | `https://api.momentry.ddns.net` |
-
----
-
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 |
-|------|------|------|--------|
-| V2.0 | 2026-03-25 | 創建完整範例總覽 | OpenCode |
-| V2.1 | 2026-03-26 | 更新API回應格式 (media_url→file_path) 與認證標頭 | OpenCode |
-
----
-
-## 快速參考
-
-### 環境 URL 選擇
-
-| 環境 | URL | 用途 |
-|------|-----|------|
-| **本地開發** | `http://localhost:3002` | 開發/測試,直接訪問 API |
-| **外部訪問** | `https://api.momentry.ddns.net` | n8n、WordPress、curl 生產環境 |
-
-### 所有可用端點
-
-| 方法 | 端點 | 說明 |
-|------|------|------|
-| GET | `/health` | 健康檢查 |
-| GET | `/health/detailed` | 詳細健康檢查 |
-| POST | `/api/v1/search` | 語意搜尋(標準格式) |
-| POST | `/api/v1/n8n/search` | 語意搜尋(n8n 格式) |
-| POST | `/api/v1/search/hybrid` | 混合搜尋 |
-| POST | `/api/v1/register` | 註冊影片 |
-| POST | `/api/v1/probe` | 探測影片資訊 |
-| GET | `/api/v1/videos` | 列出所有影片 |
-| GET | `/api/v1/lookup` | 查詢影片 |
-| GET | `/api/v1/progress/:uuid` | 處理進度 |
-| GET | `/api/v1/jobs` | 任務列表 |
-| GET | `/api/v1/jobs/:uuid` | 任務詳情 |
-
----
-
-## 認證
-
-### API Key
-
-所有 `/api/v1/*` 端點需要 API Key 認證。
-
-```bash
-# 添加 API Key Header
-curl -H "X-API-Key: your-api-key" http://localhost:3002/api/v1/videos
-
-# 範例
-curl -H "X-API-Key: muser_f08e13ba967e4d8ea8fc542ad9f99ac8_1774416728_90472a35" \
- http://localhost:3002/api/v1/videos
-```
-
-### 響應狀態
-
-| 狀態碼 | 說明 |
-|--------|------|
-| 200 | 成功 |
-| 401 | 未授權(缺少或無效 API Key) |
-| 500 | 伺服器錯誤 |
-
-### 建立 API Key
-
-```bash
-./target/release/momentry api-key create "My Key" --key-type user
-```
-
----
-
-## 1. curl 範例
-
-### 基本語法
-
-```bash
-# 格式
-curl [OPTIONS] URL
-
-# 常用選項
--X METHOD # HTTP 方法 (GET, POST, etc.)
--H HEADER # 添加 HTTP 標頭
--d DATA # POST 請求體
--s # 靜默模式
--w FORMAT # 輸出額外信息
-```
-
-### 1.1 健康檢查
-
-```bash
-# 基本健康檢查
-curl http://localhost:3002/health
-
-# 詳細健康檢查
-curl http://localhost:3002/health/detailed
-```
-
-**回應**:
-```json
-{"status":"ok","version":"0.1.0","uptime_ms":123456}
-```
-
-### 1.2 語意搜尋
-
-```bash
-# 標準格式搜尋
-curl -X POST http://localhost:3002/api/v1/search \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{"query": "charade", "limit": 5}'
-
-# n8n 格式搜尋(推薦)
-curl -X POST http://localhost:3002/api/v1/n8n/search \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{"query": "charade", "limit": 5}'
-
-# 混合搜尋
-curl -X POST http://localhost:3002/api/v1/search/hybrid \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{"query": "charade", "limit": 5}'
-```
-
-**標準格式回應**:
-```json
-{
- "results": [
- {
- "uuid": "a1b10138a6bbb0cd",
- "chunk_id": "sentence_0001",
- "chunk_type": "sentence",
- "start_time": 48.8,
- "end_time": 55.44,
- "text": "fun plot twists...",
- "score": 0.92
- }
- ],
- "query": "charade"
-}
-```
-
-**n8n 格式回應**:
-```json
-{
- "query": "charade",
- "count": 1,
- "hits": [
- {
- "id": "sentence_0001",
- "vid": "a1b10138a6bbb0cd",
- "start": 48.8,
- "end": 55.44,
- "title": "Chunk sentence_0001",
- "text": "fun plot twists...",
- "score": 0.92,
- "file_path": "/Users/accusys/momentry/var/sftpgo/data/demo/video.mp4"
- }
- ]
-}
-```
-
-### 1.3 影片管理
-
-```bash
-# 列出所有影片
-curl -H "X-API-Key: YOUR_API_KEY" http://localhost:3002/api/v1/videos
-
-# 查詢特定影片(依 UUID)
-curl -H "X-API-Key: YOUR_API_KEY" "http://localhost:3002/api/v1/lookup?uuid=a1b10138a6bbb0cd"
-
-# 查詢特定影片(依路徑)
-curl -H "X-API-Key: YOUR_API_KEY" "http://localhost:3002/api/v1/lookup?path=/path/to/video.mp4"
-
-# 取得處理進度
-curl -H "X-API-Key: YOUR_API_KEY" http://localhost:3002/api/v1/progress/a1b10138a6bbb0cd
-
-# 探測影片(不註冊)
-curl -X POST http://localhost:3002/api/v1/probe \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{"path": "/path/to/video.mp4"}'
-
-# 註冊影片
-curl -X POST http://localhost:3002/api/v1/register \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{"path": "/path/to/video.mp4"}'
-```
-
-### 1.4 批次測試腳本
-
-```bash
-#!/bin/bash
-# api_test.sh - API 測試腳本
-
-API_URL="http://localhost:3002"
-
-echo "=== 健康檢查 ==="
-curl -s "$API_URL/health" | jq .
-
-echo -e "\n=== 語意搜尋 ==="
-curl -s -X POST "$API_URL/api/v1/search" \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{"query": "charade", "limit": 3}' | jq .
-
-echo -e "\n=== 影片列表 ==="
-curl -s -H "X-API-Key: YOUR_API_KEY" "$API_URL/api/v1/videos" | jq '.videos | length'
-```
-
-### 1.5 外部 URL 範例
-
-```bash
-# 使用外部 URL(需網路可達)
-curl https://api.momentry.ddns.net/health
-
-# 外部搜尋
-curl -X POST https://api.momentry.ddns.net/api/v1/n8n/search \
- -H "Content-Type: application/json" \
- -H "X-API-Key: YOUR_API_KEY" \
- -d '{"query": "charade", "limit": 5}'
-```
-
----
-
-## 2. n8n 範例
-
-### 2.1 HTTP Request Node 設定
-
-```
-Node: HTTP Request
-├── URL: https://api.momentry.ddns.net/api/v1/n8n/search
-├── Method: POST
-├── Authentication: None
-├── Send Body: ✓ (checked)
-├── Content Type: JSON
-├── Body:
-│ {
-│ "query": "={{ $json.query }}",
-│ "limit": "={{ $json.limit || 10 }}"
-│ }
-├── Send Headers: ✓ (checked)
-└── Header Parameters:
- └── X-API-Key: {{ $env.MOMENTRY_API_KEY }}
-```
-
-### 2.2 基本搜尋 Workflow
-
-```json
-{
- "name": "Momentry Video Search",
- "nodes": [
- {
- "parameters": {},
- "name": "Manual Trigger",
- "type": "n8n-nodes-base.manualTrigger",
- "position": [250, 300]
- },
- {
- "parameters": {
- "url": "https://api.momentry.ddns.net/api/v1/n8n/search",
- "method": "POST",
- "sendBody": true,
- "contentType": "json",
- "body": {
- "query": "charade",
- "limit": 3
- }
- },
- "name": "Search Video API",
- "type": "n8n-nodes-base.httpRequest",
- "position": [450, 300]
- }
- ],
- "connections": {
- "Manual Trigger": {
- "main": [[{"node": "Search Video API"}]]
- }
- }
-}
-```
-
-### 2.3 Webhook 動態搜尋
-
-```json
-{
- "name": "Momentry Dynamic Search",
- "nodes": [
- {
- "parameters": {
- "httpMethod": "POST",
- "path": "search",
- "responseMode": "lastNode"
- },
- "name": "Webhook",
- "type": "n8n-nodes-base.webhook",
- "position": [250, 300]
- },
- {
- "parameters": {
- "url": "https://api.momentry.ddns.net/api/v1/n8n/search",
- "method": "POST",
- "sendBody": true,
- "contentType": "json",
- "body": {
- "query": "={{ JSON.stringify($json.body.query) }}",
- "limit": "={{ $json.body.limit || 5 }}"
- }
- },
- "name": "Search API",
- "type": "n8n-nodes-base.httpRequest",
- "position": [450, 300]
- }
- ],
- "connections": {
- "Webhook": {
- "main": [[{"node": "Search API"}]]
- }
- }
-}
-```
-
-### 2.4 測試 Webhook
-
-```bash
-# 測試模式(需先在 n8n UI 點擊 Execute)
-curl -X POST http://localhost:5678/webhook-test/video-rag-mcp \
- -H "Content-Type: application/json" \
- -d '{"query":"charade","limit":3}'
-
-# 生產環境(需 workflow 為 Active 狀態)
-curl -X POST http://localhost:5678/webhook/video-rag-mcp \
- -H "Content-Type: application/json" \
- -d '{"query":"charade","limit":3}'
-```
-
-### 2.5 健康檢查 Workflow
-
-```json
-{
- "name": "Momentry Health Check",
- "nodes": [
- {
- "parameters": {},
- "name": "Manual Trigger",
- "type": "n8n-nodes-base.manualTrigger",
- "position": [250, 300]
- },
- {
- "parameters": {
- "url": "https://api.momentry.ddns.net/health",
- "method": "GET"
- },
- "name": "Health Check",
- "type": "n8n-nodes-base.httpRequest",
- "position": [450, 300]
- }
- ],
- "connections": {
- "Manual Trigger": {
- "main": [[{"node": "Health Check"}]]
- }
- }
-}
-```
-
-### 2.6 錯誤處理
-
-| 錯誤 | 原因 | 解決 |
-|------|------|------|
-| 502 Bad Gateway | API 服務未啟動 | `sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist` |
-| "Your request is invalid" | Body 格式設定錯誤 | 確認 Content Type: JSON,Body 為有效 JSON |
-| 404 on webhook-test | 未執行 workflow | 在 n8n UI 點擊 "Execute workflow" |
-
----
-
-## 3. WordPress 範例
-
-### 3.1 PHP 基本用法
-
-```php
- 'charade',
- 'limit' => 10
-];
-
-$response = wp_remote_post($api_url, [
- 'headers' => ['Content-Type' => 'application/json'],
- 'body' => json_encode($data),
- 'timeout' => 30
-]);
-
-if (is_wp_error($response)) {
- echo '錯誤: ' . $response->get_error_message();
-} else {
- $body = json_decode(wp_remote_retrieve_body($response), true);
- print_r($body['hits']);
-}
-?>
-```
-
-### 3.2 列出影片
-
-```php
- 30]);
-
-if (!is_wp_error($response)) {
- $body = json_decode(wp_remote_retrieve_body($response), true);
- foreach ($body['videos'] as $video) {
- echo $video['file_name'] . "\n";
- }
-}
-?>
-```
-
-### 3.3 查詢特定影片
-
-```php
- 30]);
-
-if (!is_wp_error($response)) {
- $video = json_decode(wp_remote_retrieve_body($response), true);
- echo '檔案: ' . $video['file_name'] . "\n";
- echo '時長: ' . $video['duration'] . ' 秒';
-}
-?>
-```
-
-### 3.4 JavaScript fetch
-
-```javascript
-// 搜尋影片
-async function searchVideos(query, limit = 10) {
- const response = await fetch('https://api.momentry.ddns.net/api/v1/n8n/search', {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({ query, limit })
- });
-
- if (!response.ok) {
- throw new Error('API 請求失敗');
- }
-
- return await response.json();
-}
-
-// 使用範例
-searchVideos('charade', 5)
- .then(data => {
- data.hits.forEach(hit => {
- console.log(`${hit.text} (score: ${hit.score})`);
- });
- });
-```
-
-### 3.5 WordPress Shortcode
-
-在 `functions.php` 中註冊短碼:
-
-```php
- '',
- 'limit' => '10'
- ], $atts);
-
- if (empty($atts['query'])) {
- return '請提供搜尋關鍵字
';
- }
-
- $response = wp_remote_post('https://api.momentry.ddns.net/api/v1/n8n/search', [
- 'headers' => [
- 'Content-Type' => 'application/json',
- 'X-API-Key' => 'YOUR_API_KEY' // 替換為實際的 API Key
- ],
- 'body' => json_encode([
- 'query' => $atts['query'],
- 'limit' => (int)$atts['limit']
- ]),
- 'timeout' => 30
- ]);
-
- if (is_wp_error($response)) {
- return '搜尋服務暫時無法使用
';
- }
-
- $data = json_decode(wp_remote_retrieve_body($response), true);
-
- if (empty($data['hits'])) {
- return '找不到相關結果
';
- }
-
- $output = '';
- foreach ($data['hits'] as $hit) {
- // 注意: API 現在返回 file_path 而非 media_url
- // 需要將文件路徑轉換為可訪問的 URL
- $file_path = $hit['file_path'];
- $video_url = convert_file_path_to_url($file_path); // 需要實作此函數
-
- $output .= sprintf(
- '- %s 播放
',
- esc_html($hit['text']),
- $video_url,
- $hit['start']
- );
- }
- $output .= '
';
-
- return $output;
-});
-?>
-```
-
-**使用方式**:
-```
-[momentry_search query="charade" limit="5"]
-```
-
-### 3.6 WordPress REST API Endpoint
-
-在 WordPress REST API 中註冊自定義端點:
-
-```php
- 'POST',
- 'callback' => function($request) {
- $response = wp_remote_post(
- 'https://api.momentry.ddns.net/api/v1/n8n/search',
- [
- 'headers' => ['Content-Type' => 'application/json'],
- 'body' => json_encode([
- 'query' => $request->get_param('query'),
- 'limit' => $request->get_param('limit', 10)
- ])
- ]
- );
-
- if (is_wp_error($response)) {
- return new WP_Error('api_error', 'API 請求失敗');
- }
-
- return json_decode(wp_remote_retrieve_body($response));
- }
- ]);
-});
-?>
-```
-
-**呼叫方式**:
-```
-POST /wp-json/momentry/v1/search
-Body: {"query": "charade", "limit": 5}
-```
-
----
-
-## 4. 回應格式說明
-
-### 4.1 n8n 格式 (`/api/v1/n8n/search`)
-
-```json
-{
- "query": "charade",
- "count": 10,
- "hits": [
- {
- "id": "sentence_0001",
- "vid": "a1b10138a6bbb0cd",
- "start": 48.8,
- "end": 55.44,
- "title": "Chunk sentence_0001",
- "text": "fun plot twists...",
- "score": 0.92,
- "file_path": "/Users/accusys/momentry/var/sftpgo/data/demo/video.mp4"
- }
- ]
-}
-```
-
-### 4.2 標準格式 (`/api/v1/search`)
-
-```json
-{
- "results": [
- {
- "uuid": "a1b10138a6bbb0cd",
- "chunk_id": "sentence_0001",
- "chunk_type": "sentence",
- "start_time": 48.8,
- "end_time": 55.44,
- "text": "fun plot twists...",
- "score": 0.92
- }
- ],
- "query": "charade"
-}
-```
-
-### 4.3 健康檢查
-
-```json
-{
- "status": "ok",
- "version": "0.1.0",
- "uptime_ms": 123456
-}
-```
-
-### 4.4 詳細健康檢查
-
-```json
-{
- "status": "ok",
- "version": "0.1.0",
- "uptime_ms": 123456,
- "services": {
- "postgres": {"status": "ok", "latency_ms": 42, "error": null},
- "redis": {"status": "ok", "latency_ms": 0, "error": null},
- "qdrant": {"status": "ok", "latency_ms": 15, "error": null},
- "mongodb": {"status": "ok", "latency_ms": 0, "error": null}
- }
-}
-```
-
-### 4.5 處理進度
-
-```json
-{
- "uuid": "a1b10138a6bbb0cd",
- "file_name": "video.mp4",
- "duration": 120.5,
- "overall_progress": 75,
- "processors": [
- {"name": "asr", "status": "complete", "progress": 100},
- {"name": "cut", "status": "complete", "progress": 100},
- {"name": "yolo", "status": "progress", "progress": 35}
- ]
-}
-```
-
-### 4.6 Probe 回應
-
-```json
-{
- "uuid": "a1b10138a6bbb0cd",
- "file_name": "video.mp4",
- "duration": 120.5,
- "width": 1920,
- "height": 1080,
- "fps": 30.0,
- "cached": false,
- "format": {
- "filename": "/path/to/video.mp4",
- "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
- "duration": "120.5",
- "size": "12345678",
- "bit_rate": "819200"
- },
- "streams": [
- {
- "index": 0,
- "codec_name": "h264",
- "codec_type": "video",
- "width": 1920,
- "height": 1080,
- "r_frame_rate": "30/1",
- "duration": "120.5"
- }
- ]
-}
-```
-
----
-
-## 5. HTTP 狀態碼
-
-| 狀態 | 說明 | 解決 |
-|------|------|------|
-| 200 | 成功 | - |
-| 400 | 請求格式錯誤 | 檢查 JSON 格式 |
-| 404 | 端點或資源不存在 | 確認 URL 正確 |
-| 500 | 伺服器內部錯誤 | 檢查 API 服務日誌 |
-| 502 | API 服務未啟動 | 見下方說明 |
-
-### 502 Bad Gateway 解決
-
-```bash
-# 檢查服務狀態
-launchctl list | grep momentry.api
-
-# 啟動服務
-sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist
-
-# 或使用本地測試
-curl http://localhost:3002/health
-```
-
----
-
-## 6. 常見問題
-
-### Q: 為什麼有兩個 URL?
-
-| URL | 用途 |
-|-----|------|
-| `localhost:3002` | 直接訪問,繞過反向代理 |
-| `api.momentry.ddns.net` | 通過 Caddy 反向代理 |
-
-### Q: 兩者功能相同嗎?
-
-是的,所有端點和功能完全相同。
-
-### Q: n8n webhook-test 返回 404?
-
-需在 n8n UI 中點擊 "Execute workflow" 按鈕後才能使用測試 Webhook。
-
-### Q: 生產環境 webhook 返回 404?
-
-需將 workflow 切換為 Active 狀態(右上角開關)。
-
----
-
-## 相關文件
-
-- [API_INDEX.md](./API_INDEX.md) - 文件總覽
-- [API_ENDPOINTS.md](./API_ENDPOINTS.md) - 端點完整說明
-- [API_N8N_GUIDE.md](./API_N8N_GUIDE.md) - n8n 詳細指南
-- [API_WORDPRESS_GUIDE.md](./API_WORDPRESS_GUIDE.md) - WordPress 詳細指南
diff --git a/docs/API_INDEX.md b/docs/API_INDEX.md
deleted file mode 100644
index 6467593..0000000
--- a/docs/API_INDEX.md
+++ /dev/null
@@ -1,119 +0,0 @@
-# Momentry Core API 文件總覽
-
-| 項目 | 內容 |
-|------|------|
-| 建立者 | OpenCode |
-| 建立時間 | 2026-03-25 |
-| 文件版本 | V2.2 |
-
----
-
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| V2.0 | 2026-03-22 | 創建 API 文件總覽 | Warren | OpenCode |
-| V2.1 | 2026-03-24 | 新增文件分類與快速選擇指南 | OpenCode | deepseek-reasoner |
-| V2.2 | 2026-03-25 | 更新 API Key 驗證說明與文件連結 | OpenCode | deepseek-reasoner |
-
----
-
-## 文件架構
-
-```
-docs/
-├── API_INDEX.md ← 本文件:總覽與入口
-├── API_ENDPOINTS.md ← API 端點完整說明
-├── API_EXAMPLES.md ← 完整範例總覽(curl / n8n / WordPress)
-├── API_REFERENCE.md ← 詳細技術參考
-├── DEMO_MANUAL.md ← ⭐ 示範手冊(含 Demo API Key)
-├── API_N8N_GUIDE.md ← n8n 詳細指南
-├── API_WORDPRESS_GUIDE.md ← WordPress 詳細指南
-├── API_CURL_EXAMPLES.md ← curl 快速範例
-│
-├── API_TRAINING_MARCOM.md ← ⭐ marcom 團隊教育訓練手冊
-├── API_WORKFLOW_WORDPRESS_N8N.md ← WordPress/n8n 完整工作流程
-└── CHUNK_DATA_STRUCTURE.md ← Chunk 資料結構說明
-```
-
----
-
-## 快速選擇指南
-
-| 需求 | 閱讀文件 |
-|------|----------|
-| **我要快速開始測試** | ⭐ [DEMO_MANUAL.md](./DEMO_MANUAL.md) |
-| **我要查看所有範例** | [API_EXAMPLES.md](./API_EXAMPLES.md) |
-| **我是 marcom 團隊** | ⭐ [API_TRAINING_MARCOM.md](./API_TRAINING_MARCOM.md) |
-| 我想了解有哪些 API 端點 | [API_ENDPOINTS.md](./API_ENDPOINTS.md) |
-| 我要整合 WordPress/n8n | [API_WORKFLOW_WORDPRESS_N8N.md](./API_WORKFLOW_WORDPRESS_N8N.md) |
-| 我要在 n8n workflow 中呼叫 API | [DEMO_MANUAL.md](./DEMO_MANUAL.md#2-n8n-範例) |
-| 我要在 WordPress 中呼叫 API | [DEMO_MANUAL.md](./DEMO_MANUAL.md#3-wordpress-範例) |
-| 我要用 curl 快速測試 | [DEMO_MANUAL.md](./DEMO_MANUAL.md#1-curl-範例) |
-
----
-
-## 認證
-
-### Demo API Key
-
-```
-API Key: muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69
-Key ID: muser_68600856036340bcafc01930eb4bd839
-過期日: 2027-03-25
-```
-
-### 使用方式
-
-```bash
-curl -H "X-API-Key: muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69" \
- http://localhost:3002/api/v1/videos
-```
-
----
-
-## API URL 選擇
-
-| 環境 | URL | 使用時機 |
-|------|-----|----------|
-| **本地開發** | `http://localhost:3002` | 開發/測試、繞過反向代理 |
-| **外部訪問** | `https://api.momentry.ddns.net` | n8n、WordPress、遠端系統 |
-
-### 何時用哪個
-
-**使用 `localhost:3002`:**
-- 本地終端機測試
-- 當反向代理有問題時
-- 快速除錯
-
-**使用 `api.momentry.ddns.net`:**
-- n8n workflow
-- WordPress 網站
-- 外部系統整合
-
----
-
-## 常見問題
-
-### Q: API 返回 401 錯誤?
-API Key 無效或過期。請使用 Demo API Key 或建立新的 API Key。
-
-### Q: API 返回 502 錯誤?
-```bash
-# 檢查服務狀態
-launchctl list | grep momentry.api
-
-# 如未啟動
-sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist
-```
-
-### Q: 兩個 URL 功能相同嗎?
-是的,所有端點完全相同,只是訪問路徑不同。
-
----
-
-## 相關文件
-
-- [DEMO_MANUAL.md](./DEMO_MANUAL.md) - ⭐ 示範手冊(推薦新手)
-- [INSTALL_MOMENTRY_API.md](./INSTALL_MOMENTRY_API.md) - API 服務安裝指南
-- [PENDING_ISSUES.md](./PENDING_ISSUES.md) - 待解決問題追蹤
diff --git a/docs/API_KEY_ARCHITECTURE.md b/docs/API_KEY_ARCHITECTURE.md
deleted file mode 100644
index ff0a4d1..0000000
--- a/docs/API_KEY_ARCHITECTURE.md
+++ /dev/null
@@ -1,195 +0,0 @@
-# API Key Management System Architecture
-
-## System Overview
-
-```
-┌─────────────────────────────────────────────────────────────────────────────────┐
-│ API Key Management System │
-├─────────────────────────────────────────────────────────────────────────────────┤
-│ │
-│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
-│ │ CLI │ │ HTTP API │ │ Service │ │ External │ │
-│ │ Layer │────▶│ Layer │────▶│ Layer │────▶│ Services │ │
-│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
-│ │ │ │ │ │
-│ │ │ │ │ │
-│ ▼ ▼ ▼ ▼ │
-│ ┌─────────────────────────────────────────────────────────────────────────┐ │
-│ │ Core Modules │ │
-│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
-│ │ │ Service │ │Validator│ │ Anomaly │ │Rotation │ │ Cleanup │ │ │
-│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
-│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
-│ │ │ Webhook │ │Encrypt │ │Blacklist│ │ Report │ │ Error │ │ │
-│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
-│ └─────────────────────────────────────────────────────────────────────────┘ │
-│ │ │ │ │
-│ ▼ ▼ ▼ │
-│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
-│ │ PostgreSQL │ │ Redis │ │ External │ │
-│ │ (Storage) │ │ (Cache) │ │ (Gitea/n8n)│ │
-│ └─────────────┘ └─────────────┘ └─────────────┘ │
-│ │
-└─────────────────────────────────────────────────────────────────────────────────┘
-```
-
-## Module Dependencies
-
-```
- ┌──────────────┐
- │ models.rs │
- │ (Types) │
- └──────┬───────┘
- │
- ┌──────────────────┼──────────────────┐
- │ │ │
- ▼ ▼ ▼
-┌───────────────┐ ┌───────────────┐ ┌───────────────┐
-│ service.rs │ │ error.rs │ │ validator.rs │
-│ (Core CRUD) │ │ (Errors) │ │ (Cache+Rate) │
-└───────┬───────┘ └───────────────┘ └───────────────┘
- │
- │ ┌───────────────────────────────┐
- │ │ │
- ▼ ▼ ▼
-┌───────────────┐ ┌───────────────┐ ┌───────────────┐
-│ anomaly.rs │ │ rotation.rs │ │ blacklist.rs │
-│ (Detection) │ │ (Rotation) │ │ (IP Block) │
-└───────────────┘ └───────────────┘ └───────────────┘
-```
-
-## Request Flow
-
-```
-Client Request
- │
- ▼
-┌─────────────┐
-│ CLI/API │
-└──────┬──────┘
- │
- ▼
-┌─────────────┐ ┌─────────────┐
-│ Rate Limit │────▶│ IP Blacklist│
-│ Check │ │ Check │
-└──────┬──────┘ └──────┬──────┘
- │ │
- └─────────┬─────────┘
- │
- ▼
- ┌───────────────┐
- │ Hash API Key │
- └───────┬───────┘
- │
- ▼
- ┌───────────────┐ ┌───────────────┐
- │ Cache Lookup │────▶│ PostgreSQL │
- └───────┬───────┘ │ Lookup │
- │ └───────┬───────┘
- │ │
- └──────────┬──────────┘
- │
- ▼
- ┌───────────────┐
- │ Validate │
- │ (Status, │
- │ Expiry) │
- └───────┬───────┘
- │
- ┌─────────────┼─────────────┐
- │ │ │
- ▼ ▼ ▼
- ┌──────────┐ ┌──────────┐ ┌──────────┐
- │ Valid │ │ Invalid │ │ Error │
- │ Response│ │ Response │ │ Response │
- └──────────┘ └──────────┘ └──────────┘
-```
-
-## Database Schema
-
-```
-┌─────────────────────────────────────────────────────────────────┐
-│ PostgreSQL │
-├─────────────────────────────────────────────────────────────────┤
-│ │
-│ ┌─────────────────┐ ┌─────────────────┐ │
-│ │ api_keys │ │ api_key_audit_ │ │
-│ ├─────────────────┤ │ log │ │
-│ │ id │ ├─────────────────┤ │
-│ │ key_id │─────▶│ id │ │
-│ │ key_hash │ │ key_id (FK) │ │
-│ │ name │ │ action │ │
-│ │ key_type │ │ ip_address │ │
-│ │ status │ │ details │ │
-│ │ expires_at │ └─────────────────┘ │
-│ │ ... │ │
-│ └─────────────────┘ ┌─────────────────┐ │
-│ │ api_key_anomalies│ │
-│ ┌─────────────────┐ ├─────────────────┤ │
-│ │ gitea_tokens │ │ id │ │
-│ ├─────────────────┤ │ key_id (FK) │ │
-│ │ id │ │ anomaly_type │ │
-│ │ gitea_token_id │ │ severity │ │
-│ │ token_name │ │ details │ │
-│ │ scopes │ └─────────────────┘ │
-│ └─────────────────┘ │
-│ │
-│ ┌─────────────────┐ │
-│ │ n8n_api_keys │ │
-│ ├─────────────────┤ │
-│ │ id │ │
-│ │ n8n_key_id │ │
-│ │ label │ │
-│ └─────────────────┘ │
-│ │
-└─────────────────────────────────────────────────────────────────┘
-```
-
-## External Integrations
-
-```
-┌─────────────────────────────────────────────────────────────────────────────────┐
-│ External Integrations │
-├─────────────────────────────────────────────────────────────────────────────────┤
-│ │
-│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
-│ │ Gitea │ │ n8n │ │ Webhook │ │
-│ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤ │
-│ │ • Create Token │ │ • Create API Key│ │ • Key Created │ │
-│ │ • List Tokens │ │ • List API Keys │ │ • Key Revoked │ │
-│ │ • Delete Token │ │ • Delete API Key│ │ • Anomaly │ │
-│ │ • Verify Token │ │ • Verify │ │ • Rate Limited │ │
-│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
-│ │
-└─────────────────────────────────────────────────────────────────────────────────┘
-```
-
-## Security Layers
-
-```
-┌─────────────────────────────────────────────────────────────────┐
-│ Security Layers │
-├─────────────────────────────────────────────────────────────────┤
-│ │
-│ Layer 1: Network │
-│ ┌─────────────────────────────────────────────────────────┐ │
-│ │ • IP Blacklist │ │
-│ │ • Rate Limiting │ │
-│ └─────────────────────────────────────────────────────────┘ │
-│ │
-│ Layer 2: Authentication │
-│ ┌─────────────────────────────────────────────────────────┐ │
-│ │ • API Key Hash (SHA256) │ │
-│ │ • Constant-time Comparison │ │
-│ │ • Key Validation (Status, Expiry) │ │
-│ └─────────────────────────────────────────────────────────┘ │
-│ │
-│ Layer 3: Monitoring │
-│ ┌─────────────────────────────────────────────────────────┐ │
-│ │ • Anomaly Detection │ │
-│ │ • Audit Logging (Encrypted) │ │
-│ │ • Webhook Notifications │ │
-│ └─────────────────────────────────────────────────────────┘ │
-│ │
-└─────────────────────────────────────────────────────────────────┘
-```
diff --git a/docs/API_KEY_INTEGRATION_TESTS.md b/docs/API_KEY_INTEGRATION_TESTS.md
deleted file mode 100644
index 366610c..0000000
--- a/docs/API_KEY_INTEGRATION_TESTS.md
+++ /dev/null
@@ -1,236 +0,0 @@
-# API Key Management Integration Tests
-
-## Test Environment Setup
-
-### Prerequisites
-
-```bash
-# Start services
-sudo launchctl load /Library/LaunchDaemons/com.momentry.postgresql.plist
-sudo launchctl load /Library/LaunchDaemons/com.momentry.redis.plist
-
-# Set environment variables
-export DATABASE_URL="postgres://accusys@localhost:5432/momentry"
-export REDIS_URL="redis://:accusys@localhost:6379"
-export GITEA_URL="http://localhost:3000"
-export N8N_URL="https://n8n.momentry.ddns.net"
-```
-
-### Run Tests
-
-```bash
-# Run all unit tests
-cargo test --lib
-
-# Run API key specific tests
-cargo test --lib api_key
-
-# Run with output
-cargo test --lib -- --nocapture
-```
-
----
-
-## Test Cases
-
-### 1. API Key Creation
-
-```bash
-# Test: Create a service key
-momentry api-key create test-key --key-type service --ttl 90
-
-# Expected Output:
-# ✅ API Key created successfully!
-# Key ID: msvc_...
-# API Key: msvc_...
-# Expires: 2026-06-19
-```
-
-### 2. API Key Validation
-
-```bash
-# Test: Validate the created key
-momentry api-key validate --key "msvc_..."
-
-# Expected Output:
-# ✅ API Key is valid
-# Key ID: msvc_...
-# Name: test-key
-# Type: service
-```
-
-### 3. API Key Listing
-
-```bash
-# Test: List all keys
-momentry api-key list
-
-# Expected Output:
-# 📋 API Key List
-# ┌────────────────────────────────────────────────────────────────────────────┐
-# │ Status │ Name │ Type │ Usage │ Last Used │
-# ├────────────────────────────────────────────────────────────────────────────┤
-# │ ✓ active │ test-key │ "service" │ 0 │ never │
-# └────────────────────────────────────────────────────────────────────────────┘
-```
-
-### 4. API Key Statistics
-
-```bash
-# Test: Show statistics
-momentry api-key stats
-
-# Expected Output:
-# 📊 API Key Statistics
-# ┌─────────────────────────────────────────┐
-# │ Total Keys: 1 │
-# │ Active Keys: 1 │
-# │ Expired Keys: 0 │
-# └─────────────────────────────────────────┘
-```
-
-### 5. Gitea Token Creation
-
-```bash
-# Test: Create Gitea token
-momentry gitea create \
- --username admin \
- --password "Test3200Test3200Test3200" \
- --token-name "test-token" \
- --scopes "read:repository,write:repository"
-
-# Expected Output:
-# ✅ Gitea Token created successfully!
-# Token ID: ...
-# SHA1: ...
-```
-
-### 6. n8n API Key Creation
-
-```bash
-# Test: Create n8n API key
-momentry n8n create \
- --api-key "existing-n8n-key" \
- --label "test-key" \
- --expires-in-days 90
-
-# Expected Output:
-# ✅ n8n API Key created successfully!
-# Key ID: ...
-# API Key: ...
-```
-
----
-
-## Automated Test Script
-
-```bash
-#!/bin/bash
-# integration_test.sh
-
-set -e
-
-echo "=== API Key Integration Tests ==="
-
-# 1. Create API key
-echo "1. Testing API key creation..."
-momentry api-key create integration-test --key-type service --ttl 30
-echo "✅ API key created"
-
-# 2. List keys
-echo "2. Testing API key listing..."
-momentry api-key list
-echo "✅ API key list OK"
-
-# 3. Show stats
-echo "3. Testing statistics..."
-momentry api-key stats
-echo "✅ Statistics OK"
-
-# 4. Test Gitea integration
-echo "4. Testing Gitea integration..."
-GITEA_URL="http://localhost:3000" \
-momentry gitea list --username admin --password "Test3200Test3200Test3200"
-echo "✅ Gitea integration OK"
-
-echo ""
-echo "=== All Tests Passed ==="
-```
-
----
-
-## Unit Test Coverage
-
-| Module | Tests | Status |
-|--------|-------|--------|
-| `models.rs` | 0 | ✅ |
-| `service.rs` | 5 | ✅ |
-| `validator.rs` | 2 | ✅ |
-| `gitea.rs` | 3 | ✅ |
-| `n8n.rs` | 2 | ✅ |
-| `rotation.rs` | 4 | ✅ |
-| `anomaly.rs` | 0 | ✅ |
-| `blacklist.rs` | 5 | ✅ |
-| `encryption.rs` | 2 | ✅ |
-| `webhook.rs` | 2 | ✅ |
-| `error.rs` | 3 | ✅ |
-| `report.rs` | 1 | ✅ |
-| `cleanup.rs` | 1 | ✅ |
-| **Total** | **30** | **✅** |
-
----
-
-## CI/CD Integration
-
-### GitHub Actions / Gitea Actions
-
-```yaml
-name: API Key Tests
-
-on: [push, pull_request]
-
-jobs:
- test:
- runs-on: ubuntu-latest
- services:
- postgres:
- image: postgres:15
- env:
- POSTGRES_USER: accusys
- POSTGRES_DB: momentry_test
- ports:
- - 5432:5432
- redis:
- image: redis:7
- ports:
- - 6379:6379
-
- steps:
- - uses: actions/checkout@v4
- - uses: dtolnay/rust-toolchain@stable
- - run: cargo test --lib api_key
-```
-
----
-
-## Troubleshooting
-
-### Common Issues
-
-1. **Database connection failed**
- ```bash
- # Check PostgreSQL status
- pg_isready -h localhost -p 5432
- ```
-
-2. **Redis connection failed**
- ```bash
- # Check Redis status
- redis-cli -a accusys ping
- ```
-
-3. **Gitea authentication failed**
- ```bash
- # Verify credentials
- curl -u admin:password http://localhost:3000/api/v1/user
- ```
diff --git a/docs/API_KEY_MANAGEMENT.md b/docs/API_KEY_MANAGEMENT.md
deleted file mode 100644
index 9dd308f..0000000
--- a/docs/API_KEY_MANAGEMENT.md
+++ /dev/null
@@ -1,713 +0,0 @@
-# Momentry API Key 管理系統設計
-
-| 項目 | 內容 |
-|------|------|
-| 建立者 | Warren |
-| 建立時間 | 2026-03-21 |
-| 文件版本 | V1.2 |
-
----
-
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| V1.0 | 2026-03-18 | 創建文件 | Warren | OpenCode / MiniMax M2.5 |
-| V1.1 | 2026-03-20 | 新增 Key 類型與管理流程 | Warren | OpenCode |
-| V1.2 | 2026-03-21 | 更新 API Key 格式與驗證流程 | Warren | OpenCode |
-
----
-
-**狀態**: 開發中
-
----
-
-## 1. 概述
-
-### 1.1 目標
-
-建立安全的 API Key 管理機制,支援:
-- 多類型 API Key(系統、用戶、服務)
-- 自動過期與輪換
-- 異常使用偵測
-- 強制更新機制
-- 完整審計日誌
-- Gitea Token 整合
-- n8n API Key 整合
-
-### 1.2 設計原則
-
-| 原則 | 說明 |
-|------|------|
-| 最小權限 | 每個 Key 僅授予必要權限 |
-| 定期輪換 | 自動過期強制更新 |
-| 追蹤可審 | 所有操作都有日誌 |
-| 分離儲存 | Key 與使用者資料分離 |
-
----
-
-## 2. API Key 類型
-
-### 2.1 Key 類型矩陣
-
-| 類型 | 前綴 | 用途 | 預設有效期 | 輪換方式 |
-|------|------|------|------------|----------|
-| `system` | `msys_` | 系統內部服務 | 365 天 | 手動 |
-| `user` | `muser_` | 個人用戶 | 90 天 | 自動 |
-| `service` | `msvc_` | 服務間通訊 | 180 天 | 自動 |
-| `integration` | `mint_` | 第三方整合 | 30 天 | 強制更新 |
-| `emergency` | `memg_` | 緊急存取 | 24 小時 | 一次性 |
-
-### 2.2 Key 格式
-
-```
-{prefix}{uuid_v4}_{timestamp}_{checksum}
-```
-
-**範例:**
-```
-msys_a1b2c3d4-e5f6-7890-abcd-ef1234567890_1710998400_sha256
-```
-
----
-
-## 3. 資料庫 Schema
-
-### 3.1 api_keys 表
-
-```sql
-CREATE TABLE api_keys (
- id BIGSERIAL PRIMARY KEY,
- key_id VARCHAR(64) UNIQUE NOT NULL, -- 公開 Key ID
- key_hash VARCHAR(128) NOT NULL, -- SHA256 哈希
- key_prefix VARCHAR(8) NOT NULL, -- Key 前綴
- name VARCHAR(128) NOT NULL, -- Key 名稱
- key_type VARCHAR(32) NOT NULL, -- system/user/service/integration/emergency
- user_id BIGINT, -- 關聯用戶 (nullable for system)
- service_name VARCHAR(64), -- 服務名稱 (for service keys)
- permissions JSONB NOT NULL DEFAULT '[]', -- 權限列表
- expires_at TIMESTAMP, -- 過期時間
- last_used_at TIMESTAMP, -- 最後使用時間
- last_used_ip VARCHAR(45), -- 最後使用 IP
- usage_count BIGINT DEFAULT 0, -- 使用次數
- status VARCHAR(16) DEFAULT 'active', -- active/suspended/expired/revoked
- rotation_required BOOLEAN DEFAULT FALSE, -- 強制輪換標記
- rotation_reason VARCHAR(256), -- 輪換原因
- created_at TIMESTAMP DEFAULT NOW(),
- updated_at TIMESTAMP DEFAULT NOW()
-);
-
-CREATE INDEX idx_api_keys_key_id ON api_keys(key_id);
-CREATE INDEX idx_api_keys_user_id ON api_keys(user_id);
-CREATE INDEX idx_api_keys_type ON api_keys(key_type);
-CREATE INDEX idx_api_keys_status ON api_keys(status);
-CREATE INDEX idx_api_keys_expires ON api_keys(expires_at);
-```
-
-### 3.2 api_key_audit_log 表
-
-```sql
-CREATE TABLE api_key_audit_log (
- id BIGSERIAL PRIMARY KEY,
- key_id VARCHAR(64) NOT NULL,
- action VARCHAR(32) NOT NULL, -- created/used/rotated/revoked/expired/suspended
- actor VARCHAR(64), -- 操作者 (user_id or 'system')
- ip_address VARCHAR(45),
- user_agent VARCHAR(512),
- request_path VARCHAR(256),
- response_code INTEGER,
- details JSONB,
- created_at TIMESTAMP DEFAULT NOW()
-);
-
-CREATE INDEX idx_audit_key_id ON api_key_audit_log(key_id);
-CREATE INDEX idx_audit_action ON api_key_audit_log(action);
-CREATE INDEX idx_audit_created ON api_key_audit_log(created_at);
-```
-
-### 3.3 api_key_rotation_log 表
-
-```sql
-CREATE TABLE api_key_rotation_log (
- id BIGSERIAL PRIMARY KEY,
- key_id VARCHAR(64) NOT NULL,
- old_key_id VARCHAR(64),
- new_key_id VARCHAR(64),
- rotation_type VARCHAR(32) NOT NULL, -- scheduled/manual/forced/emergency
- reason VARCHAR(256),
- triggered_by VARCHAR(64), -- system/user/scheduler
- grace_period_end TIMESTAMP, -- 寬限期結束時間
- created_at TIMESTAMP DEFAULT NOW()
-);
-```
-
----
-
-## 4. API Key 狀態機
-
-```
- ┌──────────────┐
- │ created │
- └──────┬───────┘
- │
- ▼
- ┌────────────────────┐
- │ active │◄─────────────┐
- └─────────┬──────────┘ │
- │ │
- ┌─────────────┼─────────────┐ │
- │ │ │ │
- ▼ ▼ ▼ │
- ┌──────────┐ ┌──────────┐ ┌──────────┐ │
- │ suspended │ │ expired │ │ revoked │─────┘
- └──────────┘ └──────────┘ └──────────┘
-```
-
-### 狀態轉換規則
-
-| 從 | 到 | 觸發條件 |
-|----|----|----------|
-| created | active | 啟用 Key |
-| active | suspended | 異常使用偵測 |
-| active | expired | 達到過期時間 |
-| active | revoked | 手動撤銷 |
-| suspended | active | 解除鎖定 |
-| suspended | revoked | 確認異常 |
-| expired | active | 重新啟用 |
-
----
-
-## 5. 異常偵測機制
-
-### 5.1 異常指標
-
-| 指標 | 閾值 | 處置 |
-|------|------|------|
-| 每分鐘請求數 | > 1000 | 警告 |
-| 每小時請求數 | > 10000 | 鎖定 |
-| 錯誤率 | > 50% | 警告 |
-| 不同 IP 數 | > 5/小時 | 警告 |
-| 非工作時間使用 | 深夜請求 | 警告 |
-| 異常模式 | 暴力破解 | 鎖定 |
-
-### 5.2 異常處理流程
-
-```
-異常偵測
- │
- ▼
-┌─────────┐
-│ 分析 │──→ 排除正常流量
-└────┬────┘
- │
- ▼
-┌─────────┐
-│ 評估 │──→ 輕微 → 警告
-└────┬────┘
- │
- ▼
-┌─────────┐
-│ 處置 │──→ 嚴重 → 鎖定 + 輪換
-└─────────┘
-```
-
----
-
-## 6. 強制更新機制
-
-### 6.1 觸發條件
-
-| 條件 | 嚴重性 | 動作 |
-|------|--------|------|
-| 疑似洩露 | 高 | 立即停用 + 強制輪換 |
-| 異常使用 | 中 | 警告 + 建議輪換 |
-| 計劃性維護 | 低 | 通知 + 排程輪換 |
-| 政策要求 | 高 | 強制輪換 |
-| 過期 | 低 | 停用 + 通知 |
-
-### 6.2 強制輪換流程
-
-```
-1. 系統偵測到需要強制更新
- │
- ▼
-2. 建立新 Key(保留舊 Key 在寬限期內)
- │
- ▼
-3. 發送通知(Email/Slack/Redis PubSub)
- │
- ▼
-4. 寬限期開始(預設 24 小時)
- │
- ├── 在寬限期內更新 → 完成輪換
- │
- └── 寬限期結束 → 舊 Key 停用
-```
-
-### 6.3 寬限期配置
-
-| Key 類型 | 寬限期 |
-|----------|--------|
-| system | 72 小時 |
-| user | 24 小時 |
-| service | 48 小時 |
-| integration | 24 小時 |
-| emergency | 0 小時 |
-
----
-
-## 7. CLI 管理命令
-
-### 7.1 命令列表
-
-```bash
-# Key 管理
-momentry api-key create --name "My Key" --type user --permissions read,write
-momentry api-key list --type user
-momentry api-key info
-momentry api-key revoke --reason "安全原因"
-
-# 輪換管理
-momentry api-key rotate # 正常輪換
-momentry api-key force-rotate # 強制輪換
-momentry api-key rotation-status # 查看輪換狀態
-
-# 異常管理
-momentry api-key suspend --reason "異常使用"
-momentry api-key unsuspend
-momentry api-key blacklist # 列入黑名單
-
-# 審計
-momentry api-key audit --since 7d
-momentry api-key stats --type service --period 30d
-```
-
-### 7.2 輸出範例
-
-```bash
-$ momentry api-key list --type service
-
-┌────────────────────────────────────┬─────────┬──────────────┬────────────────┐
-│ Key ID │ Name │ Status │ Expires │
-├────────────────────────────────────┼─────────┼──────────────┼────────────────┤
-│ msvc_a1b2c3d4_1710998400_sha256 │ N8N │ active │ 2026-09-21 │
-│ msvc_e5f6g7h8_1713600000_sha256 │ OpenCode│ rotation_req │ 2026-09-21 │
-└────────────────────────────────────┴─────────┴──────────────┴────────────────┘
-
-⚠️ 1 個 Key 需要輪換
-```
-
----
-
-## 8. 實現計畫
-
-### Phase 1: 核心功能
-- [ ] 資料庫 Schema
-- [ ] Key 生成與哈希
-- [ ] 基本 CRUD API
-- [ ] 過期檢查
-
-### Phase 2: 安全機制
-- [ ] 異常偵測
-- [ ] 自動鎖定
-- [ ] 強制輪換
-- [ ] 寬限期管理
-
-### Phase 3: 管理工具
-- [ ] CLI 命令
-- [ ] 審計日誌
-- [ ] 統計報表
-- [ ] 通知系統
-
-### Phase 4: 自動化
-- [ ] 定時輪換排程
-- [ ] Prometheus 指標
-- [ ] Alertmanager 整合
-- [ ] 自動化回應
-
----
-
-## 9. 安全考量
-
-### 9.1 Key 儲存
-- 明文 Key 只顯示一次(創建時)
-- 儲存時使用 SHA256 哈希
-- 使用 Fernet 對稱加密敏感配置
-
-### 9.2 傳輸安全
-- 所有 API 必須使用 HTTPS
-- Key 在 Header 中傳輸(X-API-Key)
-- 避免 Key 在 URL 中
-
-### 9.3 存取控制
-- 只有管理員可創建/撤銷 Key
-- 用戶只能管理自己的 Key
-- 系統 Key 需要特殊權限
-
----
-
-## 10. 環境變數配置
-
-```bash
-# API Key 管理
-MOMENTRY_API_KEY_GRACE_PERIOD=86400 # 寬限期(秒)
-MOMENTRY_API_KEY_MAX_PER_USER=5 # 每用戶最大 Key 數
-MOMENTRY_API_KEY_ROTATION_DAYS=90 # 自動輪換天數
-
-# 異常偵測
-MOMENTRY_API_KEY_RATE_LIMIT=1000 # 每分鐘限制
-MOMENTRY_API_KEY_ERROR_THRESHOLD=0.5 # 錯誤率閾值
-MOMENTRY_API_KEY_IP_LIMIT=5 # 每小時 IP 限制
-
-# 通知
-MOMENTRY_API_KEY_ALERT_WEBHOOK= # 異常通知 webhook
-```
-
----
-
-## 11. Gitea API Token 整合
-
-### 11.1 概述
-
-支援透過 API Key 管理系統建立和管理 Gitea Personal Access Tokens,採用「建立時納管」模式。
-
-### 11.2 納管模式
-
-```
-使用者提供帳號密碼 → 呼叫 Gitea API 建立 Token → 明文只顯示一次 → 同步儲存至管理系統
-```
-
-**特點:**
-- Token 明文僅在建立時取得
-- 管理系統記錄 Token 元數據(不含明文)
-- 支援本地查詢和刪除
-
-### 11.3 資料庫結構
-
-```sql
-CREATE TABLE gitea_tokens (
- id SERIAL PRIMARY KEY,
- gitea_token_id BIGINT NOT NULL, -- Gitea 內部 Token ID
- gitea_user VARCHAR(128) NOT NULL, -- Gitea 用戶名
- token_name VARCHAR(128) NOT NULL, -- Token 名稱
- token_last_eight VARCHAR(8) NOT NULL, -- SHA1 最後 8 碼(顯示用)
- scopes JSONB DEFAULT '[]', -- 權限範圍
- api_key_id VARCHAR(48), -- 關聯的 API Key ID(可選)
- last_verified TIMESTAMP, -- 最後驗證時間
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- UNIQUE(gitea_user, token_name)
-);
-```
-
-### 11.4 Token 權限範圍
-
-| 範圍 | 說明 |
-|------|------|
-| `read:repository` | 讀取倉庫 |
-| `write:repository` | 寫入倉庫 |
-| `read:issue` | 讀取議題 |
-| `write:issue` | 寫入議題 |
-| `read:user` | 讀取用戶資訊 |
-| `write:write` | 修改用戶資訊 |
-| `read:organization` | 讀取組織 |
-| `write:organization` | 修改組織 |
-| `read:package` | 讀取套件 |
-| `write:package` | 發布套件 |
-| `read:notification` | 讀取通知 |
-| `write:notification` | 修改通知 |
-| `read:admin` | 管理員讀取 |
-| `write:admin` | 管理員寫入 |
-
-### 11.5 CLI 命令
-
-#### 建立 Token
-
-```bash
-# 基本用法
-momentry gitea create \
- --username \
- --password \
- --token-name \
- --scopes "read:repository,write:repository"
-
-# 範例:建立整合用 Token
-momentry gitea create \
- --username admin \
- --password "MyPassword123" \
- --token-name "ci-pipeline" \
- --scopes "read:repository,write:repository,read:issue,write:issue"
-```
-
-**輸出範例:**
-```
-✅ Gitea Token created successfully!
-
-┌─────────────────────────────────────────────────────────────────────────────┐
-│ ⚠️ IMPORTANT: Save this token now - it will not be shown again! │
-└─────────────────────────────────────────────────────────────────────────────┘
-
-Token ID: 9
-Token Name: ci-pipeline
-SHA1: 9a4f282e9ba817b430082e6bff2c18e2ae38e480
-Last 8: ae38e480
-
-Authorization Header:
- Authorization: token 9a4f282e9ba817b430082e6bff2c18e2ae38e480
-```
-
-#### 列出 Token
-
-```bash
-# 列出用戶的所有 Token
-momentry gitea list \
- --username \
- --password
-```
-
-**輸出範例:**
-```
-📋 Gitea Tokens for user: admin
-
-┌────────────────────────────────────────────────────────────────────────────┐
-│ ID │ Name │ Last 8 │ Registered │
-├────────────────────────────────────────────────────────────────────────────┤
-│ 9 │ ci-pipeline │ ae38e480 │ ✓ │
-│ 8 │ dev-token │ 1234abcd │ - │
-└────────────────────────────────────────────────────────────────────────────┘
-
-Total: 2 token(s)
-```
-
-#### 刪除 Token
-
-```bash
-# 刪除指定 Token
-momentry gitea delete \
- --username \
- --password \
- --token-name
-```
-
-#### 查詢本地記錄
-
-```bash
-# 查詢已納管的 Token 記錄
-momentry gitea verify --token-name
-```
-
-**輸出範例:**
-```
-📋 Gitea Token: ci-pipeline
- User: admin
- Token ID: 9
- Last 8: ae38e480
- Scopes: ["read:repository","write:repository"]
- Created: 2026-03-21 06:44:55.577586 UTC
- Last Verified: never
-```
-
-### 11.6 使用範圍
-
-#### 適用場景
-
-| 場景 | 說明 |
-|------|------|
-| CI/CD 整合 | 建立專用 Token 用於自動化流程 |
-| 服務間通訊 | 建立 Token 供其他服務存取 Gitea API |
-| 開發環境 | 為開發者建立短期 Token |
-| 監控整合 | 建立只讀 Token 用於監控和報告 |
-
-#### 限制
-
-| 限制 | 說明 |
-|------|------|
-| 明文 Token | 僅在建立時取得,無法再次查詢 |
-| 管理 API | 需要帳號密碼(BasicAuth) |
-| Token 驗證 | 只能透過 API 呼叫驗證有效性 |
-| 同步刪除 | 本地刪除不會自動同步到 Gitea |
-
-### 11.7 環境變數
-
-```bash
-# Gitea 連線設定
-GITEA_URL=http://localhost:3000 # Gitea API URL
-```
-
-### 11.8 安全考量
-
-| 項目 | 措施 |
-|------|------|
-| 密碼傳輸 | 僅在 CLI 命令中使用,不儲存 |
-| Token 儲存 | 本地僅存元數據,不含明文 |
-| 權限最小化 | 建議僅授予必要權限 |
-| 定期輪換 | 建議定期更新 Token |
-
----
-
-## 12. n8n API Key 整合
-
-### 12.1 概述
-
-支援透過 API Key 管理系統建立和管理 n8n API Keys,採用「建立時納管」模式。
-
-### 12.2 納管模式
-
-```
-使用者提供現有 n8n API Key → 呼叫 n8n API 建立新 Key → 明文只顯示一次 → 同步儲存至管理系統
-```
-
-**特點:**
-- 需要一個現有的 n8n API Key 作為管理憑證
-- API Key 明文僅在建立時取得
-- 管理系統記錄 Key 元數據(不含明文)
-- 支援本地查詢和刪除
-
-### 12.3 資料庫結構
-
-```sql
-CREATE TABLE n8n_api_keys (
- id SERIAL PRIMARY KEY,
- n8n_key_id VARCHAR(64) UNIQUE NOT NULL, -- n8n 內部 Key ID
- label VARCHAR(100) NOT NULL, -- Key 標籤
- api_key_last_eight VARCHAR(8) NOT NULL, -- API Key 最後 8 碼(顯示用)
- momentry_api_key_id VARCHAR(48), -- 關聯的 API Key ID(可選)
- expires_at TIMESTAMP WITH TIME ZONE, -- 過期時間
- last_verified TIMESTAMP WITH TIME ZONE, -- 最後驗證時間
- created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
-);
-```
-
-### 12.4 認證方式
-
-n8n 使用 JWT-based API Key,透過 `X-N8N-API-KEY` Header 認證:
-
-```bash
-curl -H "X-N8N-API-KEY: " https://n8n.example.com/api/v1/workflows
-```
-
-### 12.5 CLI 命令
-
-#### 建立 API Key
-
-```bash
-# 基本用法
-momentry n8n create \
- --api-key \
- --label \
- --expires-in-days
-
-# 範例:建立 CI/CD 用 Key
-momentry n8n create \
- --api_key "n8n_api_xxxxxxxxxxxx" \
- --label "ci-pipeline" \
- --expires-in-days 90
-```
-
-**輸出範例:**
-```
-✅ n8n API Key created successfully!
-
-┌─────────────────────────────────────────────────────────────────────────────┐
-│ ⚠️ IMPORTANT: Save this API key now - it will not be shown again! │
-└─────────────────────────────────────────────────────────────────────────────┘
-
-Key ID: abc123-def456
-Label: ci-pipeline
-API Key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
-
-Usage:
- curl -H 'X-N8N-API-KEY: eyJhbGciOiJIUz...' https://n8n.momentry.ddns.net/api/v1/workflows
-```
-
-#### 列出 API Keys
-
-```bash
-# 列出所有 API Keys
-momentry n8n list --api-key
-```
-
-**輸出範例:**
-```
-📋 n8n API Keys
-
-┌────────────────────────────────────────────────────────────────────────────┐
-│ Label │ ID │
-├────────────────────────────────────────────────────────────────────────────┤
-│ ci-pipeline │ abc123-def456-789 │
-│ monitoring │ xyz789-abc123-456 │
-└────────────────────────────────────────────────────────────────────────────┘
-
-Total: 2 key(s)
-```
-
-#### 刪除 API Key
-
-```bash
-# 刪除指定 API Key
-momentry n8n delete \
- --api-key \
- --label
-```
-
-#### 查詢本地記錄
-
-```bash
-# 查詢已納管的 API Key 記錄
-momentry n8n verify --label
-```
-
-**輸出範例:**
-```
-📋 n8n API Key: ci-pipeline
- Key ID: abc123-def456
- Last 8: ...JVCJ9
- Created: 2026-03-21 06:44:55.577586 UTC
- Expires: 2026-06-19 06:44:55.577586 UTC
- Last Verified: never
-```
-
-### 12.6 使用範圍
-
-#### 適用場景
-
-| 場景 | 說明 |
-|------|------|
-| CI/CD 整合 | 建立專用 Key 用於自動化流程 |
-| 監控整合 | 建立只讀 Key 用於監控工作流狀態 |
-| 服務間通訊 | 建立 Key 供其他服務呼叫 n8n API |
-| 開發環境 | 為開發者建立短期 Key |
-
-#### 限制
-
-| 限制 | 說明 |
-|------|------|
-| 明文 API Key | 僅在建立時取得,無法再次查詢 |
-| 管理憑證 | 需要一個現有的 n8n API Key |
-| 本地刪除 | 不會自動同步到 n8n |
-| 權限範圍 | 非 Enterprise 版無細粒度權限 |
-
-### 12.7 環境變數
-
-```bash
-# n8n 連線設定
-N8N_URL=https://n8n.momentry.ddns.net # n8n API URL
-```
-
-### 12.8 安全考量
-
-| 項目 | 措施 |
-|------|------|
-| 管理 Key | 需妥善保管,作為管理其他 Key 的憑證 |
-| API Key 儲存 | 本地僅存元數據,不含明文 |
-| 過期機制 | 建議設定過期時間 |
-| 定期輪換 | 建議定期更新 Key |
-
----
-
-## 13. 參考文檔
-
-- PostgreSQL Schema
-- Redis Key 設計( MOMENTRY_CORE_REDIS_KEYS.md)
-- 監控系統(MOMENTRY_CORE_MONITORING.md)
-- Gitea 安裝指南(INSTALL_GITEA.md)
-- n8n API 文件(https://docs.n8n.io/api/authentication/)
diff --git a/docs/API_KEY_OPTIMIZATION.md b/docs/API_KEY_OPTIMIZATION.md
deleted file mode 100644
index b118521..0000000
--- a/docs/API_KEY_OPTIMIZATION.md
+++ /dev/null
@@ -1,399 +0,0 @@
-# API Key Management 優化計畫
-
-| 項目 | 內容 |
-|------|------|
-| 版本 | V1.0 |
-| 日期 | 2026-03-21 |
-| 狀態 | 規劃中 |
-
----
-
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| V1.0 | 2026-03-21 | 創建優化計畫 | OpenCode | - |
-
----
-
-## 任務編碼規則
-
-```
-AKO-{類別}-{序號}
-AKO = API Key Optimization
-類別:
- - CODE = 程式碼品質
- - PERF = 效能優化
- - SEC = 安全性
- - FEAT = 功能增強
- - DOC = 文件
-```
-
----
-
-## Phase 1: 程式碼品質 (CODE)
-
-| 編碼 | 任務 | 描述 | 優先級 | 預估工時 | 狀態 |
-|------|------|------|--------|----------|------|
-| AKO-CODE-01 | 修復 from_str 警告 | 重命名為 `parse_scope` 或實作 `FromStr` trait | 🔴 高 | 0.5h | ⏳ 待辦 |
-| AKO-CODE-02 | 函數參數重構 | 使用 Config struct 減少參數數量 | 🔴 高 | 1h | ⏳ 待辦 |
-| AKO-CODE-03 | 抽象 CRUD Trait | 建立 `ExternalTokenStore` trait 統一 Gitea/n8n | 🟡 中 | 3h | ⏳ 待辦 |
-| AKO-CODE-04 | 錯誤處理統一 | 使用 `thiserror` 定義自訂錯誤類型 | 🟡 中 | 2h | ⏳ 待辦 |
-
-### AKO-CODE-01 細節
-
-```rust
-// Before
-impl GiteaScope {
- pub fn from_str(s: &str) -> Option { ... }
-}
-
-// After: Option A - Rename
-impl GiteaScope {
- pub fn parse(s: &str) -> Option { ... }
-}
-
-// After: Option B - Implement FromStr
-impl std::str::FromStr for GiteaScope {
- type Err = ();
- fn from_str(s: &str) -> Result { ... }
-}
-```
-
-### AKO-CODE-02 細節
-
-```rust
-// Before
-pub async fn create_api_key(
- &self,
- key_id: &str,
- key_hash: &str,
- key_prefix: &str,
- name: &str,
- key_type: &str,
- user_id: Option,
- service_name: Option<&str>,
- permissions: &serde_json::Value,
- expires_at: Option>,
-) -> Result
-
-// After
-pub struct CreateApiKeyConfig<'a> {
- pub key_id: &'a str,
- pub key_hash: &'a str,
- pub key_prefix: &'a str,
- pub name: &'a str,
- pub key_type: &'a str,
- pub user_id: Option,
- pub service_name: Option<&'a str>,
- pub permissions: &'a serde_json::Value,
- pub expires_at: Option>,
-}
-
-pub async fn create_api_key(&self, config: CreateApiKeyConfig<'_>) -> Result
-```
-
-### AKO-CODE-03 細節
-
-```rust
-#[async_trait]
-pub trait ExternalTokenStore {
- async fn create(&self, record: T) -> Result;
- async fn get_by_label(&self, label: &str) -> Result
';
- }
-});
-
-// 搜尋短代碼
-add_shortcode('momentry_search', function($atts, $content = '') {
- $query = sanitize_text_field($content);
-
- if (empty($query)) {
- return '請提供搜尋關鍵字
';
- }
-
- $api = new Momentry_API();
-
- try {
- $result = $api->search($query);
-
- ob_start();
- ?>
-
-
「= esc_html($query) ?>」搜尋結果
-
-
沒有找到相關結果
-
-
-
-
- 搜尋失敗: ' . esc_html($e->getMessage()) . '';
- }
-});
-```
-
-### 3.3 使用方式
-
-在 WordPress 頁面或文章中:
-
-```
-[momentry_videos limit="5"]
-
-[momentry_search]ExaSAN[/momentry_search]
-```
-
-### 3.4 REST API 整合
-
-```php
- 'GET',
- 'callback' => function(WP_REST_Request $request) {
- $query = sanitize_text_field($request->get_param('q'));
-
- if (empty($query)) {
- return new WP_Error('missing_query', '需要搜尋關鍵字', ['status' => 400]);
- }
-
- $api = new Momentry_API();
- $result = $api->search($query);
-
- return new WP_REST_Response($result, 200);
- },
- 'permission_callback' => '__return_true',
- ]);
-});
-
-// 使用方式: GET /wp-json/momentry/v1/search?q=ExaSAN
-```
-
----
-
-## 4. 疑難排解
-
-### 4.1 常見錯誤
-
-| 錯誤 | 原因 | 解決方案 |
-|------|------|----------|
-| `401 Unauthorized` | API Key 無效或過期 | 檢查 API Key 是否正確 |
-| `500 Internal Server Error` | 伺服器錯誤 | 檢查 `/health/detailed` 服務狀態 |
-| `Connection Timeout` | 網路問題 | 確認 `api.momentry.ddns.net` 可達 |
-
-### 4.2 測試腳本
-
-```bash
-#!/bin/bash
-# test_api.sh - Momentry API 測試腳本
-
-API_KEY="muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69"
-BASE_URL="http://localhost:3002"
-
-echo "=== 1. 健康檢查 ==="
-curl -s "$BASE_URL/health" | jq .
-echo ""
-
-echo "=== 2. 列出影片 ==="
-curl -s -H "X-API-Key: $API_KEY" "$BASE_URL/api/v1/videos" | jq '.videos | length'
-echo ""
-
-echo "=== 3. 搜尋測試 ==="
-curl -s -X POST -H "X-API-Key: $API_KEY" \
- -H "Content-Type: application/json" \
- -d '{"query": "test", "limit": 3}' \
- "$BASE_URL/api/v1/search" | jq '.results | length'
-echo ""
-
-echo "=== 完成 ==="
-```
-
-### 4.3 驗證腳本
-
-```bash
-#!/bin/bash
-# verify_auth.sh - 驗證 API Key
-
-API_KEY="muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69"
-BASE_URL="http://localhost:3002"
-
-# 測試 1: 無 API Key
-echo "測試 1: 無 API Key"
-RESULT=$(curl -s -o /dev/null -w "%{http_code}" "$BASE_URL/api/v1/videos")
-[ "$RESULT" = "401" ] && echo "✅ 正確拒絕 (401)" || echo "❌ 預期 401,實際 $RESULT"
-
-# 測試 2: 有 API Key
-echo "測試 2: 有 API Key"
-RESULT=$(curl -s -H "X-API-Key: $API_KEY" "$BASE_URL/api/v1/videos")
-echo "$RESULT" | jq -e '.videos' > /dev/null && echo "✅ 成功取得資料" || echo "❌ 取得資料失敗"
-
-# 測試 3: 無效 API Key
-echo "測試 3: 無效 API Key"
-RESULT=$(curl -s -o /dev/null -w "%{http_code}" -H "X-API-Key: invalid_key" "$BASE_URL/api/v1/videos")
-[ "$RESULT" = "401" ] && echo "✅ 正確拒絕 (401)" || echo "❌ 預期 401,實際 $RESULT"
-```
-
----
-
-## 5. API Key 管理
-
-### 5.1 建立新 API Key
-
-```bash
-# 本地建立
-./target/release/momentry api-key create "My App" --key-type user --ttl 90
-```
-
-### 5.2 列出 API Keys
-
-```bash
-./target/release/momentry api-key list
-```
-
-### 5.3 驗證 API Key
-
-```bash
-./target/release/momentry api-key validate --key "YOUR_API_KEY"
-```
-
-### 5.4 撤銷 API Key
-
-```bash
-./target/release/momentry api-key revoke --key "YOUR_API_KEY"
-```
-
----
-
-## 附錄
-
-### A. 影片 UUID 說明
-
-UUID 是基於檔案路徑的 SHA256 哈希前 16 位:
-
-```
-/Users/accusys/momentry/var/sftpgo/data/demo/video.mp4
- ↓
-SHA256 Hash
- ↓
-9760d0820f0cf9a7
-```
-
-### B. 處理器狀態
-
-| 狀態 | 說明 |
-|------|------|
-| `pending` | 等待處理 |
-| `running` | 處理中 |
-| `completed` | 已完成 |
-| `failed` | 失敗 |
-
-### C. 支援的處理器
-
-- **ASR**: 語音識別
-- **CUT**: 場景剪切
-- **YOLO**: 物件偵測
-
-### D. 聯絡支援
-
-- Email: support@momentry.ddns.net
-- 文件: https://docs.momentry.ddns.net
-- GitHub: https://github.com/anomalyco/momentry
diff --git a/docs/DEVELOPMENT_LOG.md b/docs/DEVELOPMENT_LOG.md
deleted file mode 100644
index 3c30a41..0000000
--- a/docs/DEVELOPMENT_LOG.md
+++ /dev/null
@@ -1,540 +0,0 @@
-# Momentry Core 開發日誌
-
-| 項目 | 內容 |
-|------|------|
-| 建立者 | Warren |
-| 建立時間 | 2026-03-18 |
-| 文件版本 | V1.0 |
-
----
-
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| V1.0 | 2026-03-18 | 創建文件 | Warren | OpenCode / MiniMax M2.5 |
-
----
-
-> **文檔維護開始**:2026-03-18
-> **⚠️ 補充說明**:事後補記(2026-03-18 以前),僅供參考。未來紀錄將即時記錄,參考價值較高。
-
----
-
-## 開發工具
-
-### Coding LLM 模型
-
-| 階段 | 工具 | 模型 | ID | 說明 |
-|------|------|------|-----|------|
-| **初期** | Claude CLI | - | - | 初始專案架構建立 |
-| **中期** | OpenCode | big-pickle | opencode/big-pickle | 主要開發協作者 |
-
-**切換記錄**:
-- 初期使用 Claude CLI 建立專案基本架構
-- 中期切換至 OpenCode (big-pickle) 進行主要功能開發
-
----
-
-## 2026-03-17
-
-### ML 模型選用
-
-| Processor | 模型 | 版本/大小 | 說明 |
-|----------|------|-----------|------|
-| **ASR** | WhisperX (faster-whisper) | base, int8 | 語音識別 + 對話分段 |
-| **CUT** | PySceneDetect | 0.6.7.1 | ContentDetector 場景檢測 |
-| **YOLO** | YOLOv8n | yolov8n.pt (6.2MB) | 物體檢測(nano 版本最快) |
-| **OCR** | EasyOCR | 1.7.2 | 文字識別 |
-| **Face** | OpenCV Haar Cascade | built-in | 人臉檢測(無需額外下載) |
-| **Pose** | YOLOv8n-Pose | yolov8n-pose.pt (6.5MB) | 姿態估計(nano 版本) |
-
-**模型下載**:
-- YOLOv8n: `yolov8n.pt` (6.2MB)
-- YOLOv8n-Pose: `yolov8n-pose.pt` (6.5MB)
-
-**Python 依賴**:
-```
-torch==2.8.0
-whisperx==3.8.2
-ultralytics==8.4.23
-scenedetect==0.6.7.1
-easyocr==1.7.2
-opencv-python==4.13.0.92
-```
-
----
-
-### ASR 實作完成
-- 完成 Python ML processor scripts(使用本地模型)
- - `asrx_processor.py` - whisperx for speaker diarization
- - `cut_processor.py` - PySceneDetect for scene detection
- - `yolo_processor.py` - YOLOv8 for object detection
- - `ocr_processor.py` - EasyOCR for text recognition
- - `face_processor.py` - OpenCV Haar Cascade for face detection
- - `pose_processor.py` - YOLOv8 Pose for pose estimation
-
-- 更新 `requirements.txt` with all dependencies
-- 安裝完成:torch 2.8.0, whisperx 3.8.2, ultralytics 8.4.23, scenedetect 0.6.7.1, easyocr 1.7.2, opencv-python 4.13.0.92
-- 下載模型:YOLOv8n.pt (6.2MB), YOLOv8n-Pose.pt (6.5MB)
-
-### Async Streaming 實作
-- 更新 Rust processor modules 使用 async streaming 進行 real-time progress
- - `src/core/processor/asr.rs`
- - `src/core/processor/cut.rs`
- - `src/core/processor/yolo.rs`
- - `src/core/processor/ocr.rs`
- - `src/core/processor/face.rs`
- - `src/core/processor/pose.rs`
-
-### 測試結果
-- 測試影片:BigBuckBunny_320x180.mp4
-- ASR: 4 segments
-- CUT: 134 scenes
-- YOLO: 14315 frames(每幀處理耗時)
-- OCR: 40 frames with text
-- Face: 44 frames with faces
-- Pose: Timeout
-
----
-
-### Warning 清理
-修復 clippy warnings:
-- 移除未使用的 imports (HashMap in mongodb_db.rs, postgres_db.rs)
-- 新增 `#[allow(dead_code)]` 標註未使用變數
-- 新增 `Default` implementation for MongoDb, QdrantDb
-- 將 `probe` module 重新命名為 `ffprobe`
-- 新增 `player` feature in Cargo.toml
-- 修復 `format_in_format_args` 警告
-
----
-
-### TUI Progress Window 實作
-建立新的 UI module:
-- 建立 `src/ui/mod.rs`
-- 建立 `src/ui/progress/mod.rs`
-
-實作功能:
-- ProcessorProgress 結構(追蹤每個 processor 狀態)
-- ProgressState 結構(管理所有 processors)
-- ProgressUi 結構(ratatui TUI 渲染)
-- 整合到 `src/main.rs` 的 process 命令
-
-TUI 顯示:
-```
-┌ Processing: BigBuckBunny_320x180.mp4 ────────────────────────────────────────┐
-│ ASR [████████████] 100% (4 segs) │
-│ CUT [████████████] 100% (134 scenes) │
-│ ASRX [████████████] 100% (0 segs) │
-│ YOLO [██░░░░░░░░░░░] 30% (4200/14315) ETA 2:30 │
-│ OCR [---------] 0% │
-│ Face [---------] 0% │
-│ Pose [---------] 0% │
-└──────────────────────────────────────────────────────────────────────────────┘
-```
-
----
-
-### 輸出位置討論
-討論 stdout vs stderr vs TUI 的輸出配置:
-- 最終結果 → stdout
-- Python progress → 需改用 Redis Pub/Sub
-- TUI Progress → stderr (ratatui)
-
----
-
-## 2026-03-18
-
-### Redis Message Bus 設計
-討論使用 Redis 作為消息總線,分離 Python 輸出與 Rust TUI 顯示。
-
-設計重點:
-1. 頻道命名:`momentry:progress:{uuid}`
-2. 本地 Redis:`localhost:6379`
-3. 失敗策略:完全失效(因 stdout 問題未解決)
-
-### UUID 使用時機分析
-分析 Redis Key 上使用 UUID 的時機:
-
-**全局 Keys(無 UUID)**:
-- health, stats, jobs 管理
-
-**Per-Video Keys(UUID 必要)**:
-- job:{uuid}, progress:{uuid}, metrics:{uuid}
-
-**Per-Processor Keys(UUID + Processor 必要)**:
-- job:{uuid}:processor:{name}
-
-### 備份系統整合
-參考 `docs/SERVICE_ADDITION_GUIDE.md` 設計規範,規劃 OutputDir 模組:
-
-1. **環境變數**:
- - `MOMENTRY_OUTPUT_DIR` - JSON 輸出目錄
- - `MOMENTRY_BACKUP_DIR` - 備份目錄(預設:`/Users/accusys/momentry/backup/momentry`)
- - `MOMENTRY_BACKUP_ENABLED` - 啟用備份
-
-2. **命名格式**:
- - 備份格式:`momentry_data_{YYYYMMDD}_{HHMMSS}_{uuid}.{ext}`
- - 校驗和:`{filename}.sha256`
-
-3. **CLI 命令**:
- - `cargo run -- backup list` - 列出備份
- - `cargo run -- backup cleanup` - 清理舊備份
- - `cargo run -- backup verify` - 驗證備份
-
----
-
-### 監控系統整合
-討論將 momentry_core 納入監控系統:
-
-1. **Layer 2: Service 監控**
- - 新增 momentry_core CLI 檢查
-
-2. **Layer 7: Backup 監控**
- - 新增 momentry 備份配置
-
-3. **Redis 監控**
- - 健康檢查
- - Job 狀態監控
- - 即時進度監控
-
----
-
-## 實作完成項目
-
-### 程式碼變更
-
-| 日期 | 檔案 | 變更 |
-|------|------|------|
-| 2026-03-17 | `src/core/processor/*.rs` | Async streaming 更新 |
-| 2026-03-17 | `src/ui/mod.rs` | 新增 UI module |
-| 2026-03-17 | `src/ui/progress/mod.rs` | 新增 Progress TUI |
-| 2026-03-17 | `src/main.rs` | 整合 Progress UI |
-| 2026-03-18 | `src/core/storage/output_dir.rs` | 新增 OutputDir 模組 |
-| 2026-03-18 | `src/core/storage/mod.rs` | 新增 output_dir export |
-| 2026-03-18 | `src/core/db/redis_client.rs` | 新增 Redis 客戶端(Hash + Pub/Sub) |
-| 2026-03-18 | `src/core/db/mod.rs` | 新增 redis_client export |
-
-### 新增檔案
-
-| 日期 | 檔案 | 說明 |
-|------|------|------|
-| 2026-03-18 | `docs/MOMENTRY_CORE_REDIS_KEYS.md` | Redis Key 設計規範 |
-| 2026-03-18 | `docs/MOMENTRY_CORE_MONITORING.md` | 監控規範(暫定) |
-| 2026-03-18 | `scripts/redis_publisher.py` | Redis 訊息發布模組 |
-
-### 更新檔案
-
-| 日期 | 檔案 | 說明 |
-|------|------|------|
-| 2026-03-17 | `Cargo.toml` | 新增 player feature |
-| 2026-03-17 | `src/lib.rs` | 新增 ui module exports |
-| 2026-03-18 | `docs/PENDING_ISSUES.md` | 新增問題 #2, #3 |
-| 2026-03-18 | `src/core/storage/output_dir.rs` | 預設改為 `./output` |
-| 2026-03-18 | `scripts/yolo_processor.py` | 新增 --uuid 參數 + Redis |
-| 2026-03-18 | `scripts/cut_processor.py` | 新增 Redis |
-| 2026-03-18 | `scripts/ocr_processor.py` | 新增 Redis |
-| 2026-03-18 | `scripts/face_processor.py` | 新增 --uuid 參數 + Redis |
-| 2026-03-18 | `scripts/pose_processor.py` | 新增 --uuid 參數 + Redis |
-| 2026-03-18 | `scripts/asr_processor.py` | 新增 --uuid 參數 + Redis |
-| 2026-03-18 | `scripts/asrx_processor.py` | 新增 --uuid 參數 + Redis |
-| 2026-03-18 | `requirements.txt` | 新增 redis>=5.0.0 |
-| 2026-03-18 | `src/core/processor/yolo.rs` | 新增 uuid 參數 |
-| 2026-03-18 | `src/core/processor/cut.rs` | 新增 uuid 參數 |
-| 2026-03-18 | `src/core/processor/ocr.rs` | 新增 uuid 參數 |
-| 2026-03-18 | `src/core/processor/face.rs` | 新增 uuid 參數 |
-| 2026-03-18 | `src/core/processor/pose.rs` | 新增 uuid 參數 |
-| 2026-03-18 | `src/core/processor/asr.rs` | 新增 uuid 參數 |
-| 2026-03-18 | `src/core/processor/asrx.rs` | 新增 uuid 參數 |
-| 2026-03-18 | `src/main.rs` | 更新所有 processor 調用傳入 uuid |
-| 2026-03-18 | `Cargo.toml` | 新增 futures-util 依賴 |
-| 2026-03-18 | `src/core/db/redis_client.rs` | 新增 subscribe_and_callback 方法,密碼認證 |
-| 2026-03-18 | `src/ui/progress/mod.rs` | 新增 update_from_redis 方法 |
-| 2026-03-18 | `scripts/redis_publisher.py` | 新增密碼認證支援 |
-| 2026-03-18 | 測試 | Redis Pub/Sub 成功運作 |
-
----
-
-## 待解決問題
-
-### 問題 #1: sqlx async INSERT 不會實際寫入數據庫
-- 狀態:待解決
-- 影響:`store_vector` 函數,PVector 存儲
-
-### 問題 #2: TUI 與 stdout 輸出混合
-- 狀態:已解決
-- 解決方案:使用 Redis Message Bus
-- 進度:
- - ✅ Redis 客戶端 (`src/core/db/redis_client.rs`)
- - ✅ Python redis_publisher.py
- - ✅ 所有 Python processors 更新完成
- - ✅ 所有 Rust processor 函數更新完成
- - ✅ main.rs 調用更新完成
- - ✅ Rust TUI Redis 訂閱已完成
-
-### 問題 #3: Redis Message Bus 尚未實作
-- 狀態:已解決
-- 詳細設計:參考 `docs/MOMENTRY_CORE_REDIS_KEYS.md`
-- 進度:Python 端 + Rust 端均已完成
-
----
-
-## 環境變數
-
-```bash
-# 輸出目錄
-MOMENTRY_OUTPUT_DIR=./output # 預設
-
-# 備份
-MOMENTRY_BACKUP_ENABLED=false # 預設
-MOMENTRY_BACKUP_DIR=/Users/accusys/momentry/backup/momentry
-
-# Redis(未來實作)
-REDIS_URL=redis://localhost:6379
-REDIS_PASSWORD=accusys
-```
-
----
-
-## 數據庫
-
-- PostgreSQL: `postgres://accusys@localhost:5432/momentry`
-- Redis: `localhost:6379`(待實作)
-- Qdrant: `localhost:6333`
-
----
-
-## 指令範例
-
-```bash
-# 註冊視頻
-cargo run -- register /path/to/video.mp4
-
-# 處理視頻
-cargo run -- process
-
-# 列出備份
-cargo run -- backup list
-
-# 清理備份
-cargo run -- backup cleanup
-
-# 驗證備份
-cargo run -- backup verify
-
-# 查看狀態
-cargo run -- status
-
-# API Server
-cargo run -- server --host 0.0.0.0 --port 3000
-```
-
----
-
-## 2026-03-18 (進行中)
-
-### Redis Message Bus 實作
-
-**問題**:TUI 與 Python stdout 輸出混合,導致 TUI 顯示混亂
-
-**解決方案**:使用 Redis Pub/Sub 作為訊息匯流排
-
-**實作內容**:
-
-| 元件 | 檔案 | 狀態 |
-|------|------|------|
-| Redis 客戶端 | `src/core/db/redis_client.rs` | ✅ |
-| Progress 訂閱 | `src/main.rs` | ✅ |
-| UI 更新 | `src/ui/progress/mod.rs` | ✅ |
-| Python Publisher | `scripts/redis_publisher.py` | ✅ |
-| Python Processors | 7 個 `scripts/*_processor.py` | ✅ |
-| Rust 函數 | `src/core/processor/*.rs` | ✅ |
-
-**流程**:
-```
-Python Processor ──(Redis Pub)──> Redis ──(Subscribe)──> Rust TUI
-```
-
-**測試結果**:
-- Redis 連線 ✅
-- 密碼認證 ✅
-- 即時進度發布 ✅
-- TUI 即時更新 ✅
-
-**新增依賴**:
-- `futures-util = "0.3"` (Cargo.toml)
-- `redis >= 5.0.0` (requirements.txt)
-
----
-
-## 2026-03-18 (HTTP API)
-
-### HTTP API 實作
-
-**問題**:TUI 運作正常但使用者偏好 HTTP API 來查詢進度
-
-**解決方案**:建立 HTTP 端點 + Redis Hash 儲存
-
-**實作內容**:
-
-| 元件 | 檔案 | 變更 |
-|------|------|------|
-| HTTP 端點 | `src/api/server.rs` | 新增 `/api/v1/progress/:uuid` |
-| Redis Hash 查詢 | `src/core/db/redis_client.rs` | 新增 `get_processor_status` 方法 |
-| Progress 儲存 | `src/main.rs` | 新增 Redis HSET 儲存進度 |
-
-**API 端點**:
-```
-GET /api/v1/progress/:uuid
-
-Response:
-{
- "uuid": "5dea6618a606e7c7",
- "processors": [
- {"name": "asr", "status": "complete", "current": 0, "total": 0, "message": "7 segments"},
- {"name": "cut", "status": "complete", "current": 134, "total": 134, "message": "134 scenes"},
- {"name": "yolo", "status": "complete", "current": 14300, "total": 14315, "message": "..."},
- ...
- ]
-}
-```
-
-**流程**:
-```
-Python Processor ──(Redis Pub)──> Redis ──(Subscribe)──> Rust TUI
- └──(HSET)──> Redis Hash
- │
-HTTP Client ──(GET /progress/:uuid)──> Rust API ─(HGETALL)──> Redis Hash
-```
-
-**測試結果**:
-- ✅ 編譯成功
-- ✅ API 伺服器啟動 (port 3002)
-- ✅ 即時進度查詢
-- ✅ 完整流程測試 (BigBuckBunny_320x180.mp4)
-
-**除錯記錄**:
-1. 語法錯誤:main.rs 有重複程式碼區塊 (lines 297-322),已移除
-2. DB 連線池:從 5 增加到 10 個連線
-3. PostgreSQL 狀態:處理 shutdown 狀態,殺掉 stale 連線
-
-**新增變更**:
-- `src/api/server.rs` - 新增進度端點
-- `src/core/db/redis_client.rs` - 新增 `get_processor_status` 方法
-- `src/core/db/postgres_db.rs` - 連線池 5→10
-- `src/main.rs` - Redis Hash 儲存 + 語法修復
-
-**使用方式**:
-```bash
-# 啟動 API 伺服器
-cargo run --bin momentry -- server --host 127.0.0.1 --port 3002
-
-# 註冊影片
-cargo run --bin momentry -- register ~/test_video/BigBuckBunny_320x180.mp4
-
-# 處理影片
-cargo run --bin momentry -- process
-
-# 查詢進度
-curl http://127.0.0.1:3002/api/v1/progress/
-```
-
----
-
-## 2026-03-18 (Dashboard)
-
-### Web Dashboard 實作
-
-**目標**:建立 Web 介面監控 momentry_core 處理進度
-
-**技術選擇**:Static HTML + JavaScript (非 WASM)
-
-**實作內容**:
-
-| 元件 | 檔案 | 說明 |
-|------|------|------|
-| Dashboard | `momentry_dashboard/dist/index.html` | 靜態 HTML 頁面 |
-| API 代理 | Caddyfile port 3200 | 反向代理到 API server |
-
-**功能**:
-- 影片列表顯示
-- 即時進度條 (每 5 秒自動刷新)
-- 搜尋功能
-- 處理器狀態 (ASR/CUT/YOLO/OCR/Face/Pose)
-
-**訪問**:
-- Dashboard: http://localhost:3200
-- API: http://localhost:3200/api/v1/*
-
----
-
-## 發生問題記錄
-
-### HTTP API 問題
-
-1. **語法錯誤** (main.rs)
- - 位置:lines 297-322
- - 原因:重複的程式碼區塊
- - 解決:移除重複區塊
-
-2. **DB 連線池耗盡**
- - 原因:預設 5 個連線不足
- - 解決:增加到 10 個連線
-
-3. **PostgreSQL shutdown 狀態**
- - 原因:共享記憶體未釋放
- - 解決:殺掉 stale 連線
-
-### WASM Dashboard 問題
-
-1. **Yew 版本問題**
- - 嘗試:yew 0.21 → 0.23
- - 問題:feature 名稱變更 (`web-sys` → `web_sys` → `csr`)
- - 解決:放棄 WASM,改用靜態 HTML
-
-2. **編譯錯誤**
- - `wasm32-unknown-unknown` target 未安裝
- - 解決:`rustup target add wasm32-unknown-unknown`
-
-3. **Yew 0.23 API 變更**
- - Properties 需要 PartialEq derive
- - 多處 API 語法變更
- - 放棄 WASM 方案
-
-### Gitea Push 問題
-
-1. **Remote URL 錯誤**
- - 原因:使用 localhost:3000 而非 gitea.momentry.ddns.net
- - 解決:建立新 repo `momentry_core_0_1`
-
-2. **認證問題**
- - SSH key 未授權
- - 密碼認證成功推送
-
-### Caddy 設定問題
-
-1. **API 代理順序**
- - 問題:try_files 在 reverse_proxy 之前導致 API 回傳 HTML
- - 解決:使用 `handle` 區塊明確定義順序
-
-```caddyfile
-:3200 {
- handle /api/* {
- reverse_proxy localhost:3002
- }
- handle {
- root * /Users/accusys/momentry_dashboard/dist
- try_files {path} /index.html
- file_server
- }
-}
-```
-
----
-
-## 未來工作
-
-- [ ] 修復 WASM Dashboard (Yew 0.23 相容性)
-- [ ] 新增影片播放器整合
-- [ ] WebSocket 實時推送
-- [ ] 移動端響應式設計
diff --git a/docs/DOCS_STANDARD.md b/docs/DOCS_STANDARD.md
deleted file mode 100644
index 6b5705a..0000000
--- a/docs/DOCS_STANDARD.md
+++ /dev/null
@@ -1,474 +0,0 @@
-# 文件創建規範
-
-| 項目 | 內容 |
-|------|------|
-| 建立者 | Warren |
-| 建立時間 | 2026-03-18 |
-| 文件版本 | V1.0 |
-
----
-
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| V1.0 | 2026-03-18 | 創建文件規範 | Warren | OpenCode / MiniMax M2.5 |
-
----
-
-本文檔定義 Momentry Core 專案中文件的命名規範、格式標準和結構要求。
-
----
-
-## 1. 檔案命名規範
-
-### 命名模式
-
-所有文件必須使用以下命名模式:
-
-| 文件類型 | 模式 | 範例 |
-|----------|------|------|
-| 安裝指南 | `INSTALL_.md` | `INSTALL_POSTGRESQL.md` |
-| 開發指南 | `DEVELOP_.md` | `DEVELOP_API.md` |
-| API 參考 | `API_REFERENCE.md` | `API_REFERENCE.md` |
-| 規格文件 | `_SPEC.md` | `CHUNK_SPEC.md` |
-| 設計文件 | `_DESIGN.md` | `CHUNK_DESIGN.md` |
-| 服務總覽 | `SERVICES.md` | `SERVICES.md` |
-| 其他文件 | `.md` | `README.md` |
-
-### 命名規則
-
-- 使用 **大駝峰** (PascalCase) 命名法
-- 服務名稱使用 **全大寫** (e.g., `POSTGRESQL`, `SFTPGO`)
-- 英文優先,縮寫保持大寫
-- 使用底線 `_` 作為單詞分隔符
-- 副檔名統一使用 `.md` (Markdown)
-
-### 禁止事項
-
-- 不允許使用中文檔名
-- 不允許空格
-- 不允許混合大小寫 (如 `Install_PostgreSQL.md`)
-
----
-
-## 2. 文件結構模板
-
-### 安裝指南結構
-
-```markdown
-# <服務名稱> 安裝指南 (部署類型)
-
-## 概述
-
-本文檔說明如何...
-
----
-
-## 當前狀態
-
-| 項目 | 狀態 |
-|------|------|
-| <服務名> | ✅ 已安裝 v<版本號> |
-| Port | <端口號> |
-| ... | ... |
-
----
-
-## 安裝步驟
-
-### Step 1: <步驟名稱>
-
-<說明內容>
-
-```bash
-# 代碼範例
-command --option value
-```
-
-### Step 2: <步驟名稱>
-...
-
----
-
-## 卸載步驟
-
-### Step 1: <步驟名稱>
-...
-
----
-
-## 故障排除
-
-### <問題名稱>
-
-<解決方案>
-
----
-
-## 檔案位置
-
-| 類型 | 路徑 | 說明 |
-|------|------|------|
-| 安裝 | /path/to/install | 說明 |
-...
-
----
-
-## 常用指令
-
-```bash
-# 驗證
-command verify
-
-# 查看版本
-command --version
-```
-
----
-
-## 版本資訊
-
-- 版本: <版本號>
-- 安裝日期: <日期>
-```
-
----
-
-### 規格文件結構
-
-```markdown
-# <名稱> 規格文件
-
-## 概述
-
-<簡短描述>
-
----
-
-## 詳細規格
-
-### 1. <功能模組>
-
-#### 欄位定義
-
-| 欄位 | 類型 | 必填 | 說明 |
-|------|------|------|------|
-| field1 | string | Yes | 說明 |
-
-#### 資料結構
-
-```json
-{
- "example": "data"
-}
-```
-
----
-
-## 限制條件
-
-- <限制1>
-- <限制2>
-
----
-
-## 相關文件
-
-- `RELATED_FILE.md` - 相關說明
-```
-
----
-
-## 3. 格式標準
-
-### Markdown 格式
-
-| 項目 | 標準 |
-|------|------|
-| 標題層級 | H1 (`#`) → H2 (`##`) → H3 (`###`) |
-| 水平線 | 使用 `---` 分隔主要章節 |
-| 程式碼區塊 | 使用三個反引號 ``` 並標註語言 |
-| 表格 | 使用 `|` 和 `-` 對齊 |
-| 強調 | 使用 `**粗體**` 和 `*斜體*` |
-
-### 程式碼區塊語言標註
-
-```bash
-# Bash
-```bash
-command
-```
-
-```json
-# JSON
-```json
-{"key": "value"}
-```
-
-```rust
-# Rust
-```rust
-fn main() {}
-```
-
-```yaml
-# YAML
-key: value
-```
-
-### 表格格式
-
-```markdown
-| Header 1 | Header 2 | Header 3 |
-|----------|----------|----------|
-| Cell 1 | Cell 2 | Cell 3 |
-| Cell 4 | Cell 5 | Cell 6 |
-```
-
-### 列表格式
-
-- 使用 `-` 作為無序列表標記
-- 使用數字 `1.` 作為有序列表標記
-- 縮進使用 2 個空格
-
----
-
-## 4. 語言規範
-
-### 標題語言
-
-| 區域 | 語言 |
-|------|------|
-| 主要內容 | 繁體中文 |
-| 技術術語 | 英文保留 |
-| 命令和代碼 | 英文 |
-| 文件標題 | 繁體中文 |
-
-### 常用術語對照
-
-| 英文 | 中文 |
-|------|------|
-| Install | 安裝 |
-| Configure/Config | 配置/設定 |
-| Uninstall | 卸載 |
-| Troubleshooting | 故障排除 |
-| Status | 狀態 |
-| Documentation | 文件 |
-| Guide | 指南 |
-| Overview | 概述 |
-| Specification | 規格 |
-| Current Status | 當前狀態 |
-| Default | 預設 |
-| Required | 必填 |
-| Optional | 選填 |
-| Example | 範例 |
-
-### 標點符號
-
-- 中文內容使用全形標點:`,`、`。`、`:`、`(`、`)`
-- 英文/程式內容使用半形標點:`:`、`(`、`)`
-- 命令行使用 `` `command` `` 格式
-
----
-
-## 5. 內容要求
-
-### 必需章節
-
-每份文件必須包含:
-
-1. **標題** - 文件名稱
-2. **概述** - 檔案用途說明
-3. **版本/狀態資訊** - 當前狀態
-4. **檔案位置** - 重要路徑列表
-5. **常用指令** - 基本操作命令
-
-### 版本資訊格式
-
-每份文件頂部必須包含以下資訊:
-
-```markdown
-| 項目 | 內容 |
-|------|------|
-| 建立者 | <姓名> |
-| 建立時間 | |
-| 文件版本 | V1.0 |
-```
-
-版本歷史表:
-
-```markdown
----
-
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| V1.0 | 2026-03-18 | 創建文件 | Warren | OpenCode / MiniMax M2.5 |
-```
-
----
-
-### 版本資訊章節格式
-
-```markdown
----
-
-## 版本資訊
-
-- 版本: <版本號>
-- 安裝日期:
-- 文件更新:
-```
-
-### 狀態標記
-
-| 狀態 | 標記 |
-|------|------|
-| 已安裝 | ✅ 已安裝 v |
-| 未安裝 | ❌ 未安裝 |
-| 可選 | ⚙️ 可選 |
-| 進行中 | 🔄 進行中 |
-
----
-
-## 6. 示例文件
-
-### 正確範例
-
-```markdown
-# PostgreSQL 安裝指南 (本地部署)
-
-| 項目 | 內容 |
-|------|------|
-| 建立者 | Warren |
-| 建立時間 | 2026-03-18 |
-| 文件版本 | V1.0 |
-
----
-
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| V1.0 | 2026-03-18 | 創建文件 | Warren | OpenCode / MiniMax M2.5 |
-
----
-
-## 概述
-
-本文檔說明如何在 macOS 上安裝 PostgreSQL...
-
----
-
-## 當前狀態
-
-| 項目 | 狀態 |
-|------|------|
-| PostgreSQL | ✅ 已安裝 v16.2 |
-| Port | 5432 |
-
----
-
-## 安裝步驟
-
-### Step 1: 安裝 PostgreSQL
-
-```bash
-brew install postgresql@16
-```
-
-### Step 2: 啟動服務
-
-```bash
-brew services start postgresql@16
-```
-
----
-
-## 檔案位置
-
-| 類型 | 路徑 |
-|------|------|
-| 配置文件 | /path/to/config |
-| 數據目錄 | /path/to/data |
-
----
-
-## 版本資訊
-
-- 版本: 16.2
-- 安裝日期: 2026-03-01
-```
-
-### 錯誤範例
-
-```
-❌ PostgreSQL安裝.md # 中文檔名
-❌ install-postgresql.md # 全部小寫
-❌ Install PostgreSQL.md # 空格
-❌ postgresql_install.md # 非標準命名
-```
-
----
-
-## 7. 文件審查清單
-
-創建新文件時,請確認:
-
-- [ ] 檔案命名符合 `INSTALL_*.md` 或其他標準模式
-- [ ] 文件包含頂部資訊表(建立者、建立時間、版本)
-- [ ] 文件包含版本歷史表
-- [ ] 文件包含概述章節
-- [ ] 文件包含當前狀態/版本資訊
-- [ ] 文件包含檔案位置章節
-- [ ] 文件包含常用指令章節
-- [ ] 使用統一的 Markdown 格式
-- [ ] 使用繁體中文作為主要語言
-- [ ] 程式碼區塊標註語言類型
-- [ ] 表格格式正確
-- [ ] 章節使用 `---` 分隔
-
-### 頂部資訊表範本
-
-```markdown
-| 項目 | 內容 |
-|------|------|
-| 建立者 | Warren |
-| 建立時間 | 2026-03-18 |
-| 文件版本 | V1.0 |
-```
-
-### 版本歷史表範本
-
-```markdown
-| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| V1.0 | 2026-03-18 | 創建文件 | Warren | OpenCode / MiniMax M2.5 |
-```
-
----
-
-## 8. 更新現有文件
-
-當更新現有文件時:
-
-1. 更新 **版本資訊** 中的日期
-2. 如有必要,更新版本號
-3. 記錄重大變更於 `CHANGELOG.md` 或 `DEVELOPMENT_LOG.md`
-
----
-
-## 附錄:文件類型參考
-
-| 前綴 | 用途 | 位置 |
-|------|------|------|
-| `INSTALL_` | 服務安裝指南 | `/docs/` |
-| `DEVELOP_` | 開發指南 | `/docs/` |
-| `*_SPEC.md` | 規格定義 | `/docs/` |
-| `*_DESIGN.md` | 設計文件 | `/docs/` |
-| `API_REFERENCE.md` | API 參考文件 | `/docs/` |
-| `README.md` | 專案總覽 | `/` |
-| `AGENTS.md` | AI 代理指令 | `/` |
-| `CHANGELOG.md` | 變更日誌 | `/` |
diff --git a/docs/DOCUMENT_EMBEDDING_STRATEGY.md b/docs/DOCUMENT_EMBEDDING_STRATEGY.md
deleted file mode 100644
index 4d6597d..0000000
--- a/docs/DOCUMENT_EMBEDDING_STRATEGY.md
+++ /dev/null
@@ -1,167 +0,0 @@
-# Document Embedding Strategy - Parent-Child Chunks
-
-| Item | Content |
-|------|---------|
-| Author | Warren |
-| Created | 2026-03-23 |
-| Document Version | V1.0 |
-
----
-
-## Version History
-
-| Version | Date | Purpose | Operator | Tool/Model |
-|---------|------|---------|----------|------------|
-| V1.0 | 2026-03-23 | Create document embedding strategy | Warren | OpenCode |
-
----
-
-## Overview
-
-Momentry uses a **parent-child chunk hierarchy** for improved RAG retrieval. This document describes the embedding strategy for this hierarchy.
-
-## Chunk Structure
-
-### Parent Chunk
-- **Purpose**: Summarize multiple child chunks with narrative description
-- **Content**: High-level description of multiple scenes/segments
-- **Example**:
-```json
-{
- "chunk_id": "story_asr_0000",
- "chunk_type": "story",
- "text_content": "[0s-125s] A man enters a building. He walks down a hallway.",
- "child_chunk_ids": ["asr_0001", "asr_0002", "asr_0003", "asr_0004", "asr_0005"]
-}
-```
-
-### Child Chunk
-- **Purpose**: Individual segments from ASR, scenes from CUT, etc.
-- **Content**: Raw transcription or detection results
-- **Example**:
-```json
-{
- "chunk_id": "asr_0001",
- "chunk_type": "sentence",
- "text_content": "Hello world",
- "parent_chunk_id": "story_asr_0000"
-}
-```
-
-## Embedding Strategy
-
-### For Vector Search
-
-When embedding chunks for vector search, we combine **parent description + child content** to provide both context and detail.
-
-#### Parent Chunk Embedding
-```
-embedding_text = f"Summary: {parent.text_content}
-Children: {child_text_1}. {child_text_2}. {child_text_3}..."
-```
-
-**Prefix**: `search_document:` (for documents in Qdrant)
-
-**Example**:
-```
-search_document: Summary: A man enters a building. He walks down a hallway.
-Children: Hello, how are you? I'm fine thank you. The weather is nice today.
-```
-
-#### Child Chunk Embedding
-```
-embedding_text = f"[{child.chunk_type}] {child.text_content}
-Parent: {parent.description}"
-```
-
-**Prefix**: `search_document:`
-
-**Example**:
-```
-search_document: [sentence] Hello, how are you?
-Parent: A man enters a building. He walks down a hallway.
-```
-
-### For BM25 Text Search
-
-BM25 operates on raw text with PostgreSQL full-text search.
-
-- **Index**: `search_vector` (TSVECTOR) on `chunks.text_content`
-- **Search**: Uses `ts_rank_cd()` for ranking
-
-## Hybrid Search Ranking
-
-Combined score = `(vector_score * 0.7) + (bm25_score * 0.3)`
-
-### Why 0.7/0.3?
-
-| Weight | Vector | BM25 |
-|--------|--------|------|
-| Pros | Semantic similarity | Exact keyword match |
-| Cons | May miss specific terms | No semantic understanding |
-| Best for | Thematic queries | Fact lookup |
-
-## Query Patterns
-
-### Thematic Query ("What are the main themes?")
-- Use higher `vector_weight` (0.8-0.9)
-- Vector search finds semantically similar content
-
-### Fact Lookup ("Who said X?")
-- Use higher `bm25_weight` (0.5-0.7)
-- BM25 finds exact matches
-
-### Balanced ("Tell me about scene 5")
-- Use default 0.7/0.3
-
-## Implementation
-
-### Embedding Generation
-```rust
-fn build_embedding_text(chunk: &Chunk, parent_text: Option<&str>) -> String {
- match chunk.chunk_type {
- ChunkType::Story => {
- format!(
- "Summary: {}\nChildren: {}",
- chunk.text_content,
- get_children_text(chunk)
- )
- }
- _ => {
- format!(
- "[{}] {}\nParent: {}",
- chunk.chunk_type.as_str(),
- chunk.text_content,
- parent_text.unwrap_or("N/A")
- )
- }
- }
-}
-```
-
-### Storage
-- Parent chunks stored with their `child_chunk_ids`
-- Child chunks reference `parent_chunk_id`
-- Both stored in PostgreSQL with full-text index
-- Vectors stored in Qdrant
-
-## Example Flow
-
-1. **Story Processing** generates parent-child hierarchy
-2. **Embedding** creates vector for each chunk
-3. **Storage** saves to PostgreSQL + Qdrant
-4. **Search** retrieves using hybrid search
-5. **Results** include both parent context and child details
-
-## Best Practices
-
-1. **Chunk Size**: 5 child chunks per parent (configurable)
-2. **Text Length**: Keep embeddings under 512 tokens
-3. **Parent Description**: Include temporal markers (timestamps)
-4. **Child Content**: Preserve original transcription
-
-## Future Enhancements
-
-- [ ] GraphRAG integration for relationship traversal
-- [ ] Cross-chunk entity linking
-- [ ] Temporal graph building
diff --git a/docs/FILE_CHANGE_MANAGEMENT.md b/docs/FILE_CHANGE_MANAGEMENT.md
deleted file mode 100644
index ca285ed..0000000
--- a/docs/FILE_CHANGE_MANAGEMENT.md
+++ /dev/null
@@ -1,323 +0,0 @@
-# 文件修改管理規範 v1.0
-
-| 項目 | 內容 |
-|------|------|
-| 建立者 | Warren |
-| 建立時間 | 2026-03-22 |
-| 文件版本 | V1.0 |
-
----
-
-## 1. 概述
-
-本文檔定義 Momentry 專案的文件修改流程,確保不同工具/模型對文件的一致性理解,防止誤修改並保留完整的修改紀錄。
-
-### 1.1 適用範圍
-
-- 所有 `.md` 文件(技術文檔、安裝指南、API 文件等)
-- 所有 `.rs` 文件(Rust 源代碼)
-- 所有 `.sh` 文件(Shell 腳本)
-- 所有 `.yaml` / `.yml` 文件(配置文件)
-- 所有 `.json` 文件(配置及數據文件)
-
-### 1.2 核心原則
-
-1. **先讀後改**:修改前必須完整閱讀相關文件
-2. **預檢清單**:修改前執行預檢查步驟
-3. **變更對照**:修改後必須比對差異
-4. **驗證確認**:變更後執行驗證測試
-5. **完整紀錄**:所有修改必須記錄於版本歷史
-
----
-
-## 2. 修改前預檢清單
-
-### 2.1 文件閱讀要求
-
-修改文件前,必須完成以下閱讀:
-
-| 步驟 | 項目 | 說明 |
-|------|------|------|
-| 1 | 閱讀完整文件 | 不可僅閱讀部分章節 |
-| 2 | 理解文件用途 | 確認文件的目標讀者 |
-| 3 | 確認現有術語 | 使用一致的術語和命名 |
-| 4 | 查閱相關文件 | 確認相關聯的文件 |
-
-### 2.2 預檢問題清單
-
-在修改前回答以下問題:
-
-```
-□ 1. 此修改是否影響其他文件?
-□ 2. 此修改是否與現有規範衝突?
-□ 3. 此修改是否需要更新版本歷史?
-□ 4. 此修改是否需要新增測試?
-□ 5. 此修改是否需要通知相關人員?
-□ 6. 此修改是否有破壞性變更(Breaking Change)?
-```
-
-### 2.3 預檢命令
-
-修改前執行以下命令確認現有狀態:
-
-```bash
-# 1. 確認 git 狀態
-git status
-
-# 2. 檢查相關文件的最新版本
-git log -3 --oneline
-
-# 3. 查看現有版本歷史
-cat docs/.md | grep -A 20 "版本歷史"
-```
-
----
-
-## 3. 文件修改流程
-
-### 3.1 標準修改流程
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Step 1: 閱讀 │
-│ ├─ 完整閱讀目標文件 │
-│ └─ 閱讀相關聯文件 │
-├─────────────────────────────────────────────────────────────┤
-│ Step 2: 預檢 │
-│ ├─ 回答預檢問題清單 │
-│ └─ 執行預檢命令 │
-├─────────────────────────────────────────────────────────────┤
-│ Step 3: 規劃 │
-│ ├─ 說明修改內容 │
-│ └─ 列出變更差異 │
-├─────────────────────────────────────────────────────────────┤
-│ Step 4: 修改 │
-│ ├─ 執行修改 │
-│ └─ 更新版本歷史 │
-├─────────────────────────────────────────────────────────────┤
-│ Step 5: 驗證 │
-│ ├─ 執行 lint/format 檢查 │
-│ └─ 執行相關測試 │
-├─────────────────────────────────────────────────────────────┤
-│ Step 6: 提交 │
-│ └─ 撰寫清晰的 commit message │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### 3.2 預修改彙報格式
-
-在執行修改前,必須先彙報以下內容:
-
-```markdown
-## 檔案
-``
-
-## 修改原因
-<說明修改的目的>
-
-## 變更內容
-```diff
-- <刪除的內容>
-+ <新增的內容>
-```
-
-## 版本歷史更新
-| 版本 | 日期 | 內容 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| Vx.x | YYYY-MM-DD | <修改說明> | <操作者> | <使用的工具> |
-```
-
-### 3.3 版本歷史格式
-
-每個文件頂部必須包含版本歷史表:
-
-```markdown
-## 版本歷史
-
-| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
-|------|------|------|--------|-----------|
-| V1.0 | 2026-03-15 | 創建文件 | Warren | OpenCode / MiniMax M2.5 |
-| V1.1 | 2026-03-22 | 更新內容 | Warren | OpenCode / big-pickle |
-```
-
----
-
-## 4. 變更對照
-
-### 4.1 diff 對照
-
-修改後必須提供 diff 對照:
-
-```bash
-git diff
-```
-
-### 4.2 變更類型分類
-
-| 類型 | 標記 | 說明 |
-|------|------|------|
-| 新增 | `+` | 新增內容 |
-| 刪除 | `-` | 刪除內容 |
-| 修改 | `~` | 修改內容 |
-| 移動 | `↕` | 移動位置 |
-| 格式 | `@` | 格式變更 |
-
-### 4.3 變更確認清單
-
-```
-□ 1. diff 輸出已確認
-□ 2. 變更符合預期
-□ 3. 無意外變更
-□ 4. 版本歷史已更新
-□ 5. 其他關聯文件已檢查
-```
-
----
-
-## 5. 驗證流程
-
-### 5.1 自動化驗證
-
-修改後執行以下自動化檢查:
-
-```bash
-# Rust 文件
-cargo fmt -- --check
-cargo clippy --lib
-cargo test --lib
-
-# Python 文件
-ruff check
-ruff format --check
-
-# Markdown 文件
-markdownlint
-
-# Shell 文件
-shellcheck -S error
-```
-
-### 5.2 手動驗證清單
-
-```
-□ 1. 文件語法正確
-□ 2. 連結有效
-□ 3. 格式一致
-□ 4. 術語一致
-□ 5. 版本歷史完整
-□ 6. 變更記錄清晰
-```
-
----
-
-## 6. 提交規範
-
-### 6.1 Commit Message 格式
-
-```
-:
-
-
-
-