/** * Mira Console 完整版(Arcrun#3 console 系,2026-07-04 總管派工) * * 視覺:claude design 定稿「紙感暖黑 2a」(system-dev/docs/6-user/Mira Console 設計規劃/ * Mira Console.dc.html + Mira Style Guide.dc.html)——紙紋底 repeating-linear-gradient、 * 明體標題(Songti TC 級聯)、琥珀 var(--amber) 強調、墨綠呼吸球嵌「安」字、正文 ≥16px、 * 手機優先 390px + ≥1024px 側欄、頁面本體不出水平捲軸。 * * 資訊架構:brief 8 頁(docs/1-vision/mira-console-design-brief.md)= * 1 登入/首次設定 2 駕駛艙 3 總庫搜尋 4 卡片詳頁+關聯 5 工作流 6 憑證管理 * 7 分流台(原收件匣,Arcrun#9 改裝) 8 設定。 * 單檔 HTML + 原生 JS hash routing(#/cockpit …),零外部資源、零 build step。 * * 薄殼(rule 07):零業務邏輯,只 fetch 既有 API 渲染。各頁資料源(誠實原則,無源的顯示 * 誠實空狀態,禁假資料): * - 駕駛艙:GET /console/dashboard-data(免登入聚合端點,console-dashboard.ts) * - 總庫搜尋:GET /kbdb/search(mode=semantic 未開 Vectorize 會誠實降級 + capability_hint; * chips 用 entry_type——KBDB 真能篩的欄位,不編造「電腦筆記/手機筆記」等不存在的分類); * 頭部統計來自 GET /console/kb-scale-data(精耕層 wiki 卡/三元組/已嵌入——leo 2026-07-07 * 裁:45.8 萬 14-E 搬遷遺產 deprecated 不再當招牌數字;搜尋本身仍搜全庫) * - 卡片詳頁:GET /kbdb/entries/:id;關聯視圖走 GET /kbdb/graph/neighbors/:name * (cypher 代轉 kbdb-graph-plugin,kbdb-proxy.ts;查無 triplet → 「尚無關聯資料」) * - 工作流:GET /webhooks/named(list)+ POST /webhooks/named/:name/trigger(手動觸發) * + GET /workflows/:name/executions(最近執行);釘選存 localStorage * - 憑證:GET /credentials/catalog(D1 目錄唯讀,絕不含密文)+ POST /credentials(新增) * + PUT /credentials/:name(整筆替換);刪除後端未接 D1(T9 範圍)→ 標「即將開通」 * - 分流台:GET /console/triage-data(需 session——待辦/訊息原文屬機敏,計數才免登入)。 * 資料源二合一(kb-ingest SDD R7 / Arcrun#9):entry_type=todo(Logseq 萃取)+ * entry_type=inbox(Telegram);三欄 80/15/5(ai/collab/leo)+ per-project chips * +已完成預設隱藏可切換。分欄判定在 lib/console-triage-model.ts(純函式),頁面只渲染。 * 勾掉/還原走 POST /console/triage-check(同 session 保護;leo 2026-07-08 拍板)—— * 雙向銷案語意:console 勾掉=終局(checked_via:console,萃取端絕不復活)、Logseq 改 * DONE 由萃取端 PATCH(checked_via:logseq);console 只忠實顯示非 done 項。 * - 設定:vectorize 狀態探測(讀 /kbdb/search 回應的 mode/capability_hint,無新端點; * 開關本體需部署端 config kbdb_embed + acr update → 誠實文案講清楚、不假裝能遠端開) * + MCP token TTL 誠實佔位(/console/settings-data;可調功能=Arcrun#19) * + /console/setup/reset 換帳密 + 系統資訊(精耕層規模) * * 2026-07-07 fix/console-truth-audit(總管稽核派工 + leo 裁決): * 1. 全站日期/時間顯示統一 Asia/Taipei(lib/taipei-time.ts,與駕駛艙 #36 台北日判定同套; * 原本用瀏覽器本地 getter,換裝置就換日期;憑證頁加顯時分——7/6 22:57 建立不再被誤讀)。 * 2. 總庫搜尋/設定頁頭部統計改精耕層(458,732 是真數字——cypher 與 base 一手同值實證—— * 但 leo 裁 14-E 遺產 deprecated 不再顯示)。 * 3. 駕駛艙「今日完成/今日路線」接 sprint 任務板真資料(dashboard-data 端,同 #36 模式)。 * * 認證模型沿 v1(console-auth.ts):單一管理員 email+password,session token 在 localStorage, * 實際打 /kbdb/* 用後端回的固定租戶字串(CONSOLE_TENANT)。駕駛艙免登入版在 /console/dashboard。 * * v0 的 components/recipes 查詢區(Arcrun#3 原搜尋台)收進「工作流」頁下方折疊區,不砍功能。 * * 2026-07-04 leo 實測三回饋(總管派工二輪): * 1. 深/淺主題:CSS custom properties 兩份色板(:root=淺色紙感宣紙米白+墨字, * :root[data-theme=dark]=原定稿暖黑不動),預設淺色,選擇存 localStorage * (key arcrun_console_theme),head 預載腳本防閃色。切換入口=登入/首次設定頁小鈕、 * 側欄項、設定頁正式開關。金琥珀例外(按鈕漸層/狀態球/toast/gcenter)兩版不變。 * 2. 登入/首次設定置中:.authwrap.view.on 補 display:flex(原被 .view.on 的 block 蓋掉 → 靠左)。 * 3. fetch 韌性:friendlyErr() 把裸 Failed to fetch / Load failed 轉「連線中斷」誠實文案; * 駕駛艙 60 秒定時器常駐,網路恢復自動刷回。 */ import { Hono } from 'hono'; import type { Bindings } from '../types'; import { TAIPEI_CLIENT_JS } from '../lib/taipei-time'; export const consoleRouter = new Hono<{ Bindings: Bindings }>(); function renderConsoleHtml(registryBase: string, brand: string, profile: string): string { // Console profile(config 裁剪,非 auth——#24/#25 多人 Portal 是另一回事): // full(未設即此)=全套,Mira 實例現行為一字不變。 // rag=企業產品樣:只留 總庫搜尋/工作流/設定(card 是搜尋的詳頁,跟著留),落地=搜尋頁。 // 隱藏頁的 view div 仍在 DOM(display:none、路由 guard 導回,永遠點不進)—— // 因 creds/inbox 有 top-level addEventListener 綁定,抽掉 div 會讓整包 JS 啟動即炸, // 純渲染層裁剪以「導不進去」為準,不為了抽 DOM 把 null-guard 灑滿全檔。 const rag = profile === 'rag'; const views = rag ? ['search', 'card', 'workflows', 'settings'] : ['cockpit', 'search', 'card', 'workflows', 'creds', 'inbox', 'settings']; const home = rag ? 'search' : 'cockpit'; return ` ${brand} Console
${brand}
私人系統・僅供擁有者進入
這是一個人的智慧總部。
若你不是擁有者,這裡沒有你要找的東西。
${rag ? '' : '免登入看駕駛艙 ›'}
${brand}
首次設定
系統偵測到尚未設定擁有者帳號。
設定一組 Email 與密碼,之後只有你能進入。
${rag ? '' : ''} ${rag ? '' : ` `}
${brand} 控制台
載入中
今日完成
/
收件匣未處理
來自 Telegram
等你的事
載入中…
今日路線狀態即時同步
  • 載入中…
    每 60 秒自動刷新
    知識卡片
    載入中…
    關聯視圖
    工作流
    載入中…
    零件與 Recipes(框架資源)
    憑證管理
    🛡 保險箱原則:系統只保存目錄與加密後的值,任何頁面都看不到密文內容。只能整筆替換或刪除。
    載入中…
    分流台全部待辦・80/15/5
    載入中…
    設定
    深色模式
    預設淺色(紙感)。切換立即生效,選擇記在這台裝置(localStorage)。
    語意搜尋(vectorize)
    狀態偵測中…
    誠實提示:開關真相=部署端 ~/.arcrun/config.yamlkbdb_embed: trueacr update 重部署(#32 教訓:wrangler 直推改的形態 config 要同步)。Console 只如實顯示狀態,不假裝能遠端開啟。目前狀態:偵測中…
    MCP token 有效期(TTL)
    讀取中…
    誠實佔位:此頁還不能改這個值——可調功能=Arcrun#19(設定頁改→存 KBDB→發 token 時讀)。實作前要調整請在部署端 env MCP_TOKEN_TTL(mcp worker)設定。
    更換帳號密碼
    需輸入舊密碼驗證身分
    ${rag ? '' : `
    憑證管理
    只保存目錄與加密值,不可回看
    `}
    系統資訊
    載入中…
    ${rag ? '' : '
    駕駛艙
    '}
    搜尋
    工作流
    ${rag ? '' : '
    分流台
    '}
    設定
    `; } // GET /console — Mira Console 完整版(Arcrun#3 console 系)。registry base 現算:同帳號 // arcrun-registry worker(WORKER_SUBDOMAIN 沿用既有 KBDB_BASE_URL 那套組法),沒設就退回官方公開 registry。 consoleRouter.get('/console', (c) => { const subdomain = c.env.WORKER_SUBDOMAIN; const registryBase = subdomain ? `https://arcrun-registry.${subdomain}.workers.dev` : 'https://registry.arcrun.dev'; // 品牌字樣(Arcrun#21):引擎預設 Arcrun,實例可用 CONSOLE_BRAND 覆蓋(如 "Arcrun RAG") // 頁面組成(console-profile-trim):CONSOLE_PROFILE 未設=full 全套;"rag"=企業產品樣(搜尋落地) return c.html(renderConsoleHtml(registryBase, c.env.CONSOLE_BRAND || 'Arcrun', c.env.CONSOLE_PROFILE || 'full')); });