跳转至

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