{"allowContribute":false,"item":{"artifactHtml":"\u003cstyle\u003e\n  :root{--paper:#F7F8FA;--ink:#131A2A;--ink-2:#4A5568;--accent:#0E7C6B;--accent-2:#0EA5A0;--soft:#E6F4F1;--soft-2:#FEF3C7;--hair:#E2E8F0;--card:#FFFFFF;--warn:#D97706}\n  :root[data-theme=\"dark\"]{--paper:#10141C;--ink:#E2E8F0;--ink-2:#94A3B8;--accent:#2DD4BF;--accent-2:#5EEAD4;--soft:#12332F;--soft-2:#3A2F0A;--hair:#2A3344;--card:#171D29;--warn:#FBBF24}\n  .doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:15px/1.78 -apple-system,\"Noto Sans TC\",\"PingFang TC\",\"Microsoft JhengHei\",system-ui,sans-serif;max-width:100%}\n  header{margin-bottom:22px}\n  .eyebrow{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.16em;color:var(--accent);text-transform:uppercase}\n  header h1{font-size:28px;line-height:1.2;letter-spacing:-.02em;margin:10px 0 8px;font-weight:850}\n  .lede{color:var(--ink-2);font-size:13.5px;max-width:64ch;margin:0}\n  .meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}\n  .chip{font:600 11px ui-monospace,Menlo,monospace;letter-spacing:.06em;background:var(--card);border:1px solid var(--hair);padding:6px 10px;border-radius:999px;color:var(--ink-2)}\n  .stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:18px 0}\n  .stat{background:var(--card);border:1px solid var(--hair);border-radius:12px;padding:14px 16px}\n  .stat .k{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.08em;color:var(--accent)}\n  .stat .v{font-size:24px;font-weight:850;letter-spacing:-.02em;margin-top:4px}\n  .stat .n{font-size:12px;color:var(--ink-2);margin-top:2px;line-height:1.5}\n  h2{font-size:18px;font-weight:800;letter-spacing:-.015em;margin:0 0 6px;display:flex;align-items:center;gap:10px}\n  h2 .ic{width:32px;height:32px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0}\n  h3{font-size:14.5px;font-weight:750;margin:18px 0 8px;color:var(--ink)}\n  h4{font-size:12.5px;font-weight:750;letter-spacing:.06em;color:var(--ink-2);margin:14px 0 6px;text-transform:uppercase}\n  p{color:var(--ink-2);margin:0 0 10px;max-width:68ch;font-size:13.5px}\n  ul,ol{padding-left:18px;margin:0 0 10px}\n  li{font-size:13.5px;color:var(--ink-2);margin-bottom:4px}\n  li b,li strong{color:var(--ink)}\n  .card{background:var(--card);border:1px solid var(--hair);border-radius:16px;padding:22px;margin:16px 0;box-shadow:0 4px 16px rgba(15,23,42,.06)}\n  :root[data-theme=\"dark\"] .card{box-shadow:none}\n  .flow{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:12px 0}\n  .flow span{background:var(--soft);border:1px solid var(--hair);padding:7px 11px;border-radius:10px;font-size:12.5px;font-weight:700;color:var(--ink)}\n  .flow i{color:var(--ink-2);font-style:normal;font-size:14px}\n  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:10px 0}\n  .mini{background:var(--paper);border:1px solid var(--hair);border-radius:12px;padding:14px}\n  .mini ul{margin-bottom:0}\n  .callout{display:flex;gap:12px;padding:13px 14px;background:var(--soft);border-radius:10px;margin:14px 0;border:1px solid var(--hair)}\n  .callout .tag{flex:none;font:800 11px ui-monospace,Menlo,monospace;letter-spacing:.08em;color:var(--accent);padding-top:2px}\n  .callout div{font-size:13px;color:var(--ink-2);line-height:1.6}\n  .table-wrap{overflow-x:auto;border:1px solid var(--hair);border-radius:12px;margin:10px 0;background:var(--card)}\n  table{width:100%;border-collapse:collapse;font-size:13px;min-width:520px}\n  th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--hair);vertical-align:top}\n  th{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.06em;color:var(--ink-2);background:var(--paper);white-space:nowrap}\n  td{color:var(--ink-2)}\n  td b{color:var(--ink)}\n  tr:last-child td{border-bottom:none}\n  .badge{display:inline-block;font:800 10.5px ui-monospace,Menlo,monospace;letter-spacing:.04em;padding:2px 7px;border-radius:999px;vertical-align:middle}\n  .b-p0{background:#FEE2E2;color:#991B1B;border:1px solid #FECACA}\n  :root[data-theme=\"dark\"] .b-p0{background:#3A1A1A;color:#FCA5A5;border-color:#5A2A2A}\n  .b-p1{background:#FEF3C7;color:#92400E;border:1px solid #FDE68A}\n  :root[data-theme=\"dark\"] .b-p1{background:#3A2E0A;color:#FDE68A;border-color:#5A4520}\n  .b-p2{background:#E5E7EB;color:#374151;border:1px solid #D1D5DB}\n  :root[data-theme=\"dark\"] .b-p2{background:#222A3A;color:#9CA3AF;border-color:#334155}\n  .badge-must{background:var(--soft);color:var(--accent);border:1px solid var(--hair)}\n  .toc{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:14px 0}\n  .toc a{display:flex;align-items:center;gap:8px;text-decoration:none;background:var(--card);border:1px solid var(--hair);padding:10px 12px;border-radius:10px;color:var(--ink-2);font-size:12.5px;font-weight:600}\n  .toc a b{width:22px;height:22px;border-radius:7px;background:var(--soft);color:var(--accent);display:inline-flex;align-items:center;justify-content:center;font-size:11px;flex-shrink:0}\n  .divider{height:1px;background:var(--hair);margin:18px 0}\n  .kicker{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.14em;color:var(--accent);margin-bottom:8px}\n  .footer{font-size:11.5px;color:var(--ink-2);text-align:center;padding:10px 0 0;border-top:1px solid var(--hair);margin-top:18px}\n  code{font:600 12px ui-monospace,Menlo,monospace;background:var(--paper);border:1px solid var(--hair);padding:2px 6px;border-radius:6px;color:var(--ink)}\n  @media(max-width:680px){.doc{padding:20px 18px}header h1{font-size:23px}.stats{grid-template-columns:1fr 1fr}.grid2{grid-template-columns:1fr}.toc{grid-template-columns:1fr}}\n\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\n  \u003cheader\u003e\n    \u003cdiv class=\"eyebrow\"\u003eAI 一條龍程式工坊 · SPEC v0.1\u003c/div\u003e\n    \u003ch1\u003e類 CubeLV Vault — AI 助理網頁程式 規格書｜2026-08-20\u003c/h1\u003e\n    \u003cp class=\"lede\"\u003e一套個人化 AI 助理資料庫：整合 AI 對話、知識庫管理與自動化 AI 員工，模型來源可於登入授權／API Key／本地模型三模式切換。\u003c/p\u003e\n    \u003cdiv class=\"meta\"\u003e\u003cspan class=\"chip\"\u003e🧩 四大核心模組\u003c/span\u003e\u003cspan class=\"chip\"\u003e🔌 模型三模式\u003c/span\u003e\u003cspan class=\"chip\"\u003e📐 六章定版\u003c/span\u003e\u003cspan class=\"chip\"\u003e2026-08-20\u003c/span\u003e\u003c/div\u003e\n  \u003c/header\u003e\n\n  \u003csection data-cube=\"stats\" class=\"stats\"\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e核心模組\u003c/div\u003e\u003cdiv class=\"v\"\u003e4\u003c/div\u003e\u003cdiv class=\"n\"\u003e對話 / 知識庫 / 員工 / Vault 系統\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e模型模式\u003c/div\u003e\u003cdiv class=\"v\"\u003e3\u003c/div\u003e\u003cdiv class=\"n\"\u003e登入授權 / API Key / Ollama\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e頁面路由\u003c/div\u003e\u003cdiv class=\"v\"\u003e9\u003c/div\u003e\u003cdiv class=\"n\"\u003e儀表板 → 設定\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e資料型別\u003c/div\u003e\u003cdiv class=\"v\"\u003e10\u003c/div\u003e\u003cdiv class=\"n\"\u003eItem 基底統一抽象\u003c/div\u003e\u003c/div\u003e\n  \u003c/section\u003e\n\n  \u003cnav class=\"toc\"\u003e\n    \u003ca href=\"#s1\"\u003e\u003cb\u003e1\u003c/b\u003e 專案概述\u003c/a\u003e\n    \u003ca href=\"#s2\"\u003e\u003cb\u003e2\u003c/b\u003e 功能清單\u003c/a\u003e\n    \u003ca href=\"#s3\"\u003e\u003cb\u003e3\u003c/b\u003e 頁面路由\u003c/a\u003e\n    \u003ca href=\"#s4\"\u003e\u003cb\u003e4\u003c/b\u003e 資料模型\u003c/a\u003e\n    \u003ca href=\"#s5\"\u003e\u003cb\u003e5\u003c/b\u003e 技術選型\u003c/a\u003e\n    \u003ca href=\"#s6\"\u003e\u003cb\u003e6\u003c/b\u003e 非功能 + 里程碑\u003c/a\u003e\n  \u003c/nav\u003e\n\n  \u003cdiv id=\"s1\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#E0F2FE;color:#0369A1\"\u003e🎯\u003c/span\u003e 一、專案概述\u003c/h2\u003e\n    \u003cp\u003e\u003cb\u003e情境\u003c/b\u003e：打造一套個人化 AI 助理資料庫（Vault）網頁程式，把 AI 對話、知識庫（筆記／卡片／檔案／待辦／圖表）與自動化 AI 員工整合進同一入口，並具備資料夾、搜尋、插件、主題、儀表板等個人資料庫系統概念。\u003c/p\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e目標用戶\u003c/h4\u003e\u003cul\u003e\u003cli\u003e個人知識工作者\u003c/li\u003e\u003cli\u003e想同時收納「跟 AI 的對話」「整理好的知識」「交 AI 自動跑的例行任務」\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e成功指標\u003c/h4\u003e\u003cul\u003e\u003cli\u003e發問＋存成筆記全流程 ≤ 5 步\u003c/li\u003e\u003cli\u003e可建立 1 個排程自動執行的 AI 員工並看到產出\u003c/li\u003e\u003cli\u003e所有資料型別可建立、搜尋、搬進資料夾\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cp\u003e\u003cb\u003e核心價值\u003c/b\u003e：單一入口統一對話與資料；AI 員工把「搜集→分析→彙整→發布」例行流程自動化；資料以 Vault 資料夾體系組織、可搜尋。\u003c/p\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\" style=\"border-left:3px solid var(--accent)\"\u003e\u003ch4\u003e本期做（In Scope）\u003c/h4\u003e\u003cul\u003e\u003cli\u003e單頁 SPA 原型 → 多頁路由\u003c/li\u003e\u003cli\u003e四大核心 + 模型三模式可切換\u003c/li\u003e\u003cli\u003e資料持久化本機 SQLite\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\" style=\"border-left:3px solid #CBD5E1\"\u003e\u003ch4\u003e本期不做（Out of Scope）\u003c/h4\u003e\u003cul\u003e\u003cli\u003e多使用者／多租戶\u003c/li\u003e\u003cli\u003e真實完整 OAuth 授權（本期 mock 代替）\u003c/li\u003e\u003cli\u003e跨裝置即時同步、正式插件 SDK 生態\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s2\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#DCFCE7;color:#166534\"\u003e✅\u003c/span\u003e 二、功能清單（可驗收）\u003c/h2\u003e\n    \u003cdiv class=\"kicker\"\u003eFUNCTION · P0 必備 / P1 加分 / P2 未來\u003c/div\u003e\n    \u003ch3\u003e模組 A｜AI 對話機器人\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eA1\u003c/td\u003e\u003ctd\u003e連續多輪對話\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e同 thread 連問 5 輪，模型能引用先前輪次\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA2\u003c/td\u003e\u003ctd\u003e串流回覆\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e長回答逐字即時顯示，非等整段\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA3\u003c/td\u003e\u003ctd\u003e對話歷史管理\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003ethread 清單、改名、刪除、續接；重開頁仍在\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA4\u003c/td\u003e\u003ctd\u003e模型來源切換\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e三模式切換後對話用新來源並標示\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA5\u003c/td\u003e\u003ctd\u003e一鍵存為筆記\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e回覆存成 NOTE，可於筆記區找到\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 B｜知識庫與檔案管理\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eB1\u003c/td\u003e\u003ctd\u003e筆記（富文字）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e建／編／刪，存檔重開內容保留\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB2\u003c/td\u003e\u003ctd\u003e卡片（結構化）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e自訂欄位 schema，建含 3 欄位卡片並檢視\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB3\u003c/td\u003e\u003ctd\u003e檔案庫\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e上傳、分資料夾、打標籤、可搜到\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB4\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e建／勾完成／排程提醒，可篩未完成\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB5\u003c/td\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e時間序列輸入顯示長條／折線\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB6\u003c/td\u003e\u003ctd\u003e資料夾＋全域搜尋\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e關鍵字命中筆記、卡片、待辦\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB7\u003c/td\u003e\u003ctd\u003e多資料夾掛載\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e一筆記同時在兩個資料夾可見\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 C｜AI 員工自動化\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eC1\u003c/td\u003e\u003ctd\u003e建立多 Agent 角色\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e可建立 2 個不同 Agent（名字＋系統提示）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC2\u003c/td\u003e\u003ctd\u003e排程／觸發執行\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e手動或 DAILY/WEEKLY 排程，能產生產出\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC3\u003c/td\u003e\u003ctd\u003e多 Agent 接力工作流\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e跑 3 步接力，末棒產出引用首棒資料\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC4\u003c/td\u003e\u003ctd\u003e執行紀錄\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e執行後可看 run 的輸入／輸出／狀態／時間\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC5\u003c/td\u003e\u003ctd\u003e成果自動落庫\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003eAgent 產出直接寫成 NOTE／CARD\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 D｜Vault 個人資料庫系統\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eD1\u003c/td\u003e\u003ctd\u003e儀表板\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e首頁顯示筆記／卡片／待辦／Agent 計數\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD2\u003c/td\u003e\u003ctd\u003e插件擴充骨架\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e側欄出現「範例插件」區塊\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD3\u003c/td\u003e\u003ctd\u003e主題切換\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e切深色後整體配色變深且可讀\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD4\u003c/td\u003e\u003ctd\u003e設定頁\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e模型來源設定存檔後生效\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 E｜模型接入（三模式）\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eE1\u003c/td\u003e\u003ctd\u003e登入授權模式\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e簡化登入後可用雲端模型發問\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE2\u003c/td\u003e\u003ctd\u003eAPI Key 直連\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e支援 OpenAI／Claude／DeepSeek 其一，key 加密儲存不回顯\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE3\u003c/td\u003e\u003ctd\u003e本地模型（Ollama）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e無網環境連 Ollama 發問\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE4\u003c/td\u003e\u003ctd\u003e健康檢查＋fallback\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e主來源失敗自動試次要並提示\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e給工程師\u003c/span\u003e\u003cdiv\u003eP0 為 MVP 必交付；P1 盡量帶上；P2 只做結構預留不實作。每條皆可依驗收標準判定完成。\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s3\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#FCE7F3;color:#9D174D\"\u003e🗺️\u003c/span\u003e 三、頁面結構／路由規劃\u003c/h2\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e路由\u003c/th\u003e\u003cth\u003e頁面\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e儀表板 Dashboard\u003c/td\u003e\u003ctd\u003e統計卡、最近活動、快速入口\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/chat\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eAI 對話\u003c/td\u003e\u003ctd\u003e左側 thread 清單＋右側對話串流\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/notes\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e筆記\u003c/td\u003e\u003ctd\u003e資料夾樹＋列表＋富文字編輯器\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/cards\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e卡片\u003c/td\u003e\u003ctd\u003eschema 列表＋卡片網格／表格\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/files\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e檔案庫\u003c/td\u003e\u003ctd\u003e資料夾＋上傳＋標籤篩選\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/todos\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003ctd\u003e清單＋完成篩選＋排程\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/charts\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003e資料輸入＋圖表繪製\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/agents\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eAI 員工\u003c/td\u003e\u003ctd\u003eAgent 列表＋建立＋執行紀錄＋工作流編輯\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/settings\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e設定\u003c/td\u003e\u003ctd\u003e模型來源切換＋主題＋個人資料\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e元件階層\u003c/h3\u003e\n    \u003cp style=\"font-size:12.5px\"\u003eAppShell（Sidebar／Header／Toast）→ 各模組 Layout → 共用元件（Button／Input／Modal／Table／EmptyState／Chart／Editor／Tree）\u003c/p\u003e\n    \u003ch3\u003e關鍵流程\u003c/h3\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e發問\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e串流回覆\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e存為筆記\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e筆記區看到\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e建 Agent\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e設排程\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e執行\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e產出落庫\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e知識庫看到＋紀錄\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e設定選模式\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e存\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e以新來源發問\u003c/span\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s4\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#E0E7FF;color:#3730A3\"\u003e🗄️\u003c/span\u003e 四、資料模型與欄位定義\u003c/h2\u003e\n    \u003cdiv class=\"kicker\"\u003eDATA MODEL · Item 基底統一抽象\u003c/div\u003e\n    \u003cp\u003e通用 \u003cb\u003eItem\u003c/b\u003e 基底：\u003ccode\u003eid\u003c/code\u003e(PK)、\u003ccode\u003etype\u003c/code\u003e(enum)、\u003ccode\u003ename\u003c/code\u003e、\u003ccode\u003econtent\u003c/code\u003e、\u003ccode\u003eparents\u003c/code\u003e(folderId[])、\u003ccode\u003etags\u003c/code\u003e、\u003ccode\u003ecreatedAt/updatedAt\u003c/code\u003e、\u003ccode\u003edata\u003c/code\u003e(型別專屬 JSON)。資料夾為 \u003ccode\u003efolder\u003c/code\u003e 型 Item，形成樹。\u003c/p\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e關鍵欄位\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003ethread\u003c/b\u003e\u003c/td\u003e\u003ctd\u003emodelSource、title\u003c/td\u003e\u003ctd\u003eAI 對話會話\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003emessage\u003c/b\u003e\u003c/td\u003e\u003ctd\u003ethreadId、role(user/assistant)、content\u003c/td\u003e\u003ctd\u003e單則訊息，附順序\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003enote\u003c/b\u003e\u003c/td\u003e\u003ctd\u003econtent(HTML)、tags\u003c/td\u003e\u003ctd\u003e筆記\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003ecard\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eschemaDef、fields\u003c/td\u003e\u003ctd\u003e結構化卡片\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003efile\u003c/b\u003e\u003c/td\u003e\u003ctd\u003estorageKey、mime、size、originalName\u003c/td\u003e\u003ctd\u003emetadata 與 bytes 分離\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003etodo\u003c/b\u003e\u003c/td\u003e\u003ctd\u003ecompleted、dueAt、periodic\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003echart\u003c/b\u003e\u003c/td\u003e\u003ctd\u003edataPoints([{t,value}])、chartType\u003c/td\u003e\u003ctd\u003e圖表資料\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003eagent\u003c/b\u003e\u003c/td\u003e\u003ctd\u003esystemPrompt、schedule、trigger、prevAgentId\u003c/td\u003e\u003ctd\u003eAI 員工（接力鏈）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003eagentRun\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eagentId、input、output、status、startedAt/finishedAt\u003c/td\u003e\u003ctd\u003e單次執行\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cp style=\"font-size:12px;color:var(--ink-2)\"\u003e關聯：message→thread；agentRun→agent；agent.prevAgentId→agent（接力）；全部 Item parents→folder。索引：message(threadId,order)、agentRun(agentId,startedAt)、todo(completed)。\u003c/p\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s5\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#FFEDD5;color:#9A3412\"\u003e⚙️\u003c/span\u003e 五、技術選型與理由\u003c/h2\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e層\u003c/th\u003e\u003cth\u003e選型\u003c/th\u003e\u003cth\u003e理由\u003c/th\u003e\u003cth\u003e替代方案\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e前端框架\u003c/td\u003e\u003ctd\u003eReact + TypeScript\u003c/td\u003e\u003ctd\u003e生態成熟、型別安全、與 CubeLV 插件體系一致\u003c/td\u003e\u003ctd\u003eVue 3\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e樣式\u003c/td\u003e\u003ctd\u003eTailwind CSS\u003c/td\u003e\u003ctd\u003e快速響應式切版、token 整合佳\u003c/td\u003e\u003ctd\u003eCSS Modules / UnoCSS\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e富文字\u003c/td\u003e\u003ctd\u003eTiptap\u003c/td\u003e\u003ctd\u003e可擴充、與 React 整合好\u003c/td\u003e\u003ctd\u003eQuill / Lexical\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e後端\u003c/td\u003e\u003ctd\u003eNode.js + Fastify\u003c/td\u003e\u003ctd\u003e輕量、支援 SSE/WS、同語系\u003c/td\u003e\u003ctd\u003eExpress / NestJS\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e儲存\u003c/td\u003e\u003ctd\u003eSQLite（本地單檔）\u003c/td\u003e\u003ctd\u003e零部署、單人 Vault 足夠，後可換\u003c/td\u003e\u003ctd\u003ePostgres / Supabase\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e即時串流\u003c/td\u003e\u003ctd\u003eSSE\u003c/td\u003e\u003ctd\u003e單向逐字推送最簡、自動重連\u003c/td\u003e\u003ctd\u003eWebSocket\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e模型接入\u003c/td\u003e\u003ctd\u003eProvider REST/SSE + Ollama\u003c/td\u003e\u003ctd\u003e三模式統一成 ModelAdapter 介面\u003c/td\u003e\u003ctd\u003e各官方 SDK\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e檔案儲存\u003c/td\u003e\u003ctd\u003e本地磁碟目錄\u003c/td\u003e\u003ctd\u003e原型簡單；介面隔離後可換 S3\u003c/td\u003e\u003ctd\u003eS3 / Cloudflare R2\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003eRecharts\u003c/td\u003e\u003ctd\u003eReact 聲明式、文件佳\u003c/td\u003e\u003ctd\u003eECharts / Chart.js\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e認證\u003c/td\u003e\u003ctd\u003e簡化 Session（mock）\u003c/td\u003e\u003ctd\u003e原型先跑通授權流，後接真 OAuth\u003c/td\u003e\u003ctd\u003eAuth.js / Supabase Auth\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e架構重點\u003c/span\u003e\u003cdiv\u003e前後端分離；ModelAdapter 介面隔離三種模型來源；Agent 引擎以 queue 排程、run 落庫、產出寫回 Item；資料層以 Item 抽象統一所有型別利於插件擴充。\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s6\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#DCFCE7;color:#14532D\"\u003e🛡️\u003c/span\u003e 六、非功能需求與里程碑\u003c/h2\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e效能\u003c/h4\u003e\u003cul\u003e\u003cli\u003e首屏 LCP \u0026lt; 2.5s\u003c/li\u003e\u003cli\u003e串流首字 \u0026lt; 1s\u003c/li\u003e\u003cli\u003e搜尋 p95 \u0026lt; 300ms\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e安全\u003c/h4\u003e\u003cul\u003e\u003cli\u003eAPI Key 加密儲存不回顯\u003c/li\u003e\u003cli\u003e輸出 sanitize 防 XSS、SQL 參數化\u003c/li\u003e\u003cli\u003e本地／Ollama 連線僅限本機\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e可用性\u003c/h4\u003e\u003cul\u003e\u003cli\u003eRWD 手機／桌機\u003c/li\u003e\u003cli\u003e表單 label、鍵盤可操作\u003c/li\u003e\u003cli\u003e串流中斷自動重連\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e維運擴充\u003c/h4\u003e\u003cul\u003e\u003cli\u003eAgentRun 執行日誌留存\u003c/li\u003e\u003cli\u003e插件以 Item 抽象擴充新型別\u003c/li\u003e\u003cli\u003e資料層可遷移（SQLite→PG）\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003ch3\u003e驗收里程碑\u003c/h3\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003eM1 原型：對話串流＋筆記 CRUD＋儀表板\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM2 核心：多頁＋卡片／檔案／待辦／圖表＋搜尋\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM3 自動化：Agent＋排程＋接力＋落庫\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM4 收尾：插件＋主題＋設定＋非功能\u003c/span\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"footer\"\u003e規格 v0.1 ｜ 2026-08-20 ｜ 需求分析師 ｜ 已寫回 CODING_PROJECT、狀態 analyzing，交棒全端工程師\u003c/div\u003e\n\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\n  \n\n  \u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e核心模組\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e4\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e對話 / 知識庫 / 員工 / Vault 系統\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e模型模式\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e3\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e登入授權 / API Key / Ollama\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e頁面路由\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e9\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e儀表板 → 設定\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e資料型別\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e10\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eItem 基底統一抽象\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\n\n  \u003cnav class=\"toc\"\u003e\n    \u003ca href=\"#s1\"\u003e\u003cb\u003e1\u003c/b\u003e 專案概述\u003c/a\u003e\n    \u003ca href=\"#s2\"\u003e\u003cb\u003e2\u003c/b\u003e 功能清單\u003c/a\u003e\n    \u003ca href=\"#s3\"\u003e\u003cb\u003e3\u003c/b\u003e 頁面路由\u003c/a\u003e\n    \u003ca href=\"#s4\"\u003e\u003cb\u003e4\u003c/b\u003e 資料模型\u003c/a\u003e\n    \u003ca href=\"#s5\"\u003e\u003cb\u003e5\u003c/b\u003e 技術選型\u003c/a\u003e\n    \u003ca href=\"#s6\"\u003e\u003cb\u003e6\u003c/b\u003e 非功能 + 里程碑\u003c/a\u003e\n  \u003c/nav\u003e\n\n  \u003cdiv id=\"s1\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#E0F2FE;color:#0369A1\"\u003e🎯\u003c/span\u003e 一、專案概述\u003c/h2\u003e\n    \u003cp\u003e\u003cb\u003e情境\u003c/b\u003e：打造一套個人化 AI 助理資料庫（Vault）網頁程式，把 AI 對話、知識庫（筆記／卡片／檔案／待辦／圖表）與自動化 AI 員工整合進同一入口，並具備資料夾、搜尋、插件、主題、儀表板等個人資料庫系統概念。\u003c/p\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e目標用戶\u003c/h4\u003e\u003cul\u003e\u003cli\u003e個人知識工作者\u003c/li\u003e\u003cli\u003e想同時收納「跟 AI 的對話」「整理好的知識」「交 AI 自動跑的例行任務」\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e成功指標\u003c/h4\u003e\u003cul\u003e\u003cli\u003e發問＋存成筆記全流程 ≤ 5 步\u003c/li\u003e\u003cli\u003e可建立 1 個排程自動執行的 AI 員工並看到產出\u003c/li\u003e\u003cli\u003e所有資料型別可建立、搜尋、搬進資料夾\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cp\u003e\u003cb\u003e核心價值\u003c/b\u003e：單一入口統一對話與資料；AI 員工把「搜集→分析→彙整→發布」例行流程自動化；資料以 Vault 資料夾體系組織、可搜尋。\u003c/p\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\" style=\"border-left:3px solid var(--accent)\"\u003e\u003ch4\u003e本期做（In Scope）\u003c/h4\u003e\u003cul\u003e\u003cli\u003e單頁 SPA 原型 → 多頁路由\u003c/li\u003e\u003cli\u003e四大核心 + 模型三模式可切換\u003c/li\u003e\u003cli\u003e資料持久化本機 SQLite\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\" style=\"border-left:3px solid #CBD5E1\"\u003e\u003ch4\u003e本期不做（Out of Scope）\u003c/h4\u003e\u003cul\u003e\u003cli\u003e多使用者／多租戶\u003c/li\u003e\u003cli\u003e真實完整 OAuth 授權（本期 mock 代替）\u003c/li\u003e\u003cli\u003e跨裝置即時同步、正式插件 SDK 生態\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s2\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#DCFCE7;color:#166534\"\u003e✅\u003c/span\u003e 二、功能清單（可驗收）\u003c/h2\u003e\n    \u003cdiv class=\"kicker\"\u003eFUNCTION · P0 必備 / P1 加分 / P2 未來\u003c/div\u003e\n    \u003ch3\u003e模組 A｜AI 對話機器人\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eA1\u003c/td\u003e\u003ctd\u003e連續多輪對話\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e同 thread 連問 5 輪，模型能引用先前輪次\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA2\u003c/td\u003e\u003ctd\u003e串流回覆\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e長回答逐字即時顯示，非等整段\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA3\u003c/td\u003e\u003ctd\u003e對話歷史管理\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003ethread 清單、改名、刪除、續接；重開頁仍在\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA4\u003c/td\u003e\u003ctd\u003e模型來源切換\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e三模式切換後對話用新來源並標示\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA5\u003c/td\u003e\u003ctd\u003e一鍵存為筆記\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e回覆存成 NOTE，可於筆記區找到\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 B｜知識庫與檔案管理\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eB1\u003c/td\u003e\u003ctd\u003e筆記（富文字）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e建／編／刪，存檔重開內容保留\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB2\u003c/td\u003e\u003ctd\u003e卡片（結構化）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e自訂欄位 schema，建含 3 欄位卡片並檢視\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB3\u003c/td\u003e\u003ctd\u003e檔案庫\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e上傳、分資料夾、打標籤、可搜到\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB4\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e建／勾完成／排程提醒，可篩未完成\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB5\u003c/td\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e時間序列輸入顯示長條／折線\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB6\u003c/td\u003e\u003ctd\u003e資料夾＋全域搜尋\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e關鍵字命中筆記、卡片、待辦\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB7\u003c/td\u003e\u003ctd\u003e多資料夾掛載\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e一筆記同時在兩個資料夾可見\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 C｜AI 員工自動化\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eC1\u003c/td\u003e\u003ctd\u003e建立多 Agent 角色\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e可建立 2 個不同 Agent（名字＋系統提示）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC2\u003c/td\u003e\u003ctd\u003e排程／觸發執行\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e手動或 DAILY/WEEKLY 排程，能產生產出\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC3\u003c/td\u003e\u003ctd\u003e多 Agent 接力工作流\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e跑 3 步接力，末棒產出引用首棒資料\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC4\u003c/td\u003e\u003ctd\u003e執行紀錄\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e執行後可看 run 的輸入／輸出／狀態／時間\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC5\u003c/td\u003e\u003ctd\u003e成果自動落庫\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003eAgent 產出直接寫成 NOTE／CARD\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 D｜Vault 個人資料庫系統\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eD1\u003c/td\u003e\u003ctd\u003e儀表板\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e首頁顯示筆記／卡片／待辦／Agent 計數\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD2\u003c/td\u003e\u003ctd\u003e插件擴充骨架\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e側欄出現「範例插件」區塊\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD3\u003c/td\u003e\u003ctd\u003e主題切換\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e切深色後整體配色變深且可讀\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD4\u003c/td\u003e\u003ctd\u003e設定頁\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e模型來源設定存檔後生效\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 E｜模型接入（三模式）\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eE1\u003c/td\u003e\u003ctd\u003e登入授權模式\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e簡化登入後可用雲端模型發問\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE2\u003c/td\u003e\u003ctd\u003eAPI Key 直連\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e支援 OpenAI／Claude／DeepSeek 其一，key 加密儲存不回顯\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE3\u003c/td\u003e\u003ctd\u003e本地模型（Ollama）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e無網環境連 Ollama 發問\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE4\u003c/td\u003e\u003ctd\u003e健康檢查＋fallback\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e主來源失敗自動試次要並提示\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e給工程師\u003c/span\u003e\u003cdiv\u003eP0 為 MVP 必交付；P1 盡量帶上；P2 只做結構預留不實作。每條皆可依驗收標準判定完成。\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s3\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#FCE7F3;color:#9D174D\"\u003e🗺️\u003c/span\u003e 三、頁面結構／路由規劃\u003c/h2\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e路由\u003c/th\u003e\u003cth\u003e頁面\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e儀表板 Dashboard\u003c/td\u003e\u003ctd\u003e統計卡、最近活動、快速入口\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/chat\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eAI 對話\u003c/td\u003e\u003ctd\u003e左側 thread 清單＋右側對話串流\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/notes\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e筆記\u003c/td\u003e\u003ctd\u003e資料夾樹＋列表＋富文字編輯器\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/cards\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e卡片\u003c/td\u003e\u003ctd\u003eschema 列表＋卡片網格／表格\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/files\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e檔案庫\u003c/td\u003e\u003ctd\u003e資料夾＋上傳＋標籤篩選\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/todos\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003ctd\u003e清單＋完成篩選＋排程\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/charts\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003e資料輸入＋圖表繪製\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/agents\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eAI 員工\u003c/td\u003e\u003ctd\u003eAgent 列表＋建立＋執行紀錄＋工作流編輯\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/settings\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e設定\u003c/td\u003e\u003ctd\u003e模型來源切換＋主題＋個人資料\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e元件階層\u003c/h3\u003e\n    \u003cp style=\"font-size:12.5px\"\u003eAppShell（Sidebar／Header／Toast）→ 各模組 Layout → 共用元件（Button／Input／Modal／Table／EmptyState／Chart／Editor／Tree）\u003c/p\u003e\n    \u003ch3\u003e關鍵流程\u003c/h3\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e發問\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e串流回覆\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e存為筆記\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e筆記區看到\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e建 Agent\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e設排程\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e執行\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e產出落庫\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e知識庫看到＋紀錄\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e設定選模式\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e存\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e以新來源發問\u003c/span\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s4\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#E0E7FF;color:#3730A3\"\u003e🗄️\u003c/span\u003e 四、資料模型與欄位定義\u003c/h2\u003e\n    \u003cdiv class=\"kicker\"\u003eDATA MODEL · Item 基底統一抽象\u003c/div\u003e\n    \u003cp\u003e通用 \u003cb\u003eItem\u003c/b\u003e 基底：\u003ccode\u003eid\u003c/code\u003e(PK)、\u003ccode\u003etype\u003c/code\u003e(enum)、\u003ccode\u003ename\u003c/code\u003e、\u003ccode\u003econtent\u003c/code\u003e、\u003ccode\u003eparents\u003c/code\u003e(folderId[])、\u003ccode\u003etags\u003c/code\u003e、\u003ccode\u003ecreatedAt/updatedAt\u003c/code\u003e、\u003ccode\u003edata\u003c/code\u003e(型別專屬 JSON)。資料夾為 \u003ccode\u003efolder\u003c/code\u003e 型 Item，形成樹。\u003c/p\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e關鍵欄位\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003ethread\u003c/b\u003e\u003c/td\u003e\u003ctd\u003emodelSource、title\u003c/td\u003e\u003ctd\u003eAI 對話會話\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003emessage\u003c/b\u003e\u003c/td\u003e\u003ctd\u003ethreadId、role(user/assistant)、content\u003c/td\u003e\u003ctd\u003e單則訊息，附順序\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003enote\u003c/b\u003e\u003c/td\u003e\u003ctd\u003econtent(HTML)、tags\u003c/td\u003e\u003ctd\u003e筆記\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003ecard\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eschemaDef、fields\u003c/td\u003e\u003ctd\u003e結構化卡片\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003efile\u003c/b\u003e\u003c/td\u003e\u003ctd\u003estorageKey、mime、size、originalName\u003c/td\u003e\u003ctd\u003emetadata 與 bytes 分離\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003etodo\u003c/b\u003e\u003c/td\u003e\u003ctd\u003ecompleted、dueAt、periodic\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003echart\u003c/b\u003e\u003c/td\u003e\u003ctd\u003edataPoints([{t,value}])、chartType\u003c/td\u003e\u003ctd\u003e圖表資料\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003eagent\u003c/b\u003e\u003c/td\u003e\u003ctd\u003esystemPrompt、schedule、trigger、prevAgentId\u003c/td\u003e\u003ctd\u003eAI 員工（接力鏈）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003eagentRun\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eagentId、input、output、status、startedAt/finishedAt\u003c/td\u003e\u003ctd\u003e單次執行\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cp style=\"font-size:12px;color:var(--ink-2)\"\u003e關聯：message→thread；agentRun→agent；agent.prevAgentId→agent（接力）；全部 Item parents→folder。索引：message(threadId,order)、agentRun(agentId,startedAt)、todo(completed)。\u003c/p\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s5\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#FFEDD5;color:#9A3412\"\u003e⚙️\u003c/span\u003e 五、技術選型與理由\u003c/h2\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e層\u003c/th\u003e\u003cth\u003e選型\u003c/th\u003e\u003cth\u003e理由\u003c/th\u003e\u003cth\u003e替代方案\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e前端框架\u003c/td\u003e\u003ctd\u003eReact + TypeScript\u003c/td\u003e\u003ctd\u003e生態成熟、型別安全、與 CubeLV 插件體系一致\u003c/td\u003e\u003ctd\u003eVue 3\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e樣式\u003c/td\u003e\u003ctd\u003eTailwind CSS\u003c/td\u003e\u003ctd\u003e快速響應式切版、token 整合佳\u003c/td\u003e\u003ctd\u003eCSS Modules / UnoCSS\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e富文字\u003c/td\u003e\u003ctd\u003eTiptap\u003c/td\u003e\u003ctd\u003e可擴充、與 React 整合好\u003c/td\u003e\u003ctd\u003eQuill / Lexical\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e後端\u003c/td\u003e\u003ctd\u003eNode.js + Fastify\u003c/td\u003e\u003ctd\u003e輕量、支援 SSE/WS、同語系\u003c/td\u003e\u003ctd\u003eExpress / NestJS\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e儲存\u003c/td\u003e\u003ctd\u003eSQLite（本地單檔）\u003c/td\u003e\u003ctd\u003e零部署、單人 Vault 足夠，後可換\u003c/td\u003e\u003ctd\u003ePostgres / Supabase\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e即時串流\u003c/td\u003e\u003ctd\u003eSSE\u003c/td\u003e\u003ctd\u003e單向逐字推送最簡、自動重連\u003c/td\u003e\u003ctd\u003eWebSocket\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e模型接入\u003c/td\u003e\u003ctd\u003eProvider REST/SSE + Ollama\u003c/td\u003e\u003ctd\u003e三模式統一成 ModelAdapter 介面\u003c/td\u003e\u003ctd\u003e各官方 SDK\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e檔案儲存\u003c/td\u003e\u003ctd\u003e本地磁碟目錄\u003c/td\u003e\u003ctd\u003e原型簡單；介面隔離後可換 S3\u003c/td\u003e\u003ctd\u003eS3 / Cloudflare R2\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003eRecharts\u003c/td\u003e\u003ctd\u003eReact 聲明式、文件佳\u003c/td\u003e\u003ctd\u003eECharts / Chart.js\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e認證\u003c/td\u003e\u003ctd\u003e簡化 Session（mock）\u003c/td\u003e\u003ctd\u003e原型先跑通授權流，後接真 OAuth\u003c/td\u003e\u003ctd\u003eAuth.js / Supabase Auth\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e架構重點\u003c/span\u003e\u003cdiv\u003e前後端分離；ModelAdapter 介面隔離三種模型來源；Agent 引擎以 queue 排程、run 落庫、產出寫回 Item；資料層以 Item 抽象統一所有型別利於插件擴充。\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s6\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#DCFCE7;color:#14532D\"\u003e🛡️\u003c/span\u003e 六、非功能需求與里程碑\u003c/h2\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e效能\u003c/h4\u003e\u003cul\u003e\u003cli\u003e首屏 LCP \u0026lt; 2.5s\u003c/li\u003e\u003cli\u003e串流首字 \u0026lt; 1s\u003c/li\u003e\u003cli\u003e搜尋 p95 \u0026lt; 300ms\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e安全\u003c/h4\u003e\u003cul\u003e\u003cli\u003eAPI Key 加密儲存不回顯\u003c/li\u003e\u003cli\u003e輸出 sanitize 防 XSS、SQL 參數化\u003c/li\u003e\u003cli\u003e本地／Ollama 連線僅限本機\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e可用性\u003c/h4\u003e\u003cul\u003e\u003cli\u003eRWD 手機／桌機\u003c/li\u003e\u003cli\u003e表單 label、鍵盤可操作\u003c/li\u003e\u003cli\u003e串流中斷自動重連\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e維運擴充\u003c/h4\u003e\u003cul\u003e\u003cli\u003eAgentRun 執行日誌留存\u003c/li\u003e\u003cli\u003e插件以 Item 抽象擴充新型別\u003c/li\u003e\u003cli\u003e資料層可遷移（SQLite→PG）\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003ch3\u003e驗收里程碑\u003c/h3\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003eM1 原型：對話串流＋筆記 CRUD＋儀表板\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM2 核心：多頁＋卡片／檔案／待辦／圖表＋搜尋\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM3 自動化：Agent＋排程＋接力＋落庫\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM4 收尾：插件＋主題＋設定＋非功能\u003c/span\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"footer\"\u003e規格 v0.1 ｜ 2026-08-20 ｜ 需求分析師 ｜ 已寫回 CODING_PROJECT、狀態 analyzing，交棒全端工程師\u003c/div\u003e\n\u003c/div\u003e","createdAt":1787202132082,"deletedAt":null,"displayMode":"artifact","id":"353352c29640bdfc15a6a85d","isNew":false,"isPublic":true,"itemType":"NOTE","name":"類 CubeLV Vault — AI 助理網頁程式 規格書｜2026-08-20","parents":{"1318db0020d1224924049bd8":1787202132082},"preParentID":null,"updatedAt":1787419984392,"updatedBy":{"userId":"6a3d5cc101c322d3356f1c","userName":"Harry"},"version":14},"ownerName":"Harry","subtree":[{"artifactHtml":"\u003cstyle\u003e\n  :root{--paper:#F7F8FA;--ink:#131A2A;--ink-2:#4A5568;--accent:#0E7C6B;--accent-2:#0EA5A0;--soft:#E6F4F1;--soft-2:#FEF3C7;--hair:#E2E8F0;--card:#FFFFFF;--warn:#D97706}\n  :root[data-theme=\"dark\"]{--paper:#10141C;--ink:#E2E8F0;--ink-2:#94A3B8;--accent:#2DD4BF;--accent-2:#5EEAD4;--soft:#12332F;--soft-2:#3A2F0A;--hair:#2A3344;--card:#171D29;--warn:#FBBF24}\n  .doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:15px/1.78 -apple-system,\"Noto Sans TC\",\"PingFang TC\",\"Microsoft JhengHei\",system-ui,sans-serif;max-width:100%}\n  header{margin-bottom:22px}\n  .eyebrow{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.16em;color:var(--accent);text-transform:uppercase}\n  header h1{font-size:28px;line-height:1.2;letter-spacing:-.02em;margin:10px 0 8px;font-weight:850}\n  .lede{color:var(--ink-2);font-size:13.5px;max-width:64ch;margin:0}\n  .meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}\n  .chip{font:600 11px ui-monospace,Menlo,monospace;letter-spacing:.06em;background:var(--card);border:1px solid var(--hair);padding:6px 10px;border-radius:999px;color:var(--ink-2)}\n  .stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:18px 0}\n  .stat{background:var(--card);border:1px solid var(--hair);border-radius:12px;padding:14px 16px}\n  .stat .k{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.08em;color:var(--accent)}\n  .stat .v{font-size:24px;font-weight:850;letter-spacing:-.02em;margin-top:4px}\n  .stat .n{font-size:12px;color:var(--ink-2);margin-top:2px;line-height:1.5}\n  h2{font-size:18px;font-weight:800;letter-spacing:-.015em;margin:0 0 6px;display:flex;align-items:center;gap:10px}\n  h2 .ic{width:32px;height:32px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0}\n  h3{font-size:14.5px;font-weight:750;margin:18px 0 8px;color:var(--ink)}\n  h4{font-size:12.5px;font-weight:750;letter-spacing:.06em;color:var(--ink-2);margin:14px 0 6px;text-transform:uppercase}\n  p{color:var(--ink-2);margin:0 0 10px;max-width:68ch;font-size:13.5px}\n  ul,ol{padding-left:18px;margin:0 0 10px}\n  li{font-size:13.5px;color:var(--ink-2);margin-bottom:4px}\n  li b,li strong{color:var(--ink)}\n  .card{background:var(--card);border:1px solid var(--hair);border-radius:16px;padding:22px;margin:16px 0;box-shadow:0 4px 16px rgba(15,23,42,.06)}\n  :root[data-theme=\"dark\"] .card{box-shadow:none}\n  .flow{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:12px 0}\n  .flow span{background:var(--soft);border:1px solid var(--hair);padding:7px 11px;border-radius:10px;font-size:12.5px;font-weight:700;color:var(--ink)}\n  .flow i{color:var(--ink-2);font-style:normal;font-size:14px}\n  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:10px 0}\n  .mini{background:var(--paper);border:1px solid var(--hair);border-radius:12px;padding:14px}\n  .mini ul{margin-bottom:0}\n  .callout{display:flex;gap:12px;padding:13px 14px;background:var(--soft);border-radius:10px;margin:14px 0;border:1px solid var(--hair)}\n  .callout .tag{flex:none;font:800 11px ui-monospace,Menlo,monospace;letter-spacing:.08em;color:var(--accent);padding-top:2px}\n  .callout div{font-size:13px;color:var(--ink-2);line-height:1.6}\n  .table-wrap{overflow-x:auto;border:1px solid var(--hair);border-radius:12px;margin:10px 0;background:var(--card)}\n  table{width:100%;border-collapse:collapse;font-size:13px;min-width:520px}\n  th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--hair);vertical-align:top}\n  th{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.06em;color:var(--ink-2);background:var(--paper);white-space:nowrap}\n  td{color:var(--ink-2)}\n  td b{color:var(--ink)}\n  tr:last-child td{border-bottom:none}\n  .badge{display:inline-block;font:800 10.5px ui-monospace,Menlo,monospace;letter-spacing:.04em;padding:2px 7px;border-radius:999px;vertical-align:middle}\n  .b-p0{background:#FEE2E2;color:#991B1B;border:1px solid #FECACA}\n  :root[data-theme=\"dark\"] .b-p0{background:#3A1A1A;color:#FCA5A5;border-color:#5A2A2A}\n  .b-p1{background:#FEF3C7;color:#92400E;border:1px solid #FDE68A}\n  :root[data-theme=\"dark\"] .b-p1{background:#3A2E0A;color:#FDE68A;border-color:#5A4520}\n  .b-p2{background:#E5E7EB;color:#374151;border:1px solid #D1D5DB}\n  :root[data-theme=\"dark\"] .b-p2{background:#222A3A;color:#9CA3AF;border-color:#334155}\n  .badge-must{background:var(--soft);color:var(--accent);border:1px solid var(--hair)}\n  .toc{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:14px 0}\n  .toc a{display:flex;align-items:center;gap:8px;text-decoration:none;background:var(--card);border:1px solid var(--hair);padding:10px 12px;border-radius:10px;color:var(--ink-2);font-size:12.5px;font-weight:600}\n  .toc a b{width:22px;height:22px;border-radius:7px;background:var(--soft);color:var(--accent);display:inline-flex;align-items:center;justify-content:center;font-size:11px;flex-shrink:0}\n  .divider{height:1px;background:var(--hair);margin:18px 0}\n  .kicker{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.14em;color:var(--accent);margin-bottom:8px}\n  .footer{font-size:11.5px;color:var(--ink-2);text-align:center;padding:10px 0 0;border-top:1px solid var(--hair);margin-top:18px}\n  code{font:600 12px ui-monospace,Menlo,monospace;background:var(--paper);border:1px solid var(--hair);padding:2px 6px;border-radius:6px;color:var(--ink)}\n  @media(max-width:680px){.doc{padding:20px 18px}header h1{font-size:23px}.stats{grid-template-columns:1fr 1fr}.grid2{grid-template-columns:1fr}.toc{grid-template-columns:1fr}}\n\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\n  \u003cheader\u003e\n    \u003cdiv class=\"eyebrow\"\u003eAI 一條龍程式工坊 · SPEC v0.1\u003c/div\u003e\n    \u003ch1\u003e類 CubeLV Vault — AI 助理網頁程式 規格書｜2026-08-20\u003c/h1\u003e\n    \u003cp class=\"lede\"\u003e一套個人化 AI 助理資料庫：整合 AI 對話、知識庫管理與自動化 AI 員工，模型來源可於登入授權／API Key／本地模型三模式切換。\u003c/p\u003e\n    \u003cdiv class=\"meta\"\u003e\u003cspan class=\"chip\"\u003e🧩 四大核心模組\u003c/span\u003e\u003cspan class=\"chip\"\u003e🔌 模型三模式\u003c/span\u003e\u003cspan class=\"chip\"\u003e📐 六章定版\u003c/span\u003e\u003cspan class=\"chip\"\u003e2026-08-20\u003c/span\u003e\u003c/div\u003e\n  \u003c/header\u003e\n\n  \u003csection data-cube=\"stats\" class=\"stats\"\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e核心模組\u003c/div\u003e\u003cdiv class=\"v\"\u003e4\u003c/div\u003e\u003cdiv class=\"n\"\u003e對話 / 知識庫 / 員工 / Vault 系統\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e模型模式\u003c/div\u003e\u003cdiv class=\"v\"\u003e3\u003c/div\u003e\u003cdiv class=\"n\"\u003e登入授權 / API Key / Ollama\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e頁面路由\u003c/div\u003e\u003cdiv class=\"v\"\u003e9\u003c/div\u003e\u003cdiv class=\"n\"\u003e儀表板 → 設定\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e資料型別\u003c/div\u003e\u003cdiv class=\"v\"\u003e10\u003c/div\u003e\u003cdiv class=\"n\"\u003eItem 基底統一抽象\u003c/div\u003e\u003c/div\u003e\n  \u003c/section\u003e\n\n  \u003cnav class=\"toc\"\u003e\n    \u003ca href=\"#s1\"\u003e\u003cb\u003e1\u003c/b\u003e 專案概述\u003c/a\u003e\n    \u003ca href=\"#s2\"\u003e\u003cb\u003e2\u003c/b\u003e 功能清單\u003c/a\u003e\n    \u003ca href=\"#s3\"\u003e\u003cb\u003e3\u003c/b\u003e 頁面路由\u003c/a\u003e\n    \u003ca href=\"#s4\"\u003e\u003cb\u003e4\u003c/b\u003e 資料模型\u003c/a\u003e\n    \u003ca href=\"#s5\"\u003e\u003cb\u003e5\u003c/b\u003e 技術選型\u003c/a\u003e\n    \u003ca href=\"#s6\"\u003e\u003cb\u003e6\u003c/b\u003e 非功能 + 里程碑\u003c/a\u003e\n  \u003c/nav\u003e\n\n  \u003cdiv id=\"s1\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#E0F2FE;color:#0369A1\"\u003e🎯\u003c/span\u003e 一、專案概述\u003c/h2\u003e\n    \u003cp\u003e\u003cb\u003e情境\u003c/b\u003e：打造一套個人化 AI 助理資料庫（Vault）網頁程式，把 AI 對話、知識庫（筆記／卡片／檔案／待辦／圖表）與自動化 AI 員工整合進同一入口，並具備資料夾、搜尋、插件、主題、儀表板等個人資料庫系統概念。\u003c/p\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e目標用戶\u003c/h4\u003e\u003cul\u003e\u003cli\u003e個人知識工作者\u003c/li\u003e\u003cli\u003e想同時收納「跟 AI 的對話」「整理好的知識」「交 AI 自動跑的例行任務」\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e成功指標\u003c/h4\u003e\u003cul\u003e\u003cli\u003e發問＋存成筆記全流程 ≤ 5 步\u003c/li\u003e\u003cli\u003e可建立 1 個排程自動執行的 AI 員工並看到產出\u003c/li\u003e\u003cli\u003e所有資料型別可建立、搜尋、搬進資料夾\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cp\u003e\u003cb\u003e核心價值\u003c/b\u003e：單一入口統一對話與資料；AI 員工把「搜集→分析→彙整→發布」例行流程自動化；資料以 Vault 資料夾體系組織、可搜尋。\u003c/p\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\" style=\"border-left:3px solid var(--accent)\"\u003e\u003ch4\u003e本期做（In Scope）\u003c/h4\u003e\u003cul\u003e\u003cli\u003e單頁 SPA 原型 → 多頁路由\u003c/li\u003e\u003cli\u003e四大核心 + 模型三模式可切換\u003c/li\u003e\u003cli\u003e資料持久化本機 SQLite\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\" style=\"border-left:3px solid #CBD5E1\"\u003e\u003ch4\u003e本期不做（Out of Scope）\u003c/h4\u003e\u003cul\u003e\u003cli\u003e多使用者／多租戶\u003c/li\u003e\u003cli\u003e真實完整 OAuth 授權（本期 mock 代替）\u003c/li\u003e\u003cli\u003e跨裝置即時同步、正式插件 SDK 生態\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s2\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#DCFCE7;color:#166534\"\u003e✅\u003c/span\u003e 二、功能清單（可驗收）\u003c/h2\u003e\n    \u003cdiv class=\"kicker\"\u003eFUNCTION · P0 必備 / P1 加分 / P2 未來\u003c/div\u003e\n    \u003ch3\u003e模組 A｜AI 對話機器人\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eA1\u003c/td\u003e\u003ctd\u003e連續多輪對話\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e同 thread 連問 5 輪，模型能引用先前輪次\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA2\u003c/td\u003e\u003ctd\u003e串流回覆\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e長回答逐字即時顯示，非等整段\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA3\u003c/td\u003e\u003ctd\u003e對話歷史管理\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003ethread 清單、改名、刪除、續接；重開頁仍在\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA4\u003c/td\u003e\u003ctd\u003e模型來源切換\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e三模式切換後對話用新來源並標示\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA5\u003c/td\u003e\u003ctd\u003e一鍵存為筆記\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e回覆存成 NOTE，可於筆記區找到\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 B｜知識庫與檔案管理\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eB1\u003c/td\u003e\u003ctd\u003e筆記（富文字）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e建／編／刪，存檔重開內容保留\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB2\u003c/td\u003e\u003ctd\u003e卡片（結構化）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e自訂欄位 schema，建含 3 欄位卡片並檢視\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB3\u003c/td\u003e\u003ctd\u003e檔案庫\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e上傳、分資料夾、打標籤、可搜到\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB4\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e建／勾完成／排程提醒，可篩未完成\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB5\u003c/td\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e時間序列輸入顯示長條／折線\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB6\u003c/td\u003e\u003ctd\u003e資料夾＋全域搜尋\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e關鍵字命中筆記、卡片、待辦\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB7\u003c/td\u003e\u003ctd\u003e多資料夾掛載\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e一筆記同時在兩個資料夾可見\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 C｜AI 員工自動化\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eC1\u003c/td\u003e\u003ctd\u003e建立多 Agent 角色\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e可建立 2 個不同 Agent（名字＋系統提示）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC2\u003c/td\u003e\u003ctd\u003e排程／觸發執行\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e手動或 DAILY/WEEKLY 排程，能產生產出\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC3\u003c/td\u003e\u003ctd\u003e多 Agent 接力工作流\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e跑 3 步接力，末棒產出引用首棒資料\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC4\u003c/td\u003e\u003ctd\u003e執行紀錄\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e執行後可看 run 的輸入／輸出／狀態／時間\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC5\u003c/td\u003e\u003ctd\u003e成果自動落庫\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003eAgent 產出直接寫成 NOTE／CARD\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 D｜Vault 個人資料庫系統\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eD1\u003c/td\u003e\u003ctd\u003e儀表板\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e首頁顯示筆記／卡片／待辦／Agent 計數\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD2\u003c/td\u003e\u003ctd\u003e插件擴充骨架\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e側欄出現「範例插件」區塊\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD3\u003c/td\u003e\u003ctd\u003e主題切換\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e切深色後整體配色變深且可讀\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD4\u003c/td\u003e\u003ctd\u003e設定頁\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e模型來源設定存檔後生效\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 E｜模型接入（三模式）\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eE1\u003c/td\u003e\u003ctd\u003e登入授權模式\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e簡化登入後可用雲端模型發問\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE2\u003c/td\u003e\u003ctd\u003eAPI Key 直連\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e支援 OpenAI／Claude／DeepSeek 其一，key 加密儲存不回顯\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE3\u003c/td\u003e\u003ctd\u003e本地模型（Ollama）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e無網環境連 Ollama 發問\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE4\u003c/td\u003e\u003ctd\u003e健康檢查＋fallback\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e主來源失敗自動試次要並提示\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e給工程師\u003c/span\u003e\u003cdiv\u003eP0 為 MVP 必交付；P1 盡量帶上；P2 只做結構預留不實作。每條皆可依驗收標準判定完成。\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s3\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#FCE7F3;color:#9D174D\"\u003e🗺️\u003c/span\u003e 三、頁面結構／路由規劃\u003c/h2\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e路由\u003c/th\u003e\u003cth\u003e頁面\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e儀表板 Dashboard\u003c/td\u003e\u003ctd\u003e統計卡、最近活動、快速入口\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/chat\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eAI 對話\u003c/td\u003e\u003ctd\u003e左側 thread 清單＋右側對話串流\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/notes\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e筆記\u003c/td\u003e\u003ctd\u003e資料夾樹＋列表＋富文字編輯器\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/cards\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e卡片\u003c/td\u003e\u003ctd\u003eschema 列表＋卡片網格／表格\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/files\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e檔案庫\u003c/td\u003e\u003ctd\u003e資料夾＋上傳＋標籤篩選\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/todos\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003ctd\u003e清單＋完成篩選＋排程\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/charts\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003e資料輸入＋圖表繪製\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/agents\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eAI 員工\u003c/td\u003e\u003ctd\u003eAgent 列表＋建立＋執行紀錄＋工作流編輯\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/settings\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e設定\u003c/td\u003e\u003ctd\u003e模型來源切換＋主題＋個人資料\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e元件階層\u003c/h3\u003e\n    \u003cp style=\"font-size:12.5px\"\u003eAppShell（Sidebar／Header／Toast）→ 各模組 Layout → 共用元件（Button／Input／Modal／Table／EmptyState／Chart／Editor／Tree）\u003c/p\u003e\n    \u003ch3\u003e關鍵流程\u003c/h3\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e發問\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e串流回覆\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e存為筆記\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e筆記區看到\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e建 Agent\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e設排程\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e執行\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e產出落庫\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e知識庫看到＋紀錄\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e設定選模式\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e存\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e以新來源發問\u003c/span\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s4\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#E0E7FF;color:#3730A3\"\u003e🗄️\u003c/span\u003e 四、資料模型與欄位定義\u003c/h2\u003e\n    \u003cdiv class=\"kicker\"\u003eDATA MODEL · Item 基底統一抽象\u003c/div\u003e\n    \u003cp\u003e通用 \u003cb\u003eItem\u003c/b\u003e 基底：\u003ccode\u003eid\u003c/code\u003e(PK)、\u003ccode\u003etype\u003c/code\u003e(enum)、\u003ccode\u003ename\u003c/code\u003e、\u003ccode\u003econtent\u003c/code\u003e、\u003ccode\u003eparents\u003c/code\u003e(folderId[])、\u003ccode\u003etags\u003c/code\u003e、\u003ccode\u003ecreatedAt/updatedAt\u003c/code\u003e、\u003ccode\u003edata\u003c/code\u003e(型別專屬 JSON)。資料夾為 \u003ccode\u003efolder\u003c/code\u003e 型 Item，形成樹。\u003c/p\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e關鍵欄位\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003ethread\u003c/b\u003e\u003c/td\u003e\u003ctd\u003emodelSource、title\u003c/td\u003e\u003ctd\u003eAI 對話會話\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003emessage\u003c/b\u003e\u003c/td\u003e\u003ctd\u003ethreadId、role(user/assistant)、content\u003c/td\u003e\u003ctd\u003e單則訊息，附順序\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003enote\u003c/b\u003e\u003c/td\u003e\u003ctd\u003econtent(HTML)、tags\u003c/td\u003e\u003ctd\u003e筆記\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003ecard\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eschemaDef、fields\u003c/td\u003e\u003ctd\u003e結構化卡片\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003efile\u003c/b\u003e\u003c/td\u003e\u003ctd\u003estorageKey、mime、size、originalName\u003c/td\u003e\u003ctd\u003emetadata 與 bytes 分離\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003etodo\u003c/b\u003e\u003c/td\u003e\u003ctd\u003ecompleted、dueAt、periodic\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003echart\u003c/b\u003e\u003c/td\u003e\u003ctd\u003edataPoints([{t,value}])、chartType\u003c/td\u003e\u003ctd\u003e圖表資料\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003eagent\u003c/b\u003e\u003c/td\u003e\u003ctd\u003esystemPrompt、schedule、trigger、prevAgentId\u003c/td\u003e\u003ctd\u003eAI 員工（接力鏈）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003eagentRun\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eagentId、input、output、status、startedAt/finishedAt\u003c/td\u003e\u003ctd\u003e單次執行\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cp style=\"font-size:12px;color:var(--ink-2)\"\u003e關聯：message→thread；agentRun→agent；agent.prevAgentId→agent（接力）；全部 Item parents→folder。索引：message(threadId,order)、agentRun(agentId,startedAt)、todo(completed)。\u003c/p\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s5\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#FFEDD5;color:#9A3412\"\u003e⚙️\u003c/span\u003e 五、技術選型與理由\u003c/h2\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e層\u003c/th\u003e\u003cth\u003e選型\u003c/th\u003e\u003cth\u003e理由\u003c/th\u003e\u003cth\u003e替代方案\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e前端框架\u003c/td\u003e\u003ctd\u003eReact + TypeScript\u003c/td\u003e\u003ctd\u003e生態成熟、型別安全、與 CubeLV 插件體系一致\u003c/td\u003e\u003ctd\u003eVue 3\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e樣式\u003c/td\u003e\u003ctd\u003eTailwind CSS\u003c/td\u003e\u003ctd\u003e快速響應式切版、token 整合佳\u003c/td\u003e\u003ctd\u003eCSS Modules / UnoCSS\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e富文字\u003c/td\u003e\u003ctd\u003eTiptap\u003c/td\u003e\u003ctd\u003e可擴充、與 React 整合好\u003c/td\u003e\u003ctd\u003eQuill / Lexical\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e後端\u003c/td\u003e\u003ctd\u003eNode.js + Fastify\u003c/td\u003e\u003ctd\u003e輕量、支援 SSE/WS、同語系\u003c/td\u003e\u003ctd\u003eExpress / NestJS\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e儲存\u003c/td\u003e\u003ctd\u003eSQLite（本地單檔）\u003c/td\u003e\u003ctd\u003e零部署、單人 Vault 足夠，後可換\u003c/td\u003e\u003ctd\u003ePostgres / Supabase\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e即時串流\u003c/td\u003e\u003ctd\u003eSSE\u003c/td\u003e\u003ctd\u003e單向逐字推送最簡、自動重連\u003c/td\u003e\u003ctd\u003eWebSocket\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e模型接入\u003c/td\u003e\u003ctd\u003eProvider REST/SSE + Ollama\u003c/td\u003e\u003ctd\u003e三模式統一成 ModelAdapter 介面\u003c/td\u003e\u003ctd\u003e各官方 SDK\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e檔案儲存\u003c/td\u003e\u003ctd\u003e本地磁碟目錄\u003c/td\u003e\u003ctd\u003e原型簡單；介面隔離後可換 S3\u003c/td\u003e\u003ctd\u003eS3 / Cloudflare R2\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003eRecharts\u003c/td\u003e\u003ctd\u003eReact 聲明式、文件佳\u003c/td\u003e\u003ctd\u003eECharts / Chart.js\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e認證\u003c/td\u003e\u003ctd\u003e簡化 Session（mock）\u003c/td\u003e\u003ctd\u003e原型先跑通授權流，後接真 OAuth\u003c/td\u003e\u003ctd\u003eAuth.js / Supabase Auth\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e架構重點\u003c/span\u003e\u003cdiv\u003e前後端分離；ModelAdapter 介面隔離三種模型來源；Agent 引擎以 queue 排程、run 落庫、產出寫回 Item；資料層以 Item 抽象統一所有型別利於插件擴充。\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s6\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#DCFCE7;color:#14532D\"\u003e🛡️\u003c/span\u003e 六、非功能需求與里程碑\u003c/h2\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e效能\u003c/h4\u003e\u003cul\u003e\u003cli\u003e首屏 LCP \u0026lt; 2.5s\u003c/li\u003e\u003cli\u003e串流首字 \u0026lt; 1s\u003c/li\u003e\u003cli\u003e搜尋 p95 \u0026lt; 300ms\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e安全\u003c/h4\u003e\u003cul\u003e\u003cli\u003eAPI Key 加密儲存不回顯\u003c/li\u003e\u003cli\u003e輸出 sanitize 防 XSS、SQL 參數化\u003c/li\u003e\u003cli\u003e本地／Ollama 連線僅限本機\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e可用性\u003c/h4\u003e\u003cul\u003e\u003cli\u003eRWD 手機／桌機\u003c/li\u003e\u003cli\u003e表單 label、鍵盤可操作\u003c/li\u003e\u003cli\u003e串流中斷自動重連\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e維運擴充\u003c/h4\u003e\u003cul\u003e\u003cli\u003eAgentRun 執行日誌留存\u003c/li\u003e\u003cli\u003e插件以 Item 抽象擴充新型別\u003c/li\u003e\u003cli\u003e資料層可遷移（SQLite→PG）\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003ch3\u003e驗收里程碑\u003c/h3\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003eM1 原型：對話串流＋筆記 CRUD＋儀表板\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM2 核心：多頁＋卡片／檔案／待辦／圖表＋搜尋\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM3 自動化：Agent＋排程＋接力＋落庫\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM4 收尾：插件＋主題＋設定＋非功能\u003c/span\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"footer\"\u003e規格 v0.1 ｜ 2026-08-20 ｜ 需求分析師 ｜ 已寫回 CODING_PROJECT、狀態 analyzing，交棒全端工程師\u003c/div\u003e\n\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\n  \n\n  \u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e核心模組\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e4\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e對話 / 知識庫 / 員工 / Vault 系統\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e模型模式\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e3\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e登入授權 / API Key / Ollama\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e頁面路由\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e9\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e儀表板 → 設定\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e資料型別\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e10\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eItem 基底統一抽象\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\n\n  \u003cnav class=\"toc\"\u003e\n    \u003ca href=\"#s1\"\u003e\u003cb\u003e1\u003c/b\u003e 專案概述\u003c/a\u003e\n    \u003ca href=\"#s2\"\u003e\u003cb\u003e2\u003c/b\u003e 功能清單\u003c/a\u003e\n    \u003ca href=\"#s3\"\u003e\u003cb\u003e3\u003c/b\u003e 頁面路由\u003c/a\u003e\n    \u003ca href=\"#s4\"\u003e\u003cb\u003e4\u003c/b\u003e 資料模型\u003c/a\u003e\n    \u003ca href=\"#s5\"\u003e\u003cb\u003e5\u003c/b\u003e 技術選型\u003c/a\u003e\n    \u003ca href=\"#s6\"\u003e\u003cb\u003e6\u003c/b\u003e 非功能 + 里程碑\u003c/a\u003e\n  \u003c/nav\u003e\n\n  \u003cdiv id=\"s1\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#E0F2FE;color:#0369A1\"\u003e🎯\u003c/span\u003e 一、專案概述\u003c/h2\u003e\n    \u003cp\u003e\u003cb\u003e情境\u003c/b\u003e：打造一套個人化 AI 助理資料庫（Vault）網頁程式，把 AI 對話、知識庫（筆記／卡片／檔案／待辦／圖表）與自動化 AI 員工整合進同一入口，並具備資料夾、搜尋、插件、主題、儀表板等個人資料庫系統概念。\u003c/p\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e目標用戶\u003c/h4\u003e\u003cul\u003e\u003cli\u003e個人知識工作者\u003c/li\u003e\u003cli\u003e想同時收納「跟 AI 的對話」「整理好的知識」「交 AI 自動跑的例行任務」\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e成功指標\u003c/h4\u003e\u003cul\u003e\u003cli\u003e發問＋存成筆記全流程 ≤ 5 步\u003c/li\u003e\u003cli\u003e可建立 1 個排程自動執行的 AI 員工並看到產出\u003c/li\u003e\u003cli\u003e所有資料型別可建立、搜尋、搬進資料夾\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cp\u003e\u003cb\u003e核心價值\u003c/b\u003e：單一入口統一對話與資料；AI 員工把「搜集→分析→彙整→發布」例行流程自動化；資料以 Vault 資料夾體系組織、可搜尋。\u003c/p\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\" style=\"border-left:3px solid var(--accent)\"\u003e\u003ch4\u003e本期做（In Scope）\u003c/h4\u003e\u003cul\u003e\u003cli\u003e單頁 SPA 原型 → 多頁路由\u003c/li\u003e\u003cli\u003e四大核心 + 模型三模式可切換\u003c/li\u003e\u003cli\u003e資料持久化本機 SQLite\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\" style=\"border-left:3px solid #CBD5E1\"\u003e\u003ch4\u003e本期不做（Out of Scope）\u003c/h4\u003e\u003cul\u003e\u003cli\u003e多使用者／多租戶\u003c/li\u003e\u003cli\u003e真實完整 OAuth 授權（本期 mock 代替）\u003c/li\u003e\u003cli\u003e跨裝置即時同步、正式插件 SDK 生態\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s2\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#DCFCE7;color:#166534\"\u003e✅\u003c/span\u003e 二、功能清單（可驗收）\u003c/h2\u003e\n    \u003cdiv class=\"kicker\"\u003eFUNCTION · P0 必備 / P1 加分 / P2 未來\u003c/div\u003e\n    \u003ch3\u003e模組 A｜AI 對話機器人\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eA1\u003c/td\u003e\u003ctd\u003e連續多輪對話\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e同 thread 連問 5 輪，模型能引用先前輪次\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA2\u003c/td\u003e\u003ctd\u003e串流回覆\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e長回答逐字即時顯示，非等整段\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA3\u003c/td\u003e\u003ctd\u003e對話歷史管理\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003ethread 清單、改名、刪除、續接；重開頁仍在\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA4\u003c/td\u003e\u003ctd\u003e模型來源切換\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e三模式切換後對話用新來源並標示\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eA5\u003c/td\u003e\u003ctd\u003e一鍵存為筆記\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e回覆存成 NOTE，可於筆記區找到\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 B｜知識庫與檔案管理\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eB1\u003c/td\u003e\u003ctd\u003e筆記（富文字）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e建／編／刪，存檔重開內容保留\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB2\u003c/td\u003e\u003ctd\u003e卡片（結構化）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e自訂欄位 schema，建含 3 欄位卡片並檢視\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB3\u003c/td\u003e\u003ctd\u003e檔案庫\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e上傳、分資料夾、打標籤、可搜到\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB4\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e建／勾完成／排程提醒，可篩未完成\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB5\u003c/td\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e時間序列輸入顯示長條／折線\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB6\u003c/td\u003e\u003ctd\u003e資料夾＋全域搜尋\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e關鍵字命中筆記、卡片、待辦\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eB7\u003c/td\u003e\u003ctd\u003e多資料夾掛載\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e一筆記同時在兩個資料夾可見\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 C｜AI 員工自動化\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eC1\u003c/td\u003e\u003ctd\u003e建立多 Agent 角色\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e可建立 2 個不同 Agent（名字＋系統提示）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC2\u003c/td\u003e\u003ctd\u003e排程／觸發執行\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e手動或 DAILY/WEEKLY 排程，能產生產出\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC3\u003c/td\u003e\u003ctd\u003e多 Agent 接力工作流\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e跑 3 步接力，末棒產出引用首棒資料\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC4\u003c/td\u003e\u003ctd\u003e執行紀錄\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e執行後可看 run 的輸入／輸出／狀態／時間\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eC5\u003c/td\u003e\u003ctd\u003e成果自動落庫\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003eAgent 產出直接寫成 NOTE／CARD\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 D｜Vault 個人資料庫系統\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eD1\u003c/td\u003e\u003ctd\u003e儀表板\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e首頁顯示筆記／卡片／待辦／Agent 計數\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD2\u003c/td\u003e\u003ctd\u003e插件擴充骨架\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e側欄出現「範例插件」區塊\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD3\u003c/td\u003e\u003ctd\u003e主題切換\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e切深色後整體配色變深且可讀\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eD4\u003c/td\u003e\u003ctd\u003e設定頁\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e模型來源設定存檔後生效\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e模組 E｜模型接入（三模式）\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003e功能\u003c/th\u003e\u003cth\u003e級\u003c/th\u003e\u003cth\u003e驗收標準\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003eE1\u003c/td\u003e\u003ctd\u003e登入授權模式\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e簡化登入後可用雲端模型發問\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE2\u003c/td\u003e\u003ctd\u003eAPI Key 直連\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e支援 OpenAI／Claude／DeepSeek 其一，key 加密儲存不回顯\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE3\u003c/td\u003e\u003ctd\u003e本地模型（Ollama）\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p0\"\u003eP0\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e無網環境連 Ollama 發問\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eE4\u003c/td\u003e\u003ctd\u003e健康檢查＋fallback\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"badge b-p1\"\u003eP1\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e主來源失敗自動試次要並提示\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e給工程師\u003c/span\u003e\u003cdiv\u003eP0 為 MVP 必交付；P1 盡量帶上；P2 只做結構預留不實作。每條皆可依驗收標準判定完成。\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s3\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#FCE7F3;color:#9D174D\"\u003e🗺️\u003c/span\u003e 三、頁面結構／路由規劃\u003c/h2\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e路由\u003c/th\u003e\u003cth\u003e頁面\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e儀表板 Dashboard\u003c/td\u003e\u003ctd\u003e統計卡、最近活動、快速入口\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/chat\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eAI 對話\u003c/td\u003e\u003ctd\u003e左側 thread 清單＋右側對話串流\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/notes\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e筆記\u003c/td\u003e\u003ctd\u003e資料夾樹＋列表＋富文字編輯器\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/cards\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e卡片\u003c/td\u003e\u003ctd\u003eschema 列表＋卡片網格／表格\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/files\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e檔案庫\u003c/td\u003e\u003ctd\u003e資料夾＋上傳＋標籤篩選\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/todos\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003ctd\u003e清單＋完成篩選＋排程\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/charts\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003e資料輸入＋圖表繪製\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/agents\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eAI 員工\u003c/td\u003e\u003ctd\u003eAgent 列表＋建立＋執行紀錄＋工作流編輯\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003ccode\u003e/settings\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e設定\u003c/td\u003e\u003ctd\u003e模型來源切換＋主題＋個人資料\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003ch3\u003e元件階層\u003c/h3\u003e\n    \u003cp style=\"font-size:12.5px\"\u003eAppShell（Sidebar／Header／Toast）→ 各模組 Layout → 共用元件（Button／Input／Modal／Table／EmptyState／Chart／Editor／Tree）\u003c/p\u003e\n    \u003ch3\u003e關鍵流程\u003c/h3\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e發問\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e串流回覆\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e存為筆記\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e筆記區看到\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e建 Agent\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e設排程\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e執行\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e產出落庫\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e知識庫看到＋紀錄\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003e設定選模式\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e存\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003e以新來源發問\u003c/span\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s4\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#E0E7FF;color:#3730A3\"\u003e🗄️\u003c/span\u003e 四、資料模型與欄位定義\u003c/h2\u003e\n    \u003cdiv class=\"kicker\"\u003eDATA MODEL · Item 基底統一抽象\u003c/div\u003e\n    \u003cp\u003e通用 \u003cb\u003eItem\u003c/b\u003e 基底：\u003ccode\u003eid\u003c/code\u003e(PK)、\u003ccode\u003etype\u003c/code\u003e(enum)、\u003ccode\u003ename\u003c/code\u003e、\u003ccode\u003econtent\u003c/code\u003e、\u003ccode\u003eparents\u003c/code\u003e(folderId[])、\u003ccode\u003etags\u003c/code\u003e、\u003ccode\u003ecreatedAt/updatedAt\u003c/code\u003e、\u003ccode\u003edata\u003c/code\u003e(型別專屬 JSON)。資料夾為 \u003ccode\u003efolder\u003c/code\u003e 型 Item，形成樹。\u003c/p\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e關鍵欄位\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003ethread\u003c/b\u003e\u003c/td\u003e\u003ctd\u003emodelSource、title\u003c/td\u003e\u003ctd\u003eAI 對話會話\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003emessage\u003c/b\u003e\u003c/td\u003e\u003ctd\u003ethreadId、role(user/assistant)、content\u003c/td\u003e\u003ctd\u003e單則訊息，附順序\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003enote\u003c/b\u003e\u003c/td\u003e\u003ctd\u003econtent(HTML)、tags\u003c/td\u003e\u003ctd\u003e筆記\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003ecard\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eschemaDef、fields\u003c/td\u003e\u003ctd\u003e結構化卡片\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003efile\u003c/b\u003e\u003c/td\u003e\u003ctd\u003estorageKey、mime、size、originalName\u003c/td\u003e\u003ctd\u003emetadata 與 bytes 分離\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003etodo\u003c/b\u003e\u003c/td\u003e\u003ctd\u003ecompleted、dueAt、periodic\u003c/td\u003e\u003ctd\u003e待辦\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003echart\u003c/b\u003e\u003c/td\u003e\u003ctd\u003edataPoints([{t,value}])、chartType\u003c/td\u003e\u003ctd\u003e圖表資料\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003eagent\u003c/b\u003e\u003c/td\u003e\u003ctd\u003esystemPrompt、schedule、trigger、prevAgentId\u003c/td\u003e\u003ctd\u003eAI 員工（接力鏈）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cb\u003eagentRun\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eagentId、input、output、status、startedAt/finishedAt\u003c/td\u003e\u003ctd\u003e單次執行\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cp style=\"font-size:12px;color:var(--ink-2)\"\u003e關聯：message→thread；agentRun→agent；agent.prevAgentId→agent（接力）；全部 Item parents→folder。索引：message(threadId,order)、agentRun(agentId,startedAt)、todo(completed)。\u003c/p\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s5\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#FFEDD5;color:#9A3412\"\u003e⚙️\u003c/span\u003e 五、技術選型與理由\u003c/h2\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e層\u003c/th\u003e\u003cth\u003e選型\u003c/th\u003e\u003cth\u003e理由\u003c/th\u003e\u003cth\u003e替代方案\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e前端框架\u003c/td\u003e\u003ctd\u003eReact + TypeScript\u003c/td\u003e\u003ctd\u003e生態成熟、型別安全、與 CubeLV 插件體系一致\u003c/td\u003e\u003ctd\u003eVue 3\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e樣式\u003c/td\u003e\u003ctd\u003eTailwind CSS\u003c/td\u003e\u003ctd\u003e快速響應式切版、token 整合佳\u003c/td\u003e\u003ctd\u003eCSS Modules / UnoCSS\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e富文字\u003c/td\u003e\u003ctd\u003eTiptap\u003c/td\u003e\u003ctd\u003e可擴充、與 React 整合好\u003c/td\u003e\u003ctd\u003eQuill / Lexical\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e後端\u003c/td\u003e\u003ctd\u003eNode.js + Fastify\u003c/td\u003e\u003ctd\u003e輕量、支援 SSE/WS、同語系\u003c/td\u003e\u003ctd\u003eExpress / NestJS\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e儲存\u003c/td\u003e\u003ctd\u003eSQLite（本地單檔）\u003c/td\u003e\u003ctd\u003e零部署、單人 Vault 足夠，後可換\u003c/td\u003e\u003ctd\u003ePostgres / Supabase\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e即時串流\u003c/td\u003e\u003ctd\u003eSSE\u003c/td\u003e\u003ctd\u003e單向逐字推送最簡、自動重連\u003c/td\u003e\u003ctd\u003eWebSocket\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e模型接入\u003c/td\u003e\u003ctd\u003eProvider REST/SSE + Ollama\u003c/td\u003e\u003ctd\u003e三模式統一成 ModelAdapter 介面\u003c/td\u003e\u003ctd\u003e各官方 SDK\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e檔案儲存\u003c/td\u003e\u003ctd\u003e本地磁碟目錄\u003c/td\u003e\u003ctd\u003e原型簡單；介面隔離後可換 S3\u003c/td\u003e\u003ctd\u003eS3 / Cloudflare R2\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e圖表\u003c/td\u003e\u003ctd\u003eRecharts\u003c/td\u003e\u003ctd\u003eReact 聲明式、文件佳\u003c/td\u003e\u003ctd\u003eECharts / Chart.js\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e認證\u003c/td\u003e\u003ctd\u003e簡化 Session（mock）\u003c/td\u003e\u003ctd\u003e原型先跑通授權流，後接真 OAuth\u003c/td\u003e\u003ctd\u003eAuth.js / Supabase Auth\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n    \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e架構重點\u003c/span\u003e\u003cdiv\u003e前後端分離；ModelAdapter 介面隔離三種模型來源；Agent 引擎以 queue 排程、run 落庫、產出寫回 Item；資料層以 Item 抽象統一所有型別利於插件擴充。\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv id=\"s6\" class=\"card\"\u003e\n    \u003ch2\u003e\u003cspan class=\"ic\" style=\"background:#DCFCE7;color:#14532D\"\u003e🛡️\u003c/span\u003e 六、非功能需求與里程碑\u003c/h2\u003e\n    \u003cdiv class=\"grid2\"\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e效能\u003c/h4\u003e\u003cul\u003e\u003cli\u003e首屏 LCP \u0026lt; 2.5s\u003c/li\u003e\u003cli\u003e串流首字 \u0026lt; 1s\u003c/li\u003e\u003cli\u003e搜尋 p95 \u0026lt; 300ms\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e安全\u003c/h4\u003e\u003cul\u003e\u003cli\u003eAPI Key 加密儲存不回顯\u003c/li\u003e\u003cli\u003e輸出 sanitize 防 XSS、SQL 參數化\u003c/li\u003e\u003cli\u003e本地／Ollama 連線僅限本機\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e可用性\u003c/h4\u003e\u003cul\u003e\u003cli\u003eRWD 手機／桌機\u003c/li\u003e\u003cli\u003e表單 label、鍵盤可操作\u003c/li\u003e\u003cli\u003e串流中斷自動重連\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n      \u003cdiv class=\"mini\"\u003e\u003ch4\u003e維運擴充\u003c/h4\u003e\u003cul\u003e\u003cli\u003eAgentRun 執行日誌留存\u003c/li\u003e\u003cli\u003e插件以 Item 抽象擴充新型別\u003c/li\u003e\u003cli\u003e資料層可遷移（SQLite→PG）\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003ch3\u003e驗收里程碑\u003c/h3\u003e\n    \u003cdiv class=\"flow\"\u003e\u003cspan\u003eM1 原型：對話串流＋筆記 CRUD＋儀表板\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM2 核心：多頁＋卡片／檔案／待辦／圖表＋搜尋\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM3 自動化：Agent＋排程＋接力＋落庫\u003c/span\u003e\u003ci\u003e→\u003c/i\u003e\u003cspan\u003eM4 收尾：插件＋主題＋設定＋非功能\u003c/span\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"footer\"\u003e規格 v0.1 ｜ 2026-08-20 ｜ 需求分析師 ｜ 已寫回 CODING_PROJECT、狀態 analyzing，交棒全端工程師\u003c/div\u003e\n\u003c/div\u003e","createdAt":1787202132082,"deletedAt":null,"displayMode":"artifact","id":"353352c29640bdfc15a6a85d","isNew":false,"isPublic":true,"itemType":"NOTE","name":"類 CubeLV Vault — AI 助理網頁程式 規格書｜2026-08-20","parents":{"1318db0020d1224924049bd8":1787202132082},"preParentID":null,"updatedAt":1787419984392,"updatedBy":{"userId":"6a3d5cc101c322d3356f1c","userName":"Harry"},"version":14}]}