chore(i18n): refresh zh-CN translations
This commit is contained in:
parent
167410d851
commit
b0ee20a75e
@ -1,21 +1,21 @@
|
||||
---
|
||||
read_when:
|
||||
- 你正在构建一个 OpenClaw 插件
|
||||
- 你需要发布一个插件配置 schema,或调试插件校验错误
|
||||
- 你需要提供插件配置 schema,或调试插件校验错误
|
||||
summary: 插件清单 + JSON schema 要求(严格配置校验)
|
||||
title: 插件清单
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T20:30:49Z"
|
||||
generated_at: "2026-04-24T21:26:25Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 319836cd179aac8a194f8b5b4fee230566ee8b02ce13068c0d8a221d032b4907
|
||||
source_hash: b487d60a8645cca338b5b5a88f9a1f2b15b03e0905f6f541fe97be605c8297d6
|
||||
source_path: plugins/manifest.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
本页仅适用于**原生 OpenClaw 插件清单**。
|
||||
此页面仅适用于**原生 OpenClaw 插件清单**。
|
||||
|
||||
关于兼容的 bundle 布局,请参见 [插件 bundles](/zh-CN/plugins/bundles)。
|
||||
关于兼容的 bundle 布局,请参见 [Plugin bundles](/zh-CN/plugins/bundles)。
|
||||
|
||||
兼容的 bundle 格式使用不同的清单文件:
|
||||
|
||||
@ -23,14 +23,15 @@ x-i18n:
|
||||
- Claude bundle:`.claude-plugin/plugin.json`,或不带清单的默认 Claude 组件布局
|
||||
- Cursor bundle:`.cursor-plugin/plugin.json`
|
||||
|
||||
OpenClaw 也会自动检测这些 bundle 布局,但不会根据此处介绍的 `openclaw.plugin.json` schema 对它们进行校验。
|
||||
OpenClaw 也会自动检测这些 bundle 布局,但不会根据此处描述的 `openclaw.plugin.json` schema 对它们进行校验。
|
||||
|
||||
对于兼容 bundle,在布局符合 OpenClaw 运行时期望的情况下,OpenClaw 当前会读取 bundle 元数据、声明的 skill 根目录、Claude 命令根目录、Claude bundle `settings.json` 默认值、Claude bundle LSP 默认值,以及受支持的 hook pack。
|
||||
对于兼容 bundle,当前当其布局符合 OpenClaw 运行时预期时,OpenClaw 会读取 bundle 元数据,以及声明的 skill 根目录、Claude 命令根目录、Claude bundle `settings.json` 默认值、Claude bundle LSP 默认值和受支持的 hook 包。
|
||||
|
||||
每个原生 OpenClaw 插件**都必须**在**插件根目录**中包含一个 `openclaw.plugin.json` 文件。OpenClaw 使用此清单在**不执行插件代码**的情况下校验配置。缺失或无效的清单会被视为插件错误,并阻止配置校验。
|
||||
每个原生 OpenClaw 插件**都必须**在**插件根目录**提供一个 `openclaw.plugin.json` 文件。OpenClaw 使用此清单在**不执行插件代码**的情况下校验配置。缺失或无效的清单会被视为插件错误,并阻止配置校验。
|
||||
|
||||
查看完整的插件系统指南:[插件](/zh-CN/tools/plugin)。
|
||||
关于原生能力模型和当前外部兼容性指南,请参见:[能力模型](/zh-CN/plugins/architecture#public-capability-model)。
|
||||
完整的插件系统指南请参见:[Plugins](/zh-CN/tools/plugin)。
|
||||
关于原生能力模型和当前外部兼容性指南,请参见:
|
||||
[Capability model](/zh-CN/plugins/architecture#public-capability-model)。
|
||||
|
||||
## 此文件的作用
|
||||
|
||||
@ -39,14 +40,14 @@ OpenClaw 也会自动检测这些 bundle 布局,但不会根据此处介绍的
|
||||
**用于:**
|
||||
|
||||
- 插件标识、配置校验和配置 UI 提示
|
||||
- 认证、新手引导和设置元数据(别名、自动启用、提供商环境变量、认证选项)
|
||||
- 凭证、新手引导和设置元数据(别名、自动启用、provider 环境变量、凭证选项)
|
||||
- 控制平面界面的激活提示
|
||||
- 简写模型族归属
|
||||
- 简写模型家族归属
|
||||
- 静态能力归属快照(`contracts`)
|
||||
- 供共享 `openclaw qa` 主机检查的 QA 运行器元数据
|
||||
- 合并到目录和校验界面的渠道专用配置元数据
|
||||
- 共享 `openclaw qa` 主机可检查的 QA 运行器元数据
|
||||
- 合并到目录和校验界面的渠道特定配置元数据
|
||||
|
||||
**不要用于:**注册运行时行为、声明代码入口点或 npm 安装元数据。这些应放在你的插件代码和 `package.json` 中。
|
||||
**不要用于:** 注册运行时行为、声明代码入口点或 npm 安装元数据。这些应放在你的插件代码和 `package.json` 中。
|
||||
|
||||
## 最小示例
|
||||
|
||||
@ -95,19 +96,19 @@ OpenClaw 也会自动检测这些 bundle 布局,但不会根据此处介绍的
|
||||
"provider": "openrouter",
|
||||
"method": "api-key",
|
||||
"choiceId": "openrouter-api-key",
|
||||
"choiceLabel": "OpenRouter API key",
|
||||
"choiceLabel": "OpenRouter API 密钥",
|
||||
"groupId": "openrouter",
|
||||
"groupLabel": "OpenRouter",
|
||||
"optionKey": "openrouterApiKey",
|
||||
"cliFlag": "--openrouter-api-key",
|
||||
"cliOption": "--openrouter-api-key <key>",
|
||||
"cliDescription": "OpenRouter API key",
|
||||
"cliDescription": "OpenRouter API 密钥",
|
||||
"onboardingScopes": ["text-inference"]
|
||||
}
|
||||
],
|
||||
"uiHints": {
|
||||
"apiKey": {
|
||||
"label": "API key",
|
||||
"label": "API 密钥",
|
||||
"placeholder": "sk-or-v1-...",
|
||||
"sensitive": true
|
||||
}
|
||||
@ -130,63 +131,63 @@ OpenClaw 也会自动检测这些 bundle 布局,但不会根据此处介绍的
|
||||
| ------------------------------------ | -------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `id` | 是 | `string` | 规范插件 id。这是在 `plugins.entries.<id>` 中使用的 id。 |
|
||||
| `configSchema` | 是 | `object` | 此插件配置的内联 JSON Schema。 |
|
||||
| `enabledByDefault` | 否 | `true` | 将内置插件标记为默认启用。省略此字段,或将其设置为任何非 `true` 的值,则插件默认保持禁用。 |
|
||||
| `legacyPluginIds` | 否 | `string[]` | 会规范化到此规范插件 id 的旧版 id。 |
|
||||
| `autoEnableWhenConfiguredProviders` | 否 | `string[]` | 当认证、配置或模型引用提到这些提供商 id 时,应自动启用此插件。 |
|
||||
| `kind` | 否 | `"memory"` \| `"context-engine"` | 声明由 `plugins.slots.*` 使用的排他性插件类型。 |
|
||||
| `channels` | 否 | `string[]` | 此插件拥有的渠道 id。用于设备发现和配置校验。 |
|
||||
| `providers` | 否 | `string[]` | 此插件拥有的提供商 id。 |
|
||||
| `providerDiscoveryEntry` | 否 | `string` | 轻量级提供商发现模块路径,相对于插件根目录,用于清单作用域内的提供商目录元数据,这些元数据可以在不激活完整插件运行时的情况下加载。 |
|
||||
| `modelSupport` | 否 | `object` | 由清单拥有的简写模型族元数据,用于在运行时之前自动加载插件。 |
|
||||
| `providerEndpoints` | 否 | `object[]` | 由清单拥有的 endpoint host/baseUrl 元数据,用于核心在提供商运行时加载前必须分类的提供商路由。 |
|
||||
| `cliBackends` | 否 | `string[]` | 此插件拥有的 CLI 推理后端 id。用于根据显式配置引用在启动时自动激活。 |
|
||||
| `syntheticAuthRefs` | 否 | `string[]` | 在运行时加载前的冷启动模型发现期间,应探测其插件自有 synthetic auth hook 的提供商或 CLI 后端引用。 |
|
||||
| `nonSecretAuthMarkers` | 否 | `string[]` | 由内置插件拥有的占位 API key 值,表示非机密的本地、OAuth 或环境凭证状态。 |
|
||||
| `commandAliases` | 否 | `object[]` | 此插件拥有的命令名称,在运行时加载前应生成带有插件感知能力的配置和 CLI 诊断信息。 |
|
||||
| `providerAuthEnvVars` | 否 | `Record<string, string[]>` | 已弃用的兼容性环境变量元数据,用于提供商认证/状态查找。新插件优先使用 `setup.providers[].envVars`;在弃用过渡期内,OpenClaw 仍会读取此字段。 |
|
||||
| `providerAuthAliases` | 否 | `Record<string, string>` | 应复用另一个提供商 id 进行认证查找的提供商 id,例如共享基础提供商 API key 和认证配置文件的 coding 提供商。 |
|
||||
| `channelEnvVars` | 否 | `Record<string, string[]>` | OpenClaw 可在不加载插件代码的情况下检查的轻量级渠道环境变量元数据。用于通用启动/配置辅助工具需要感知的、由环境变量驱动的渠道设置或认证界面。 |
|
||||
| `providerAuthChoices` | 否 | `object[]` | 用于新手引导选择器、首选提供商解析和简单 CLI flag 绑定的轻量级认证选项元数据。 |
|
||||
| `activation` | 否 | `object` | 用于由提供商、命令、渠道、路由和能力触发加载的轻量级激活规划器元数据。仅为元数据;实际行为仍由插件运行时负责。 |
|
||||
| `setup` | 否 | `object` | 轻量级设置/新手引导描述符,供发现和设置界面在不加载插件运行时的情况下检查。 |
|
||||
| `qaRunners` | 否 | `object[]` | 共享 `openclaw qa` 主机在插件运行时加载前使用的轻量级 QA 运行器描述符。 |
|
||||
| `contracts` | 否 | `object` | 外部认证 hook、语音、实时转写、实时语音、媒体理解、图像生成、音乐生成、视频生成、web 抓取、web 搜索和工具归属的静态内置能力快照。 |
|
||||
| `mediaUnderstandingProviderMetadata` | 否 | `Record<string, object>` | 为 `contracts.mediaUnderstandingProviders` 中声明的提供商 id 提供的轻量级媒体理解默认元数据。 |
|
||||
| `channelConfigs` | 否 | `Record<string, object>` | 由清单拥有的渠道配置元数据,在运行时加载前合并到设备发现和校验界面中。 |
|
||||
| `enabledByDefault` | 否 | `true` | 将内置插件标记为默认启用。省略此字段,或设置为任何非 `true` 的值,则该插件默认禁用。 |
|
||||
| `legacyPluginIds` | 否 | `string[]` | 会规范化为此规范插件 id 的旧版 id。 |
|
||||
| `autoEnableWhenConfiguredProviders` | 否 | `string[]` | 当凭证、配置或模型引用提到这些 provider id 时,应自动启用此插件。 |
|
||||
| `kind` | 否 | `"memory"` \| `"context-engine"` | 声明由 `plugins.slots.*` 使用的互斥插件类型。 |
|
||||
| `channels` | 否 | `string[]` | 由此插件拥有的渠道 id。用于发现和配置校验。 |
|
||||
| `providers` | 否 | `string[]` | 由此插件拥有的 provider id。 |
|
||||
| `providerDiscoveryEntry` | 否 | `string` | 轻量级 provider 发现模块路径,相对于插件根目录,用于可在不激活完整插件运行时的情况下加载的、受清单作用域约束的 provider 目录元数据。 |
|
||||
| `modelSupport` | 否 | `object` | 由清单拥有的简写模型家族元数据,用于在运行时之前自动加载插件。 |
|
||||
| `providerEndpoints` | 否 | `object[]` | 由清单拥有的端点 host/baseUrl 元数据,用于核心在 provider 运行时加载前必须分类的 provider 路由。 |
|
||||
| `cliBackends` | 否 | `string[]` | 由此插件拥有的 CLI 推理后端 id。用于根据显式配置引用在启动时自动激活。 |
|
||||
| `syntheticAuthRefs` | 否 | `string[]` | provider 或 CLI 后端引用,其由插件拥有的 synthetic auth hook 应在运行时加载前的冷模型发现期间进行探测。 |
|
||||
| `nonSecretAuthMarkers` | 否 | `string[]` | 由内置插件拥有的占位 API 密钥值,表示非机密的本地、OAuth 或环境凭证状态。 |
|
||||
| `commandAliases` | 否 | `object[]` | 由此插件拥有的命令名称,应在运行时加载前生成具备插件感知能力的配置和 CLI 诊断信息。 |
|
||||
| `providerAuthEnvVars` | 否 | `Record<string, string[]>` | 用于 provider 凭证/状态查找的已弃用兼容环境变量元数据。新插件优先使用 `setup.providers[].envVars`;在弃用窗口期内,OpenClaw 仍会读取此字段。 |
|
||||
| `providerAuthAliases` | 否 | `Record<string, string>` | 应复用另一个 provider id 进行凭证查找的 provider id,例如共享基础 provider API 密钥和凭证配置文件的 coding provider。 |
|
||||
| `channelEnvVars` | 否 | `Record<string, string[]>` | OpenClaw 可在不加载插件代码的情况下检查的轻量渠道环境变量元数据。用于通用启动/配置辅助工具应可见的、由环境变量驱动的渠道设置或凭证界面。 |
|
||||
| `providerAuthChoices` | 否 | `object[]` | 用于新手引导选择器、首选 provider 解析和简单 CLI flag 绑定的轻量凭证选项元数据。 |
|
||||
| `activation` | 否 | `object` | 用于 provider、命令、渠道、路由和能力触发加载的轻量激活规划器元数据。仅包含元数据;实际行为仍由插件运行时负责。 |
|
||||
| `setup` | 否 | `object` | 供发现和设置界面在不加载插件运行时的情况下检查的轻量设置/新手引导描述符。 |
|
||||
| `qaRunners` | 否 | `object[]` | 由共享 `openclaw qa` 主机在插件运行时加载前使用的轻量 QA 运行器描述符。 |
|
||||
| `contracts` | 否 | `object` | 面向外部 auth hook、语音、实时转写、实时语音、媒体理解、图像生成、音乐生成、视频生成、web-fetch、Ollama Web 搜索 和工具归属的静态内置能力快照。 |
|
||||
| `mediaUnderstandingProviderMetadata` | 否 | `Record<string, object>` | 为 `contracts.mediaUnderstandingProviders` 中声明的 provider id 提供的轻量媒体理解默认值。 |
|
||||
| `channelConfigs` | 否 | `Record<string, object>` | 由清单拥有的渠道配置元数据,会在运行时加载前合并到发现和校验界面中。 |
|
||||
| `skills` | 否 | `string[]` | 要加载的 Skills 目录,相对于插件根目录。 |
|
||||
| `name` | 否 | `string` | 人类可读的插件名称。 |
|
||||
| `description` | 否 | `string` | 显示在插件界面中的简短摘要。 |
|
||||
| `version` | 否 | `string` | 信息性插件版本。 |
|
||||
| `version` | 否 | `string` | 仅供参考的插件版本。 |
|
||||
| `uiHints` | 否 | `Record<string, object>` | 配置字段的 UI 标签、占位符和敏感性提示。 |
|
||||
|
||||
## `providerAuthChoices` 参考
|
||||
|
||||
每个 `providerAuthChoices` 条目描述一个新手引导或认证选项。
|
||||
OpenClaw 会在提供商运行时加载前读取它。
|
||||
提供商设置流程会优先使用这些清单选项,然后为了兼容性回退到运行时向导元数据和安装目录选项。
|
||||
每个 `providerAuthChoices` 条目描述一个新手引导或凭证选项。
|
||||
OpenClaw 会在 provider 运行时加载前读取这些内容。
|
||||
provider 设置流程会优先使用这些清单中的选项,然后为了兼容性回退到运行时向导元数据和安装目录选项。
|
||||
|
||||
| 字段 | 必填 | 类型 | 含义 |
|
||||
| --------------------- | -------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
|
||||
| `provider` | 是 | `string` | 此选项所属的提供商 id。 |
|
||||
| `method` | 是 | `string` | 要分发到的认证方法 id。 |
|
||||
| `choiceId` | 是 | `string` | 供新手引导和 CLI 流程使用的稳定认证选项 id。 |
|
||||
| `choiceLabel` | 否 | `string` | 面向用户的标签。如省略,OpenClaw 将回退到 `choiceId`。 |
|
||||
| `choiceHint` | 否 | `string` | 选择器的简短辅助文本。 |
|
||||
| `assistantPriority` | 否 | `number` | 在由助手驱动的交互式选择器中,值越小排序越靠前。 |
|
||||
| `assistantVisibility` | 否 | `"visible"` \| `"manual-only"` | 在助手选择器中隐藏该选项,但仍允许通过手动 CLI 选择。 |
|
||||
| `provider` | 是 | `string` | 此选项所属的 provider id。 |
|
||||
| `method` | 是 | `string` | 要分派到的凭证方法 id。 |
|
||||
| `choiceId` | 是 | `string` | 由新手引导和 CLI 流程使用的稳定凭证选项 id。 |
|
||||
| `choiceLabel` | 否 | `string` | 面向用户的标签。如果省略,OpenClaw 会回退到 `choiceId`。 |
|
||||
| `choiceHint` | 否 | `string` | 选择器的简短帮助文本。 |
|
||||
| `assistantPriority` | 否 | `number` | 在由智能体驱动的交互式选择器中,值越小排序越靠前。 |
|
||||
| `assistantVisibility` | 否 | `"visible"` \| `"manual-only"` | 在智能体选择器中隐藏此选项,但仍允许通过手动 CLI 进行选择。 |
|
||||
| `deprecatedChoiceIds` | 否 | `string[]` | 应将用户重定向到此替代选项的旧版选项 id。 |
|
||||
| `groupId` | 否 | `string` | 用于对相关选项分组的可选分组 id。 |
|
||||
| `groupLabel` | 否 | `string` | 该分组面向用户的标签。 |
|
||||
| `groupHint` | 否 | `string` | 该分组的简短辅助文本。 |
|
||||
| `optionKey` | 否 | `string` | 用于简单单 flag 认证流程的内部选项键。 |
|
||||
| `groupId` | 否 | `string` | 用于对相关选项分组的可选组 id。 |
|
||||
| `groupLabel` | 否 | `string` | 该分组的面向用户标签。 |
|
||||
| `groupHint` | 否 | `string` | 该分组的简短帮助文本。 |
|
||||
| `optionKey` | 否 | `string` | 用于简单单 flag 凭证流程的内部选项键。 |
|
||||
| `cliFlag` | 否 | `string` | CLI flag 名称,例如 `--openrouter-api-key`。 |
|
||||
| `cliOption` | 否 | `string` | 完整 CLI 选项形式,例如 `--openrouter-api-key <key>`。 |
|
||||
| `cliDescription` | 否 | `string` | 在 CLI 帮助中使用的描述。 |
|
||||
| `onboardingScopes` | 否 | `Array<"text-inference" \| "image-generation">` | 此选项应出现在哪些新手引导界面中。如省略,默认值为 `["text-inference"]`。 |
|
||||
| `cliOption` | 否 | `string` | 完整的 CLI 选项形式,例如 `--openrouter-api-key <key>`。 |
|
||||
| `cliDescription` | 否 | `string` | CLI 帮助中使用的说明。 |
|
||||
| `onboardingScopes` | 否 | `Array<"text-inference" \| "image-generation">` | 此选项应出现在哪些新手引导界面中。如果省略,默认值为 `["text-inference"]`。 |
|
||||
|
||||
## `commandAliases` 参考
|
||||
|
||||
当插件拥有某个运行时命令名称,而用户可能会误将其放入 `plugins.allow`,或尝试将其作为根 CLI 命令运行时,请使用 `commandAliases`。OpenClaw 使用此元数据在不导入插件运行时代码的情况下提供诊断信息。
|
||||
当插件拥有一个运行时命令名,而用户可能会误将其写入 `plugins.allow`,或尝试将其作为根 CLI 命令运行时,请使用 `commandAliases`。OpenClaw 使用这些元数据在不导入插件运行时代码的情况下提供诊断信息。
|
||||
|
||||
```json
|
||||
{
|
||||
@ -204,17 +205,17 @@ OpenClaw 会在提供商运行时加载前读取它。
|
||||
| ------------ | -------- | ----------------- | ----------------------------------------------------------------------- |
|
||||
| `name` | 是 | `string` | 属于此插件的命令名称。 |
|
||||
| `kind` | 否 | `"runtime-slash"` | 将该别名标记为聊天斜杠命令,而不是根 CLI 命令。 |
|
||||
| `cliCommand` | 否 | `string` | 若存在,可建议用于 CLI 操作的相关根 CLI 命令。 |
|
||||
| `cliCommand` | 否 | `string` | 用于建议 CLI 操作的相关根 CLI 命令(如果存在)。 |
|
||||
|
||||
## `activation` 参考
|
||||
|
||||
当插件可以低成本声明哪些控制平面事件应将其纳入激活/加载计划时,请使用 `activation`。
|
||||
|
||||
此块是规划器元数据,而不是生命周期 API。它不会注册运行时行为,不会替代 `register(...)`,也不保证插件代码已经执行。激活规划器使用这些字段先缩小候选插件范围,然后再回退到现有的清单归属元数据,例如 `providers`、`channels`、`commandAliases`、`setup.providers`、`contracts.tools` 和 hooks。
|
||||
该块是规划器元数据,而不是生命周期 API。它不会注册运行时行为,不会替代 `register(...)`,也不保证插件代码已经执行。激活规划器使用这些字段在回退到现有清单归属元数据(如 `providers`、`channels`、`commandAliases`、`setup.providers`、`contracts.tools` 和 hooks)之前缩小候选插件范围。
|
||||
|
||||
优先使用已经能够描述归属关系的最窄元数据。当 `providers`、`channels`、`commandAliases`、setup 描述符或 `contracts` 能表达该关系时,请使用这些字段。只有在这些归属字段无法表示额外规划器提示时,才使用 `activation`。
|
||||
优先使用已能描述归属关系的最窄元数据。如果 `providers`、`channels`、`commandAliases`、设置描述符或 `contracts` 已能表达这种关系,就使用这些字段。只有在这些归属字段无法表示额外规划提示时,才使用 `activation`。
|
||||
|
||||
此块仅为元数据。它不会注册运行时行为,也不会替代 `register(...)`、`setupEntry` 或其他运行时/插件入口点。当前使用方会在更广泛的插件加载之前,将其作为缩小范围的提示,因此缺失激活元数据通常只会影响性能;在旧版清单归属回退仍存在时,它不应改变正确性。
|
||||
该块仅包含元数据。它不会注册运行时行为,也不会替代 `register(...)`、`setupEntry` 或其他运行时/插件入口点。当前使用方会在更广泛的插件加载之前将其用作缩小范围的提示,因此缺少激活元数据通常只会影响性能;在旧版清单归属回退仍然存在时,它不应改变正确性。
|
||||
|
||||
```json
|
||||
{
|
||||
@ -230,26 +231,27 @@ OpenClaw 会在提供商运行时加载前读取它。
|
||||
|
||||
| 字段 | 必填 | 类型 | 含义 |
|
||||
| ---------------- | -------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
||||
| `onProviders` | 否 | `string[]` | 应将此插件纳入激活/加载计划的提供商 id。 |
|
||||
| `onProviders` | 否 | `string[]` | 应将此插件纳入激活/加载计划的 provider id。 |
|
||||
| `onCommands` | 否 | `string[]` | 应将此插件纳入激活/加载计划的命令 id。 |
|
||||
| `onChannels` | 否 | `string[]` | 应将此插件纳入激活/加载计划的渠道 id。 |
|
||||
| `onRoutes` | 否 | `string[]` | 应将此插件纳入激活/加载计划的路由类型。 |
|
||||
| `onCapabilities` | 否 | `Array<"provider" \| "channel" \| "tool" \| "hook">` | 控制平面激活规划中使用的宽泛能力提示。可能时优先使用更窄的字段。 |
|
||||
| `onCapabilities` | 否 | `Array<"provider" \| "channel" \| "tool" \| "hook">` | 供控制平面激活规划使用的宽泛能力提示。可能时优先使用更窄的字段。 |
|
||||
|
||||
当前在线使用方:
|
||||
|
||||
- 由命令触发的 CLI 规划会回退到旧版
|
||||
- 由命令触发的 CLI 规划会回退到旧版的
|
||||
`commandAliases[].cliCommand` 或 `commandAliases[].name`
|
||||
- 当缺少显式渠道激活元数据时,渠道触发的设置/渠道规划会回退到旧版 `channels[]`
|
||||
- 由渠道触发的设置/渠道规划在缺少显式渠道激活元数据时,会回退到旧版 `channels[]`
|
||||
归属
|
||||
- 当缺少显式提供商激活元数据时,提供商触发的设置/运行时规划会回退到旧版
|
||||
- 由 provider 触发的设置/运行时规划在缺少显式 provider
|
||||
激活元数据时,会回退到旧版
|
||||
`providers[]` 和顶层 `cliBackends[]` 归属
|
||||
|
||||
规划器诊断可以区分显式激活提示与清单归属回退。例如,`activation-command-hint` 表示匹配了 `activation.onCommands`,而 `manifest-command-alias` 表示规划器改用了 `commandAliases` 归属。这些原因标签用于主机诊断和测试;插件作者应继续声明最能描述归属关系的元数据。
|
||||
规划器诊断可以区分显式激活提示和清单归属回退。例如,`activation-command-hint` 表示匹配了 `activation.onCommands`,而 `manifest-command-alias` 表示规划器改用了 `commandAliases` 归属。这些原因标签用于宿主诊断和测试;插件作者应继续声明最能描述归属关系的元数据。
|
||||
|
||||
## `qaRunners` 参考
|
||||
|
||||
当插件在共享 `openclaw qa` 根命令下提供一个或多个传输运行器时,请使用 `qaRunners`。保持此元数据轻量且静态;实际 CLI 注册仍由插件运行时通过导出 `qaRunnerCliRegistrations` 的轻量级 `runtime-api.ts` 界面负责。
|
||||
当插件在共享 `openclaw qa` 根命令下提供一个或多个传输运行器时,请使用 `qaRunners`。保持这些元数据轻量且静态;插件运行时仍通过导出 `qaRunnerCliRegistrations` 的轻量 `runtime-api.ts` 接口负责实际的 CLI 注册。
|
||||
|
||||
```json
|
||||
{
|
||||
@ -265,11 +267,11 @@ OpenClaw 会在提供商运行时加载前读取它。
|
||||
| 字段 | 必填 | 类型 | 含义 |
|
||||
| ------------- | -------- | -------- | ------------------------------------------------------------------ |
|
||||
| `commandName` | 是 | `string` | 挂载在 `openclaw qa` 下的子命令,例如 `matrix`。 |
|
||||
| `description` | 否 | `string` | 当共享主机需要一个桩命令时使用的回退帮助文本。 |
|
||||
| `description` | 否 | `string` | 当共享宿主需要一个 stub 命令时使用的后备帮助文本。 |
|
||||
|
||||
## `setup` 参考
|
||||
|
||||
当设置和新手引导界面需要在运行时加载前获取由插件拥有的轻量级元数据时,请使用 `setup`。
|
||||
当设置和新手引导界面需要在运行时加载前获取轻量、由插件拥有的元数据时,请使用 `setup`。
|
||||
|
||||
```json
|
||||
{
|
||||
@ -288,38 +290,38 @@ OpenClaw 会在提供商运行时加载前读取它。
|
||||
}
|
||||
```
|
||||
|
||||
顶层 `cliBackends` 仍然有效,并继续描述 CLI 推理后端。`setup.cliBackends` 是专用于控制平面/设置流程的设置描述符界面,应保持为纯元数据。
|
||||
顶层 `cliBackends` 仍然有效,并继续描述 CLI 推理后端。`setup.cliBackends` 是专用于设置的描述符界面,用于应保持仅元数据的控制平面/设置流程。
|
||||
|
||||
存在时,`setup.providers` 和 `setup.cliBackends` 是设置发现的首选“描述符优先”查找界面。如果描述符只用于缩小候选插件范围,而设置仍需要更丰富的设置期运行时 hooks,请将 `requiresRuntime` 设为 `true`,并保留 `setup-api` 作为回退执行路径。
|
||||
存在时,`setup.providers` 和 `setup.cliBackends` 是设置发现的首选“描述符优先”查找界面。如果描述符仅用于缩小候选插件范围,而设置仍需要更丰富的设置期运行时 hook,请设置 `requiresRuntime: true`,并保留 `setup-api` 作为后备执行路径。
|
||||
|
||||
OpenClaw 还会将 `setup.providers[].envVars` 纳入通用提供商认证和环境变量查找。`providerAuthEnvVars` 在弃用过渡期内仍通过兼容适配器受支持,但仍使用它的非内置插件会收到清单诊断。新插件应将设置/状态环境变量元数据放在 `setup.providers[].envVars` 上。
|
||||
OpenClaw 还会将 `setup.providers[].envVars` 纳入通用 provider 凭证和环境变量查找。`providerAuthEnvVars` 在弃用窗口期内仍通过兼容适配器受支持,但仍使用它的非内置插件会收到清单诊断。新插件应将设置/状态环境变量元数据放在 `setup.providers[].envVars` 上。
|
||||
|
||||
只有当这些描述符足以满足设置界面需求时,才将 `requiresRuntime: false`。OpenClaw 会将显式 `false` 视为纯描述符契约,并且不会为设置查找执行 `setup-api`。省略 `requiresRuntime` 会保留旧版回退行为,以确保那些已添加描述符但未添加该标志的现有插件不会出错。
|
||||
仅当这些描述符足以满足设置界面需求时,才设置 `requiresRuntime: false`。OpenClaw 会将显式 `false` 视为仅描述符契约,并且不会为设置查找执行 `setup-api` 或 `openclaw.setupEntry`。如果一个仅描述符插件仍提供了这些设置运行时入口之一,OpenClaw 会报告一个附加诊断并继续忽略它。省略 `requiresRuntime` 会保留旧版回退行为,以避免那些在未设置该标志的情况下添加了描述符的现有插件发生破坏。
|
||||
|
||||
由于设置查找可能执行由插件拥有的 `setup-api` 代码,规范化后的 `setup.providers[].id` 和 `setup.cliBackends[]` 值在所有已发现插件之间必须保持唯一。归属关系不明确时将以保守方式失败,而不是按发现顺序挑选赢家。
|
||||
由于设置查找可能会执行由插件拥有的 `setup-api` 代码,已规范化的 `setup.providers[].id` 和 `setup.cliBackends[]` 值必须在所有已发现插件中保持唯一。归属不明确时会以失败关闭的方式处理,而不是根据发现顺序选出一个获胜者。
|
||||
|
||||
当设置运行时确实执行时,如果 `setup-api` 注册了清单描述符未声明的提供商或 CLI 后端,或某个描述符没有匹配的运行时注册项,设置注册表诊断会报告描述符漂移。这些诊断是增量性的,不会拒绝旧版插件。
|
||||
当设置运行时确实执行时,如果 `setup-api` 注册了清单描述符未声明的 provider 或 CLI 后端,或者某个描述符没有匹配的运行时注册,设置注册表诊断会报告描述符漂移。这些诊断是附加性的,不会拒绝旧版插件。
|
||||
|
||||
### `setup.providers` 参考
|
||||
|
||||
| 字段 | 必填 | 类型 | 含义 |
|
||||
| ------------- | -------- | ---------- | ------------------------------------------------------------------------------------ |
|
||||
| `id` | 是 | `string` | 在设置或新手引导期间暴露的提供商 id。保持规范化 id 在全局范围内唯一。 |
|
||||
| `authMethods` | 否 | `string[]` | 该提供商在不加载完整运行时的情况下支持的设置/认证方法 id。 |
|
||||
| `id` | 是 | `string` | 在设置或新手引导期间暴露的 provider id。请保持规范化 id 在全局范围内唯一。 |
|
||||
| `authMethods` | 否 | `string[]` | 此 provider 在不加载完整运行时的情况下支持的设置/凭证方法 id。 |
|
||||
| `envVars` | 否 | `string[]` | 通用设置/状态界面可在插件运行时加载前检查的环境变量。 |
|
||||
|
||||
### `setup` 字段
|
||||
|
||||
| 字段 | 必填 | 类型 | 含义 |
|
||||
| ------------------ | -------- | ---------- | --------------------------------------------------------------------------------------------------- |
|
||||
| `providers` | 否 | `object[]` | 在设置和新手引导期间暴露的提供商设置描述符。 |
|
||||
| `cliBackends` | 否 | `string[]` | 用于“描述符优先”设置查找的设置期后端 id。保持规范化 id 在全局范围内唯一。 |
|
||||
| `configMigrations` | 否 | `string[]` | 属于此插件设置界面的配置迁移 id。 |
|
||||
| `providers` | 否 | `object[]` | 在设置和新手引导期间暴露的 provider 设置描述符。 |
|
||||
| `cliBackends` | 否 | `string[]` | 用于描述符优先设置查找的设置期后端 id。请保持规范化 id 在全局范围内唯一。 |
|
||||
| `configMigrations` | 否 | `string[]` | 由此插件设置界面拥有的配置迁移 id。 |
|
||||
| `requiresRuntime` | 否 | `boolean` | 在描述符查找之后,设置是否仍需要执行 `setup-api`。 |
|
||||
|
||||
## `uiHints` 参考
|
||||
|
||||
`uiHints` 是从配置字段名到小型渲染提示的映射。
|
||||
`uiHints` 是从配置字段名称到小型渲染提示的映射。
|
||||
|
||||
```json
|
||||
{
|
||||
@ -339,15 +341,15 @@ OpenClaw 还会将 `setup.providers[].envVars` 纳入通用提供商认证和环
|
||||
| 字段 | 类型 | 含义 |
|
||||
| ------------- | ---------- | --------------------------------------- |
|
||||
| `label` | `string` | 面向用户的字段标签。 |
|
||||
| `help` | `string` | 简短辅助文本。 |
|
||||
| `tags` | `string[]` | 可选的 UI 标签。 |
|
||||
| `advanced` | `boolean` | 将该字段标记为高级字段。 |
|
||||
| `sensitive` | `boolean` | 将该字段标记为秘密或敏感字段。 |
|
||||
| `help` | `string` | 简短帮助文本。 |
|
||||
| `tags` | `string[]` | 可选 UI 标签。 |
|
||||
| `advanced` | `boolean` | 将该字段标记为高级项。 |
|
||||
| `sensitive` | `boolean` | 将该字段标记为机密或敏感信息。 |
|
||||
| `placeholder` | `string` | 表单输入的占位文本。 |
|
||||
|
||||
## `contracts` 参考
|
||||
|
||||
仅在 OpenClaw 可以不导入插件运行时就读取的静态能力归属元数据场景中使用 `contracts`。
|
||||
仅当用于 OpenClaw 可在不导入插件运行时的情况下读取的静态能力归属元数据时,才使用 `contracts`。
|
||||
|
||||
```json
|
||||
{
|
||||
@ -372,30 +374,30 @@ OpenClaw 还会将 `setup.providers[].envVars` 纳入通用提供商认证和环
|
||||
|
||||
| 字段 | 类型 | 含义 |
|
||||
| -------------------------------- | ---------- | --------------------------------------------------------------------- |
|
||||
| `embeddedExtensionFactories` | `string[]` | 已弃用的内嵌 extension factory id。 |
|
||||
| `agentToolResultMiddleware` | `string[]` | 内置插件可为其注册工具结果中间件的 harness id。 |
|
||||
| `externalAuthProviders` | `string[]` | 其外部认证配置文件 hook 由此插件拥有的提供商 id。 |
|
||||
| `speechProviders` | `string[]` | 此插件拥有的语音提供商 id。 |
|
||||
| `realtimeTranscriptionProviders` | `string[]` | 此插件拥有的实时转写提供商 id。 |
|
||||
| `realtimeVoiceProviders` | `string[]` | 此插件拥有的实时语音提供商 id。 |
|
||||
| `memoryEmbeddingProviders` | `string[]` | 此插件拥有的 Memory 嵌入提供商 id。 |
|
||||
| `mediaUnderstandingProviders` | `string[]` | 此插件拥有的媒体理解提供商 id。 |
|
||||
| `imageGenerationProviders` | `string[]` | 此插件拥有的图像生成提供商 id。 |
|
||||
| `videoGenerationProviders` | `string[]` | 此插件拥有的视频生成提供商 id。 |
|
||||
| `webFetchProviders` | `string[]` | 此插件拥有的 web 抓取提供商 id。 |
|
||||
| `webSearchProviders` | `string[]` | 此插件拥有的 web 搜索提供商 id。 |
|
||||
| `embeddedExtensionFactories` | `string[]` | 已弃用的嵌入式扩展工厂 id。 |
|
||||
| `agentToolResultMiddleware` | `string[]` | 内置插件可为其注册工具结果中间件的 Harness id。 |
|
||||
| `externalAuthProviders` | `string[]` | 此插件拥有其外部凭证配置文件 hook 的 provider id。 |
|
||||
| `speechProviders` | `string[]` | 此插件拥有的语音 provider id。 |
|
||||
| `realtimeTranscriptionProviders` | `string[]` | 此插件拥有的实时转写 provider id。 |
|
||||
| `realtimeVoiceProviders` | `string[]` | 此插件拥有的实时语音 provider id。 |
|
||||
| `memoryEmbeddingProviders` | `string[]` | 此插件拥有的 Memory 嵌入 provider id。 |
|
||||
| `mediaUnderstandingProviders` | `string[]` | 此插件拥有的媒体理解 provider id。 |
|
||||
| `imageGenerationProviders` | `string[]` | 此插件拥有的图像生成 provider id。 |
|
||||
| `videoGenerationProviders` | `string[]` | 此插件拥有的视频生成 provider id。 |
|
||||
| `webFetchProviders` | `string[]` | 此插件拥有的 web-fetch provider id。 |
|
||||
| `webSearchProviders` | `string[]` | 此插件拥有的 web 搜索 provider id。 |
|
||||
| `tools` | `string[]` | 此插件拥有的智能体工具名称,用于内置契约检查。 |
|
||||
|
||||
`contracts.embeddedExtensionFactories` 被保留用于仍需要直接 Pi 内嵌运行器事件的内置兼容代码。新的内置工具结果转换应声明 `contracts.agentToolResultMiddleware`,并改为使用 `api.registerAgentToolResultMiddleware(...)` 注册。
|
||||
外部插件不能注册工具结果中间件,因为该接口可能会在模型看到之前重写高信任度工具输出。
|
||||
保留 `contracts.embeddedExtensionFactories` 是为了兼容仍需要直接 Pi 嵌入式运行器事件的内置兼容代码。新的内置工具结果转换应声明 `contracts.agentToolResultMiddleware`,并改为使用 `api.registerAgentToolResultMiddleware(...)` 注册。
|
||||
外部插件不能注册工具结果中间件,因为这条接缝可能会在模型看到高信任度工具输出之前重写它。
|
||||
|
||||
实现 `resolveExternalAuthProfiles` 的提供商插件应声明 `contracts.externalAuthProviders`。未声明该字段的插件仍会通过已弃用的兼容性回退路径运行,但该回退更慢,并将在迁移窗口结束后移除。
|
||||
实现 `resolveExternalAuthProfiles` 的 provider 插件应声明 `contracts.externalAuthProviders`。未声明此字段的插件仍会通过已弃用的兼容回退路径运行,但该回退更慢,并将在迁移窗口结束后移除。
|
||||
|
||||
内置的 Memory 嵌入提供商应为其暴露的每个适配器 id 声明 `contracts.memoryEmbeddingProviders`,包括像 `local` 这样的内置适配器。独立 CLI 路径使用此清单契约,以便在完整 Gateway 网关运行时注册提供商之前,仅加载归属插件。
|
||||
内置的 Memory 嵌入 provider 应为其暴露的每个适配器 id 声明 `contracts.memoryEmbeddingProviders`,包括诸如 `local` 之类的内建适配器。独立 CLI 路径使用此清单契约在完整 Gateway 网关运行时注册 provider 之前,仅加载所属插件。
|
||||
|
||||
## `mediaUnderstandingProviderMetadata` 参考
|
||||
|
||||
当媒体理解提供商具有默认模型、自动认证回退优先级或原生文档支持,而这些信息需要被通用核心辅助工具在运行时加载前使用时,请使用 `mediaUnderstandingProviderMetadata`。键还必须在 `contracts.mediaUnderstandingProviders` 中声明。
|
||||
当媒体理解 provider 具有默认模型、自动凭证回退优先级或通用核心辅助工具在运行时加载前需要的原生文档支持时,请使用 `mediaUnderstandingProviderMetadata`。其键也必须在 `contracts.mediaUnderstandingProviders` 中声明。
|
||||
|
||||
```json
|
||||
{
|
||||
@ -418,18 +420,18 @@ OpenClaw 还会将 `setup.providers[].envVars` 纳入通用提供商认证和环
|
||||
}
|
||||
```
|
||||
|
||||
每个提供商条目可包含:
|
||||
每个 provider 条目可包含:
|
||||
|
||||
| 字段 | 类型 | 含义 |
|
||||
| ---------------------- | ----------------------------------- | ---------------------------------------------------------------------------- |
|
||||
| `capabilities` | `("image" \| "audio" \| "video")[]` | 该提供商暴露的媒体能力。 |
|
||||
| `capabilities` | `("image" \| "audio" \| "video")[]` | 此 provider 暴露的媒体能力。 |
|
||||
| `defaultModels` | `Record<string, string>` | 当配置未指定模型时使用的“能力到模型”默认值。 |
|
||||
| `autoPriority` | `Record<string, number>` | 用于基于凭证的自动提供商回退时,数值越小排序越靠前。 |
|
||||
| `nativeDocumentInputs` | `"pdf"[]` | 该提供商支持的原生文档输入。 |
|
||||
| `autoPriority` | `Record<string, number>` | 用于基于凭证的自动 provider 回退时,数字越小排序越靠前。 |
|
||||
| `nativeDocumentInputs` | `"pdf"[]` | 该 provider 支持的原生文档输入。 |
|
||||
|
||||
## `channelConfigs` 参考
|
||||
|
||||
当渠道插件需要在运行时加载前获取轻量级配置元数据时,请使用 `channelConfigs`。
|
||||
当渠道插件在运行时加载前需要轻量配置元数据时,请使用 `channelConfigs`。
|
||||
|
||||
```json
|
||||
{
|
||||
@ -462,13 +464,13 @@ OpenClaw 还会将 `setup.providers[].envVars` 纳入通用提供商认证和环
|
||||
| ------------- | ------------------------ | ----------------------------------------------------------------------------------------- |
|
||||
| `schema` | `object` | `channels.<id>` 的 JSON Schema。每个已声明的渠道配置条目都必须提供。 |
|
||||
| `uiHints` | `Record<string, object>` | 该渠道配置部分的可选 UI 标签/占位符/敏感性提示。 |
|
||||
| `label` | `string` | 当运行时元数据尚未就绪时,合并到选择器和检查界面中的渠道标签。 |
|
||||
| `description` | `string` | 用于检查和目录界面的简短渠道描述。 |
|
||||
| `label` | `string` | 当运行时元数据尚未就绪时,合并到选择器和检查界面的渠道标签。 |
|
||||
| `description` | `string` | 用于检查和目录界面的简短渠道说明。 |
|
||||
| `preferOver` | `string[]` | 在选择界面中,此渠道应优先于的旧版或较低优先级插件 id。 |
|
||||
|
||||
## `modelSupport` 参考
|
||||
|
||||
当 OpenClaw 应在插件运行时加载前,根据 `gpt-5.5` 或 `claude-sonnet-4.6` 之类的简写模型 id 推断出你的提供商插件时,请使用 `modelSupport`。
|
||||
当 OpenClaw 应在插件运行时加载前,根据 `gpt-5.5` 或 `claude-sonnet-4.6` 这类简写模型 id 推断你的 provider 插件时,请使用 `modelSupport`。
|
||||
|
||||
```json
|
||||
{
|
||||
@ -481,68 +483,70 @@ OpenClaw 还会将 `setup.providers[].envVars` 纳入通用提供商认证和环
|
||||
|
||||
OpenClaw 采用以下优先级:
|
||||
|
||||
- 显式 `provider/model` 引用使用归属 `providers` 清单元数据
|
||||
- `modelPatterns` 优先于 `modelPrefixes`
|
||||
- 显式 `provider/model` 引用使用所属 `providers` 清单元数据
|
||||
- `modelPatterns` 的优先级高于 `modelPrefixes`
|
||||
- 如果一个非内置插件和一个内置插件都匹配,则非内置插件胜出
|
||||
- 剩余歧义会被忽略,直到用户或配置明确指定提供商
|
||||
- 剩余歧义会被忽略,直到用户或配置指定 provider
|
||||
|
||||
字段:
|
||||
|
||||
| 字段 | 类型 | 含义 |
|
||||
| --------------- | ---------- | ------------------------------------------------------------------------------- |
|
||||
| `modelPrefixes` | `string[]` | 使用 `startsWith` 针对简写模型 id 进行匹配的前缀。 |
|
||||
| `modelPatterns` | `string[]` | 在移除 profile 后缀后,针对简写模型 id 进行匹配的正则表达式源码。 |
|
||||
| `modelPrefixes` | `string[]` | 对简写模型 id 使用 `startsWith` 进行匹配的前缀。 |
|
||||
| `modelPatterns` | `string[]` | 在移除 profile 后缀后,对简写模型 id 进行匹配的正则表达式源码。 |
|
||||
|
||||
旧版顶层能力键已弃用。请使用 `openclaw doctor --fix` 将 `speechProviders`、`realtimeTranscriptionProviders`、`realtimeVoiceProviders`、`mediaUnderstandingProviders`、`imageGenerationProviders`、`videoGenerationProviders`、`webFetchProviders` 和 `webSearchProviders` 移动到 `contracts` 下;常规清单加载已不再将这些顶层字段视为能力归属。
|
||||
旧版顶层能力键已弃用。使用 `openclaw doctor --fix` 将 `speechProviders`、`realtimeTranscriptionProviders`、`realtimeVoiceProviders`、`mediaUnderstandingProviders`、`imageGenerationProviders`、`videoGenerationProviders`、`webFetchProviders` 和 `webSearchProviders` 移动到 `contracts` 下;普通清单加载不再将这些顶层字段视为能力归属。
|
||||
|
||||
## 清单与 package.json 的区别
|
||||
## Manifest 与 package.json 的区别
|
||||
|
||||
这两个文件承担不同职责:
|
||||
|
||||
| 文件 | 用途 |
|
||||
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `openclaw.plugin.json` | 设备发现、配置校验、认证选项元数据,以及必须在插件代码运行前存在的 UI 提示 |
|
||||
| `openclaw.plugin.json` | 在插件代码运行前必须存在的发现、配置校验、凭证选项元数据和 UI 提示 |
|
||||
| `package.json` | npm 元数据、依赖安装,以及用于入口点、安装门控、设置或目录元数据的 `openclaw` 配置块 |
|
||||
|
||||
如果你不确定某条元数据应放在哪里,请使用这条规则:
|
||||
如果你不确定某项元数据应放在哪里,请使用以下规则:
|
||||
|
||||
- 如果 OpenClaw 必须在加载插件代码前知道它,请放在 `openclaw.plugin.json`
|
||||
- 如果它与打包、入口文件或 npm 安装行为有关,请放在 `package.json`
|
||||
- 如果 OpenClaw 必须在加载插件代码前知道它,就放在 `openclaw.plugin.json`
|
||||
- 如果它与打包、入口文件或 npm 安装行为有关,就放在 `package.json`
|
||||
|
||||
### 影响设备发现的 `package.json` 字段
|
||||
### 会影响发现的 `package.json` 字段
|
||||
|
||||
某些运行时之前的插件元数据,会刻意放在 `package.json` 的 `openclaw` 配置块下,而不是 `openclaw.plugin.json` 中。
|
||||
某些运行时之前的插件元数据有意放在 `package.json` 的 `openclaw` 配置块下,而不是 `openclaw.plugin.json` 中。
|
||||
|
||||
重要示例:
|
||||
|
||||
| 字段 | 含义 |
|
||||
| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `openclaw.extensions` | 声明原生插件入口点。必须保持在插件包目录内。 |
|
||||
| `openclaw.runtimeExtensions` | 声明已安装包的构建后 JavaScript 运行时入口点。必须保持在插件包目录内。 |
|
||||
| `openclaw.setupEntry` | 在新手引导、延迟渠道启动和只读渠道状态/SecretRef 发现期间使用的轻量级仅设置入口点。必须保持在插件包目录内。 |
|
||||
| `openclaw.runtimeSetupEntry` | 声明已安装包的构建后 JavaScript 设置入口点。必须保持在插件包目录内。 |
|
||||
| `openclaw.channel` | 轻量级渠道目录元数据,例如标签、文档路径、别名和选择文案。 |
|
||||
| `openclaw.channel.configuredState` | 轻量级已配置状态检查器元数据,可在不加载完整渠道运行时的情况下回答“是否已存在仅环境变量的设置?”。 |
|
||||
| `openclaw.channel.persistedAuthState` | 轻量级持久化认证状态检查器元数据,可在不加载完整渠道运行时的情况下回答“是否已经有任何账号登录?”。 |
|
||||
| `openclaw.install.npmSpec` / `openclaw.install.localPath` | 用于内置和外部发布插件的安装/更新提示。 |
|
||||
| `openclaw.install.defaultChoice` | 当有多个安装来源可用时的首选安装路径。 |
|
||||
| `openclaw.install.minHostVersion` | 最低支持的 OpenClaw 主机版本,使用如 `>=2026.3.22` 这样的 semver 下限。 |
|
||||
| `openclaw.install.expectedIntegrity` | 预期的 npm dist 完整性字符串,例如 `sha512-...`;安装和更新流程会据此校验获取到的工件。 |
|
||||
| `openclaw.install.allowInvalidConfigRecovery` | 当配置无效时,允许一个范围很窄的内置插件重新安装恢复路径。 |
|
||||
| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | 允许在启动期间,先加载仅设置用途的渠道界面,再加载完整渠道插件。 |
|
||||
| `openclaw.runtimeExtensions` | 为已安装包声明已构建的 JavaScript 运行时入口点。必须保持在插件包目录内。 |
|
||||
| `openclaw.setupEntry` | 在新手引导、延迟渠道启动和只读渠道状态/SecretRef 发现期间使用的轻量设置专用入口点。必须保持在插件包目录内。 |
|
||||
| `openclaw.runtimeSetupEntry` | 为已安装包声明已构建的 JavaScript 设置入口点。必须保持在插件包目录内。 |
|
||||
| `openclaw.channel` | 轻量渠道目录元数据,例如标签、文档路径、别名和选择文案。 |
|
||||
| `openclaw.channel.configuredState` | 轻量已配置状态检查器元数据,可在不加载完整渠道运行时的情况下回答“是否已存在仅环境变量的设置?”。 |
|
||||
| `openclaw.channel.persistedAuthState` | 轻量持久化凭证状态检查器元数据,可在不加载完整渠道运行时的情况下回答“是否已有任何内容处于已登录状态?”。 |
|
||||
| `openclaw.install.npmSpec` / `openclaw.install.localPath` | 内置和外部发布插件的安装/更新提示。 |
|
||||
| `openclaw.install.defaultChoice` | 当存在多个安装来源时的首选安装路径。 |
|
||||
| `openclaw.install.minHostVersion` | 最低支持的 OpenClaw 宿主版本,使用类似 `>=2026.3.22` 的 semver 下限。 |
|
||||
| `openclaw.install.expectedIntegrity` | 预期的 npm 分发完整性字符串,例如 `sha512-...`;安装和更新流程会据此校验获取到的制品。 |
|
||||
| `openclaw.install.allowInvalidConfigRecovery` | 当配置无效时,允许一个狭义的内置插件重新安装恢复路径。 |
|
||||
| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | 允许设置专用的渠道界面在启动期间先于完整渠道插件加载。 |
|
||||
|
||||
清单元数据决定了在运行时加载前,新手引导中会出现哪些提供商/渠道/设置选项。`package.json#openclaw.install` 则告诉新手引导:当用户选择其中某个选项时,应如何获取或启用该插件。不要将安装提示移入 `openclaw.plugin.json`。
|
||||
清单元数据决定了在运行时加载前,新手引导中会出现哪些 provider/渠道/设置选项。`package.json#openclaw.install` 则告诉新手引导,当用户选择这些选项之一时,应如何获取或启用该插件。不要将安装提示移到 `openclaw.plugin.json` 中。
|
||||
|
||||
`openclaw.install.minHostVersion` 会在安装期间和清单注册表加载期间强制执行。无效值会被拒绝;较新的但有效的值会让旧主机跳过该插件。
|
||||
`openclaw.install.minHostVersion` 会在安装和清单注册表加载期间强制执行。无效值会被拒绝;较新的但有效的值会在较旧宿主上跳过该插件。
|
||||
|
||||
精确的 npm 版本固定已存在于 `npmSpec` 中,例如
|
||||
`"npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3"`。官方外部目录条目应将精确 spec 与 `expectedIntegrity` 配对使用,这样如果获取到的 npm 工件不再匹配固定发布版本,更新流程就会以保守方式失败。出于兼容性考虑,交互式新手引导仍会提供受信任注册表的 npm spec,包括裸包名和 dist-tag。目录诊断可以区分精确源、浮动源、带完整性固定的源、缺失完整性源、包名不匹配源以及无效 default-choice 源。它们还会在存在 `expectedIntegrity` 但没有可供其固定的有效 npm 源时发出警告。当存在 `expectedIntegrity` 时,安装/更新流程会强制校验它;当省略时,注册表解析结果会被记录,但不带完整性固定。
|
||||
精确 npm 版本固定已经存在于 `npmSpec` 中,例如
|
||||
`"npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3"`。官方外部目录条目应将精确 spec 与 `expectedIntegrity` 配对使用,这样如果获取到的 npm 制品不再匹配固定版本,更新流程就会以失败关闭的方式处理。为保持兼容性,交互式新手引导仍会提供受信任注册表的 npm spec,包括裸包名和 dist-tag。目录诊断还可以区分精确、浮动、完整性固定、缺失完整性、包名不匹配和无效默认选项来源。它们还会在存在 `expectedIntegrity` 但没有可用于固定它的有效 npm 来源时发出警告。
|
||||
当存在 `expectedIntegrity` 时,
|
||||
安装/更新流程会强制校验它;当省略时,注册表解析结果会在没有完整性固定的情况下被记录。
|
||||
|
||||
当状态、渠道列表或 SecretRef 扫描需要在不加载完整运行时的情况下识别已配置账号时,渠道插件应提供 `openclaw.setupEntry`。该设置入口点应暴露渠道元数据,以及对设置安全的配置、状态和 secrets 适配器;网络客户端、Gateway 网关监听器和传输运行时应保留在主 extension 入口点中。
|
||||
当状态、渠道列表或 SecretRef 扫描需要在不加载完整运行时的情况下识别已配置账户时,渠道插件应提供 `openclaw.setupEntry`。设置入口点应暴露渠道元数据以及设置安全的配置、状态和 secret 适配器;请将网络客户端、Gateway 网关监听器和传输运行时保留在主扩展入口点中。
|
||||
|
||||
运行时入口点字段不会覆盖源码入口点字段的包边界检查。例如,`openclaw.runtimeExtensions` 不能让一个越界的 `openclaw.extensions` 路径变得可加载。
|
||||
运行时入口点字段不会覆盖对源码入口点字段的包边界检查。例如,`openclaw.runtimeExtensions` 不能让一个越界的 `openclaw.extensions` 路径变得可加载。
|
||||
|
||||
`openclaw.install.allowInvalidConfigRecovery` 的设计刻意非常狭窄。它不会让任意损坏配置都可以安装。当前它只允许安装流程从特定的过时内置插件升级失败中恢复,例如缺失的内置插件路径,或属于同一内置插件的过时 `channels.<id>` 条目。无关的配置错误仍会阻止安装,并将操作人员引导至 `openclaw doctor --fix`。
|
||||
`openclaw.install.allowInvalidConfigRecovery` 的设计刻意保持狭窄。它不会让任意损坏的配置变得可安装。目前它仅允许安装流程从特定的过期内置插件升级失败中恢复,例如缺失的内置插件路径,或同一内置插件的过期 `channels.<id>` 条目。无关的配置错误仍会阻止安装,并将运维人员引导至 `openclaw doctor --fix`。
|
||||
|
||||
`openclaw.channel.persistedAuthState` 是一个微型检查器模块的包元数据:
|
||||
|
||||
@ -560,9 +564,9 @@ OpenClaw 采用以下优先级:
|
||||
}
|
||||
```
|
||||
|
||||
当设置、Doctor 或已配置状态流程需要在完整渠道插件加载前进行一个低成本的“是否已认证”探测时,请使用它。目标导出应是一个只读取持久化状态的小函数;不要通过完整的渠道运行时 barrel 转发它。
|
||||
当设置、Doctor 或已配置状态流程需要在完整渠道插件加载前进行低成本的是/否凭证探测时,请使用它。目标导出应是一个仅读取持久化状态的小函数;不要通过完整渠道运行时 barrel 暴露它。
|
||||
|
||||
`openclaw.channel.configuredState` 对低成本的仅环境变量已配置检查采用相同结构:
|
||||
`openclaw.channel.configuredState` 对低成本的仅环境变量配置检查采用相同结构:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -578,50 +582,53 @@ OpenClaw 采用以下优先级:
|
||||
}
|
||||
```
|
||||
|
||||
当某个渠道能够仅通过环境变量或其他很小的非运行时输入来回答已配置状态时,请使用它。如果检查需要完整配置解析或真实渠道运行时,请将该逻辑保留在插件 `config.hasConfiguredState` hook 中。
|
||||
当某个渠道可以通过环境变量或其他微小的非运行时输入来判断配置状态时,请使用它。如果该检查需要完整配置解析或真实渠道运行时,请将该逻辑保留在插件 `config.hasConfiguredState` hook 中。
|
||||
|
||||
## 设备发现优先级(重复插件 id)
|
||||
|
||||
OpenClaw 会从多个根位置发现插件(内置、全局安装、工作区、配置中显式选择的路径)。如果两个已发现插件共享同一个 `id`,则只保留**优先级最高**的清单;优先级较低的重复项会被丢弃,而不是与其一起加载。
|
||||
OpenClaw 会从多个根目录发现插件(内置、全局安装、workspace、配置中显式选定的路径)。如果两个发现结果共享相同的 `id`,则只保留**最高优先级**的清单;较低优先级的重复项会被丢弃,而不是与其一同加载。
|
||||
|
||||
优先级从高到低如下:
|
||||
|
||||
1. **配置选择** —— 在 `plugins.entries.<id>` 中显式固定的路径
|
||||
1. **配置选定** —— 在 `plugins.entries.<id>` 中显式固定的路径
|
||||
2. **内置** —— 随 OpenClaw 一起发布的插件
|
||||
3. **全局安装** —— 安装到全局 OpenClaw 插件根目录中的插件
|
||||
4. **工作区** —— 相对于当前工作区发现的插件
|
||||
3. **全局安装** —— 安装到全局 OpenClaw 插件根目录的插件
|
||||
4. **Workspace** —— 相对于当前 workspace 发现的插件
|
||||
|
||||
这意味着:
|
||||
影响:
|
||||
|
||||
- 工作区中存在的某个内置插件分支或过时副本,不会遮蔽内置构建版本。
|
||||
- 如果你确实要用本地插件覆盖内置插件,请通过 `plugins.entries.<id>` 固定它,让它按优先级获胜,而不是依赖工作区发现。
|
||||
- 被丢弃的重复项会被记录,因此 Doctor 和启动诊断可以指向被舍弃的副本。
|
||||
- 位于 workspace 中的某个内置插件的分叉版本或过期副本,不会遮蔽内置构建版本。
|
||||
- 若要真正用本地插件覆盖某个内置插件,请通过 `plugins.entries.<id>` 固定它,使其凭优先级取胜,而不要依赖 workspace 发现。
|
||||
- 被丢弃的重复项会被记录日志,以便 Doctor 和启动诊断能够指向被舍弃的副本。
|
||||
|
||||
## JSON Schema 要求
|
||||
|
||||
- **每个插件都必须提供一个 JSON Schema**,即使它不接受任何配置。
|
||||
- 可以接受空 schema(例如 `{ "type": "object", "additionalProperties": false }`)。
|
||||
- Schema 会在配置读写时校验,而不是在运行时校验。
|
||||
- 空 schema 也是可以接受的(例如 `{ "type": "object", "additionalProperties": false }`)。
|
||||
- Schema 会在配置读取/写入时校验,而不是在运行时校验。
|
||||
|
||||
## 校验行为
|
||||
|
||||
- 未知的 `channels.*` 键会被视为**错误**,除非该渠道 id 已由某个插件清单声明。
|
||||
- `plugins.entries.<id>`、`plugins.allow`、`plugins.deny` 和 `plugins.slots.*` 必须引用**可发现**的插件 id。未知 id 会被视为**错误**。
|
||||
- 如果插件已安装,但其清单或 schema 损坏或缺失,校验会失败,Doctor 会报告该插件错误。
|
||||
- 如果插件配置存在,但插件处于**禁用**状态,配置会被保留,并在 Doctor + 日志中显示**警告**。
|
||||
- 未知的 `channels.*` 键是**错误**,除非该渠道 id 由某个插件清单声明。
|
||||
- `plugins.entries.<id>`、`plugins.allow`、`plugins.deny` 和 `plugins.slots.*`
|
||||
必须引用**可发现**的插件 id。未知 id 属于**错误**。
|
||||
- 如果插件已安装,但其清单或 schema 损坏或缺失,
|
||||
校验将失败,Doctor 会报告该插件错误。
|
||||
- 如果插件配置存在,但插件已**禁用**,则配置会被保留,
|
||||
并在 Doctor + 日志中显示**警告**。
|
||||
|
||||
完整的 `plugins.*` schema,请参见[配置参考](/zh-CN/gateway/configuration)。
|
||||
完整的 `plugins.*` schema 请参见 [配置参考](/zh-CN/gateway/configuration)。
|
||||
|
||||
## 注意事项
|
||||
## 说明
|
||||
|
||||
- **原生 OpenClaw 插件必须提供清单**,包括从本地文件系统加载的插件。运行时仍会单独加载插件模块;清单仅用于设备发现 + 校验。
|
||||
- **原生 OpenClaw 插件**必须提供清单,包括本地文件系统加载。运行时仍会单独加载插件模块;清单仅用于发现 + 校验。
|
||||
- 原生清单使用 JSON5 解析,因此只要最终值仍是一个对象,就接受注释、尾随逗号和未加引号的键。
|
||||
- 清单加载器只会读取有文档说明的清单字段。避免使用自定义顶层键。
|
||||
- 当插件不需要时,可以省略 `channels`、`providers`、`cliBackends` 和 `skills`。
|
||||
- `providerDiscoveryEntry` 必须保持轻量,不应导入宽泛的运行时代码;应将其用于静态提供商目录元数据或狭窄的发现描述符,而不是请求时执行。
|
||||
- 排他性插件类型通过 `plugins.slots.*` 选择:`kind: "memory"` 通过 `plugins.slots.memory`,`kind: "context-engine"` 通过 `plugins.slots.contextEngine`(默认 `legacy`)。
|
||||
- 环境变量元数据(`setup.providers[].envVars`、已弃用的 `providerAuthEnvVars` 和 `channelEnvVars`)仅是声明式的。状态、审计、cron 投递校验以及其他只读界面,在将环境变量视为已配置之前,仍会应用插件信任和有效激活策略。
|
||||
- 对于需要提供商代码的运行时向导元数据,请参见[提供商运行时 hooks](/zh-CN/plugins/architecture-internals#provider-runtime-hooks)。
|
||||
- 清单加载器只会读取已文档化的清单字段。避免使用自定义顶层键。
|
||||
- 当插件不需要它们时,可以省略 `channels`、`providers`、`cliBackends` 和 `skills`。
|
||||
- `providerDiscoveryEntry` 必须保持轻量,不应导入宽泛的运行时代码;应将其用于静态 provider 目录元数据或狭义发现描述符,而不是请求时执行。
|
||||
- 互斥插件类型通过 `plugins.slots.*` 选择:`kind: "memory"` 通过 `plugins.slots.memory`,`kind: "context-engine"` 通过 `plugins.slots.contextEngine`(默认值为 `legacy`)。
|
||||
- 环境变量元数据(`setup.providers[].envVars`、已弃用的 `providerAuthEnvVars` 和 `channelEnvVars`)仅为声明式。状态、审计、cron 投递校验以及其他只读界面,在将某个环境变量视为已配置之前,仍会应用插件信任和有效激活策略。
|
||||
- 关于需要 provider 代码的运行时向导元数据,请参见 [Provider runtime hooks](/zh-CN/plugins/architecture-internals#provider-runtime-hooks)。
|
||||
- 如果你的插件依赖原生模块,请记录构建步骤以及任何包管理器 allowlist 要求(例如 pnpm `allow-build-scripts` + `pnpm rebuild <package>`)。
|
||||
|
||||
## 相关内容
|
||||
|
||||
Loading…
Reference in New Issue
Block a user