// 搜尋路由入口 — 僅驗證參數,呼叫 actions // // T3.6d:移除 graph 的 keyword 搜尋【公開端點】——純關鍵字搜尋重複於 KBDB MCP 的 kbdb_search, // 歸 KBDB MCP,不由 graph 代理。graph 只保留圖專屬的 `suggest`(跨知識建議)。 // 注意:keywordSearch helper 仍保留,作為 suggest 的內部建構塊(非對外端點)。 // 語意搜尋 / embedding 屬基本盤 optional embed 模組,不在插件 → 已移除 /search/embed。 import { Hono } from 'hono'; import { z } from 'zod'; import type { Bindings, Variables } from '../types'; import { suggestKnowledge } from '../actions/search-suggest'; import { makeKbdbClient } from '../lib/kbdb-client'; const searchRoutes = new Hono<{ Bindings: Bindings; Variables: Variables }>(); const SuggestSchema = z.object({ query: z.string().min(1), topK: z.number().min(1).max(20).optional(), owner_id: z.string().optional(), }); // 統一搜尋入口:POST /search — 僅 suggest(keyword 歸 KBDB MCP,T3.6d) searchRoutes.post('/', async (c) => { const parsed = SuggestSchema.safeParse(await c.req.json()); if (!parsed.success) return c.json({ error: parsed.error.flatten() }, 400); const { query, topK, owner_id } = parsed.data; // Namespace 讀取過濾:partner token 只能搜到自己 namespace 的資料 const namespace = c.get('namespace'); const effectiveOwner = namespace ?? owner_id; const result = await suggestKnowledge(makeKbdbClient(c.env), query, topK, effectiveOwner); return c.json(result); }); export { searchRoutes };