import { CAPABILITY_CATALOG, FEATURES } from "@umt/contracts"; import { describe, expect, it } from "vitest"; import { buildLayeredPrompt, renderFeatures } from "../src/index.ts"; // 功能清单(ADR-006):外围功能的 manifest 进系统提示「能力地图」一节,让智能体知道有哪些功能、入口在哪;没有开关。 const section = (p: string, title: string) => { const start = p.indexOf(`## ${title}`); const rest = p.slice(start); const next = rest.indexOf("\n## ", 3); return next < 0 ? rest : rest.slice(0, next); }; describe("功能清单进系统提示", () => { it("能力地图里列出每个外围功能的名称、说明与入口", () => { const p = buildLayeredPrompt({ kind: "chat", role: "x", goal: "y", capabilities: ["download.list"] }); const map = section(p, "能力地图"); expect(map).toContain("外围功能(都已启用,没有开关"); for (const f of FEATURES) expect(map).toContain(` - ${f.name}:${f.summary}`); expect(map).toContain("作品页「补字幕」"); }); it("功能的能力只列本次可用的;没给的能力 ID 不出现在清单里", () => { const lines = renderFeatures(new Set(["web.search"])); const web = lines.find((l) => l.includes("网页搜索"))!; expect(web).toContain("(能力:web.search)"); const text = lines.join("\n"); for (const id of Object.keys(CAPABILITY_CATALOG)) if (id !== "web.search") expect(text).not.toContain(id); }); it("没有能力的会话(视觉子流程)不带功能清单", () => { const p = buildLayeredPrompt({ kind: "vision", role: "x", goal: "y" }); expect(p).not.toContain("外围功能"); }); });