feat: KBDB-graph 插件獨立 — 全面改寫成走基本盤 API(API-as-Wall)

按 leo 鐵律(2026-06-14)把插件從「直接 SQL 操作基本盤表」改寫成
「只透過基本盤 arcrun/kbdb HTTP API 讀寫」。零建表、零 migration、零 SQL。

- 新增 src/lib/kbdb-client.ts:唯一對外通道,封裝 entries/templates/records API
- 新增 src/lib/templates.ts:triplet/entity template 定義(替代建表)
- 改寫 21 個違規 action(triplet/graph/entity/search)→ 走 client,圖在插件層記憶體組裝
- 移除所有 migrations、D1/Vectorize/AI 綁定;embedding/語意搜尋歸基本盤 optional 模組
- index.ts 只掛 triplets/graph/entities/search 路由;基本盤路由歸 arcrun/kbdb
- 測試改走 mock client(純 node);裁剪 CLAUDE.md 只留 graph 插件 + 鐵律
- 修正 SDD design.md「讀現狀推翻鐵律」的錯誤判斷(共用 D1 → API-as-Wall)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-14 20:59:41 +08:00
commit efe8e165cf
62 changed files with 7671 additions and 0 deletions
@@ -0,0 +1,60 @@
# KBDB-graph 抽出 — Tasks
> 唯一進度來源,不靠對話記憶。完成即時更新。
> 狀態:[ ] 未開始 [🔄] 進行中 [x] 完成 [⏸] 卡住/待確認
---
## R-EXT-1 確認邊界
- [x] 1.1 inventory:列出現有 actions/routes/migrations/contracts2026-06-14 完成,見 design.md
- [x] 1.2 初步分類:插件 / 基本盤 / 灰色地帶(2026-06-14,見 design.md 邊界分類表)
- [x] 1.3 灰色地帶 grep 調查:證實插件 action 層零耦合、耦合只在 DB 層;逐檔附證據歸屬(2026-06-14,見 design.md 灰色地帶結論)。⚠️ 0005/0007 歸屬與 HANDOFF 有出入,仍需與 arcrun 對齊(屬 1.4
- [x] 1.4a 讀 arcrun 端真身對齊(2026-06-14):**發現 arcrun/kbdb 還是 v2entries,無 blocks/0005/0007/block-crud),且兩 repo 是不同 D1 庫**。v3 基本盤真身其實在本目錄。見 design.md「全局核對發現」
- [x] 1.4b 前置議題**總管已答覆**leo 2026-06-14):→ `InkStoneCo/docs/3-specs/matrix-rearrange/DECISION-kbdb-v3-baseplane.md`。三問消解:基本盤已在 arcrun/kbdb 且設計正確、掛載走 API(非共用 D1)、插件零 migration。**阻擋解除。**
- [x] 1.4c 不需移交/升級 arcrun——基本盤已正確。插件改寫成走 API 即可(見 R-EXT-4
- [ ] 1.5 裁剪 CLAUDE.md:移除基本盤規範,只留 graph 插件相關
- [ ] 1.6 清掉殘留:`blocks.ts.bak`、誤入 repo 的 `ruvector.db`(根 + src/routes/ 各一份)、`finally.click` 空檔、`.swarm`
## R-EXT-3 定義掛載介面(已定案 2026-06-14
- [x] 3.1 確認基本盤 API 契約(讀 arcrun/kbdb src,見 design.md「基本盤 API 契約」表)
- [x] 3.2 掛載方式定案:**API-as-Wall**HTTP API,非共用 D1、非 VIEW、非附加表)。圖在插件層記憶體組裝
- [x] 3.3 寫進 design.md 定稿(「掛載介面 = 基本盤 API」節)
## R-EXT-4 改寫成走 API(核心,2026-06-14 新增)
> 鐵律:插件零建表、零 migration、零 SQL,只用 API/CLI/MCP。
- [ ] 4.1 寫 `src/lib/kbdb-client.ts`:封裝基本盤 HTTP APIentries/templates/records),指向 `KBDB_BASE_URL` env var。零 `.prepare`
- [ ] 4.2 wrangler.toml:移除 D1/Vectorize 綁定(插件不碰 DB),加 `KBDB_BASE_URL` var(先留空)
- [ ] 4.3 改寫 `triplet-crud`(拆 < 100 行):create/query/get/update/delete/stats → API
- [ ] 4.4 改寫 `triplet-extract`/`triplet-entities`/`triplet-stats`/`triplet-update` → API
- [ ] 4.5 改寫 `graph-{nodes,path,traverse}`:取 triplet records → 插件層組圖
- [ ] 4.6 改寫 `entity-{crud,normalize,graph-embed}`template='entity' + records API;無 vectorize 時降級 exact
- [ ] 4.7 改寫 `search-query`/`search-*``GET /entries/search`(keyword);語意搜尋標記待 embed 模組
- [ ] 4.8 刪違規 migrations0001/0002/0005/0007 等含 CREATE TABLE+ 清基本盤 action/routeblock-*/entry-crud/record-crud/tag/profile/admin/...
- [ ] 4.9 改測試走 mock client;標記 base 缺口(PUT/DELETE record、vectorize)為 `[→arcrun]`
## R-EXT-2 獨立成 repo(最後做,依賴 1.4/1.5 完成)
- [x] 2.1 GitHub 帳號 + repo 名:**leo 拍板 = 新 repo `uncle6me-web/kbdb-graph-plugin`**2026-06-14
- [ ] 2.2 `git init` + `.gitignore`(排除 ruvector.db、.env、node_modules、.wrangler、*.bak
- [ ] 2.3 設 remote、首次 commit、推 GitHub(本 CC 自己推,不經總管)
- [ ] 2.4 部署驗證:wrangler 直推 CF,確認不開 Actions
---
## 阻擋項彙整(更新 2026-06-14
1. ✅ repo 已定:`uncle6me-web/kbdb-graph-plugin`(解除 2.1
2. ✅ 灰色地帶已 grep 調查完,附證據建議(解除 1.3)
3.**前置議題(讀 arcrun 後升級為主阻擋)**arcrun/kbdb 還是 v2、與插件不同 D1 庫。三問待 leo/arcrun 定案:
- (1) v3 基本盤(blocks/0005/0007/block-crud)由誰、怎麼進 arcrun?(arcrun 升 v3 vs 本目錄整理好再交)
- (2) 掛載形態:共用同一 D1(需合庫)還是插件透過基本盤 **API** 取 block(不共用 D1)?
- (3) `0005_universal_table` 歸基本盤(它定義 entry_values)——與 HANDOFF 列為插件矛盾,需 arcrun 確認。
## 注意
- arcrun 端對應交棒:`arcrun docs/HANDOFF-matrix-rearrange.md §2`,移交基本盤前先與其對齊。
- 在 2.2 git init 前,本目錄無版控 → 搬檔用 `mv` 不是 `git mv`