defineToolPlugin
仅添加智能体工具的插件的入口辅助函数。属于 插件入口点 参考的一部分。
defineToolPlugin¶
导入: openclaw/plugin-sdk/tool-plugin
适用于仅添加智能体工具的插件。保持源码精简,从 TypeBox schema 推断配置和工具参数类型,将普通返回值包装为 OpenClaw 工具结果格式,并暴露静态元数据,供 openclaw plugins build 写入插件清单(contracts.tools、configSchema)。
import { Type } from "typebox";
import { defineToolPlugin } from "openclaw/plugin-sdk/tool-plugin";
export default defineToolPlugin({
id: "stock-quotes",
name: "Stock Quotes",
description: "Fetch stock quotes.",
configSchema: Type.Object({
apiKey: Type.Optional(Type.String({ description: "API key." })),
}),
tools: (tool) => [
tool({
name: "quote",
label: "Quote",
description: "Fetch a quote.",
parameters: Type.Object({
symbol: Type.String({ description: "Ticker symbol." }),
}),
outputSchema: Type.Object(
{
symbol: Type.String(),
hasKey: Type.Boolean(),
},
{ additionalProperties: false },
),
execute: async ({ symbol }, config) => ({ symbol, hasKey: Boolean(config.apiKey) }),
}),
],
});
configSchema是可选的;省略它时使用严格的空对象 schema(生成的清单仍会包含configSchema)。execute返回普通字符串或可 JSON 序列化的值;辅助函数会将其包装为文本工具结果,并将details设置为原始(未字符串化)的返回值。outputSchema可选地描述该原始details值,用于 Code Mode 和 Tool Search。Catalog 调用会在执行前拒绝无效 schema,并在返回前验证最终值。- 对于自定义工具结果,
openclaw/plugin-sdk/tool-results导出textResult和jsonResult。 - 工具名称是静态的,因此
openclaw plugins build会从已声明的工具中推导contracts.tools,无需手动重复名称。 - 运行时加载保持严格:已安装的插件仍需要
openclaw.plugin.json以及package.json中的openclaw.extensions。OpenClaw 绝不会执行插件代码来推断缺失的清单数据。
输入依赖的输出 schema¶
现有的 outputSchema 字段通过带版本的 x-openclaw-input-discriminator JSON Schema 注释支持特定于操作的 Code Mode 结果。使用标准 TypeBox API 从相同的本地变体构造联合类型和映射:
const variants = Object.entries({
list: Type.Object({ items: Type.Array(Type.String()) }),
status: Type.Object({ ready: Type.Boolean() }),
});
const outputSchema = Type.Union(
variants.map(([, schema]) => schema),
{
"x-openclaw-input-discriminator": {
version: 1,
inputProperty: "action",
mapping: Object.fromEntries(variants.map(([value], index) => [value, index])),
},
},
);
将该结果用作 defineToolPlugin 或 api.registerTool 中的 outputSchema。在每个变体中包含成功以及不抛出异常的失败结果。静态元数据会保留该注释。Code Mode 会推断所选的返回类型;Tool Search 会验证实际结果和最初声明的操作结果。缺失或宽泛的选择器会保留一个可靠的联合类型。包含引用的 schema 以及超出现有边界的声明会使用保守的伞式契约。有关版本、钩子和验证行为,请参阅 输入依赖的输出。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw