/** * kingdee-rule-router.ts — 每轮按产品画像与需求动态注入 1~3 条规则正文 * * 注意:systemPrompt 注入默认不在聊天区展示;同时返回 display:true 的 message * 以便用户确认本轮已加载哪些规则。 */ import * as path from "node:path"; import { fileURLToPath } from "node:url"; import type { ExtensionAPI, BeforeAgentStartEventResult } from "@kingdee-kcode/coding-agent"; import { inferProductLineIntentFromText } from "../src/project/product-line-registry"; import { readProductsFromProjectMd } from "../src/project/product-md"; import { routeRules } from "../src/rules/rule-router"; /** 扩展文件位于 packages/kcode-pi/extensions/ → 包根为上一级 */ function resolveKcodePiRootFromExtension(): string { return path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); } export default function (pi: ExtensionAPI) { pi.on("before_agent_start", async (event, ctx): Promise => { const packageRoot = resolveKcodePiRootFromExtension(); const profileIds = readProductsFromProjectMd(ctx.cwd); const turn = inferProductLineIntentFromText(event.prompt); const productIds = profileIds.length > 0 ? profileIds : turn.productIds; const result = routeRules({ prompt: event.prompt, productIds, packageRoot, }); if (result.skipped || !result.injection) { if (result.skipped && /文档|无编码信号/.test(result.reason)) { const note = `本轮金蝶规则:${result.reason}`; return { systemPrompt: [...event.systemPrompt, `\n## 本轮金蝶规则\n- ${result.reason}\n`], message: { customType: "kingdee-rule-router", content: note, display: true, attribution: "agent", }, }; } return; } const ruleList = result.selected.map(n => `rule://${n}`).join(", "); const summary = `本轮金蝶编码规则已注入(${result.bytes} 字节):${ruleList}`; const meta = `\n\n`; return { systemPrompt: [...event.systemPrompt, result.injection + meta], message: { customType: "kingdee-rule-router", content: summary, display: true, attribution: "agent", }, }; }); }