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:
@@ -0,0 +1,33 @@
|
||||
// Entity 正規化 — 純 exact match 版(零 AI / 零 Vectorize)。
|
||||
//
|
||||
// 鐵律:embedding / 語意相似度合併【不是插件職責】,屬基本盤 optional embed 模組。
|
||||
// 插件只做 exact match(小寫去空白比對 canonical / aliases):
|
||||
// 命中 → 回 canonical;未命中 → 建新 entity 後回 rawName。
|
||||
// 原本的 cosine 門檻(0.92 merge / 0.75 pending)與 pending 流程,
|
||||
// 待基本盤 embed 模組上線後在 base 層處理;插件不綁 AI/Vectorize。
|
||||
|
||||
import { findEntityByName, createEntity } from './entity-crud';
|
||||
import type { KbdbClient } from '../lib/kbdb-client';
|
||||
|
||||
/**
|
||||
* 正規化 rawName(純 exact):
|
||||
* 1. exact match 命中 → 回傳 canonical
|
||||
* 2. 未命中 → 建新 entity → 回傳 rawName
|
||||
* 任何錯誤靜默降級,回傳 rawName。
|
||||
*/
|
||||
export async function normalizeEntity(
|
||||
client: KbdbClient,
|
||||
rawName: string,
|
||||
owner?: string,
|
||||
): Promise<string> {
|
||||
try {
|
||||
const exact = await findEntityByName(client, rawName, owner);
|
||||
if (exact) return exact.canonical;
|
||||
|
||||
await createEntity(client, rawName, owner);
|
||||
return rawName;
|
||||
} catch (err) {
|
||||
console.error('[normalizeEntity] error, fallback to rawName:', err);
|
||||
return rawName;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user