导出工具与文档
你只定义一次 action。从这同一份 contract,Ageniti 能产出消费者需要的所有产物:MCP tool 清单、LLM tool-call 定义、给 CI 用的机器可读清单,以及人读的 guide 文档。这些都不需要手工维护 —— 全部从活的 action 定义派生,所以永远不会和实现脱节。
下面的例子假设你有一个 app 或一组 actions:
import { createAgenitiApp } from "@ageniti/core";
const app = createAgenitiApp({ name: "task-app", actions, services });LLM tool-call 定义
一份 action 列表,四种目标格式 —— 从 @ageniti/core/ai-sdk 导入:
import {
createOpenAITools,
createOpenAIResponsesTools,
createAISDKTools,
createFunctionCallingManifest,
} from "@ageniti/core/ai-sdk";
const openai = createOpenAITools(actions); // OpenAI function calling
const responses = createOpenAIResponsesTools(actions); // OpenAI Responses API
const aiSdk = createAISDKTools(actions, { runtime }); // Vercel AI SDK tools
const generic = createFunctionCallingManifest(actions);// 通用 tool-call 清单默认情况下,destructive 和非 public 的 action 会被排除在这些对外 tool 导出之外 —— 可见性与 side-effect 规则见 安全模型。
MCP 清单与 server
import { createMcpManifest, createMcpHandler } from "@ageniti/core/mcp";
const manifest = createMcpManifest(actions); // { tools: [...] }
const handler = createMcpHandler({ actions, runtime });命令行:
ageniti mcp # 查看 MCP tool 清单 / 启动 server机器可读清单
用于检视、自定义封装,或 CI 里的 contract 检查 —— 从 @ageniti/core/manifest 导入:
import {
createActionManifest,
createSurfaceManifest,
describeAction,
} from "@ageniti/core/manifest";
const actionsManifest = createActionManifest(actions);
const surfaceManifest = createSurfaceManifest({ appName: "task-app", actions });或通过 app 和 CLI:
const manifest = app.manifest(); // surface 清单
const actionsOnly = app.actionManifest(); // 仅 action contractageniti manifest # 导出清单(接进工具链 / CI)人读文档
从 @ageniti/core/docs 生成一份统一的 GUIDE.md,描述每个 action 的名字、描述、side-effects、可见性、权限、支持的 surface、何时使用、输入输出示例:
import { createGuideDoc, exportDocs } from "@ageniti/core/docs";
const markdown = createGuideDoc({ appName: "task-app", actions });
await exportDocs({ appName: "task-app", actions, outDir: "dist/ageniti" });或通过 app 和 CLI:
const markdown = app.createGuideDoc();
await app.exportDocs();ageniti docs # 打印或导出统一 guide检测 contract 回归
两个多数 SDK 不会给你的额外能力:
ageniti diff/diffActionManifests(prev, next)—— 对比两份清单,报告破坏性变更、警告和提示性变更。接进 CI,就能让破坏 action contract 的 PR 直接挂掉。ageniti lint/lintActions(actions)—— 在发布前标出有风险的 action 契约。
ageniti diff old.json new.json # 检测破坏性 contract 变更
ageniti lint # 给 action 契约做体检import { diffActionManifests } from "@ageniti/core/manifest";
import { lintActions } from "@ageniti/core/lint";
const diff = diffActionManifests(previous, next);
if (!diff.ok) throw new Error("破坏性的 action contract 变更");为什么这很重要
因为每一份导出都从同一组 action 定义派生,你的 MCP tools、LLM tool call、清单和文档永远和 runtime 的真实行为一致。加一个 action,它就会正确地出现在每个 surface 和每份导出产物里。