feat(console): 駕駛艙 dashboard——/console/dashboard(-data) 聚合 KBDB dash_* entries (T-cockpit ②, Arcrun#3 console 系)

- GET /console/dashboard-data:無需登入唯讀聚合端點(dash_beat/dash_task/dash_wait/inbox,
  租戶=CONSOLE_TENANT),燈號判定寫死在端點(red=blocked/心跳>240分僅台北09-22判定;
  yellow=非標準落後標記;green=其餘)。created_at 實測 epoch 秒(number),解析防禦性兼容字串
- GET /console/dashboard:單檔 HTML 兩格儀表板(狀態燈+心跳+今日完成度橫條 / 今日路線+
  等你的事+收件匣數),手機優先一屏、60s 自動刷新、無互動
- kbdb-proxy.ts:kbdbBase() 改 export 供 dashboard 共用(同一 KBDB 連線慣例,不重複實作)
- SDD 補件:docs/3-specs/arcrun/search-console/(issue #3 授權;位於既有 arcrun/ 白名單下)

部署:手工注入法(mistakes #23,禁 acr update)deploy leo21c,version 4252c321-e15b-494c-ab97-29f82eefa565

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
uncle6me-web
2026-07-04 12:49:59 +08:00
parent 05333b8fe6
commit 5174ed6821
5 changed files with 350 additions and 1 deletions
@@ -0,0 +1,50 @@
# search-console — arcrun 自帶搜尋/控制台頁(Gitea Arcrun#3 授權新建)
> 授權:Gitea `Leo/Arcrun#3`leo 2026-07-02 拍板「本 issue 即 leo 授權」)。
> 位於既有白名單 `docs/3-specs/arcrun/` 之下(pre-write-guard 4.3 已涵蓋,無需改 hook)。
> 本 SDD 是追認式補件:v0 與 hardening 已由 cloud-worker 實作(無 docs 環境無法落地 SDD),
> 詳細實作記錄與客觀證據在 issue #3 comment 串(真相源),此處只固定設計要點。
## 1. 定位
裝了 arcrun(含 KBDB)就有的一頁式控制台:知識庫 / workflows / components & recipes 搜尋
config 唯讀狀態(vectorize)+ 駕駛艙 dashboard。**wow factor = 安裝完第一眼體驗**。
## 2. 設計鐵律(rule 07 薄殼)
- 落點:`cypher-executor/src/routes/console*.ts`,單檔 HTML + 原生 JS,無框架、無 build step。
- 頁面零業務邏輯,只 fetch 既有 API;缺端點 → 補 API 或發 issue,不准在 UI 拼裝。
- 聚合類能力(如 dashboard-data 的燈號判定)長在 API 端點(能力一次),頁面純渲染。
- components 打「同帳號」registryWORKER_SUBDOMAIN 現算),禁硬編清單(parts.ts stale 教訓)。
- 讀 KBDB 一律走 `kbdbBase()` HTTP(同 kbdb-proxy 慣例),不新增 binding、不直碰 D1/SQL。
## 3. 認證模型
- console 查詢頁:簡單 email+password 登入(`console-auth.ts`,單一管理員帳密存 SESSIONS_KV
首次設定制、不可覆蓋、reset 需舊密碼)。登入只擋外人看頁面;查詢用固定租戶字串
`CONSOLE_TENANT`(預設 `leo`self-hosted 明碼 namespace,非註冊制 key)。
- dashboard(駕駛艙):**無需登入**——唯讀聚合、不吐機敏值(燈號/任務標題/計數)。
## 4. 駕駛艙 dashboardT-cockpit ②,2026-07-04
- `GET /console/dashboard-data`:聚合 KBDB 四種 entry_type(租戶 = CONSOLE_TENANT):
- `dash_beat` `{"actor","event":"start|done","note"}` → 每 actor 最新一筆。
- `dash_task` `{"title","status":"done|doing|todo|blocked","order","scope":"today|week"}`
→ 同 title 後寫蓋前寫(created 最新)。
- `dash_wait` `{"title","status":"open|closed"}` → 同 title 取最新,只回 open。
- `inbox` `{"text","status":"new|done"}` → 未處理計數(status !== done)。
- 燈號:red = 任一 blocked 或最新心跳 >240 分(僅台北 09:0022:00 判定);
yellow = 有 blocked 以外的落後標記(非標準 status 值);green = 其餘。
- `GET /console/dashboard`:手機優先、一屏、兩格(狀態燈+完成度橫條 / 今日路線+等你的事+
收件匣數),每 60 秒自動刷新,無互動功能。
## 5. 部署(強制)
**禁 `acr update`**(部署源綁 GitHub codeloadD20 紅線+會蓋掉 Gitea 改動=假綠,mistakes #23)。
用手工複刻 `injectWranglerConfig` 注入法:CF API 查真實資源 id → 暫寫 wrangler.toml →
`wrangler deploy --dry-run` 核對 binding 與線上一致 → 真部署 → 立即 restore toml。
全程 `CLOUDFLARE_ACCOUNT_ID=51a01bfa…`leo21c)蓋掉 repo `.env` 的官方 id。
## 6. 明確不做(v1 再議)
真寫入 config 開關/漂亮設計/官方 SaaS 多租戶/獨立前端 repodashboard 互動功能。
@@ -0,0 +1,27 @@
# search-console tasks
> 真相源備註:v0 / hardening 完成證據在 Gitea Arcrun#3 comment 串(curl 輸出)。
## Phase 1 — console v02026-07-02cloud-workercommit 981dc25
- [x] 1.1 `GET /console` 單檔 HTML+原生 JS(三查詢區+vectorize 唯讀狀態)
- [x] 1.2 部署 leo21c+端到端 curl 驗證(issue comment 證據)
## Phase 2 — console hardening2026-07-03cloud-worker
- [x] 2.1 發現①:/kbdb/entries 接 q/search filter+誠實 totalcommit 9024f22
- [x] 2.2 發現②:API Key 錯位 → email+password 登入(console-auth.tscommit abf2323
- [ ] 2.3 發現③:開 vectorize——卡 CF token 缺 Vectorize 權限,等 leo 建 index 或給權限
## Phase 3 — 駕駛艙 dashboardT-cockpit ②,2026-07-04,總管派工 subagent
- [x] 3.1 `GET /console/dashboard-data` 聚合端點(dash_beat/dash_task/dash_wait/inbox+燈號判定)
- [x] 3.2 `GET /console/dashboard` 儀表板頁(兩格、手機優先、60s 自動刷新、無需登入)
- [x] 3.3 灌初始資料(dash_task×5 / dash_wait×1 / dash_beat×1,經 /kbdb/entries POST
- [x] 3.4 手工注入部署 leo21ccurl 驗證(禁 acr update
- [x] 3.5 SDD 補件(本目錄,issue #3 授權;Phase 1/2 追認)
## Phase 4 — v1(未排)
- [ ] config 真寫入開關
- [ ] dashboard 寫入端(心跳/任務由 routine 自動打)標準化 skill