From ba9de0f6ac1be8fda251a15b7ecc6cbcbb52d7dc Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Wed, 29 Apr 2026 08:51:17 +0000 Subject: [PATCH] chore(i18n): refresh zh-CN translations --- docs/zh-CN/help/debugging.md | 147 ++++--- docs/zh-CN/plugins/manifest.md | 708 +++++++++++++++++---------------- docs/zh-CN/start/setup.md | 128 +++--- 3 files changed, 514 insertions(+), 469 deletions(-) diff --git a/docs/zh-CN/help/debugging.md b/docs/zh-CN/help/debugging.md index 3c967a933..9e331f101 100644 --- a/docs/zh-CN/help/debugging.md +++ b/docs/zh-CN/help/debugging.md @@ -1,26 +1,26 @@ --- read_when: - - 你需要检查原始模型输出是否泄露推理内容 - - 你想在迭代过程中以监视模式运行 Gateway 网关 - - 你需要一个可重复的调试工作流 -summary: 调试工具:监视模式、原始模型流和推理泄漏追踪 + - 你需要检查原始模型输出是否存在推理泄露 + - 你想在迭代开发时以监听模式运行 Gateway 网关 + - 你需要一套可重复的调试工作流 +summary: 调试工具:监视模式、原始模型流,以及追踪推理泄漏 title: 调试 x-i18n: - generated_at: "2026-04-28T17:10:23Z" + generated_at: "2026-04-29T08:48:31Z" model: gpt-5.5 provider: openai - source_hash: 13a49773e39041c77d4562aadcf03669bb5e66801be9908954e971a27f924cd4 + source_hash: c3c4ba151cf1ef1dd689077cee93467b7bc77b765665231028941a345b5345ea source_path: help/debugging.md workflow: 16 --- -流式输出的调试辅助工具,尤其适用于提供商将推理内容混入普通文本的情况。 +用于流式输出的调试辅助工具,尤其适用于提供商将推理混入普通文本的情况。 -## 运行时调试覆盖 +## 运行时调试覆盖项 -在聊天中使用 `/debug` 设置**仅运行时**配置覆盖(保存在内存中,不写入磁盘)。 -`/debug` 默认禁用;使用 `commands.debug: true` 启用。 -当你需要切换晦涩设置但不想编辑 `openclaw.json` 时,这很方便。 +在聊天中使用 `/debug` 设置**仅运行时**配置覆盖项(内存中,而非磁盘中)。 +`/debug` 默认禁用;用 `commands.debug: true` 启用。 +当你需要切换晦涩设置而不编辑 `openclaw.json` 时,这很方便。 示例: @@ -31,11 +31,11 @@ x-i18n: /debug reset ``` -`/debug reset` 会清除所有覆盖,并恢复为磁盘上的配置。 +`/debug reset` 会清除所有覆盖项,并恢复为磁盘上的配置。 ## 会话跟踪输出 -当你想在一个会话中查看插件拥有的跟踪/调试行,但不想开启完整详细模式时,使用 `/trace`。 +当你想在一个会话中查看插件拥有的跟踪/调试行,而不启用完整详细模式时,使用 `/trace`。 示例: @@ -46,11 +46,11 @@ x-i18n: ``` 将 `/trace` 用于插件诊断,例如 Active Memory 调试摘要。 -继续使用 `/verbose` 查看常规的详细 Status/工具输出,并继续使用 `/debug` 进行仅运行时配置覆盖。 +继续将 `/verbose` 用于常规详细 Status/工具输出,并继续将 `/debug` 用于仅运行时配置覆盖项。 ## 插件生命周期跟踪 -当插件生命周期命令感觉很慢,并且你需要内置的阶段拆解来查看插件元数据、设备发现、注册表、运行时镜像、配置变更和刷新工作时,使用 `OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1`。该跟踪是选择性启用的,并写入 stderr,因此 JSON 命令输出仍保持可解析。 +当插件生命周期命令感觉很慢,并且你需要针对插件元数据、设备发现、注册表、运行时镜像、配置变更和刷新工作的内置阶段拆解时,使用 `OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1`。该跟踪需要显式启用,并写入 stderr,因此 JSON 命令输出仍可解析。 示例: @@ -66,19 +66,19 @@ OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1 openclaw plugins install tokenjuice --force [plugins:lifecycle] phase="registry refresh" ms=51.56 status=ok command="install" reason="source-changed" ``` -在使用 CPU 分析器之前,先用它调查插件生命周期。 -如果命令从源码检出目录运行,建议在 `pnpm build` 后用 `node dist/entry.js ...` 测量构建后的运行时;`pnpm openclaw ...` 也会把源码运行器开销计入测量。 +在使用 CPU 分析器之前,用它来调查插件生命周期。 +如果命令从源码检出目录运行,优先在 `pnpm build` 后用 `node dist/entry.js ...` 测量构建后的运行时;`pnpm openclaw ...` 也会测到源码运行器开销。 ## 临时 CLI 调试计时 -OpenClaw 保留 `src/cli/debug-timing.ts` 作为本地调查的小型辅助工具。 -它有意默认不接入 CLI 启动、命令路由或任何命令。只在调试慢命令时使用它,然后在落地行为变更前移除 import 和 span。 +OpenClaw 保留 `src/cli/debug-timing.ts` 作为本地调查的小辅助工具。 +它有意默认不接入 CLI 启动、命令路由或任何命令。仅在调试慢命令时使用它,然后在落地行为变更前移除导入和计时段。 -当某个命令很慢,而你需要快速查看阶段拆解,再决定是使用 CPU 分析器还是修复特定子系统时,使用它。 +当某个命令很慢,并且你需要快速的阶段拆解,再决定是使用 CPU 分析器还是修复特定子系统时,使用它。 -### 添加临时 span +### 添加临时计时段 -在你正在调查的代码附近添加该辅助工具。例如,在调试 `openclaw models list` 时,`src/commands/models/list.list-command.ts` 中的临时补丁可能如下所示: +在你调查的代码附近添加辅助工具。例如,在调试 `openclaw models list` 时,`src/commands/models/list.list-command.ts` 中的临时补丁可能如下所示: ```ts // Temporary debugging only. Remove before landing. @@ -101,12 +101,12 @@ const loaded = await timing.timeAsync( 准则: - 用 `debug:` 作为临时阶段名称的前缀。 -- 只在疑似慢的区段周围添加少量 span。 -- 相比辅助函数名称,优先使用 `registry`、`auth_store` 或 `rows` 这类宽泛阶段。 +- 只在疑似慢的部分周围添加少量计时段。 +- 优先使用 `registry`、`auth_store` 或 `rows` 这类宽泛阶段,而不是辅助函数名称。 - 对同步工作使用 `time()`,对 promise 使用 `timeAsync()`。 -- 保持 stdout 干净。该辅助工具写入 stderr,因此命令 JSON 输出保持可解析。 -- 在打开最终修复 PR 前移除临时 import 和 span。 -- 在 issue 或 PR 中包含计时输出或简短摘要,以说明优化依据。 +- 保持 stdout 干净。辅助工具写入 stderr,因此命令 JSON 输出保持可解析。 +- 在打开最终修复 PR 前移除临时导入和计时段。 +- 在解释优化的 issue 或 PR 中包含计时输出或简短摘要。 ### 使用可读输出运行 @@ -116,7 +116,7 @@ const loaded = await timing.timeAsync( OPENCLAW_DEBUG_TIMING=1 pnpm openclaw models list --all --provider moonshot ``` -临时 `models list` 调查的示例输出: +一次临时 `models list` 调查的示例输出: ```text OpenClaw CLI debug timing: models list @@ -145,18 +145,18 @@ moonshot/kimi-k2.6 text+image 256k no no 36.9s +0ms complete rows=5 ``` -从该输出得出的发现: +此输出中的发现: | 阶段 | 时间 | 含义 | | ---------------------------------------- | ---------: | ------------------------------------------------------------------------------------------------------- | -| `debug:models:list:auth_store` | 20.3s | auth-profile 存储加载是最大成本,应优先调查。 | -| `debug:models:list:ensure_models_json` | 5.0s | 同步 `models.json` 的开销已经值得检查是否可缓存或跳过。 | -| `debug:models:list:load_model_registry` | 5.9s | 注册表构建和提供商可用性工作也是有意义的成本。 | -| `debug:models:list:read_registry_models` | 2.4s | 读取所有注册表模型并非免费,对 `--all` 可能有影响。 | +| `debug:models:list:auth_store` | 20.3s | 凭证配置存储加载是最大成本,应首先调查。 | +| `debug:models:list:ensure_models_json` | 5.0s | 同步 `models.json` 的成本足够高,值得检查缓存或跳过条件。 | +| `debug:models:list:load_model_registry` | 5.9s | 注册表构建和提供商可用性工作也是有意义的成本。 | +| `debug:models:list:read_registry_models` | 2.4s | 读取所有注册表模型并非免费,对 `--all` 可能很重要。 | | 行追加阶段 | 总计 3.2s | 构建五个显示行仍需数秒,因此过滤路径值得进一步查看。 | | `debug:models:list:print_model_table` | 0ms | 渲染不是瓶颈。 | -这些发现足以指导下一次补丁,而无需在生产路径中保留计时代码。 +这些发现足以指导下一个补丁,而无需在生产路径中保留计时代码。 ### 使用 JSON 输出运行 @@ -191,36 +191,58 @@ rg 'createCliDebugTiming|debug:[a-z0-9_-]+:' src/commands src/cli \ --glob '!*.test.ts' ``` -除非该 PR 明确是在添加永久诊断界面,否则该命令不应返回任何临时插桩调用点。对于常规性能修复,只保留行为变更、测试,以及包含计时证据的简短说明。 +除非 PR 明确添加永久诊断表面,否则该命令不应返回任何临时插桩调用点。对于常规性能修复,只保留行为变更、测试和带有计时证据的简短说明。 -对于更深层的 CPU 热点,请使用 Node 分析(`--cpu-prof`)或外部分析器,而不是添加更多计时包装器。 +对于更深层的 CPU 热点,使用 Node 分析(`--cpu-prof`)或外部分析器,而不是添加更多计时包装器。 -## Gateway 网关 watch 模式 +## Gateway 网关监视模式 -为了快速迭代,在文件 watcher 下运行 Gateway 网关: +为了快速迭代,在文件监视器下运行 Gateway 网关: ```bash pnpm gateway:watch ``` -这会映射到: +默认情况下,这会启动或重启名为 `openclaw-gateway-watch-main` 的 tmux 会话(或特定于配置档案/端口的变体,例如 `openclaw-gateway-watch-dev-19001`),并从交互式终端自动附加。非交互式 shell、CI 和智能体 exec 调用会保持分离并改为打印附加说明。需要时手动附加: + +```bash +tmux attach -t openclaw-gateway-watch-main +``` + +tmux 窗格运行原始监视器: ```bash node scripts/watch-node.mjs gateway --force ``` -该 watcher 会在 `src/` 下与构建相关的文件、插件源文件、插件 `package.json` 和 `openclaw.plugin.json` 元数据、`tsconfig.json`、`package.json` 以及 `tsdown.config.ts` 发生变化时重启。插件元数据变更会重启 Gateway 网关,但不会强制执行 `tsdown` 重新构建;源码和配置变更仍会先重新构建 `dist`。 +不想使用 tmux 时使用前台模式: -在 `gateway:watch` 后添加任何 Gateway 网关 CLI 标志,它们都会在每次重启时透传。现在,对同一仓库/标志组合重新运行相同的 watch 命令时,会替换旧 watcher,而不会留下重复的 watcher 父进程。 +```bash +pnpm gateway:watch:raw +# or +OPENCLAW_GATEWAY_WATCH_TMUX=0 pnpm gateway:watch +``` -## 开发配置文件 + 开发 Gateway 网关(--dev) +在保留 tmux 管理的同时禁用自动附加: -使用开发配置文件来隔离状态,并启动一个安全、可丢弃的设置用于调试。这里有**两个** `--dev` 标志: +```bash +OPENCLAW_GATEWAY_WATCH_ATTACH=0 pnpm gateway:watch +``` -- **全局 `--dev`(profile):** 将状态隔离到 `~/.openclaw-dev` 下,并将 Gateway 网关端口默认为 `19001`(派生端口随之偏移)。 -- **`gateway --dev`:告诉 Gateway 网关在缺失时自动创建默认配置 + 工作区**(并跳过 BOOTSTRAP.md)。 +tmux 包装器会将常见的非机密运行时选择器带入窗格,例如 `OPENCLAW_PROFILE`、`OPENCLAW_CONFIG_PATH`、`OPENCLAW_STATE_DIR`、`OPENCLAW_GATEWAY_PORT` 和 `OPENCLAW_SKIP_CHANNELS`。将提供商凭证放在你的常规配置档案/配置中,或对一次性短暂密钥使用原始前台模式。 -推荐流程(开发配置文件 + 开发引导): +监视器会在 `src/` 下与构建相关的文件、插件源文件、插件 `package.json` 和 `openclaw.plugin.json` 元数据、`tsconfig.json`、`package.json` 以及 `tsdown.config.ts` 发生变化时重启。插件元数据变更会重启 Gateway 网关,而不会强制 `tsdown` 重新构建;源码和配置变更仍会先重新构建 `dist`。 + +在 `gateway:watch` 后添加任何 Gateway 网关 CLI 标志,它们会在每次重启时透传。重新运行相同的监视命令会重新生成命名的 tmux 窗格,原始监视器仍会保留其单监视器锁,因此重复的监视器父进程会被替换,而不是堆积。 + +## 开发配置档案 + 开发 Gateway 网关(--dev) + +使用开发配置档案来隔离状态,并启动一个安全、可丢弃的设置用于调试。有**两个** `--dev` 标志: + +- **全局 `--dev`(配置档案):** 将状态隔离到 `~/.openclaw-dev` 下,并将 Gateway 网关端口默认为 `19001`(派生端口随之偏移)。 +- **`gateway --dev`:告知 Gateway 网关在缺失时自动创建默认配置 + 工作区**(并跳过 BOOTSTRAP.md)。 + +推荐流程(开发配置档案 + 开发引导): ```bash pnpm gateway:dev @@ -229,19 +251,19 @@ OPENCLAW_PROFILE=dev openclaw tui 如果你还没有全局安装,请通过 `pnpm openclaw ...` 运行 CLI。 -这会执行以下操作: +它会做这些事: -1. **配置文件隔离**(全局 `--dev`) +1. **配置档案隔离**(全局 `--dev`) - `OPENCLAW_PROFILE=dev` - `OPENCLAW_STATE_DIR=~/.openclaw-dev` - `OPENCLAW_CONFIG_PATH=~/.openclaw-dev/openclaw.json` - - `OPENCLAW_GATEWAY_PORT=19001`(browser/canvas 会相应偏移) + - `OPENCLAW_GATEWAY_PORT=19001`(浏览器/canvas 相应偏移) 2. **开发引导**(`gateway --dev`) - - 如果缺失,写入最小配置(`gateway.mode=local`,绑定 local loopback)。 + - 如果缺失,则写入最小配置(`gateway.mode=local`,绑定 loopback)。 - 将 `agent.workspace` 设置为开发工作区。 - 设置 `agent.skipBootstrap=true`(无 BOOTSTRAP.md)。 - - 如果缺失,则播种工作区文件: + - 如果缺失,则填充工作区文件: `AGENTS.md`、`SOUL.md`、`TOOLS.md`、`IDENTITY.md`、`USER.md`、`HEARTBEAT.md`。 - 默认身份:**C3‑PO**(礼仪机器人)。 - 在开发模式中跳过渠道提供商(`OPENCLAW_SKIP_CHANNELS=1`)。 @@ -253,7 +275,7 @@ pnpm gateway:dev:reset ``` -`--dev` 是一个**全局**配置文件标志,会被某些运行器吞掉。如果你需要明确写出它,请使用环境变量形式: +`--dev` 是一个**全局**配置档案标志,会被某些运行器吞掉。如果你需要明确写出它,请使用环境变量形式: ```bash OPENCLAW_PROFILE=dev openclaw gateway --dev --reset @@ -261,7 +283,7 @@ OPENCLAW_PROFILE=dev openclaw gateway --dev --reset -`--reset` 会清除配置、凭证、会话和开发工作区(使用 `trash`,而不是 `rm`),然后重新创建默认开发设置。 +`--reset` 会清除配置、凭证、会话和开发工作区(使用 `trash`,不是 `rm`),然后重新创建默认开发设置。 如果非开发 Gateway 网关已经在运行(launchd 或 systemd),请先停止它: @@ -274,10 +296,10 @@ openclaw gateway stop ## 原始流日志(OpenClaw) -OpenClaw 可以在任何过滤/格式化之前记录**原始 assistant 流**。 -这是查看推理是作为纯文本增量到达,还是作为独立 thinking block 到达的最佳方式。 +OpenClaw 可以在任何过滤/格式化之前记录**原始助手流**。 +这是查看推理是否以纯文本 delta(或作为单独的思考块)到达的最佳方式。 -通过 CLI 启用: +通过 CLI 启用它: ```bash pnpm gateway:watch --raw-stream @@ -300,9 +322,10 @@ OPENCLAW_RAW_STREAM_PATH=~/.openclaw/logs/raw-stream.jsonl `~/.openclaw/logs/raw-stream.jsonl` -## 原始 chunk 日志(pi-mono) +## 原始分块日志记录(pi-mono) -为了在原始 OpenAI 兼容 chunk 被解析为 block 之前捕获它们,pi-mono 提供了单独的日志记录器: +若要在解析为块之前捕获 **原始 OpenAI 兼容分块**, +pi-mono 提供了一个单独的记录器: ```bash PI_RAW_STREAM=1 @@ -318,13 +341,13 @@ PI_RAW_STREAM_PATH=~/.pi-mono/logs/raw-openai-completions.jsonl `~/.pi-mono/logs/raw-openai-completions.jsonl` -> 注意:这只由使用 pi-mono 的 +> 注意:这仅由使用 pi-mono 的 > `openai-completions` 提供商的进程发出。 -## 安全说明 +## 安全注意事项 -- 原始流日志可能包含完整提示词、工具输出和用户数据。 -- 将日志保留在本地,并在调试后删除它们。 +- 原始流日志可能包含完整提示、工具输出和用户数据。 +- 将日志保留在本地,并在调试后删除。 - 如果你共享日志,请先清理密钥和 PII。 ## 相关 diff --git a/docs/zh-CN/plugins/manifest.md b/docs/zh-CN/plugins/manifest.md index d044a9d07..5b9229da9 100644 --- a/docs/zh-CN/plugins/manifest.md +++ b/docs/zh-CN/plugins/manifest.md @@ -1,58 +1,53 @@ --- read_when: - - 你正在构建一个 OpenClaw 插件 - - 你需要发布插件配置模式或调试插件验证错误 + - 你正在构建 OpenClaw 插件 + - 你需要发布插件配置模式,或调试插件验证错误 summary: 插件清单 + JSON 架构要求(严格配置验证) title: 插件清单 x-i18n: - generated_at: "2026-04-28T17:10:24Z" + generated_at: "2026-04-29T08:48:35Z" model: gpt-5.5 provider: openai - source_hash: c9b3c48d2173ac6d818ea5a7887cd30ccaeb056f14529175c09d022df3b69cdc + source_hash: 2a529f9d4388039d76a6e351b454622b657a1ddcd4f4159f10be988568343cc2 source_path: plugins/manifest.md workflow: 16 --- -此页面仅适用于**原生 OpenClaw 插件清单**。 +此页面仅适用于 **OpenClaw 原生插件清单**。 -有关兼容的包布局,请参阅[插件包](/zh-CN/plugins/bundles)。 +有关兼容包布局,请参阅[插件包](/zh-CN/plugins/bundles)。 -兼容的包格式使用不同的清单文件: +兼容包格式使用不同的清单文件: - Codex 包:`.codex-plugin/plugin.json` -- Claude 包:`.claude-plugin/plugin.json`,或不带清单的默认 Claude 组件 - 布局 +- Claude 包:`.claude-plugin/plugin.json`,或不带清单的默认 Claude 组件布局 - Cursor 包:`.cursor-plugin/plugin.json` -OpenClaw 也会自动检测这些包布局,但不会根据此处描述的 -`openclaw.plugin.json` schema 来验证它们。 +OpenClaw 也会自动检测这些包布局,但它们不会根据此处描述的 `openclaw.plugin.json` 架构进行验证。 -对于兼容包,OpenClaw 目前会在布局符合 OpenClaw 运行时预期时,读取包元数据以及已声明的 -Skills 根目录、Claude 命令根目录、Claude 包 `settings.json` 默认值、 -Claude 包 LSP 默认值,以及受支持的钩子包。 +对于兼容包,当布局符合 OpenClaw 运行时期望时,OpenClaw 目前会读取包元数据、声明的 skill 根目录、Claude 命令根目录、Claude 包 `settings.json` 默认值、Claude 包 LSP 默认值,以及支持的钩子包。 -每个原生 OpenClaw 插件都**必须**在**插件根目录**中附带一个 `openclaw.plugin.json` 文件。OpenClaw 使用此清单在**不执行插件代码**的情况下验证配置。缺失或无效的清单会被视为插件错误,并阻止配置验证。 +每个原生 OpenClaw 插件都**必须**在**插件根目录**中提供 `openclaw.plugin.json` 文件。OpenClaw 使用此清单在**不执行插件代码**的情况下验证配置。缺失或无效的清单会被视为插件错误,并阻止配置验证。 -请参阅完整的插件系统指南:[插件](/zh-CN/tools/plugin)。 +请参阅完整插件系统指南:[插件](/zh-CN/tools/plugin)。 有关原生能力模型和当前外部兼容性指南: [能力模型](/zh-CN/plugins/architecture#public-capability-model)。 ## 此文件的作用 -`openclaw.plugin.json` 是 OpenClaw 在**加载你的插件代码之前**读取的元数据。以下所有内容都必须足够轻量,能够在不启动插件运行时的情况下检查。 +`openclaw.plugin.json` 是 OpenClaw 在**加载你的插件代码之前**读取的元数据。以下所有内容都必须足够轻量,无需启动插件运行时即可检查。 **用于:** -- 插件身份、配置验证和配置 UI 提示 -- 身份验证、新手引导和设置元数据(别名、自动启用、提供商环境变量、身份验证选项) +- 插件标识、配置验证和配置 UI 提示 +- 凭证、新手引导和设置元数据(别名、自动启用、提供商环境变量、凭证选项) - 控制平面界面的激活提示 - 模型系列所有权简写 - 静态能力所有权快照(`contracts`) -- 共享 `openclaw qa` 主机可以检查的 QA 运行器元数据 -- 合并到目录和验证界面的渠道专属配置元数据 +- 共享 `openclaw qa` 宿主可检查的 QA 运行器元数据 +- 合并到目录和验证界面的渠道特定配置元数据 -**不要用于:**注册运行时行为、声明代码入口点, -或 npm 安装元数据。这些应放在你的插件代码和 `package.json` 中。 +**不要用于:** 注册运行时行为、声明代码入口点,或 npm 安装元数据。这些属于你的插件代码和 `package.json`。 ## 最小示例 @@ -67,7 +62,7 @@ Claude 包 LSP 默认值,以及受支持的钩子包。 } ``` -## 丰富示例 +## 完整示例 ```json { @@ -146,72 +141,72 @@ Claude 包 LSP 默认值,以及受支持的钩子包。 ## 顶层字段参考 -| 字段 | 必需 | 类型 | 含义 | -| ------------------------------------ | ---- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `id` | 是 | `string` | 规范插件 id。这是在 `plugins.entries.` 中使用的 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` | 清单拥有的简写模型系列元数据,用于在运行时之前自动加载插件。 | -| `modelCatalog` | 否 | `object` | 此插件拥有的提供商的声明式模型目录元数据。这是未来在不加载插件运行时的情况下进行只读列表、新手引导、模型选择器、别名和抑制的控制平面契约。 | -| `modelPricing` | 否 | `object` | 提供商拥有的外部定价查找策略。可用它让本地/自托管提供商退出远程定价目录,或将提供商引用映射到 OpenRouter/LiteLLM 目录 id,而无需在核心中硬编码提供商 id。 | -| `modelIdNormalization` | 否 | `object` | 提供商拥有的模型 id 别名/前缀清理,必须在提供商运行时加载前运行。 | -| `providerEndpoints` | 否 | `object[]` | 清单拥有的端点 host/baseUrl 元数据,用于核心在提供商运行时加载前对提供商路由进行分类。 | -| `providerRequest` | 否 | `object` | 便宜的提供商系列和请求兼容性元数据,供通用请求策略在提供商运行时加载前使用。 | -| `cliBackends` | 否 | `string[]` | 此插件拥有的 CLI 推理后端 id。用于根据显式配置引用在启动时自动激活。 | -| `syntheticAuthRefs` | 否 | `string[]` | 提供商或 CLI 后端引用,其插件拥有的合成凭证钩子应在运行时加载前的冷模型发现期间被探测。 | -| `nonSecretAuthMarkers` | 否 | `string[]` | 内置插件拥有的占位 API key 值,表示非机密的本地、OAuth 或环境凭证状态。 | -| `commandAliases` | 否 | `object[]` | 此插件拥有的命令名称,应在运行时加载前生成具备插件感知能力的配置和 CLI 诊断。 | -| `providerAuthEnvVars` | 否 | `Record` | 已弃用的兼容性环境变量元数据,用于提供商凭证/Status 查找。新插件优先使用 `setup.providers[].envVars`;OpenClaw 在弃用窗口期仍会读取此字段。 | -| `providerAuthAliases` | 否 | `Record` | 应复用另一个提供商 id 进行凭证查找的提供商 id,例如共享基础提供商 API key 和凭证配置文件的编码提供商。 | -| `channelEnvVars` | 否 | `Record` | 便宜的渠道环境变量元数据,OpenClaw 可在不加载插件代码的情况下检查。用于通用启动/配置帮助器应看到的环境变量驱动渠道设置或凭证界面。 | -| `providerAuthChoices` | 否 | `object[]` | 便宜的凭证选择元数据,用于新手引导选择器、首选提供商解析和简单 CLI 标志接线。 | -| `activation` | 否 | `object` | 便宜的激活规划器元数据,用于启动、提供商、命令、渠道、路由和能力触发的加载。仅限元数据;实际行为仍由插件运行时拥有。 | -| `setup` | 否 | `object` | 便宜的设置/新手引导描述符,供发现和设置界面在不加载插件运行时的情况下检查。 | -| `qaRunners` | 否 | `object[]` | 便宜的 QA 运行器描述符,由共享的 `openclaw qa` 宿主在插件运行时加载前使用。 | -| `contracts` | 否 | `object` | 外部凭证钩子、语音、实时转录、实时语音、媒体理解、图像生成、音乐生成、视频生成、Web 获取、Web 搜索和工具所有权的静态内置能力快照。 | -| `mediaUnderstandingProviderMetadata` | 否 | `Record` | `contracts.mediaUnderstandingProviders` 中声明的提供商 id 的便宜媒体理解默认值。 | -| `channelConfigs` | 否 | `Record` | 清单拥有的渠道配置元数据,在运行时加载前合并到发现和验证界面中。 | -| `skills` | 否 | `string[]` | 要加载的 Skill 目录,相对于插件根目录。 | -| `name` | 否 | `string` | 人类可读的插件名称。 | -| `description` | 否 | `string` | 显示在插件界面中的简短摘要。 | -| `version` | 否 | `string` | 信息性插件版本。 | -| `uiHints` | 否 | `Record` | 配置字段的 UI 标签、占位符和敏感性提示。 | +| 字段 | 必填 | 类型 | 含义 | +| ------------------------------------ | -------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | 是 | `string` | 规范插件 id。这是 `plugins.entries.` 中使用的 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` | 清单拥有的简写模型系列元数据,用于在运行时之前自动加载插件。 | +| `modelCatalog` | 否 | `object` | 此插件拥有的提供商的声明式模型目录元数据。这是未来在不加载插件运行时的情况下进行只读列表、新手引导、模型选择器、别名和抑制的控制平面契约。 | +| `modelPricing` | 否 | `object` | 提供商拥有的外部价格查找策略。用它让本地/自托管提供商跳过远程价格目录,或将提供商引用映射到 OpenRouter/LiteLLM 目录 id,而无需在核心中硬编码提供商 id。 | +| `modelIdNormalization` | 否 | `object` | 提供商拥有的模型 id 别名/前缀清理,必须在提供商运行时加载前执行。 | +| `providerEndpoints` | 否 | `object[]` | 清单拥有的端点 host/baseUrl 元数据,用于核心必须在提供商运行时加载前分类的提供商路由。 | +| `providerRequest` | 否 | `object` | 泛型请求策略在提供商运行时加载前使用的廉价提供商系列和请求兼容性元数据。 | +| `cliBackends` | 否 | `string[]` | 此插件拥有的 CLI 推理后端 id。用于从显式配置引用进行启动时自动激活。 | +| `syntheticAuthRefs` | 否 | `string[]` | 提供商或 CLI 后端引用,其插件拥有的合成凭证钩子应在运行时加载前的冷启动模型发现期间被探测。 | +| `nonSecretAuthMarkers` | 否 | `string[]` | 内置插件拥有的占位 API key 值,表示非机密的本地、OAuth 或环境凭证状态。 | +| `commandAliases` | 否 | `object[]` | 此插件拥有的命令名称,应在运行时加载前生成具备插件感知能力的配置和 CLI 诊断。 | +| `providerAuthEnvVars` | 否 | `Record` | 已弃用的兼容性环境变量元数据,用于提供商凭证/Status 查找。新插件应优先使用 `setup.providers[].envVars`;OpenClaw 在弃用窗口期内仍会读取此项。 | +| `providerAuthAliases` | 否 | `Record` | 应复用另一个提供商 id 进行凭证查找的提供商 id,例如共享基础提供商 API key 和凭证配置档的编码提供商。 | +| `channelEnvVars` | 否 | `Record` | OpenClaw 无需加载插件代码即可检查的廉价渠道环境变量元数据。将其用于通用启动/配置助手应能看到的环境变量驱动渠道设置或凭证界面。 | +| `providerAuthChoices` | 否 | `object[]` | 用于新手引导选择器、首选提供商解析和简单 CLI 标志接线的廉价凭证选项元数据。 | +| `activation` | 否 | `object` | 用于启动、提供商、命令、渠道、路由和能力触发加载的廉价激活规划器元数据。仅为元数据;实际行为仍由插件运行时拥有。 | +| `setup` | 否 | `object` | 设备发现和设置界面无需加载插件运行时即可检查的廉价设置/新手引导描述符。 | +| `qaRunners` | 否 | `object[]` | 共享 `openclaw qa` 宿主在插件运行时加载前使用的廉价 QA 运行器描述符。 | +| `contracts` | 否 | `object` | 用于外部凭证钩子、语音、实时转录、实时语音、媒体理解、图像生成、音乐生成、视频生成、Web 获取、Web 搜索和工具归属的静态内置能力快照。 | +| `mediaUnderstandingProviderMetadata` | 否 | `Record` | 为 `contracts.mediaUnderstandingProviders` 中声明的提供商 id 提供的廉价媒体理解默认值。 | +| `channelConfigs` | 否 | `Record` | 清单拥有的渠道配置元数据,在运行时加载前合并到设备发现和校验界面中。 | +| `skills` | 否 | `string[]` | 要加载的 Skill 目录,相对于插件根目录。 | +| `name` | 否 | `string` | 人类可读的插件名称。 | +| `description` | 否 | `string` | 插件界面中显示的简短摘要。 | +| `version` | 否 | `string` | 信息性插件版本。 | +| `uiHints` | 否 | `Record` | 配置字段的 UI 标签、占位符和敏感性提示。 | ## providerAuthChoices 参考 -每个 `providerAuthChoices` 条目描述一个新手引导或凭证选择。 +每个 `providerAuthChoices` 条目描述一个新手引导或凭证选项。 OpenClaw 会在提供商运行时加载前读取它。 -提供商设置列表会使用这些清单选择、从描述符派生的设置选择, -以及安装目录元数据,而无需加载提供商运行时。 +提供商设置列表会使用这些清单选项、从描述符派生的设置 +选项,以及安装目录元数据,而无需加载提供商运行时。 -| 字段 | 必需 | 类型 | 含义 | -| --------------------- | ---- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `provider` | 是 | `string` | 此选择所属的提供商 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` | 简单单标志身份验证流程的内部选项键。 | -| `cliFlag` | 否 | `string` | CLI 标志名称,例如 `--openrouter-api-key`。 | -| `cliOption` | 否 | `string` | 完整 CLI 选项形式,例如 `--openrouter-api-key `。 | -| `cliDescription` | 否 | `string` | CLI 帮助中使用的描述。 | -| `onboardingScopes` | 否 | `Array<"text-inference" \| "image-generation">` | 此选择应出现在哪些新手引导表面中。如果省略,默认为 `["text-inference"]`。 | +| 字段 | 必填 | 类型 | 含义 | +| --------------------- | ---- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `provider` | 是 | `string` | 此选项所属的提供商 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` | 用于简单单标志凭证流程的内部选项键。 | +| `cliFlag` | 否 | `string` | CLI 标志名称,例如 `--openrouter-api-key`。 | +| `cliOption` | 否 | `string` | 完整 CLI 选项形式,例如 `--openrouter-api-key `。 | +| `cliDescription` | 否 | `string` | CLI 帮助中使用的描述。 | +| `onboardingScopes` | 否 | `Array<"text-inference" \| "image-generation">` | 此选项应出现在哪些新手引导界面中。如果省略,默认值为 `["text-inference"]`。 | ## commandAliases 参考 -当插件拥有用户可能会误放进 `plugins.allow`,或尝试作为根 CLI 命令运行的运行时命令名称时,使用 `commandAliases`。OpenClaw 使用此元数据进行诊断,而无需导入插件运行时代码。 +当插件拥有一个运行时命令名称,而用户可能会误将其放入 `plugins.allow` 或尝试作为根 CLI 命令运行时,请使用 `commandAliases`。OpenClaw 使用这些元数据进行诊断,而无需导入插件运行时代码。 ```json { @@ -225,26 +220,26 @@ OpenClaw 会在提供商运行时加载前读取它。 } ``` -| 字段 | 必需 | 类型 | 含义 | -| ------------ | ---- | ----------------- | --------------------------------------------------------------------- | -| `name` | 是 | `string` | 属于此插件的命令名称。 | -| `kind` | 否 | `"runtime-slash"` | 将别名标记为聊天斜杠命令,而不是根 CLI 命令。 | -| `cliCommand` | 否 | `string` | 如果存在,用于建议 CLI 操作的相关根 CLI 命令。 | +| 字段 | 必填 | 类型 | 含义 | +| ------------ | ---- | ----------------- | -------------------------------------------------------------- | +| `name` | 是 | `string` | 属于此插件的命令名称。 | +| `kind` | 否 | `"runtime-slash"` | 将该别名标记为聊天斜杠命令,而不是根 CLI 命令。 | +| `cliCommand` | 否 | `string` | 如果存在,用于建议 CLI 操作的相关根 CLI 命令。 | ## activation 参考 -当插件可以低成本声明哪些控制平面事件应将其纳入激活/加载计划时,使用 `activation`。 +当插件可以低成本声明哪些控制平面事件应将其纳入激活/加载计划时,请使用 `activation`。 -此块是规划器元数据,而不是生命周期 API。它不会注册运行时行为,不会替代 `register(...)`,也不承诺插件代码已经执行。激活规划器使用这些字段,在回退到现有清单所有权元数据(例如 `providers`、`channels`、`commandAliases`、`setup.providers`、`contracts.tools` 和钩子)之前,缩小候选插件范围。 +此块是规划器元数据,不是生命周期 API。它不会注册运行时行为,不会替代 `register(...)`,也不承诺插件代码已经执行。激活规划器使用这些字段在回退到现有清单所有权元数据之前缩小候选插件范围,例如 `providers`、`channels`、`commandAliases`、`setup.providers`、`contracts.tools` 和钩子。 -优先使用已经描述所有权的最窄元数据。当 `providers`、`channels`、`commandAliases`、设置描述符或 `contracts` 能表达这种关系时,使用这些字段。将 `activation` 用于无法由这些所有权字段表示的额外规划器提示。 -将顶层 `cliBackends` 用于 CLI 运行时别名,例如 `claude-cli`、`codex-cli` 或 `google-gemini-cli`;`activation.onAgentHarnesses` 仅用于尚无所有权字段的嵌入式 agent harness id。 +优先使用已经描述所有权的最窄元数据。当 `providers`、`channels`、`commandAliases`、设置描述符或 `contracts` 能表达这种关系时,请使用这些字段。将 `activation` 用于那些无法由这些所有权字段表示的额外规划器提示。 +对于 `claude-cli`、`codex-cli` 或 `google-gemini-cli` 等 CLI 运行时别名,请使用顶层 `cliBackends`;`activation.onAgentHarnesses` 仅用于尚无所有权字段的嵌入式智能体 harness id。 -此块仅是元数据。它不会注册运行时行为,也不会替代 `register(...)`、`setupEntry` 或其他运行时/插件入口点。当前消费者会在更广泛的插件加载前将其用作缩小范围的提示,因此缺少 activation 元数据通常只影响性能;只要旧版清单所有权回退仍然存在,就不应改变正确性。 +此块仅为元数据。它不会注册运行时行为,也不会替代 `register(...)`、`setupEntry` 或其他运行时/插件入口点。当前使用方将其作为更广泛插件加载前的缩小范围提示,因此缺少激活元数据通常只影响性能;只要旧版清单所有权回退仍然存在,它不应改变正确性。 -随着 OpenClaw 摆脱隐式启动导入,每个插件都应有意设置 `activation.onStartup`。仅当插件必须在 Gateway 网关启动期间运行时,才将其设为 `true`。当插件在启动时处于惰性状态,并且应仅由更窄的触发器加载时,将其设为 `false`。省略 `onStartup` 会保留已弃用的旧版隐式启动 sidecar 回退,用于没有静态能力元数据的插件;未来版本可能会停止在启动时加载这些插件,除非它们声明 `activation.onStartup: true`。当插件仍依赖该回退时,插件 Status 和兼容性报告会以 `legacy-implicit-startup-sidecar` 发出警告。 +随着 OpenClaw 摆脱隐式启动导入,每个插件都应有意设置 `activation.onStartup`。仅当插件必须在 Gateway 网关启动期间运行时,才将其设置为 `true`。当插件在启动时处于惰性状态,并且应仅由更窄的触发器加载时,将其设置为 `false`。省略 `onStartup` 会为没有静态能力元数据的插件保留已弃用的旧版隐式启动 sidecar 回退;未来版本可能会停止在启动时加载这些插件,除非它们声明 `activation.onStartup: true`。当插件仍依赖该回退时,插件 Status 和兼容性报告会用 `legacy-implicit-startup-sidecar` 发出警告。 -对于迁移测试,设置 `OPENCLAW_DISABLE_LEGACY_IMPLICIT_STARTUP_SIDECARS=1` 以仅禁用该已弃用的回退。此选择加入模式不会阻止显式 `activation.onStartup: true` 插件,也不会阻止由渠道、配置、agent harness、内存或其他更窄激活触发器加载的插件。 +对于迁移测试,设置 `OPENCLAW_DISABLE_LEGACY_IMPLICIT_STARTUP_SIDECARS=1` 以仅禁用该已弃用的回退。此选择加入模式不会阻止显式的 `activation.onStartup: true` 插件,也不会阻止由渠道、配置、agent-harness、memory 或其他更窄激活触发器加载的插件。 ```json { @@ -260,31 +255,31 @@ OpenClaw 会在提供商运行时加载前读取它。 } ``` -| 字段 | 必需 | 类型 | 含义 | -| ------------------ | ---- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `onStartup` | 否 | `boolean` | 显式 Gateway 网关启动激活。每个插件都应设置此字段。`true` 会在启动期间导入插件;`false` 会退出已弃用的隐式 sidecar 启动回退,除非另一个匹配的触发器要求加载。 | -| `onProviders` | 否 | `string[]` | 应将此插件纳入激活/加载计划的提供商 id。 | -| `onAgentHarnesses` | 否 | `string[]` | 应将此插件纳入激活/加载计划的嵌入式 agent harness 运行时 id。对 CLI 后端别名使用顶层 `cliBackends`。 | -| `onCommands` | 否 | `string[]` | 应将此插件纳入激活/加载计划的命令 id。 | -| `onChannels` | 否 | `string[]` | 应将此插件纳入激活/加载计划的渠道 id。 | -| `onRoutes` | 否 | `string[]` | 应将此插件纳入激活/加载计划的路由种类。 | -| `onConfigPaths` | 否 | `string[]` | 当路径存在且未被显式禁用时,应将此插件纳入启动/加载计划的根相对配置路径。 | -| `onCapabilities` | 否 | `Array<"provider" \| "channel" \| "tool" \| "hook">` | 控制平面激活规划使用的宽泛能力提示。尽可能优先使用更窄的字段。 | +| 字段 | 必填 | 类型 | 含义 | +| ------------------ | ---- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `onStartup` | 否 | `boolean` | 显式 Gateway 网关启动激活。每个插件都应设置此项。`true` 会在启动期间导入插件;`false` 会选择退出已弃用的隐式 sidecar 启动回退,除非另一个匹配的触发器要求加载。 | +| `onProviders` | 否 | `string[]` | 应将此插件纳入激活/加载计划的提供商 id。 | +| `onAgentHarnesses` | 否 | `string[]` | 应将此插件纳入激活/加载计划的嵌入式智能体 harness 运行时 id。对于 CLI 后端别名,请使用顶层 `cliBackends`。 | +| `onCommands` | 否 | `string[]` | 应将此插件纳入激活/加载计划的命令 id。 | +| `onChannels` | 否 | `string[]` | 应将此插件纳入激活/加载计划的渠道 id。 | +| `onRoutes` | 否 | `string[]` | 应将此插件纳入激活/加载计划的路由种类。 | +| `onConfigPaths` | 否 | `string[]` | 当路径存在且未被显式禁用时,应将此插件纳入启动/加载计划的根相对配置路径。 | +| `onCapabilities` | 否 | `Array<"provider" \| "channel" \| "tool" \| "hook">` | 控制平面激活规划使用的宽泛能力提示。尽可能优先使用更窄的字段。 | -当前实时消费者: +当前实时使用方: -- Gateway 网关启动规划使用 `activation.onStartup` 进行显式启动导入,并退出已弃用的隐式 sidecar 启动回退 -- 由命令触发的 CLI 规划会回退到旧版 `commandAliases[].cliCommand` 或 `commandAliases[].name` -- agent runtime 启动规划对嵌入式 harness 使用 `activation.onAgentHarnesses`,并对 CLI 运行时别名使用顶层 `cliBackends[]` -- 由渠道触发的设置/渠道规划在缺少显式渠道 activation 元数据时,会回退到旧版 `channels[]` 所有权 -- 启动插件规划对非渠道根配置表面使用 `activation.onConfigPaths`,例如内置浏览器插件的 `browser` 块 -- 由提供商触发的设置/运行时规划在缺少显式提供商 activation 元数据时,会回退到旧版 `providers[]` 和顶层 `cliBackends[]` 所有权 +- Gateway 网关启动规划使用 `activation.onStartup` 进行显式启动导入,并选择退出已弃用的隐式 sidecar 启动回退 +- 命令触发的 CLI 规划会回退到旧版 `commandAliases[].cliCommand` 或 `commandAliases[].name` +- agent-runtime 启动规划对嵌入式 harness 使用 `activation.onAgentHarnesses`,对 CLI 运行时别名使用顶层 `cliBackends[]` +- 渠道触发的设置/渠道规划在缺少显式渠道激活元数据时,会回退到旧版 `channels[]` 所有权 +- 启动插件规划对非渠道根配置界面使用 `activation.onConfigPaths`,例如内置浏览器插件的 `browser` 块 +- 提供商触发的设置/运行时规划在缺少显式提供商激活元数据时,会回退到旧版 `providers[]` 和顶层 `cliBackends[]` 所有权 -规划器诊断可以区分显式激活提示和清单所有权回退。例如,`activation-command-hint` 表示 `activation.onCommands` 匹配,而 `manifest-command-alias` 表示规划器改用 `commandAliases` 所有权。这些原因标签用于主机诊断和测试;插件作者应继续声明最能描述所有权的元数据。 +规划器诊断可以区分显式激活提示和清单所有权回退。例如,`activation-command-hint` 表示 `activation.onCommands` 匹配,而 `manifest-command-alias` 表示规划器改用了 `commandAliases` 所有权。这些原因标签用于宿主诊断和测试;插件作者应继续声明最能描述所有权的元数据。 ## qaRunners 参考 -当插件在共享的 `openclaw qa` 根之下贡献一个或多个传输运行器时,使用 `qaRunners`。保持此元数据低成本且静态;插件运行时仍通过导出 `qaRunnerCliRegistrations` 的轻量级 `runtime-api.ts` 表面拥有实际 CLI 注册。 +当插件在共享的 `openclaw qa` 根之下贡献一个或多个传输运行器时,请使用 `qaRunners`。保持这些元数据轻量且静态;插件运行时仍通过轻量的 `runtime-api.ts` 界面拥有实际 CLI 注册,该界面会导出 `qaRunnerCliRegistrations`。 ```json { @@ -297,14 +292,14 @@ OpenClaw 会在提供商运行时加载前读取它。 } ``` -| 字段 | 必需 | 类型 | 含义 | +| 字段 | 必填 | 类型 | 含义 | | ------------- | ---- | -------- | ------------------------------------------------------------------ | | `commandName` | 是 | `string` | 挂载在 `openclaw qa` 下的子命令,例如 `matrix`。 | -| `description` | 否 | `string` | 当共享宿主需要存根命令时使用的回退帮助文本。 | +| `description` | 否 | `string` | 当共享宿主需要存根命令时使用的后备帮助文本。 | -## 设置参考 +## setup 参考 -当设置和新手引导界面需要在运行时加载前获取低成本的插件自有元数据时,使用 `setup`。 +当设置和新手引导界面需要在运行时加载前获取由插件拥有的低成本元数据时,使用 `setup`。 ```json { @@ -323,40 +318,40 @@ OpenClaw 会在提供商运行时加载前读取它。 } ``` -顶层 `cliBackends` 仍然有效,并继续描述 CLI 推断后端。`setup.cliBackends` 是用于控制平面/设置流程的设置专用描述符界面,这些流程应保持仅元数据。 +顶层 `cliBackends` 仍然有效,并继续描述 CLI 推理后端。`setup.cliBackends` 是设置专用的描述符界面,用于应保持仅元数据的控制平面/设置流程。 -存在时,`setup.providers` 和 `setup.cliBackends` 是设置发现首选的描述符优先查找界面。如果描述符只是缩小候选插件范围,而设置仍需要更丰富的设置时运行时钩子,请设置 `requiresRuntime: true`,并保留 `setup-api` 作为回退执行路径。 +当存在时,`setup.providers` 和 `setup.cliBackends` 是设置发现首选的描述符优先查找界面。如果描述符只是缩小候选插件范围,而设置仍需要更丰富的设置时运行时钩子,请设置 `requiresRuntime: true`,并保留 `setup-api` 作为后备执行路径。 -OpenClaw 还会在通用提供商鉴权和环境变量查找中包含 `setup.providers[].envVars`。`providerAuthEnvVars` 在弃用窗口期间仍通过兼容适配器受支持,但仍使用它的非内置插件会收到清单诊断。新插件应将设置/Status 环境元数据放在 `setup.providers[].envVars` 上。 +OpenClaw 还会在通用提供商凭证和环境变量查找中包含 `setup.providers[].envVars`。`providerAuthEnvVars` 在弃用窗口期仍通过兼容性适配器受支持,但仍使用它的非内置插件会收到清单诊断。新插件应将设置/Status 环境元数据放在 `setup.providers[].envVars` 上。 -当没有可用的设置入口,或 `setup.requiresRuntime: false` 声明不需要设置运行时时,OpenClaw 也可以从 `setup.providers[].authMethods` 派生简单的设置选项。显式的 `providerAuthChoices` 条目仍优先用于自定义标签、CLI 标志、新手引导范围和助手元数据。 +当没有设置条目可用,或当 `setup.requiresRuntime: false` 声明不需要设置运行时时,OpenClaw 也可以从 `setup.providers[].authMethods` 推导简单的设置选项。显式的 `providerAuthChoices` 条目仍然是自定义标签、CLI 标志、新手引导范围和助手元数据的首选。 -仅当这些描述符足以支撑设置界面时,才设置 `requiresRuntime: false`。OpenClaw 将显式的 `false` 视为仅描述符契约,不会为设置查找执行 `setup-api` 或 `openclaw.setupEntry`。如果仅描述符插件仍提供这些设置运行时入口之一,OpenClaw 会报告一条追加诊断并继续忽略它。省略 `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` 注册了清单描述符未声明的提供商或 CLI 后端,或某个描述符没有匹配的运行时注册,设置注册表诊断会报告描述符漂移。这些诊断是追加性的,不会拒绝旧版插件。 -### `setup.providers` 参考 +### setup.providers 参考 -| 字段 | 必需 | 类型 | 含义 | -| ------------- | ---- | ---------- | --------------------------------------------------------------------------- | -| `id` | 是 | `string` | 在设置或新手引导期间暴露的提供商 id。保持规范化 id 全局唯一。 | -| `authMethods` | 否 | `string[]` | 此提供商在不加载完整运行时的情况下支持的设置/鉴权方法 id。 | -| `envVars` | 否 | `string[]` | 通用设置/Status 界面可在插件运行时加载前检查的环境变量。 | +| 字段 | 必填 | 类型 | 含义 | +| ------------- | ---- | ---------- | ------------------------------------------------------------------------------ | +| `id` | 是 | `string` | 在设置或新手引导期间暴露的提供商 ID。保持规范化 ID 全局唯一。 | +| `authMethods` | 否 | `string[]` | 此提供商无需加载完整运行时即可支持的设置/凭证方法 ID。 | +| `envVars` | 否 | `string[]` | 通用设置/Status 界面可在插件运行时加载前检查的环境变量。 | -### `setup` 字段 +### setup 字段 -| 字段 | 必需 | 类型 | 含义 | -| ------------------ | ---- | ---------- | ------------------------------------------------------------------------------------------ | -| `providers` | 否 | `object[]` | 在设置和新手引导期间暴露的提供商设置描述符。 | -| `cliBackends` | 否 | `string[]` | 用于描述符优先设置查找的设置时后端 id。保持规范化 id 全局唯一。 | -| `configMigrations` | 否 | `string[]` | 由此插件的设置界面拥有的配置迁移 id。 | -| `requiresRuntime` | 否 | `boolean` | 设置在描述符查找后是否仍需要执行 `setup-api`。 | +| 字段 | 必填 | 类型 | 含义 | +| ------------------ | ---- | ---------- | -------------------------------------------------------------------------------------------- | +| `providers` | 否 | `object[]` | 在设置和新手引导期间暴露的提供商设置描述符。 | +| `cliBackends` | 否 | `string[]` | 用于描述符优先设置查找的设置时后端 ID。保持规范化 ID 全局唯一。 | +| `configMigrations` | 否 | `string[]` | 由此插件的设置界面拥有的配置迁移 ID。 | +| `requiresRuntime` | 否 | `boolean` | 描述符查找之后,设置是否仍需要执行 `setup-api`。 | -## `uiHints` 参考 +## uiHints 参考 -`uiHints` 是从配置字段名到小型渲染提示的映射。 +`uiHints` 是从配置字段名称到小型渲染提示的映射。 ```json { @@ -373,18 +368,18 @@ OpenClaw 还会在通用提供商鉴权和环境变量查找中包含 `setup.pro 每个字段提示可以包含: -| 字段 | 类型 | 含义 | -| ------------- | ---------- | ---------------------------- | -| `label` | `string` | 面向用户的字段标签。 | -| `help` | `string` | 简短帮助文本。 | -| `tags` | `string[]` | 可选 UI 标签。 | -| `advanced` | `boolean` | 将字段标记为高级字段。 | -| `sensitive` | `boolean` | 将字段标记为秘密或敏感字段。 | -| `placeholder` | `string` | 表单输入的占位文本。 | +| 字段 | 类型 | 含义 | +| ------------- | ---------- | ------------------------------ | +| `label` | `string` | 面向用户的字段标签。 | +| `help` | `string` | 简短帮助文本。 | +| `tags` | `string[]` | 可选的 UI 标签。 | +| `advanced` | `boolean` | 将字段标记为高级字段。 | +| `sensitive` | `boolean` | 将字段标记为机密或敏感字段。 | +| `placeholder` | `string` | 表单输入的占位符文本。 | -## `contracts` 参考 +## contracts 参考 -仅将 `contracts` 用于 OpenClaw 可以在不导入插件运行时的情况下读取的静态能力所有权元数据。 +仅将 `contracts` 用于 OpenClaw 可在不导入插件运行时的情况下读取的静态能力所有权元数据。 ```json { @@ -410,30 +405,30 @@ OpenClaw 还会在通用提供商鉴权和环境变量查找中包含 `setup.pro | 字段 | 类型 | 含义 | | -------------------------------- | ---------- | --------------------------------------------------------------------- | -| `embeddedExtensionFactories` | `string[]` | Codex 应用服务器扩展工厂 id,目前为 `codex-app-server`。 | -| `agentToolResultMiddleware` | `string[]` | 内置插件可为其注册工具结果中间件的运行时 id。 | -| `externalAuthProviders` | `string[]` | 此插件拥有其外部鉴权配置文件钩子的提供商 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。 | -| `migrationProviders` | `string[]` | 此插件为 `openclaw migrate` 拥有的导入提供商 id。 | +| `embeddedExtensionFactories` | `string[]` | Codex 应用服务器扩展工厂 ID,目前为 `codex-app-server`。 | +| `agentToolResultMiddleware` | `string[]` | 内置插件可为其注册工具结果中间件的运行时 ID。 | +| `externalAuthProviders` | `string[]` | 此插件拥有其外部凭证配置文件钩子的提供商 ID。 | +| `speechProviders` | `string[]` | 此插件拥有的语音提供商 ID。 | +| `realtimeTranscriptionProviders` | `string[]` | 此插件拥有的实时转录提供商 ID。 | +| `realtimeVoiceProviders` | `string[]` | 此插件拥有的实时语音提供商 ID。 | +| `memoryEmbeddingProviders` | `string[]` | 此插件拥有的 Memory embedding 提供商 ID。 | +| `mediaUnderstandingProviders` | `string[]` | 此插件拥有的媒体理解提供商 ID。 | +| `imageGenerationProviders` | `string[]` | 此插件拥有的图像生成提供商 ID。 | +| `videoGenerationProviders` | `string[]` | 此插件拥有的视频生成提供商 ID。 | +| `webFetchProviders` | `string[]` | 此插件拥有的 Web-fetch 提供商 ID。 | +| `webSearchProviders` | `string[]` | 此插件拥有的 Web-search 提供商 ID。 | +| `migrationProviders` | `string[]` | 此插件为 `openclaw migrate` 拥有的导入提供商 ID。 | | `tools` | `string[]` | 此插件为内置契约检查拥有的 Agent 工具名称。 | -`contracts.embeddedExtensionFactories` 保留给内置的仅 Codex 应用服务器扩展工厂。内置工具结果转换应声明 `contracts.agentToolResultMiddleware`,并改为使用 `api.registerAgentToolResultMiddleware(...)` 注册。外部插件不能注册工具结果中间件,因为该接缝可以在模型看到高信任工具输出之前重写它。 +`contracts.embeddedExtensionFactories` 保留给内置的仅 Codex 应用服务器扩展工厂。内置工具结果转换应改为声明 `contracts.agentToolResultMiddleware`,并使用 `api.registerAgentToolResultMiddleware(...)` 注册。外部插件不能注册工具结果中间件,因为该接缝可以在模型看到高信任工具输出前重写它。 -实现 `resolveExternalAuthProfiles` 的提供商插件应声明 `contracts.externalAuthProviders`。没有声明的插件仍会通过已弃用的兼容回退运行,但该回退更慢,并将在迁移窗口后移除。 +实现 `resolveExternalAuthProfiles` 的提供商插件应声明 `contracts.externalAuthProviders`。没有该声明的插件仍会通过已弃用的兼容性后备运行,但该后备更慢,并会在迁移窗口期后移除。 -内置 Memory 嵌入提供商应为它暴露的每个适配器 id 声明 `contracts.memoryEmbeddingProviders`,包括 `local` 等内置适配器。独立 CLI 路径会使用此清单契约,在完整 Gateway 网关运行时注册提供商之前,仅加载拥有该能力的插件。 +内置 Memory embedding 提供商应为其暴露的每个适配器 ID 声明 `contracts.memoryEmbeddingProviders`,包括 `local` 等内置适配器。独立 CLI 路径使用此清单契约,在完整 Gateway 网关运行时注册提供商之前,仅加载拥有它的插件。 -## `mediaUnderstandingProviderMetadata` 参考 +## mediaUnderstandingProviderMetadata 参考 -当媒体理解提供商具有默认模型、自动鉴权回退优先级,或通用核心帮助程序在运行时加载前需要的原生文档支持时,使用 `mediaUnderstandingProviderMetadata`。键也必须在 `contracts.mediaUnderstandingProviders` 中声明。 +当媒体理解提供商具有默认模型、自动凭证后备优先级,或通用核心帮助程序在运行时加载前需要的原生文档支持时,使用 `mediaUnderstandingProviderMetadata`。键还必须在 `contracts.mediaUnderstandingProviders` 中声明。 ```json { @@ -458,34 +453,34 @@ OpenClaw 还会在通用提供商鉴权和环境变量查找中包含 `setup.pro 每个提供商条目可以包含: -| 字段 | 类型 | 含义 | -| ---------------------- | ----------------------------------- | -------------------------------------------------------------------------- | -| `capabilities` | `("image" \| "audio" \| "video")[]` | 此提供商暴露的媒体能力。 | -| `defaultModels` | `Record` | 配置未指定模型时使用的能力到模型默认值。 | -| `autoPriority` | `Record` | 数值越小,在基于凭证的自动提供商回退中排序越靠前。 | -| `nativeDocumentInputs` | `"pdf"[]` | 提供商支持的原生文档输入。 | +| 字段 | 类型 | 含义 | +| ---------------------- | ----------------------------------- | -------------------------------------------------------------------- | +| `capabilities` | `("image" \| "audio" \| "video")[]` | 此提供商暴露的媒体能力。 | +| `defaultModels` | `Record` | 当配置未指定模型时使用的能力到模型默认值。 | +| `autoPriority` | `Record` | 数值越小,在基于凭证的自动提供商后备中排序越靠前。 | +| `nativeDocumentInputs` | `"pdf"[]` | 提供商支持的原生文档输入。 | -## `channelConfigs` 参考 +## channelConfigs 参考 -当渠道插件需要在运行时加载前获取低成本配置元数据时,使用 `channelConfigs`。当没有可用设置入口,或 `setup.requiresRuntime: false` 声明不需要设置运行时时,只读渠道设置/Status 发现可以直接为已配置的外部渠道使用此元数据。 +当渠道插件需要在运行时加载前获取低成本配置元数据时,使用 `channelConfigs`。只读渠道设置/Status 发现可以直接使用此元数据处理已配置的外部渠道,适用于没有设置条目可用,或 `setup.requiresRuntime: false` 声明不需要设置运行时的情况。 -`channelConfigs` 是插件清单元数据,不是新的顶层用户配置段。用户仍在 `channels.` 下配置渠道实例。OpenClaw 会读取清单元数据,以便在插件运行时代码执行前决定哪个插件拥有该已配置渠道。 +`channelConfigs` 是插件清单元数据,不是新的顶层用户配置区段。用户仍然在 `channels.` 下配置渠道实例。OpenClaw 会读取清单元数据,以便在插件运行时代码执行前确定哪个插件拥有该已配置渠道。 对于渠道插件,`configSchema` 和 `channelConfigs` 描述不同路径: - `configSchema` 验证 `plugins.entries..config` - `channelConfigs..schema` 验证 `channels.` -非内置插件如果声明了 `channels[]`,也应声明匹配的 -`channelConfigs` 条目。没有这些条目,OpenClaw 仍然可以加载该插件,但 -冷路径配置 schema、设置和控制 UI 界面无法在插件运行时执行前知道 +声明 `channels[]` 的非内置插件也应声明匹配的 +`channelConfigs` 条目。没有这些条目时,OpenClaw 仍可加载插件,但 +冷路径配置 schema、设置和 Control UI 界面要等到插件运行时执行后,才能知道 渠道拥有的选项形状。 `channelConfigs..commands.nativeCommandsAutoEnabled` 和 -`nativeSkillsAutoEnabled` 可以为在渠道运行时加载前运行的命令配置 +`nativeSkillsAutoEnabled` 可以为在渠道运行时加载前执行的命令配置 检查声明静态 `auto` 默认值。内置渠道也可以通过 -`package.json#openclaw.channel.commands` 与其他由 package 拥有的渠道目录元数据一起发布 -相同默认值。 +`package.json#openclaw.channel.commands` 发布相同默认值,并与 +其他由包拥有的渠道目录元数据放在一起。 ```json { @@ -518,20 +513,20 @@ OpenClaw 还会在通用提供商鉴权和环境变量查找中包含 `setup.pro 每个渠道条目可以包含: -| 字段 | 类型 | 含义 | -| ------------- | ------------------------ | ------------------------------------------------------------------------------------------ | -| `schema` | `object` | `channels.` 的 JSON Schema。每个已声明的渠道配置条目都必须提供。 | -| `uiHints` | `Record` | 该渠道配置部分的可选 UI 标签、占位符和敏感提示。 | -| `label` | `string` | 当运行时元数据尚未就绪时,合并到选择器和检查界面的渠道标签。 | -| `description` | `string` | 用于检查和目录界面的简短渠道描述。 | -| `commands` | `object` | 用于运行时前配置检查的静态原生命令和原生 Skills 自动默认值。 | -| `preferOver` | `string[]` | 此渠道在选择界面中应优先于的旧版或较低优先级插件 ID。 | +| 字段 | 类型 | 含义 | +| ------------- | ------------------------ | ----------------------------------------------------------------------------------------- | +| `schema` | `object` | `channels.` 的 JSON Schema。每个声明的渠道配置条目都必须提供。 | +| `uiHints` | `Record` | 该渠道配置部分的可选 UI 标签、占位符和敏感提示。 | +| `label` | `string` | 运行时元数据未就绪时,合并到选择器和检查界面的渠道标签。 | +| `description` | `string` | 用于检查和目录界面的简短渠道说明。 | +| `commands` | `object` | 用于运行时前配置检查的静态原生命令和原生 Skills 自动默认值。 | +| `preferOver` | `string[]` | 此渠道在选择界面中应优先于的旧版或较低优先级插件 ID。 | ### 替换另一个渠道插件 -当你的插件是某个渠道 ID 的首选拥有者,而另一个插件也可以提供该渠道时, -请使用 `preferOver`。常见场景包括重命名的插件 ID、取代内置插件的 -独立插件,或为了配置兼容性而保留相同渠道 ID 的维护版 fork。 +当你的插件是某个渠道 ID 的首选拥有者,而另一个插件也能提供该渠道时, +使用 `preferOver`。常见情况包括重命名的插件 ID、取代内置插件的 +独立插件,或为了配置兼容性而保留相同渠道 ID 的维护分支。 ```json { @@ -552,20 +547,20 @@ OpenClaw 还会在通用提供商鉴权和环境变量查找中包含 `setup.pro } ``` -配置了 `channels.chat` 时,OpenClaw 会同时考虑渠道 ID 和首选插件 ID。 -如果较低优先级插件只是因为它是内置插件或默认启用而被选中,OpenClaw 会在有效 -运行时配置中禁用它,以便由一个插件拥有该渠道及其工具。显式用户选择 -仍然优先:如果用户显式启用了两个插件,OpenClaw 会保留该选择,并报告重复的渠道/工具诊断, -而不是静默更改请求的插件集。 +配置 `channels.chat` 后,OpenClaw 会同时考虑渠道 ID 和 +首选插件 ID。如果较低优先级的插件只是因为它是内置插件或默认启用而被选中, +OpenClaw 会在有效运行时配置中禁用它,使一个插件拥有该渠道及其工具。 +显式用户选择仍然优先:如果用户明确启用了两个插件,OpenClaw +会保留该选择,并报告重复渠道/工具诊断,而不是静默更改请求的插件集合。 -请将 `preferOver` 限定在确实可以提供相同渠道的插件 ID 上。 +将 `preferOver` 限定到确实能提供同一渠道的插件 ID。 它不是通用优先级字段,也不会重命名用户配置键。 ## modelSupport 参考 当 OpenClaw 应在插件运行时加载前,根据 `gpt-5.5` 或 -`claude-sonnet-4.6` 这类简写模型 ID 推断你的提供商插件时,请使用 -`modelSupport`。 +`claude-sonnet-4.6` 这样的简写模型 ID 推断你的提供商插件时, +使用 `modelSupport`。 ```json { @@ -576,26 +571,27 @@ OpenClaw 还会在通用提供商鉴权和环境变量查找中包含 `setup.pro } ``` -OpenClaw 会应用以下优先级: +OpenClaw 应用以下优先级: -- 显式 `provider/model` 引用使用所属的 `providers` 清单元数据 +- 显式 `provider/model` 引用使用所属 `providers` 清单元数据 - `modelPatterns` 优先于 `modelPrefixes` -- 如果一个非内置插件和一个内置插件都匹配,则非内置插件获胜 +- 如果一个非内置插件和一个内置插件都匹配,则非内置 + 插件胜出 - 其余歧义会被忽略,直到用户或配置指定提供商 字段: -| 字段 | 类型 | 含义 | -| --------------- | ---------- | ------------------------------------------------------------------------------ | -| `modelPrefixes` | `string[]` | 使用 `startsWith` 与简写模型 ID 匹配的前缀。 | -| `modelPatterns` | `string[]` | 在移除 profile 后缀后,与简写模型 ID 匹配的正则表达式源。 | +| 字段 | 类型 | 含义 | +| --------------- | ---------- | ------------------------------------------------------------------------------- | +| `modelPrefixes` | `string[]` | 使用 `startsWith` 与简写模型 ID 匹配的前缀。 | +| `modelPatterns` | `string[]` | 移除 profile 后缀后,与简写模型 ID 匹配的正则表达式源。 | ## modelCatalog 参考 -当 OpenClaw 应在加载插件运行时之前知道提供商模型元数据时,请使用 -`modelCatalog`。这是清单拥有的来源,用于固定目录行、提供商别名、 -抑制规则和发现模式。运行时刷新仍属于提供商运行时代码,但清单会告诉核心何时 -需要运行时。 +当 OpenClaw 应在加载插件运行时前了解提供商模型元数据时, +使用 `modelCatalog`。这是固定目录行、提供商别名、 +抑制规则和发现模式的清单所属来源。运行时刷新仍属于提供商运行时代码, +但清单会告诉核心何时需要运行时。 ```json { @@ -646,67 +642,71 @@ OpenClaw 会应用以下优先级: 顶层字段: -| 字段 | 类型 | 含义 | -| -------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | -| `providers` | `Record` | 此插件拥有的提供商 ID 的目录行。键也应出现在顶层 `providers` 中。 | -| `aliases` | `Record` | 应解析为所拥有提供商的提供商别名,用于目录或抑制规划。 | -| `suppressions` | `object[]` | 此插件因提供商特定原因而抑制的来自其他来源的模型行。 | -| `discovery` | `Record` | 提供商目录是否可从清单元数据读取、刷新到缓存,或需要运行时。 | +| 字段 | 类型 | 含义 | +| -------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `providers` | `Record` | 此插件拥有的提供商 ID 的目录行。键也应出现在顶层 `providers` 中。 | +| `aliases` | `Record` | 应解析到所属提供商、用于目录或抑制规划的提供商别名。 | +| `suppressions` | `object[]` | 因提供商特定原因由此插件抑制的来自其他来源的模型行。 | +| `discovery` | `Record` | 提供商目录是否可从清单元数据读取、刷新到缓存,或需要运行时。 | -`aliases` 会参与模型目录规划中的提供商所有权查找。 -别名目标必须是同一插件拥有的顶层提供商。当使用别名的提供商过滤列表时, -OpenClaw 可以读取所属清单,并应用别名 API/base URL 覆盖,而无需加载提供商运行时。 +`aliases` 参与模型目录规划中的提供商所有权查找。 +别名目标必须是同一插件拥有的顶层提供商。当使用按提供商过滤的列表并指定别名时, +OpenClaw 可以读取所属清单,并在不加载提供商运行时的情况下 +应用别名 API/base URL 覆盖。 +别名不会扩展未过滤的目录列表;宽泛列表只会发出所属的 +规范提供商行。 -`suppressions` 替代旧的提供商运行时 `suppressBuiltInModel` 钩子。 -只有当提供商由该插件拥有,或声明为指向所拥有提供商的 `modelCatalog.aliases` 键时, -抑制条目才会生效。模型解析期间不再调用运行时抑制钩子。 +`suppressions` 取代旧的提供商运行时 `suppressBuiltInModel` 钩子。 +只有当提供商由该插件拥有,或声明为指向所属提供商的 +`modelCatalog.aliases` 键时,抑制条目才会生效。模型解析期间不再调用 +运行时抑制钩子。 提供商字段: -| 字段 | 类型 | 含义 | -| --------- | ------------------------ | --------------------------------------------------------------- | -| `baseUrl` | `string` | 此提供商目录中模型的可选默认 base URL。 | -| `api` | `ModelApi` | 此提供商目录中模型的可选默认 API 适配器。 | -| `headers` | `Record` | 应用于此提供商目录的可选静态 headers。 | -| `models` | `object[]` | 必需的模型行。没有 `id` 的行会被忽略。 | +| 字段 | 类型 | 含义 | +| --------- | ------------------------ | ----------------------------------------------------------------- | +| `baseUrl` | `string` | 此提供商目录中模型的可选默认 base URL。 | +| `api` | `ModelApi` | 此提供商目录中模型的可选默认 API 适配器。 | +| `headers` | `Record` | 应用于此提供商目录的可选静态 headers。 | +| `models` | `object[]` | 必需的模型行。没有 `id` 的行会被忽略。 | 模型字段: -| 字段 | 类型 | 含义 | -| --------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------- | -| `id` | `string` | 提供商本地模型 ID,不带 `provider/` 前缀。 | -| `name` | `string` | 可选显示名称。 | -| `api` | `ModelApi` | 可选的每模型 API 覆盖。 | -| `baseUrl` | `string` | 可选的每模型 base URL 覆盖。 | -| `headers` | `Record` | 可选的每模型静态 headers。 | -| `input` | `Array<"text" \| "image" \| "document" \| "audio" \| "video">` | 模型接受的模态。 | -| `reasoning` | `boolean` | 模型是否暴露 reasoning 行为。 | -| `contextWindow` | `number` | 原生提供商上下文窗口。 | -| `contextTokens` | `number` | 当与 `contextWindow` 不同时,可选的有效运行时上下文上限。 | -| `maxTokens` | `number` | 已知时的最大输出 token 数。 | -| `cost` | `object` | 可选的每百万 token 美元价格,包括可选的 `tieredPricing`。 | -| `compat` | `object` | 匹配 OpenClaw 模型配置兼容性的可选兼容性标志。 | -| `status` | `"available"` \| `"preview"` \| `"deprecated"` \| `"disabled"` | 列表状态。仅当该行完全不应出现时才抑制。 | -| `statusReason` | `string` | 与非 available 状态一起显示的可选原因。 | -| `replaces` | `string[]` | 此模型取代的较旧提供商本地模型 ID。 | -| `replacedBy` | `string` | 已弃用行的替换提供商本地模型 ID。 | -| `tags` | `string[]` | 选择器和过滤器使用的稳定标签。 | +| 字段 | 类型 | 含义 | +| --------------- | -------------------------------------------------------------- | --------------------------------------------------------------------------- | +| `id` | `string` | 提供商本地模型 ID,不带 `provider/` 前缀。 | +| `name` | `string` | 可选显示名称。 | +| `api` | `ModelApi` | 可选的逐模型 API 覆盖。 | +| `baseUrl` | `string` | 可选的逐模型 base URL 覆盖。 | +| `headers` | `Record` | 可选的逐模型静态 headers。 | +| `input` | `Array<"text" \| "image" \| "document" \| "audio" \| "video">` | 模型接受的模态。 | +| `reasoning` | `boolean` | 模型是否暴露推理行为。 | +| `contextWindow` | `number` | 原生提供商上下文窗口。 | +| `contextTokens` | `number` | 当与 `contextWindow` 不同时,可选的有效运行时上下文上限。 | +| `maxTokens` | `number` | 已知时的最大输出 token 数。 | +| `cost` | `object` | 可选的每百万 token 美元定价,包括可选的 `tieredPricing`。 | +| `compat` | `object` | 匹配 OpenClaw 模型配置兼容性的可选兼容性标志。 | +| `status` | `"available"` \| `"preview"` \| `"deprecated"` \| `"disabled"` | 列表状态。只有当该行完全不应出现时才抑制。 | +| `statusReason` | `string` | 与非可用状态一起显示的可选原因。 | +| `replaces` | `string[]` | 此模型取代的较旧提供商本地模型 ID。 | +| `replacedBy` | `string` | 已弃用行的替代提供商本地模型 ID。 | +| `tags` | `string[]` | 选择器和过滤器使用的稳定标签。 | 抑制字段: | 字段 | 类型 | 含义 | | -------------------------- | ---------- | --------------------------------------------------------------------------------------------------------- | -| `provider` | `string` | 要抑制的上游行的提供商 ID。必须由此插件拥有,或声明为已拥有的别名。 | -| `model` | `string` | 要抑制的提供商本地模型 ID。 | -| `reason` | `string` | 直接请求被抑制的行时显示的可选消息。 | -| `when.baseUrlHosts` | `string[]` | 抑制生效前必须满足的有效提供商基础 URL 主机可选列表。 | -| `when.providerConfigApiIn` | `string[]` | 抑制生效前必须满足的精确提供商配置 `api` 值可选列表。 | +| `provider` | `string` | 要抑制的上游行的提供商 id。必须由此插件拥有,或声明为已拥有的别名。 | +| `model` | `string` | 要抑制的提供商本地模型 id。 | +| `reason` | `string` | 直接请求被抑制行时显示的可选消息。 | +| `when.baseUrlHosts` | `string[]` | 抑制生效前所需的有效提供商基础 URL 主机可选列表。 | +| `when.providerConfigApiIn` | `string[]` | 抑制生效前所需的精确提供商配置 `api` 值可选列表。 | -不要把仅运行时数据放入 `modelCatalog`。仅当清单行足够完整,可让按提供商筛选的列表和选择器界面跳过注册表/运行时发现时,才使用 `static`。当清单行可作为有用的可列出种子或补充项,但刷新/缓存稍后可以添加更多行时,使用 `refreshable`;可刷新的行本身不具权威性。当 OpenClaw 必须加载提供商运行时才能知道列表时,使用 `runtime`。 +不要把仅运行时数据放入 `modelCatalog`。仅当清单行足够完整,使按提供商过滤的列表和选择器界面可以跳过注册表/运行时发现时,才使用 `static`。当清单行可作为有用的可列表种子或补充,但刷新/缓存之后可以添加更多行时,使用 `refreshable`;refreshable 行本身不具备权威性。当 OpenClaw 必须加载提供商运行时才能知道列表时,使用 `runtime`。 -## `modelIdNormalization` 参考 +## modelIdNormalization 参考 -使用 `modelIdNormalization` 进行轻量的提供商自有模型 ID 清理,且该清理必须在提供商运行时加载前发生。这样可把短模型名称、提供商本地旧版 ID、代理前缀规则等别名保留在所属插件清单中,而不是放进核心模型选择表。 +使用 `modelIdNormalization` 执行低成本、由提供商拥有的模型 id 清理,并且该清理必须发生在提供商运行时加载之前。这样可以把短模型名称、提供商本地旧版 id、代理前缀规则等别名保留在所属插件清单中,而不是放入核心模型选择表。 ```json { @@ -730,29 +730,29 @@ OpenClaw 可以读取所属清单,并应用别名 API/base URL 覆盖,而无 | 字段 | 类型 | 含义 | | ------------------------------------ | ----------------------- | ----------------------------------------------------------------------------------------- | -| `aliases` | `Record` | 大小写不敏感的精确模型 ID 别名。值会按写入形式返回。 | -| `stripPrefixes` | `string[]` | 别名查找前要移除的前缀,适用于旧版提供商/模型重复。 | -| `prefixWhenBare` | `string` | 当规范化后的模型 ID 尚未包含 `/` 时要添加的前缀。 | -| `prefixWhenBareAfterAliasStartsWith` | `object[]` | 别名查找后的条件裸 ID 前缀规则,以 `modelPrefix` 和 `prefix` 为键。 | +| `aliases` | `Record` | 大小写不敏感的精确模型 id 别名。值会按原样返回。 | +| `stripPrefixes` | `string[]` | 在别名查找前移除的前缀,适用于旧版提供商/模型重复。 | +| `prefixWhenBare` | `string` | 当规范化后的模型 id 尚未包含 `/` 时添加的前缀。 | +| `prefixWhenBareAfterAliasStartsWith` | `object[]` | 别名查找之后的条件裸 id 前缀规则,按 `modelPrefix` 和 `prefix` 设定。 | -## `providerEndpoints` 参考 +## providerEndpoints 参考 -使用 `providerEndpoints` 定义通用请求策略必须在提供商运行时加载前知道的端点分类。核心仍然拥有每个 `endpointClass` 的含义;插件清单拥有主机和基础 URL 元数据。 +使用 `providerEndpoints` 描述通用请求策略在提供商运行时加载之前必须知道的端点分类。核心仍然拥有每个 `endpointClass` 的含义;插件清单拥有主机和基础 URL 元数据。 端点字段: | 字段 | 类型 | 含义 | | ------------------------------ | ---------- | ---------------------------------------------------------------------------------------------- | -| `endpointClass` | `string` | 已知核心端点类别,例如 `openrouter`、`moonshot-native` 或 `google-vertex`。 | +| `endpointClass` | `string` | 已知的核心端点类别,例如 `openrouter`、`moonshot-native` 或 `google-vertex`。 | | `hosts` | `string[]` | 映射到该端点类别的精确主机名。 | -| `hostSuffixes` | `string[]` | 映射到该端点类别的主机后缀。以 `.` 作为前缀可仅匹配域名后缀。 | +| `hostSuffixes` | `string[]` | 映射到该端点类别的主机后缀。用 `.` 前缀表示仅匹配域名后缀。 | | `baseUrls` | `string[]` | 映射到该端点类别的精确规范化 HTTP(S) 基础 URL。 | -| `googleVertexRegion` | `string` | 精确全局主机的静态 Google Vertex 区域。 | +| `googleVertexRegion` | `string` | 用于精确全局主机的静态 Google Vertex 区域。 | | `googleVertexRegionHostSuffix` | `string` | 从匹配主机中剥离的后缀,用于暴露 Google Vertex 区域前缀。 | -## `providerRequest` 参考 +## providerRequest 参考 -使用 `providerRequest` 提供通用请求策略在不加载提供商运行时的情况下所需的轻量请求兼容性元数据。将特定行为的载荷重写保留在提供商运行时钩子或共享提供商家族辅助工具中。 +使用 `providerRequest` 提供低成本的请求兼容性元数据,使通用请求策略无需加载提供商运行时即可使用。将特定行为的载荷重写保留在提供商运行时钩子或共享的提供商家族辅助函数中。 ```json { @@ -775,12 +775,12 @@ OpenClaw 可以读取所属清单,并应用别名 API/base URL 覆盖,而无 | 字段 | 类型 | 含义 | | --------------------- | ------------ | -------------------------------------------------------------------------------------- | | `family` | `string` | 通用请求兼容性决策和诊断使用的提供商家族标签。 | -| `compatibilityFamily` | `"moonshot"` | 共享请求辅助工具的可选提供商家族兼容性分组。 | -| `openAICompletions` | `object` | OpenAI 兼容的补全请求标志,当前为 `supportsStreamingUsage`。 | +| `compatibilityFamily` | `"moonshot"` | 可选的提供商家族兼容性分组,供共享请求辅助函数使用。 | +| `openAICompletions` | `object` | OpenAI 兼容的 completions 请求标志,目前为 `supportsStreamingUsage`。 | -## `modelPricing` 参考 +## modelPricing 参考 -当提供商需要在运行时加载前控制平面定价行为时,使用 `modelPricing`。Gateway 网关定价缓存会读取此元数据,而不导入提供商运行时代码。 +当提供商需要在运行时加载之前控制控制平面定价行为时,使用 `modelPricing`。Gateway 网关定价缓存会读取此元数据,而不会导入提供商运行时代码。 ```json { @@ -805,21 +805,21 @@ OpenClaw 可以读取所属清单,并应用别名 API/base URL 覆盖,而无 | 字段 | 类型 | 含义 | | ------------ | ----------------- | -------------------------------------------------------------------------------------------------- | -| `external` | `boolean` | 对绝不应获取 OpenRouter 或 LiteLLM 定价的本地/自托管提供商设置为 `false`。 | -| `openRouter` | `false \| object` | OpenRouter 定价查询映射。`false` 会为此提供商禁用 OpenRouter 查询。 | -| `liteLLM` | `false \| object` | LiteLLM 定价查询映射。`false` 会为此提供商禁用 LiteLLM 查询。 | +| `external` | `boolean` | 对于本地/自托管提供商设为 `false`,这类提供商绝不应获取 OpenRouter 或 LiteLLM 定价。 | +| `openRouter` | `false \| object` | OpenRouter 定价查找映射。`false` 会禁用此提供商的 OpenRouter 查找。 | +| `liteLLM` | `false \| object` | LiteLLM 定价查找映射。`false` 会禁用此提供商的 LiteLLM 查找。 | 来源字段: | 字段 | 类型 | 含义 | | -------------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------- | -| `provider` | `string` | 当外部目录提供商 ID 与 OpenClaw 提供商 ID 不同时使用,例如 `zai` 提供商对应的 `z-ai`。 | -| `passthroughProviderModel` | `boolean` | 将包含斜杠的模型 ID 视为嵌套的提供商/模型引用,适用于 OpenRouter 等代理提供商。 | -| `modelIdTransforms` | `"version-dots"[]` | 额外的外部目录模型 ID 变体。`version-dots` 会尝试带点号版本 ID,例如 `claude-opus-4.6`。 | +| `provider` | `string` | 当外部目录提供商 id 与 OpenClaw 提供商 id 不同时使用,例如 `zai` 提供商对应的 `z-ai`。 | +| `passthroughProviderModel` | `boolean` | 将包含斜杠的模型 id 视为嵌套提供商/模型引用,适用于 OpenRouter 等代理提供商。 | +| `modelIdTransforms` | `"version-dots"[]` | 额外的外部目录模型 id 变体。`version-dots` 会尝试 `claude-opus-4.6` 这样的点分版本 id。 | ### OpenClaw 提供商索引 -OpenClaw 提供商索引是 OpenClaw 拥有的预览元数据,面向其插件可能尚未安装的提供商。它不是插件清单的一部分。插件清单仍然是已安装插件的权威来源。提供商索引是内部回退契约,未来的可安装提供商和预安装模型选择器界面会在未安装提供商插件时使用它。 +OpenClaw 提供商索引是 OpenClaw 拥有的预览元数据,用于插件可能尚未安装的提供商。它不是插件清单的一部分。插件清单仍然是已安装插件的权威来源。提供商索引是内部回退契约,未来可安装提供商和安装前模型选择器界面会在提供商插件未安装时使用它。 目录权威顺序: @@ -828,62 +828,79 @@ OpenClaw 提供商索引是 OpenClaw 拥有的预览元数据,面向其插件 3. 显式刷新得到的模型目录缓存。 4. OpenClaw 提供商索引预览行。 -提供商索引不得包含密钥、启用状态、运行时钩子或特定实时账号的模型数据。它的预览目录使用与插件清单相同的 `modelCatalog` 提供商行形状,但应仅限于稳定的显示元数据,除非 `api`、`baseUrl`、定价或兼容性标志等运行时适配器字段被有意与已安装插件清单保持一致。具有实时 `/models` 发现的提供商应通过显式模型目录缓存路径写入刷新后的行,而不是让普通列表或新手引导调用提供商 API。 +提供商索引不得包含密钥、启用状态、运行时钩子或特定实时账号的模型数据。它的预览目录使用与插件清单相同的 `modelCatalog` 提供商行形状,但应仅限于稳定的显示元数据,除非 `api`、`baseUrl`、定价或兼容性标志等运行时适配器字段被有意保持与已安装插件清单一致。具有实时 `/models` 发现能力的提供商应通过显式模型目录缓存路径写入刷新行,而不是让普通列表或新手引导调用提供商 API。 -提供商索引条目也可以携带可安装插件元数据,用于其插件已移出核心或尚未安装的提供商。此元数据遵循渠道目录模式:包名、npm 安装规格、预期完整性和轻量的身份验证选项标签,足以显示一个可安装的设置选项。插件安装后,其清单获胜,并且该提供商的提供商索引条目会被忽略。 +对于插件已移出核心或尚未安装的提供商,提供商索引条目也可以携带可安装插件元数据。此元数据沿用渠道目录模式:包名、npm 安装规格、预期完整性,以及低成本的认证选项标签,足以显示一个可安装设置选项。插件安装后,其清单优先,该提供商的提供商索引条目会被忽略。 旧版顶层能力键已弃用。使用 `openclaw doctor --fix` 将 `speechProviders`、`realtimeTranscriptionProviders`、`realtimeVoiceProviders`、`mediaUnderstandingProviders`、`imageGenerationProviders`、`videoGenerationProviders`、`webFetchProviders` 和 `webSearchProviders` 移到 `contracts` 下;正常清单加载不再把这些顶层字段视为能力所有权。 -## 清单与 `package.json` +## 清单与 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.commands` | 在渠道运行时加载之前,供配置、审计和命令列表界面使用的静态原生命令和原生技能自动默认元数据。 | -| `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.extensions` | 声明原生插件入口点。必须保持在插件包目录内。 | +| `openclaw.runtimeExtensions` | 声明已安装包的已构建 JavaScript 运行时入口点。必须保持在插件包目录内。 | +| `openclaw.setupEntry` | 新手引导、延迟渠道启动,以及只读渠道 Status/SecretRef 发现期间使用的轻量级仅设置入口点。必须保持在插件包目录内。 | +| `openclaw.runtimeSetupEntry` | 声明已安装包的已构建 JavaScript 设置入口点。必须保持在插件包目录内。 | +| `openclaw.channel` | 低成本渠道目录元数据,例如标签、文档路径、别名和选择文案。 | +| `openclaw.channel.commands` | 在渠道运行时加载之前,配置、审计和命令列表界面使用的静态原生命令和原生技能自动默认元数据。 | +| `openclaw.channel.configuredState` | 轻量级已配置状态检查器元数据,无需加载完整渠道运行时即可回答“是否已经存在仅 env 设置?”。 | +| `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` | 允许仅设置渠道界面在启动期间先于完整渠道插件加载。 | -清单元数据决定在运行时加载之前,新手引导中会出现哪些提供商/渠道/设置选项。`package.json#openclaw.install` 会告诉新手引导在用户选择其中一个选项时,如何获取或启用该插件。不要把安装提示移到 `openclaw.plugin.json` 中。 +Manifest 元数据决定在运行时加载之前,哪些提供商/渠道/设置选项会出现在 +新手引导中。`package.json#openclaw.install` 会告诉新手引导在用户选择其中一个 +选项时,如何获取或启用该插件。不要把安装提示移到 `openclaw.plugin.json`。 -`openclaw.install.minHostVersion` 会在安装和清单注册表加载期间强制执行。无效值会被拒绝;较新但有效的值会让旧主机跳过该插件。 +`openclaw.install.minHostVersion` 会在安装和 manifest 注册表加载期间强制执行。 +无效值会被拒绝;较新但有效的值会让插件在较旧宿主上被跳过。 -精确的 npm 版本固定已存在于 `npmSpec` 中,例如 `"npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3"`。官方外部目录条目应将精确 spec 与 `expectedIntegrity` 配对,这样如果获取到的 npm 工件不再匹配固定版本,更新流程会以关闭方式失败。为保持兼容,交互式新手引导仍会提供受信任注册表 npm spec,包括裸包名和 dist-tag。目录诊断可以区分精确、浮动、完整性固定、缺少完整性、包名不匹配和无效默认选择来源。当存在 `expectedIntegrity` 但没有可由它固定的有效 npm 来源时,诊断也会发出警告。存在 `expectedIntegrity` 时,安装/更新流程会强制校验它;省略时,注册表解析会被记录,但不带完整性固定。 +精确 npm 版本固定已经位于 `npmSpec` 中,例如 +`"npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3"`。官方外部目录 +条目应将精确 spec 与 `expectedIntegrity` 配对,这样如果获取到的 npm 工件 +不再匹配固定发布版本,更新流程会以关闭方式失败。为兼容性,交互式新手引导 +仍会提供受信任注册表 npm spec,包括裸包名和 dist-tag。目录诊断可以区分 +精确、浮动、完整性固定、缺少完整性、包名不匹配,以及无效默认选择来源。 +当 `expectedIntegrity` 存在但没有可被它固定的有效 npm 来源时,它们也会发出警告。 +当 `expectedIntegrity` 存在时, +安装/更新流程会强制校验它;省略时,注册表解析会被记录但不带完整性固定。 -当 Status、渠道列表或 SecretRef 扫描需要在不加载完整运行时的情况下识别已配置账号时,渠道插件应提供 `openclaw.setupEntry`。设置入口应暴露渠道元数据以及设置安全的配置、Status 和 secrets 适配器;将网络客户端、Gateway 网关监听器和传输运行时保留在主扩展入口点中。 +当 Status、渠道列表或 SecretRef 扫描需要在不加载完整运行时的情况下识别已配置账号时, +渠道插件应提供 `openclaw.setupEntry`。设置入口应暴露渠道元数据,以及设置安全的配置、 +Status 和机密适配器;将网络客户端、Gateway 网关监听器和传输运行时保留在主扩展入口点中。 -运行时入口点字段不会覆盖源入口点字段的包边界检查。例如,`openclaw.runtimeExtensions` 不能让逃逸的 `openclaw.extensions` 路径变为可加载。 +运行时入口点字段不会覆盖源入口点字段的包边界检查。例如, +`openclaw.runtimeExtensions` 不能让逃逸的 `openclaw.extensions` 路径变为可加载。 -`openclaw.install.allowInvalidConfigRecovery` 的范围有意保持很窄。它不会让任意损坏的配置变得可安装。目前它只允许安装流程从特定的过期内置插件升级失败中恢复,例如缺少内置插件路径,或同一个内置插件存在过期的 `channels.` 条目。不相关的配置错误仍会阻止安装,并将操作员引导到 `openclaw doctor --fix`。 +`openclaw.install.allowInvalidConfigRecovery` 是刻意收窄的。它不会让任意损坏配置变得可安装。 +目前它只允许安装流程从特定的陈旧内置插件升级失败中恢复,例如缺失的内置插件路径, +或同一个内置插件的陈旧 `channels.` 条目。无关的配置错误仍会阻止安装,并将操作者引导到 +`openclaw doctor --fix`。 -`openclaw.channel.persistedAuthState` 是用于小型检查器模块的包元数据: +`openclaw.channel.persistedAuthState` 是一个小型检查器模块的包元数据: ```json { @@ -899,9 +916,12 @@ OpenClaw 提供商索引是 OpenClaw 拥有的预览元数据,面向其插件 } ``` -当设置、Doctor、Status 或只读在线状态流程需要在完整渠道插件加载之前进行低成本是/否认证探测时使用它。持久化认证状态不是已配置渠道状态:不要使用此元数据来自动启用插件、修复运行时依赖,或决定是否应加载渠道运行时。目标导出应是一个只读取持久化状态的小函数;不要通过完整渠道运行时 barrel 转接它。 +当设置、Doctor、Status 或只读存在性流程需要在完整渠道插件加载前做一次低成本 +是/否凭证探测时使用它。持久化凭证状态不是已配置渠道状态:不要使用此元数据来自动启用插件、 +修复运行时依赖,或决定是否应加载渠道运行时。目标导出应是一个只读取持久化状态的小函数; +不要通过完整渠道运行时 barrel 转发它。 -`openclaw.channel.configuredState` 对低成本仅环境变量已配置检查使用相同结构: +`openclaw.channel.configuredState` 对低成本仅 env 已配置检查采用相同形状: ```json { @@ -917,58 +937,64 @@ OpenClaw 提供商索引是 OpenClaw 拥有的预览元数据,面向其插件 } ``` -当渠道可以根据环境变量或其他很小的非运行时输入回答已配置状态时使用它。如果检查需要完整配置解析或真实渠道运行时,请将该逻辑保留在插件的 `config.hasConfiguredState` 钩子中。 +当渠道可以从 env 或其他很小的非运行时输入回答已配置状态时使用它。如果检查需要完整配置解析 +或真实渠道运行时,请将该逻辑保留在插件 `config.hasConfiguredState` +钩子中。 -## 设备发现优先级(重复插件 id) +## 设备发现优先级(重复插件 ID) -OpenClaw 会从多个根目录发现插件(内置、全局安装、工作区、显式配置选择的路径)。如果两个发现项共享同一个 `id`,只保留**最高优先级**的清单;较低优先级的重复项会被丢弃,而不是并排加载。 +OpenClaw 会从多个根发现插件(内置、全局安装、工作区、显式配置选择的路径)。如果两个发现结果共享同一个 `id`,只保留**优先级最高**的 manifest;较低优先级的重复项会被丢弃,而不是并排加载。 优先级从高到低: 1. **配置选择** — 在 `plugins.entries.` 中显式固定的路径 -2. **内置** — 随 OpenClaw 发布的插件 -3. **全局安装** — 安装到全局 OpenClaw 插件根目录的插件 +2. **内置** — 随 OpenClaw 一起发布的插件 +3. **全局安装** — 安装到全局 OpenClaw 插件根目录中的插件 4. **工作区** — 相对于当前工作区发现的插件 影响: -- 位于工作区中的内置插件 fork 或过期副本不会遮蔽内置构建。 -- 若要实际用本地插件覆盖内置插件,请通过 `plugins.entries.` 固定它,使其依靠优先级获胜,而不是依赖工作区发现。 -- 重复项丢弃会被记录,因此 Doctor 和启动诊断可以指向被丢弃的副本。 +- 工作区中某个内置插件的分叉或陈旧副本不会遮蔽内置构建。 +- 如果确实要用本地插件覆盖内置插件,请通过 `plugins.entries.` 固定它,让它依靠优先级获胜,而不是依赖工作区发现。 +- 重复项丢弃会被记录,这样 Doctor 和启动诊断就能指向被丢弃的副本。 ## JSON Schema 要求 -- **每个插件都必须随附 JSON Schema**,即使它不接受任何配置。 -- 空 schema 是可以接受的(例如 `{ "type": "object", "additionalProperties": false }`)。 -- Schema 会在配置读/写时验证,而不是在运行时验证。 +- **每个插件都必须附带 JSON Schema**,即使它不接受任何配置。 +- 空 schema 可以接受(例如 `{ "type": "object", "additionalProperties": false }`)。 +- Schema 在配置读/写时验证,而不是在运行时验证。 ## 验证行为 -- 未知的 `channels.*` 键是**错误**,除非渠道 id 由插件清单声明。 -- `plugins.entries.`、`plugins.allow`、`plugins.deny` 和 `plugins.slots.*` 必须引用**可发现的**插件 id。未知 id 是**错误**。 -- 如果插件已安装但清单或 schema 损坏或缺失,验证会失败,Doctor 会报告插件错误。 -- 如果插件配置存在但插件被**禁用**,配置会被保留,并在 Doctor 和日志中显示**警告**。 +- 未知的 `channels.*` 键是**错误**,除非该渠道 ID 由 + 插件 manifest 声明。 +- `plugins.entries.`、`plugins.allow`、`plugins.deny` 和 `plugins.slots.*` + 必须引用**可发现**的插件 ID。未知 ID 是**错误**。 +- 如果插件已安装但 manifest 或 schema 损坏或缺失, + 验证会失败,Doctor 会报告插件错误。 +- 如果插件配置存在但插件被**禁用**,配置会被保留,并在 + Doctor + 日志中显示**警告**。 -完整的 `plugins.*` schema 见[配置参考](/zh-CN/gateway/configuration)。 +完整 `plugins.*` schema 见[配置参考](/zh-CN/gateway/configuration)。 ## 备注 -- 原生 OpenClaw 插件**必须**提供清单,包括本地文件系统加载。运行时仍会单独加载插件模块;清单仅用于发现 + 验证。 -- 原生清单使用 JSON5 解析,因此注释、尾随逗号和未加引号的键都可接受,只要最终值仍是对象。 -- 清单加载器只读取文档化的清单字段。避免自定义顶层键。 -- 当插件不需要时,可以省略 `channels`、`providers`、`cliBackends` 和 `skills`。 -- `providerDiscoveryEntry` 必须保持轻量,不应导入宽泛的运行时代码;将它用于静态提供商目录元数据或窄范围发现描述符,而不是请求时执行。 -- 独占插件种类通过 `plugins.slots.*` 选择:`kind: "memory"` 通过 `plugins.slots.memory`,`kind: "context-engine"` 通过 `plugins.slots.contextEngine`(默认 `legacy`)。 -- 在此清单中声明独占插件种类。运行时入口 `OpenClawPluginDefinition.kind` 已弃用,仅作为旧插件的兼容后备保留。 -- 环境变量元数据(`setup.providers[].envVars`、已弃用的 `providerAuthEnvVars` 和 `channelEnvVars`)仅为声明式。Status、审计、cron 交付验证和其他只读界面在将某个环境变量视为已配置之前,仍会应用插件信任和有效激活策略。 -- 对于需要提供商代码的运行时向导元数据,请参见[提供商运行时钩子](/zh-CN/plugins/architecture-internals#provider-runtime-hooks)。 -- 如果你的插件依赖原生模块,请记录构建步骤以及任何包管理器 allowlist 要求(例如 pnpm `allow-build-scripts` + `pnpm rebuild `)。 +- 原生 OpenClaw 插件**必须**提供 manifest,包括本地文件系统加载。运行时仍会单独加载插件模块;manifest 只用于发现 + 验证。 +- 原生 manifest 使用 JSON5 解析,因此只要最终值仍是对象,就接受注释、尾随逗号和未加引号的键。 +- Manifest 加载器只读取已文档化的 manifest 字段。避免自定义顶层键。 +- 当插件不需要 `channels`、`providers`、`cliBackends` 和 `skills` 时,它们都可以省略。 +- `providerDiscoveryEntry` 必须保持轻量级,不应导入宽泛的运行时代码;将它用于静态提供商目录元数据或狭窄的发现描述符,而不是请求时执行。 +- 独占插件类型通过 `plugins.slots.*` 选择:`kind: "memory"` 通过 `plugins.slots.memory`,`kind: "context-engine"` 通过 `plugins.slots.contextEngine`(默认 `legacy`)。 +- 在此 manifest 中声明独占插件类型。运行时入口 `OpenClawPluginDefinition.kind` 已弃用,仅作为旧插件的兼容性回退保留。 +- 环境变量元数据(`setup.providers[].envVars`、已弃用的 `providerAuthEnvVars` 和 `channelEnvVars`)仅为声明式。Status、审计、cron 投递验证和其他只读界面在将环境变量视为已配置前,仍会应用插件信任和有效激活策略。 +- 对于需要提供商代码的运行时向导元数据,见[提供商运行时钩子](/zh-CN/plugins/architecture-internals#provider-runtime-hooks)。 +- 如果你的插件依赖原生模块,请记录构建步骤和任何包管理器 allowlist 要求(例如 pnpm `allow-build-scripts` + `pnpm rebuild `)。 -## 相关内容 +## 相关 - 插件入门指南。 + 插件入门。 内部架构和能力模型。 diff --git a/docs/zh-CN/start/setup.md b/docs/zh-CN/start/setup.md index 91f47a44b..e82fe33a1 100644 --- a/docs/zh-CN/start/setup.md +++ b/docs/zh-CN/start/setup.md @@ -1,72 +1,72 @@ --- read_when: - - 设置一台新机器 - - 你想要“最新最强”,同时又不破坏你的个人设置 -summary: OpenClaw 的高级设置与开发工作流 + - 设置新机器 + - 你既想要“最新 + 最佳”,又不想破坏你的个人设置 +summary: OpenClaw 的高级设置和开发工作流 title: 设置 x-i18n: - generated_at: "2026-04-24T03:43:41Z" - model: gpt-5.4 + generated_at: "2026-04-29T08:48:33Z" + model: gpt-5.5 provider: openai - source_hash: c4a965f39a14697a677c89ccadeb2b11b10c8e704e81e00619fffd5abe2ebc83 + source_hash: f96e5e8d46e694f0dfc67eeeb34f4c49498a56e384c3a2a6266c2214afdc0870 source_path: start/setup.md - workflow: 15 + workflow: 16 --- -如果这是你第一次设置,请先阅读[入门指南](/zh-CN/start/getting-started)。 -有关新手引导的详细信息,请参阅[设置向导(CLI)](/zh-CN/start/wizard)。 +如果你是首次设置,请从[入门指南](/zh-CN/start/getting-started)开始。 +有关新手引导详情,请参阅[新手引导(CLI)](/zh-CN/start/wizard)。 -## TL;DR +## 简要概览 -根据你希望更新的频率,以及你是否想自己运行 Gateway 网关,选择一种设置工作流: +根据你想要更新的频率,以及是否想自己运行 Gateway 网关,选择一个设置流程: -- **个性化内容放在仓库之外:** 将你的配置和工作区保存在 `~/.openclaw/openclaw.json` 和 `~/.openclaw/workspace/` 中,这样仓库更新就不会影响它们。 -- **稳定工作流(推荐大多数人使用):** 安装 macOS 应用,并让它运行内置的 Gateway 网关。 -- **前沿工作流(开发):** 通过 `pnpm gateway:watch` 自行运行 Gateway 网关,然后让 macOS 应用在本地模式下连接上来。 +- **定制内容位于仓库之外:** 将你的配置和工作区保存在 `~/.openclaw/openclaw.json` 和 `~/.openclaw/workspace/` 中,这样仓库更新不会影响它们。 +- **稳定流程(推荐大多数人使用):** 安装 macOS 应用,并让它运行内置的 Gateway 网关。 +- **前沿流程(开发):** 通过 `pnpm gateway:watch` 自己运行 Gateway 网关,然后让 macOS 应用以 Local 模式连接。 -## 前置要求(从源码) +## 前置条件(从源码运行) -- 推荐使用 Node 24(仍支持 Node 22 LTS,目前为 `22.14+`) -- 推荐使用 `pnpm`(或者如果你明确要使用 [Bun 工作流](/zh-CN/install/bun),也可以用 Bun) -- Docker(可选;仅用于容器化设置/e2e——请参阅 [Docker](/zh-CN/install/docker)) +- 推荐 Node 24(Node 22 LTS,目前为 `22.14+`,仍受支持) +- 首选 `pnpm`(如果你有意使用 [Bun 流程](/zh-CN/install/bun),也可以使用 Bun) +- Docker(可选;仅用于容器化设置/e2e,请参阅 [Docker](/zh-CN/install/docker)) -## 个性化策略(这样更新就不会伤到你) +## 定制策略(避免更新造成影响) -如果你想要“100% 按我定制”**并且**易于更新,请将你的自定义内容保存在: +如果你想要“100% 按我定制”_并且_轻松更新,请将你的自定义内容保存在: -- **配置:** `~/.openclaw/openclaw.json`(JSON/近似 JSON5) -- **工作区:** `~/.openclaw/workspace`(skills、提示词、记忆;建议将其设为私有 git 仓库) +- **配置:** `~/.openclaw/openclaw.json`(JSON/类似 JSON5) +- **工作区:** `~/.openclaw/workspace`(skills、prompts、memories;将其设为私有 git 仓库) -一次性初始化: +只需引导一次: ```bash openclaw setup ``` -在这个仓库内,使用本地 CLI 入口: +在此仓库内,使用本地 CLI 入口: ```bash openclaw setup ``` -如果你还没有全局安装,请通过 `pnpm openclaw setup` 运行(如果你使用的是 Bun 工作流,则用 `bun run openclaw setup`)。 +如果你还没有全局安装,请通过 `pnpm openclaw setup` 运行(如果你正在使用 Bun 流程,则使用 `bun run openclaw setup`)。 ## 从此仓库运行 Gateway 网关 -执行 `pnpm build` 后,你可以直接运行打包后的 CLI: +执行 `pnpm build` 后,可以直接运行打包后的 CLI: ```bash node openclaw.mjs gateway --port 18789 --verbose ``` -## 稳定工作流(先用 macOS 应用) +## 稳定流程(macOS 应用优先) -1. 安装并启动 **OpenClaw.app**(菜单栏应用)。 +1. 安装并启动 **OpenClaw.app**(菜单栏)。 2. 完成新手引导/权限检查清单(TCC 提示)。 -3. 确保 Gateway 网关处于 **Local** 模式并正在运行(由应用管理)。 -4. 连接各个接口(例如:WhatsApp): +3. 确保 Gateway 网关为 **Local** 且正在运行(由应用管理)。 +4. 关联界面(示例:WhatsApp): ```bash openclaw channels login @@ -82,51 +82,50 @@ openclaw health - 运行 `openclaw setup`,然后运行 `openclaw channels login`,再手动启动 Gateway 网关(`openclaw gateway`)。 -## 前沿工作流(在终端中运行 Gateway 网关) +## 前沿流程(在终端中运行 Gateway 网关) -目标:开发 TypeScript Gateway 网关,获得热重载,同时保持 macOS 应用 UI 已连接。 +目标:开发 TypeScript Gateway 网关,获得热重载,并保持 macOS 应用 UI 已连接。 -### 0)(可选)也从源码运行 macOS 应用 +### 0)(可选)也从源码运行 macOS 应用 -如果你也想让 macOS 应用使用前沿版本: +如果你还想让 macOS 应用也使用前沿版本: ```bash ./scripts/restart-mac.sh ``` -### 1)启动开发版 Gateway 网关 +### 1) 启动开发 Gateway 网关 ```bash pnpm install -# 仅首次运行(或在重置本地 OpenClaw 配置/工作区之后) +# 仅首次运行(或重置本地 OpenClaw 配置/工作区后) pnpm openclaw setup pnpm gateway:watch ``` -`gateway:watch` 会以 watch 模式运行 gateway,并在相关源码、 -配置以及内置插件元数据变更时重新加载。 -`pnpm openclaw setup` 是全新 checkout 时,用于初始化本地配置/工作区的一次性步骤。 -`pnpm gateway:watch` 不会重建 `dist/control-ui`,因此在 `ui/` 变更后请重新运行 `pnpm ui:build`,或在开发 Control UI 时使用 `pnpm ui:dev`。 +`gateway:watch` 会在一个具名 tmux 会话中启动或重启 Gateway 网关监听进程,并从交互式终端自动附加。非交互式 shell 会保持分离并打印 `tmux attach -t openclaw-gateway-watch-main`;使用 `OPENCLAW_GATEWAY_WATCH_ATTACH=0 pnpm gateway:watch` 可让交互式运行保持分离,或使用 `pnpm gateway:watch:raw` 以前台监听模式运行。监听器会在相关源码、配置和内置插件元数据变更时重新加载。 +`pnpm openclaw setup` 是全新检出时一次性的本地配置/工作区初始化步骤。 +`pnpm gateway:watch` 不会重新构建 `dist/control-ui`,因此在 `ui/` 变更后请重新运行 `pnpm ui:build`,或在开发 Control UI 时使用 `pnpm ui:dev`。 -如果你明确使用的是 Bun 工作流,对应命令为: +如果你有意使用 Bun 流程,等价命令如下: ```bash bun install -# 仅首次运行(或在重置本地 OpenClaw 配置/工作区之后) +# 仅首次运行(或重置本地 OpenClaw 配置/工作区后) bun run openclaw setup bun run gateway:watch ``` -### 2)让 macOS 应用连接到你正在运行的 Gateway 网关 +### 2) 将 macOS 应用指向你正在运行的 Gateway 网关 在 **OpenClaw.app** 中: - 连接模式:**Local** - 应用会连接到已配置端口上正在运行的 gateway。 + 应用会连接到已配置端口上正在运行的 Gateway 网关。 -### 3)验证 +### 3) 验证 -- 应用内的 Gateway 网关状态应显示为 **“Using existing gateway …”** +- 应用内 Gateway 网关状态应显示 **“正在使用现有 Gateway 网关 …”** - 或通过 CLI: ```bash @@ -135,7 +134,7 @@ openclaw health ### 常见陷阱 -- **端口错误:** Gateway WebSocket 默认是 `ws://127.0.0.1:18789`;请确保应用和 CLI 使用同一个端口。 +- **端口错误:** Gateway 网关 WS 默认值为 `ws://127.0.0.1:18789`;保持应用和 CLI 使用同一端口。 - **状态存储位置:** - 渠道/提供商状态:`~/.openclaw/credentials/` - 模型认证配置文件:`~/.openclaw/agents//agent/auth-profiles.json` @@ -144,42 +143,39 @@ openclaw health ## 凭证存储映射 -在调试认证问题或决定备份哪些内容时,可参考这里: +在调试认证或决定备份内容时使用此映射: - **WhatsApp**:`~/.openclaw/credentials/whatsapp//creds.json` -- **Telegram bot token**:配置/env 或 `channels.telegram.tokenFile`(仅允许普通文件;拒绝符号链接) -- **Discord bot token**:配置/env 或 SecretRef(env/file/exec 提供商) -- **Slack tokens**:配置/env(`channels.slack.*`) -- **配对允许列表:** +- **Telegram 机器人令牌**:配置/环境变量或 `channels.telegram.tokenFile`(仅普通文件;拒绝符号链接) +- **Discord 机器人令牌**:配置/环境变量或 SecretRef(env/file/exec 提供商) +- **Slack 令牌**:配置/环境变量(`channels.slack.*`) +- **配对允许列表**: - `~/.openclaw/credentials/-allowFrom.json`(默认账户) - `~/.openclaw/credentials/--allowFrom.json`(非默认账户) - **模型认证配置文件**:`~/.openclaw/agents//agent/auth-profiles.json` -- **基于文件的 secrets 负载(可选)**:`~/.openclaw/secrets.json` +- **文件支持的 secrets 有效载荷(可选)**:`~/.openclaw/secrets.json` - **旧版 OAuth 导入**:`~/.openclaw/credentials/oauth.json` - 更多细节请参阅:[安全](/zh-CN/gateway/security#credential-storage-map)。 + 更多详情:[安全](/zh-CN/gateway/security#credential-storage-map)。 ## 更新(不破坏你的设置) -- 将 `~/.openclaw/workspace` 和 `~/.openclaw/` 视为“你的内容”;不要把个人提示词/配置放进 `openclaw` 仓库中。 -- 更新源码:`git pull` + 你所选包管理器的安装步骤(默认是 `pnpm install`;Bun 工作流使用 `bun install`)+ 继续使用对应的 `gateway:watch` 命令。 +- 将 `~/.openclaw/workspace` 和 `~/.openclaw/` 视为“你的内容”;不要把个人 prompts/配置放进 `openclaw` 仓库。 +- 更新源码:`git pull` + 你选择的包管理器安装步骤(默认 `pnpm install`;Bun 流程使用 `bun install`)+ 继续使用匹配的 `gateway:watch` 命令。 ## Linux(systemd 用户服务) -Linux 安装使用 systemd **用户**服务。默认情况下,systemd 会在用户 -注销/空闲时停止用户服务,这会终止 Gateway 网关。新手引导会尝试为你启用 -lingering(可能会提示输入 sudo)。如果仍未启用,请运行: +Linux 安装使用 systemd **用户**服务。默认情况下,systemd 会在注销/空闲时停止用户服务,这会终止 Gateway 网关。新手引导会尝试为你启用 linger(可能会提示输入 sudo)。如果仍未启用,请运行: ```bash sudo loginctl enable-linger $USER ``` -对于始终在线或多用户服务器,可考虑使用**系统**服务而不是 -用户服务(这样就不需要 lingering)。有关 systemd 的说明,请参阅 [Gateway runbook](/zh-CN/gateway)。 +对于常驻或多用户服务器,请考虑使用 **system** 服务而不是用户服务(无需 linger)。systemd 说明请参阅 [Gateway 网关运行手册](/zh-CN/gateway)。 ## 相关文档 -- [Gateway runbook](/zh-CN/gateway)(标志、托管、端口) -- [Gateway 网关配置](/zh-CN/gateway/configuration)(配置 schema + 示例) -- [Discord](/zh-CN/channels/discord) 和 [Telegram](/zh-CN/channels/telegram)(回复标签 + `replyToMode` 设置) -- [OpenClaw assistant 设置](/zh-CN/start/openclaw) -- [macOS 应用](/zh-CN/platforms/macos)(gateway 生命周期) +- [Gateway 网关运行手册](/zh-CN/gateway)(标志、监督、端口) +- [Gateway 网关配置](/zh-CN/gateway/configuration)(配置架构 + 示例) +- [Discord](/zh-CN/channels/discord) 和 [Telegram](/zh-CN/channels/telegram)(回复标签 + replyToMode 设置) +- [OpenClaw 助手设置](/zh-CN/start/openclaw) +- [macOS 应用](/zh-CN/platforms/macos)(Gateway 网关生命周期)