// refresh(T3.6 / T3.6b)— 代轉 ingest 重抓+萃某來源。 // // 🚫 紅線:只能【人發起的 MCP 調用】觸發。禁掛排程/webhook 自動 refresh // (否則變回 fan-out,踩 GitHub flag 紅線)。本端點純被動:收到一次調用 → 代轉一次。 // graph 自己不抓檔、不萃取(那是 ingest 純餵食器的職責);graph 只把 refresh 意圖 // 轉給 ingest 的端點,ingest 抓+萃完後再走 POST /triplets/ingest 回灌。 export type RefreshRequest = { uri: string; owner_id?: string }; export type RefreshResult = { forwarded: boolean; ingest_url?: string; note?: string }; /** * 代轉 refresh 給 ingest 服務。ingestUrl 由 env 注入(KBDB_INGEST_URL)。 * 未設 → 誠實回 {forwarded:false}(ingest repo T4 尚未就緒/未部署),不假裝成功。 */ export async function refreshSource( req: RefreshRequest, ingestUrl: string | undefined, ): Promise { if (!ingestUrl) { return { forwarded: false, note: 'KBDB_INGEST_URL 未設:ingest 服務尚未就緒(T4 待部署),refresh 無對象可轉。', }; } const res = await fetch(ingestUrl.replace(/\/$/, '') + '/refresh', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ uri: req.uri, owner_id: req.owner_id }), }); if (!res.ok) { throw new Error(`[ingest] refresh ${req.uri}: ${res.status} ${res.statusText}`); } return { forwarded: true, ingest_url: ingestUrl }; }