chore(i18n): refresh zh-CN translations
This commit is contained in:
parent
f4efe65e6e
commit
f0839d2de0
@ -1,30 +1,30 @@
|
||||
---
|
||||
read_when:
|
||||
- 你想安装或管理 Gateway 网关插件或兼容捆绑包
|
||||
- 你想调试插件加载失败
|
||||
- 你想调试插件加载失败问题
|
||||
sidebarTitle: Plugins
|
||||
summary: '`openclaw plugins` 的 CLI 参考(list、install、marketplace、uninstall、enable/disable、doctor)'
|
||||
title: 插件
|
||||
x-i18n:
|
||||
generated_at: "2026-05-03T18:43:37Z"
|
||||
generated_at: "2026-05-04T04:43:51Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: d854d052b0a012a86f9c775775676a9a8fe8ae86b2c38a18118f1abf0732174c
|
||||
source_hash: 36ae7edb12986ead7e126f25e0761bf312b2644b35017181b674082105886776
|
||||
source_path: cli/plugins.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
管理 Gateway 网关插件、钩子包和兼容包。
|
||||
管理 Gateway 网关插件、钩子包和兼容捆绑包。
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="插件系统" href="/zh-CN/tools/plugin">
|
||||
用于安装、启用和排查插件问题的最终用户指南。
|
||||
面向最终用户的指南,用于安装、启用插件以及排查插件问题。
|
||||
</Card>
|
||||
<Card title="管理插件" href="/zh-CN/plugins/manage-plugins">
|
||||
安装、列出、更新、卸载和发布的快速示例。
|
||||
</Card>
|
||||
<Card title="插件包" href="/zh-CN/plugins/bundles">
|
||||
包兼容性模型。
|
||||
<Card title="插件捆绑包" href="/zh-CN/plugins/bundles">
|
||||
捆绑包兼容性模型。
|
||||
</Card>
|
||||
<Card title="插件清单" href="/zh-CN/plugins/manifest">
|
||||
清单字段和配置 schema。
|
||||
@ -62,14 +62,14 @@ openclaw plugins marketplace list <marketplace>
|
||||
openclaw plugins marketplace list <marketplace> --json
|
||||
```
|
||||
|
||||
要调查缓慢的安装、检查、卸载或注册表刷新,请使用 `OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1` 运行该命令。跟踪会把阶段耗时写入 stderr,并保持 JSON 输出可解析。请参阅 [调试](/zh-CN/help/debugging#plugin-lifecycle-trace)。
|
||||
调查安装、检查、卸载或 registry 刷新较慢的问题时,请使用 `OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1` 运行该命令。trace 会将阶段耗时写入 stderr,同时保持 JSON 输出可解析。请参阅[调试](/zh-CN/help/debugging#plugin-lifecycle-trace)。
|
||||
|
||||
<Note>
|
||||
内置插件随 OpenClaw 一起发布。有些默认启用(例如内置模型提供商、内置语音提供商和内置浏览器插件);其他插件需要 `plugins enable`。
|
||||
内置插件随 OpenClaw 一起发布。有些默认启用(例如内置模型提供商、内置语音提供商和内置浏览器插件);其他插件需要使用 `plugins enable`。
|
||||
|
||||
原生 OpenClaw 插件必须随附 `openclaw.plugin.json`,并包含内联 JSON Schema(`configSchema`,即使为空)。兼容包则使用自己的包清单。
|
||||
原生 OpenClaw 插件必须随附 `openclaw.plugin.json`,并包含内联 JSON Schema(`configSchema`,即使为空也需要)。兼容捆绑包则使用自己的捆绑包清单。
|
||||
|
||||
`plugins list` 会显示 `Format: openclaw` 或 `Format: bundle`。详细列表/info 输出还会显示包子类型(`codex`、`claude` 或 `cursor`)以及检测到的包能力。
|
||||
`plugins list` 会显示 `Format: openclaw` 或 `Format: bundle`。详细的 list/info 输出还会显示捆绑包子类型(`codex`、`claude` 或 `cursor`)以及检测到的捆绑包能力。
|
||||
</Note>
|
||||
|
||||
### 安装
|
||||
@ -91,61 +91,61 @@ openclaw plugins install <plugin> --marketplace https://github.com/<owner>/<repo
|
||||
```
|
||||
|
||||
<Warning>
|
||||
在发布切换期间,裸包名默认从 npm 安装。对 ClawHub 使用 `clawhub:<package>`。请像运行代码一样对待插件安装。优先使用固定版本。
|
||||
在发布切换期间,裸包名默认从 npm 安装。对于 ClawHub,请使用 `clawhub:<package>`。请像运行代码一样对待插件安装。优先使用固定版本。
|
||||
</Warning>
|
||||
|
||||
`plugins search` 会查询 ClawHub 中可安装的插件包,并打印可直接安装的包名。它搜索代码插件和包插件包,而不是 Skills。对于 ClawHub Skills,请使用 `openclaw skills search`。
|
||||
`plugins search` 会查询 ClawHub 中可安装的插件包,并打印可直接安装的包名。它搜索代码插件和捆绑包插件包,而不是 Skills。要搜索 ClawHub Skills,请使用 `openclaw skills search`。
|
||||
|
||||
<Note>
|
||||
ClawHub 是大多数插件的主要分发和发现界面。Npm 仍是受支持的回退和直接安装路径。OpenClaw 拥有的 `@openclaw/*` 插件包已重新发布到 npm;请在 [npmjs.com/org/openclaw](https://www.npmjs.com/org/openclaw) 或[插件清单](/zh-CN/plugins/plugin-inventory)查看当前列表。稳定版安装使用 `latest`。当 npm `beta` dist-tag 可用时,Beta 渠道安装和更新优先使用它,然后回退到 `latest`。
|
||||
ClawHub 是大多数插件的主要分发和发现入口。Npm 仍是受支持的备用路径和直接安装路径。OpenClaw 拥有的 `@openclaw/*` 插件包已重新发布到 npm;请在 [npmjs.com/org/openclaw](https://www.npmjs.com/org/openclaw) 或[插件清单](/zh-CN/plugins/plugin-inventory)查看当前列表。稳定版安装使用 `latest`。Beta 渠道的安装和更新会在 npm `beta` dist-tag 可用时优先使用该 tag,然后回退到 `latest`。
|
||||
</Note>
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="配置包含和无效配置修复">
|
||||
如果你的 `plugins` 区段由单文件 `$include` 支持,`plugins install/update/enable/disable/uninstall` 会写入该被包含文件,并保持 `openclaw.json` 不变。根级包含、包含数组以及带有同级覆盖的包含会失败关闭,而不是展开合并。有关受支持的形状,请参阅[配置包含](/zh-CN/gateway/configuration)。
|
||||
<Accordion title="配置 include 与无效配置修复">
|
||||
如果你的 `plugins` 部分由单文件 `$include` 支持,`plugins install/update/enable/disable/uninstall` 会写入该 included 文件,并保持 `openclaw.json` 不变。根 include、include 数组以及带同级覆盖项的 include 会封闭失败,而不是被展开。请参阅[配置 include](/zh-CN/gateway/configuration) 了解支持的形态。
|
||||
|
||||
如果安装期间配置无效,`plugins install` 通常会失败关闭,并提示你先运行 `openclaw doctor --fix`。在 Gateway 网关启动和热重载期间,无效插件配置会像任何其他无效配置一样失败关闭;`openclaw doctor --fix` 可以隔离无效插件条目。唯一有文档记录的安装时例外,是针对显式选择加入 `openclaw.install.allowInvalidConfigRecovery` 的插件的窄范围内置插件恢复路径。
|
||||
如果安装期间配置无效,`plugins install` 通常会封闭失败,并提示你先运行 `openclaw doctor --fix`。在 Gateway 网关启动和热重载期间,无效插件配置会像任何其他无效配置一样封闭失败;`openclaw doctor --fix` 可以隔离无效的插件条目。唯一有文档说明的安装时例外,是一条狭窄的内置插件恢复路径,适用于明确选择加入 `openclaw.install.allowInvalidConfigRecovery` 的插件。
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="--force 和重新安装与更新">
|
||||
`--force` 会复用现有安装目标,并就地覆盖已安装的插件或钩子包。当你有意从新的本地路径、归档、ClawHub 包或 npm 构件重新安装同一 id 时使用它。对于已跟踪 npm 插件的常规升级,优先使用 `openclaw plugins update <id-or-npm-spec>`。
|
||||
<Accordion title="--force 以及重新安装与更新">
|
||||
`--force` 会复用现有安装目标,并就地覆盖已经安装的插件或钩子包。当你有意从新的本地路径、归档、ClawHub 包或 npm artifact 重新安装相同 id 时使用它。对于已经跟踪的 npm 插件的常规升级,请优先使用 `openclaw plugins update <id-or-npm-spec>`。
|
||||
|
||||
如果你为已安装的插件 id 运行 `plugins install`,OpenClaw 会停止,并指向 `plugins update <id-or-npm-spec>` 以进行正常升级,或在你确实想从不同来源覆盖当前安装时指向 `plugins install <package> --force`。
|
||||
如果你为已经安装的插件 id 运行 `plugins install`,OpenClaw 会停止,并指向 `plugins update <id-or-npm-spec>` 用于正常升级;如果你确实想从不同来源覆盖当前安装,则会指向 `plugins install <package> --force`。
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="--pin 范围">
|
||||
`--pin` 仅适用于 npm 安装。它不支持 `git:` 安装;当你想固定来源时,请使用显式 git ref,例如 `git:github.com/acme/plugin@v1.2.3`。它不支持 `--marketplace`,因为 marketplace 安装会持久化 marketplace 来源元数据,而不是 npm spec。
|
||||
</Accordion>
|
||||
<Accordion title="--dangerously-force-unsafe-install">
|
||||
`--dangerously-force-unsafe-install` 是内置危险代码扫描器误报时的紧急选项。即使内置扫描器报告 `critical` 发现,它也允许安装继续,但它**不会**绕过插件 `before_install` 钩子策略阻断,也**不会**绕过扫描失败。
|
||||
`--dangerously-force-unsafe-install` 是用于内置危险代码扫描器误报的应急选项。当内置扫描器报告 `critical` 发现时,它允许安装继续,但它**不会**绕过插件 `before_install` 钩子策略阻断,也**不会**绕过扫描失败。
|
||||
|
||||
此 CLI 标志适用于插件安装/更新流程。由 Gateway 网关支持的 skill 依赖安装使用对应的 `dangerouslyForceUnsafeInstall` 请求覆盖,而 `openclaw skills install` 仍是单独的 ClawHub skill 下载/安装流程。
|
||||
此 CLI 标志适用于插件安装/更新流程。由 Gateway 网关支持的 Skills 依赖安装使用对应的 `dangerouslyForceUnsafeInstall` 请求覆盖,而 `openclaw skills install` 仍是独立的 ClawHub skill 下载/安装流程。
|
||||
|
||||
如果你发布到 ClawHub 的插件被注册表扫描阻断,请使用 [ClawHub](/zh-CN/tools/clawhub) 中的发布者步骤。
|
||||
如果你发布到 ClawHub 的插件被 registry 扫描阻止,请使用 [ClawHub](/zh-CN/tools/clawhub) 中的发布者步骤。
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="钩子包和 npm specs">
|
||||
`plugins install` 也是安装在 `package.json` 中公开 `openclaw.hooks` 的钩子包的界面。请使用 `openclaw hooks` 查看经过筛选的钩子可见性和按钩子启用,而不是安装包。
|
||||
`plugins install` 也是安装钩子包的入口,这些钩子包会在 `package.json` 中暴露 `openclaw.hooks`。请使用 `openclaw hooks` 查看筛选后的钩子可见性并按钩子启用,而不是用于包安装。
|
||||
|
||||
Npm specs **仅限注册表**(包名 + 可选的**精确版本**或 **dist-tag**)。Git/URL/file specs 和 semver 范围会被拒绝。为安全起见,依赖安装会以项目本地方式运行并使用 `--ignore-scripts`,即使你的 shell 有全局 npm 安装设置。
|
||||
Npm specs **仅限 registry**(包名 + 可选的**精确版本**或 **dist-tag**)。Git/URL/file specs 和 semver 范围会被拒绝。为安全起见,依赖安装会在项目本地使用 `--ignore-scripts` 运行,即使你的 shell 配置了全局 npm 安装设置也是如此。
|
||||
|
||||
当你想明确使用 npm 解析时,请使用 `npm:<package>`。在发布切换期间,裸包 specs 也会直接从 npm 安装。
|
||||
当你想显式使用 npm 解析时,请使用 `npm:<package>`。在发布切换期间,裸包 spec 也会直接从 npm 安装。
|
||||
|
||||
裸 specs 和 `@latest` 会保持在稳定轨道。如果 npm 将其中任一解析为预发布版本,OpenClaw 会停止,并要求你使用预发布标签(例如 `@beta`/`@rc`)或精确预发布版本(例如 `@1.2.3-beta.4`)显式选择加入。
|
||||
裸 spec 和 `@latest` 会停留在稳定轨道。OpenClaw 日期戳修正版,例如 `2026.5.3-1`,在此检查中是稳定版发布。如果 npm 将其中任一解析为预发布版本,OpenClaw 会停止,并要求你通过预发布 tag(例如 `@beta`/`@rc`)或精确预发布版本(例如 `@1.2.3-beta.4`)显式选择加入。
|
||||
|
||||
如果裸安装 spec 匹配官方插件 id(例如 `diffs`),OpenClaw 会直接安装目录条目。要安装同名 npm 包,请使用显式 scoped spec(例如 `@scope/diffs`)。
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Git 仓库">
|
||||
使用 `git:<repo>` 直接从 git 仓库安装。受支持的形式包括 `git:github.com/owner/repo`、`git:owner/repo`、完整的 `https://`、`ssh://`、`git://`、`file://`,以及 `git@host:owner/repo.git` 克隆 URL。添加 `@<ref>` 或 `#<ref>` 可在安装前检出分支、标签或提交。
|
||||
使用 `git:<repo>` 可直接从 git 仓库安装。支持的形式包括 `git:github.com/owner/repo`、`git:owner/repo`、完整 `https://`、`ssh://`、`git://`、`file://` 以及 `git@host:owner/repo.git` 克隆 URL。添加 `@<ref>` 或 `#<ref>` 可在安装前检出分支、tag 或 commit。
|
||||
|
||||
Git 安装会克隆到临时目录,在存在请求的 ref 时检出该 ref,然后使用普通插件目录安装器。这意味着清单验证、危险代码扫描、包管理器安装工作和安装记录的行为都类似 npm 安装。记录的 git 安装会包含来源 URL/ref 以及解析后的提交,因此 `openclaw plugins update` 以后可以重新解析该来源。
|
||||
Git 安装会克隆到临时目录,在存在请求的 ref 时将其检出,然后使用正常的插件目录安装器。这意味着清单校验、危险代码扫描、包管理器安装工作和安装记录的行为与 npm 安装一致。记录的 git 安装包含来源 URL/ref 以及解析后的 commit,因此 `openclaw plugins update` 稍后可以重新解析来源。
|
||||
|
||||
从 git 安装后,使用 `openclaw plugins inspect <id> --runtime --json` 验证运行时注册,例如 gateway 方法和 CLI 命令。如果插件使用 `api.registerCli` 注册了 CLI root,请通过 OpenClaw root CLI 直接执行该命令,例如 `openclaw demo-plugin ping`。
|
||||
从 git 安装后,请使用 `openclaw plugins inspect <id> --runtime --json` 验证运行时注册项,例如 Gateway 网关方法和 CLI 命令。如果插件通过 `api.registerCli` 注册了 CLI 根命令,请直接通过 OpenClaw 根 CLI 执行该命令,例如 `openclaw demo-plugin ping`。
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="归档">
|
||||
支持的归档:`.zip`、`.tgz`、`.tar.gz`、`.tar`。原生 OpenClaw 插件归档必须在解压后的插件根目录包含有效的 `openclaw.plugin.json`;只包含 `package.json` 的归档会在 OpenClaw 写入安装记录前被拒绝。
|
||||
支持的归档格式:`.zip`、`.tgz`、`.tar.gz`、`.tar`。原生 OpenClaw 插件归档必须在解压后的插件根目录包含有效的 `openclaw.plugin.json`;仅包含 `package.json` 的归档会在 OpenClaw 写入安装记录前被拒绝。
|
||||
|
||||
也支持 Claude marketplace 安装。
|
||||
|
||||
@ -159,25 +159,25 @@ openclaw plugins install clawhub:openclaw-codex-app-server
|
||||
openclaw plugins install clawhub:openclaw-codex-app-server@1.2.3
|
||||
```
|
||||
|
||||
在发布切换期间,裸 npm 安全插件 specs 默认从 npm 安装:
|
||||
在发布切换期间,裸 npm 安全插件 spec 默认从 npm 安装:
|
||||
|
||||
```bash
|
||||
openclaw plugins install openclaw-codex-app-server
|
||||
```
|
||||
|
||||
使用 `npm:` 明确只通过 npm 解析:
|
||||
使用 `npm:` 可显式指定仅 npm 解析:
|
||||
|
||||
```bash
|
||||
openclaw plugins install npm:openclaw-codex-app-server
|
||||
openclaw plugins install npm:@scope/plugin-name@1.0.1
|
||||
```
|
||||
|
||||
OpenClaw 会在安装前检查声明的插件 API / 最低 gateway 兼容性。当选定的 ClawHub 版本发布了 ClawPack 构件时,OpenClaw 会下载带版本的 npm-pack `.tgz`,验证 ClawHub digest 头和构件 digest,然后通过普通归档路径安装它。没有 ClawPack 元数据的旧版 ClawHub 版本仍会通过旧版包归档验证路径安装。记录的安装会保留其 ClawHub 来源元数据、构件类型、npm integrity、npm shasum、tarball 名称和 ClawPack digest 事实,以供后续更新使用。
|
||||
未指定版本的 ClawHub 安装会保留未指定版本的记录 spec,因此 `openclaw plugins update` 可以跟随后续较新的 ClawHub 发布;显式版本或标签选择器(例如 `clawhub:pkg@1.2.3` 和 `clawhub:pkg@beta`)仍会固定到该选择器。
|
||||
OpenClaw 会在安装前检查公布的插件 API / 最低 gateway 兼容性。当选中的 ClawHub 版本发布 ClawPack artifact 时,OpenClaw 会下载带版本的 npm-pack `.tgz`,验证 ClawHub digest header 和 artifact digest,然后通过正常归档路径安装。没有 ClawPack 元数据的较旧 ClawHub 版本仍会通过旧版包归档验证路径安装。记录的安装会保留其 ClawHub 来源元数据、artifact 类型、npm integrity、npm shasum、tarball 名称以及 ClawPack digest 信息,以便后续更新。
|
||||
无版本 ClawHub 安装会保留无版本的记录 spec,因此 `openclaw plugins update` 可以跟随后续 ClawHub 版本;显式版本或 tag 选择器(例如 `clawhub:pkg@1.2.3` 和 `clawhub:pkg@beta`)仍固定到该选择器。
|
||||
|
||||
#### Marketplace 简写
|
||||
|
||||
当 marketplace 名称存在于 Claude 的本地注册表缓存 `~/.claude/plugins/known_marketplaces.json` 中时,使用 `plugin@marketplace` 简写:
|
||||
当 marketplace 名称存在于 Claude 的本地 registry 缓存 `~/.claude/plugins/known_marketplaces.json` 中时,请使用 `plugin@marketplace` 简写:
|
||||
|
||||
```bash
|
||||
openclaw plugins marketplace list <marketplace-name>
|
||||
@ -194,20 +194,20 @@ openclaw plugins install <plugin-name> --marketplace ./my-marketplace
|
||||
```
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Marketplace sources">
|
||||
- 来自 `~/.claude/plugins/known_marketplaces.json` 的 Claude 已知市场源名称
|
||||
- 本地市场源根目录或 `marketplace.json` 路径
|
||||
<Tab title="市场来源">
|
||||
- 来自 `~/.claude/plugins/known_marketplaces.json` 的 Claude 已知市场名称
|
||||
- 本地市场根目录或 `marketplace.json` 路径
|
||||
- GitHub 仓库简写,例如 `owner/repo`
|
||||
- GitHub 仓库 URL,例如 `https://github.com/owner/repo`
|
||||
- git URL
|
||||
|
||||
</Tab>
|
||||
<Tab title="Remote marketplace rules">
|
||||
对于从 GitHub 或 git 加载的远程市场源,插件条目必须保留在克隆的市场源仓库内。OpenClaw 接受来自该仓库的相对路径来源,并拒绝远程清单中的 HTTP(S)、绝对路径、git、GitHub 以及其他非路径插件来源。
|
||||
<Tab title="远程市场规则">
|
||||
对于从 GitHub 或 git 加载的远程市场,插件条目必须保留在克隆的市场仓库内。OpenClaw 接受来自该仓库的相对路径来源,并拒绝远程清单中的 HTTP(S)、绝对路径、git、GitHub 以及其他非路径插件来源。
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
对于本地路径和归档,OpenClaw 会自动检测:
|
||||
对于本地路径和归档文件,OpenClaw 会自动检测:
|
||||
|
||||
- 原生 OpenClaw 插件(`openclaw.plugin.json`)
|
||||
- Codex 兼容包(`.codex-plugin/plugin.json`)
|
||||
@ -215,7 +215,7 @@ openclaw plugins install <plugin-name> --marketplace ./my-marketplace
|
||||
- Cursor 兼容包(`.cursor-plugin/plugin.json`)
|
||||
|
||||
<Note>
|
||||
兼容包会安装到常规插件根目录,并参与相同的列表/信息/启用/禁用流程。目前支持包 Skills、Claude 命令 Skills、Claude `settings.json` 默认值、Claude `.lsp.json` / 清单声明的 `lspServers` 默认值、Cursor 命令 Skills,以及兼容的 Codex 钩子目录;其他检测到的包能力会显示在诊断/信息中,但尚未接入运行时执行。
|
||||
兼容包会安装到普通插件根目录,并参与相同的列表/信息/启用/禁用流程。目前支持包 Skills、Claude 命令 Skills、Claude `settings.json` 默认值、Claude `.lsp.json` / 清单声明的 `lspServers` 默认值、Cursor 命令 Skills,以及兼容的 Codex 钩子目录;其他检测到的包能力会显示在诊断/信息中,但尚未接入运行时执行。
|
||||
</Note>
|
||||
|
||||
### 列表
|
||||
@ -234,39 +234,39 @@ openclaw plugins search <query> --json
|
||||
仅显示已启用的插件。
|
||||
</ParamField>
|
||||
<ParamField path="--verbose" type="boolean">
|
||||
从表格视图切换到每个插件的详情行,包含来源/源头/版本/激活元数据。
|
||||
从表格视图切换为每个插件的详情行,包含来源/源点/版本/激活元数据。
|
||||
</ParamField>
|
||||
<ParamField path="--json" type="boolean">
|
||||
机器可读的清单,加上注册表诊断和包依赖安装状态。
|
||||
机器可读的清单,以及注册表诊断和包依赖安装状态。
|
||||
</ParamField>
|
||||
|
||||
<Note>
|
||||
`plugins list` 会先读取持久化的本地插件注册表;当注册表缺失或无效时,会回退到仅由清单派生的结果。它适合用来检查插件是否已安装、已启用,并且对冷启动规划可见,但它不是对已运行 Gateway 网关进程的实时运行时探测。更改插件代码、启用状态、钩子策略或 `plugins.load.paths` 后,请重启为该渠道提供服务的 Gateway 网关,再预期新的 `register(api)` 代码或钩子会运行。对于远程/容器部署,请确认你重启的是实际的 `openclaw gateway run` 子进程,而不只是包装器进程。
|
||||
`plugins list` 会先读取持久化的本地插件注册表;当注册表缺失或无效时,会回退到仅由清单派生的结果。它适合检查插件是否已安装、已启用,并且对冷启动规划可见,但它不是对已运行 Gateway 网关进程的实时运行时探测。更改插件代码、启用状态、钩子策略或 `plugins.load.paths` 后,请重启为渠道提供服务的 Gateway 网关,再期待新的 `register(api)` 代码或钩子运行。对于远程/容器部署,请确认你重启的是实际的 `openclaw gateway run` 子进程,而不仅是包装进程。
|
||||
|
||||
`plugins list --json` 会包含每个插件来自 `package.json`
|
||||
`dependencies` 和 `optionalDependencies` 的 `dependencyStatus`。OpenClaw 会检查这些包名是否存在于插件正常的 Node `node_modules` 查找路径中;它
|
||||
不会导入插件运行时代码、运行包管理器或修复缺失的
|
||||
`plugins list --json` 包含每个插件来自 `package.json`
|
||||
`dependencies` 和 `optionalDependencies` 的 `dependencyStatus`。OpenClaw 会检查这些包名是否存在于插件普通 Node `node_modules` 查找路径中;它
|
||||
不会导入插件运行时代码、运行包管理器,或修复缺失的
|
||||
依赖。
|
||||
</Note>
|
||||
|
||||
`plugins search` 是远程 ClawHub 目录查询。它不会检查本地
|
||||
状态、修改配置、安装包或加载插件运行时代码。搜索
|
||||
结果包括 ClawHub 包名、系列、渠道、版本、摘要,以及
|
||||
结果包含 ClawHub 包名称、系列、渠道、版本、摘要,以及
|
||||
安装提示,例如 `openclaw plugins install clawhub:<package>`。
|
||||
|
||||
对于打包 Docker 镜像内的内置插件工作,请将插件
|
||||
源目录绑定挂载到匹配的打包源路径上,例如
|
||||
`/app/extensions/synology-chat`。OpenClaw 会先发现该挂载的源
|
||||
覆盖层,再发现 `/app/dist/extensions/synology-chat`;单纯复制的源
|
||||
目录仍然不会生效,因此常规打包安装仍会使用已编译的 dist。
|
||||
覆盖层,再发现 `/app/dist/extensions/synology-chat`;普通复制的源
|
||||
目录仍然不会生效,因此正常的打包安装仍会使用编译后的 dist。
|
||||
|
||||
对于运行时钩子调试:
|
||||
用于运行时钩子调试:
|
||||
|
||||
- `openclaw plugins inspect <id> --runtime --json` 会显示模块加载式检查过程中注册的钩子和诊断。运行时检查绝不会安装依赖;请使用 `openclaw doctor --fix` 清理旧版依赖状态,或安装缺失的已配置可下载插件。
|
||||
- `openclaw gateway status --deep --require-rpc` 会确认可访问的 Gateway 网关、服务/进程提示、配置路径和 RPC 健康状态。
|
||||
- 非内置对话钩子(`llm_input`、`llm_output`、`before_agent_finalize`、`agent_end`)需要 `plugins.entries.<id>.hooks.allowConversationAccess=true`。
|
||||
- `openclaw plugins inspect <id> --runtime --json` 显示一次模块加载检查过程中注册的钩子和诊断。运行时检查绝不会安装依赖;使用 `openclaw doctor --fix` 清理旧版依赖状态,或安装缺失的已配置可下载插件。
|
||||
- `openclaw gateway status --deep --require-rpc` 确认可访问的 Gateway 网关、服务/进程提示、配置路径和 RPC 健康状态。
|
||||
- 非内置会话钩子(`llm_input`、`llm_output`、`before_agent_finalize`、`agent_end`)需要 `plugins.entries.<id>.hooks.allowConversationAccess=true`。
|
||||
|
||||
使用 `--link` 可避免复制本地目录(会添加到 `plugins.load.paths`):
|
||||
使用 `--link` 避免复制本地目录(会添加到 `plugins.load.paths`):
|
||||
|
||||
```bash
|
||||
openclaw plugins install -l ./my-plugin
|
||||
@ -275,14 +275,14 @@ openclaw plugins install -l ./my-plugin
|
||||
<Note>
|
||||
`--force` 不支持与 `--link` 一起使用,因为链接安装会复用源路径,而不是覆盖托管安装目标。
|
||||
|
||||
在 npm 安装中使用 `--pin`,可将解析后的精确 spec(`name@version`)保存到托管插件索引中,同时保留默认的非固定行为。
|
||||
在 npm 安装中使用 `--pin`,可将解析得到的精确规格(`name@version`)保存到托管插件索引中,同时保持默认行为不固定。
|
||||
</Note>
|
||||
|
||||
### 插件索引
|
||||
|
||||
插件安装元数据是机器管理的状态,不是用户配置。安装和更新会将其写入活动 OpenClaw 状态目录下的 `plugins/installs.json`。其顶层 `installRecords` 映射是安装元数据的持久来源,包括损坏或缺失插件清单的记录。`plugins` 数组是由清单派生的冷注册表缓存。该文件包含请勿编辑警告,并由 `openclaw plugins update`、卸载、诊断和冷插件注册表使用。
|
||||
插件安装元数据是机器管理的状态,不是用户配置。安装和更新会把它写入活动 OpenClaw 状态目录下的 `plugins/installs.json`。它顶层的 `installRecords` 映射是持久安装元数据的来源,包括损坏或缺失插件清单的记录。`plugins` 数组是由清单派生的冷注册表缓存。该文件包含“不要编辑”警告,并由 `openclaw plugins update`、卸载、诊断和冷插件注册表使用。
|
||||
|
||||
当 OpenClaw 在配置中看到已发布的旧版 `plugins.installs` 记录时,会将它们移动到插件索引并移除该配置键;如果任一写入失败,会保留配置记录,避免安装元数据丢失。
|
||||
当 OpenClaw 在配置中看到已发布的旧版 `plugins.installs` 记录时,会将它们移动到插件索引,并移除配置键;如果任一写入失败,配置记录会保留,避免安装元数据丢失。
|
||||
|
||||
### 卸载
|
||||
|
||||
@ -292,10 +292,10 @@ openclaw plugins uninstall <id> --dry-run
|
||||
openclaw plugins uninstall <id> --keep-files
|
||||
```
|
||||
|
||||
`uninstall` 会从 `plugins.entries`、持久化插件索引、插件允许/拒绝列表条目,以及适用时链接的 `plugins.load.paths` 条目中移除插件记录。除非设置了 `--keep-files`,否则卸载还会移除已跟踪的托管安装目录,前提是该目录位于 OpenClaw 的插件扩展根目录内。对于主动记忆插件,记忆槽会重置为 `memory-core`。
|
||||
`uninstall` 会从 `plugins.entries`、持久化插件索引、插件允许/拒绝列表条目,以及适用时链接的 `plugins.load.paths` 条目中移除插件记录。除非设置了 `--keep-files`,卸载还会在跟踪的托管安装目录位于 OpenClaw 插件扩展根目录内时将其移除。对于主动记忆插件,记忆槽会重置为 `memory-core`。
|
||||
|
||||
<Note>
|
||||
`--keep-config` 作为 `--keep-files` 的已弃用别名受支持。
|
||||
`--keep-config` 作为 `--keep-files` 的已弃用别名仍受支持。
|
||||
</Note>
|
||||
|
||||
### 更新
|
||||
@ -308,29 +308,29 @@ openclaw plugins update @openclaw/voice-call
|
||||
openclaw plugins update openclaw-codex-app-server --dangerously-force-unsafe-install
|
||||
```
|
||||
|
||||
更新适用于托管插件索引中已跟踪的插件安装,以及 `hooks.internal.installs` 中已跟踪的 hook-pack 安装。
|
||||
更新适用于托管插件索引中已跟踪的插件安装,以及 `hooks.internal.installs` 中已跟踪的钩子包安装。
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Resolving plugin id vs npm spec">
|
||||
当你传入插件 id 时,OpenClaw 会复用该插件记录的安装 spec。这意味着之前存储的 dist-tag(例如 `@beta`)和精确固定版本,会在后续 `update <id>` 运行中继续使用。
|
||||
<Accordion title="解析插件 id 与 npm 规格">
|
||||
当你传入插件 id 时,OpenClaw 会复用该插件已记录的安装规格。这意味着之前存储的 dist-tag(例如 `@beta`)和精确固定版本会在后续 `update <id>` 运行中继续使用。
|
||||
|
||||
对于 npm 安装,你也可以传入带有 dist-tag 或精确版本的显式 npm 包 spec。OpenClaw 会将该包名解析回已跟踪的插件记录,更新该已安装插件,并记录新的 npm spec 供未来基于 id 的更新使用。
|
||||
对于 npm 安装,你也可以传入带 dist-tag 或精确版本的显式 npm 包规格。OpenClaw 会将该包名解析回已跟踪的插件记录,更新该已安装插件,并记录新的 npm 规格以供未来基于 id 的更新使用。
|
||||
|
||||
传入不带版本或标签的 npm 包名,也会解析回已跟踪的插件记录。当某个插件已固定到精确版本,而你想将其移回注册表默认发布线时,请使用这种方式。
|
||||
传入不带版本或标签的 npm 包名也会解析回已跟踪的插件记录。当插件固定到某个精确版本,而你希望将它移回注册表默认发布线时使用此方式。
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Beta channel updates">
|
||||
`openclaw plugins update` 会复用已跟踪的插件 spec,除非你传入新的 spec。`openclaw update` 还知道当前 OpenClaw 更新渠道:在 beta 渠道上,默认线 npm 和 ClawHub 插件记录会先尝试 `@beta`,如果不存在插件 beta 版本,则回退到记录的默认/latest spec。精确版本和显式标签会继续固定到该选择器。
|
||||
<Accordion title="Beta 渠道更新">
|
||||
`openclaw plugins update` 会复用已跟踪的插件规格,除非你传入新规格。`openclaw update` 还知道活动的 OpenClaw 更新渠道:在 beta 渠道上,默认线 npm 和 ClawHub 插件记录会先尝试 `@beta`,如果不存在插件 beta 版本,再回退到已记录的默认/latest 规格。精确版本和显式标签会继续固定到该选择器。
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Version checks and integrity drift">
|
||||
在执行实时 npm 更新之前,OpenClaw 会根据 npm 注册表元数据检查已安装包版本。如果已安装版本和记录的制品身份已经与解析出的目标匹配,则会跳过更新,不下载、不重新安装,也不重写 `openclaw.json`。
|
||||
<Accordion title="版本检查和完整性漂移">
|
||||
在实时 npm 更新前,OpenClaw 会根据 npm 注册表元数据检查已安装包版本。如果已安装版本和已记录的构件身份已经匹配解析得到的目标,更新会跳过,不会下载、重新安装或重写 `openclaw.json`。
|
||||
|
||||
当存在已存储的完整性哈希且获取到的制品哈希发生变化时,OpenClaw 会将其视为 npm 制品漂移。交互式 `openclaw plugins update` 命令会打印预期哈希和实际哈希,并在继续前请求确认。非交互式更新辅助程序会默认关闭失败,除非调用方提供显式继续策略。
|
||||
当存在已存储的完整性哈希,并且获取到的构件哈希发生变化时,OpenClaw 会将其视为 npm 构件漂移。交互式 `openclaw plugins update` 命令会打印预期和实际哈希,并在继续前请求确认。非交互式更新辅助程序会默认关闭失败,除非调用方提供显式的继续策略。
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="--dangerously-force-unsafe-install on update">
|
||||
`--dangerously-force-unsafe-install` 也可用于 `plugins update`,作为插件更新期间内置危险代码扫描误报的紧急覆盖选项。它仍然不会绕过插件 `before_install` 策略阻断或扫描失败阻断,并且只适用于插件更新,不适用于 hook-pack 更新。
|
||||
<Accordion title="更新中的 --dangerously-force-unsafe-install">
|
||||
`--dangerously-force-unsafe-install` 也可用于 `plugins update`,作为插件更新期间内置危险代码扫描误报的紧急覆盖选项。它仍然不会绕过插件 `before_install` 策略阻止或扫描失败阻止,并且只适用于插件更新,不适用于钩子包更新。
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
@ -342,21 +342,21 @@ openclaw plugins inspect <id> --runtime
|
||||
openclaw plugins inspect <id> --json
|
||||
```
|
||||
|
||||
默认情况下,检查会显示身份、加载状态、来源、清单能力、策略标志、诊断、安装元数据、包能力,以及任何检测到的 MCP 或 LSP 服务器支持,而不会导入插件运行时。添加 `--runtime` 可加载插件模块,并包含已注册的钩子、工具、命令、服务、Gateway 网关方法和 HTTP 路由。运行时检查会直接报告缺失的插件依赖;安装和修复仍由 `openclaw plugins install`、`openclaw plugins update` 和 `openclaw doctor --fix` 处理。
|
||||
默认情况下,检查会显示身份、加载状态、来源、清单能力、策略标志、诊断、安装元数据、包能力,以及检测到的任何 MCP 或 LSP 服务器支持,而不会导入插件运行时。添加 `--runtime` 会加载插件模块,并包含注册的钩子、工具、命令、服务、网关方法和 HTTP 路由。运行时检查会直接报告缺失的插件依赖;安装和修复仍在 `openclaw plugins install`、`openclaw plugins update` 和 `openclaw doctor --fix` 中处理。
|
||||
|
||||
插件拥有的 CLI 命令会安装为根 `openclaw` 命令组。在 `inspect --runtime` 于 `cliCommands` 下显示某个命令后,以 `openclaw <command> ...` 的形式运行它;例如,注册了 `demo-git` 的插件可通过 `openclaw demo-git ping` 验证。
|
||||
插件拥有的 CLI 命令会安装为根级 `openclaw` 命令组。`inspect --runtime` 在 `cliCommands` 下显示命令后,可按 `openclaw <command> ...` 运行它;例如,注册了 `demo-git` 的插件可以用 `openclaw demo-git ping` 验证。
|
||||
|
||||
每个插件都会按其在运行时实际注册的内容分类:
|
||||
每个插件会按其在运行时实际注册的内容分类:
|
||||
|
||||
- **plain-capability** — 一种能力类型(例如仅提供商插件)
|
||||
- **plain-capability** — 一种能力类型(例如仅 provider 的插件)
|
||||
- **hybrid-capability** — 多种能力类型(例如文本 + 语音 + 图像)
|
||||
- **hook-only** — 仅钩子,没有能力或界面
|
||||
- **non-capability** — 工具/命令/服务,但没有能力
|
||||
- **hook-only** — 只有钩子,没有能力或表面
|
||||
- **non-capability** — 有工具/命令/服务,但没有能力
|
||||
|
||||
有关能力模型的更多信息,请参阅 [插件形态](/zh-CN/plugins/architecture#plugin-shapes)。
|
||||
|
||||
<Note>
|
||||
`--json` 标志会输出适合脚本和审计的机器可读报告。`inspect --all` 会呈现全插件表格,包含形态、能力类型、兼容性提示、包能力和钩子摘要列。`info` 是 `inspect` 的别名。
|
||||
`--json` 标志会输出适合脚本和审计使用的机器可读报告。`inspect --all` 会渲染覆盖全量插件的表格,包含形态、能力种类、兼容性通知、包能力和钩子摘要列。`info` 是 `inspect` 的别名。
|
||||
</Note>
|
||||
|
||||
### Doctor
|
||||
@ -365,11 +365,11 @@ openclaw plugins inspect <id> --json
|
||||
openclaw plugins doctor
|
||||
```
|
||||
|
||||
`doctor` 会报告插件加载错误、清单/发现诊断和兼容性提示。当一切正常时,它会打印 `No plugin issues detected.`
|
||||
`doctor` 会报告插件加载错误、清单/发现诊断和兼容性通知。一切正常时,它会打印 `No plugin issues detected.`
|
||||
|
||||
如果已配置的插件存在于磁盘上,但被加载器的路径安全检查阻止,配置验证会保留该插件条目,并将其报告为 `present but blocked`。请修复前面的被阻止插件诊断,例如路径所有权或全局可写权限,而不是移除 `plugins.entries.<id>` 或 `plugins.allow` 配置。
|
||||
如果已配置插件存在于磁盘上,但被加载器的路径安全检查阻止,配置验证会保留该插件条目,并将其报告为 `present but blocked`。请修复前面的被阻止插件诊断,例如路径所有权或全局可写权限,而不是移除 `plugins.entries.<id>` 或 `plugins.allow` 配置。
|
||||
|
||||
对于缺少 `register`/`activate` 导出等模块形态失败,请使用 `OPENCLAW_PLUGIN_LOAD_DEBUG=1` 重新运行,以在诊断输出中包含紧凑的导出形态摘要。
|
||||
对于模块形态失败,例如缺少 `register`/`activate` 导出,请使用 `OPENCLAW_PLUGIN_LOAD_DEBUG=1` 重新运行,以便在诊断输出中包含紧凑的导出形态摘要。
|
||||
|
||||
### 注册表
|
||||
|
||||
@ -379,12 +379,12 @@ openclaw plugins registry --refresh
|
||||
openclaw plugins registry --json
|
||||
```
|
||||
|
||||
本地插件注册表是 OpenClaw 持久化的冷读取模型,用于已安装插件身份、启用状态、来源元数据和贡献所有权。常规启动、提供商所有者查找、渠道设置分类和插件清单都可以在不导入插件运行时模块的情况下读取它。
|
||||
本地插件注册表是 OpenClaw 为已安装插件身份、启用状态、来源元数据和贡献所有权持久化的冷读模型。正常启动、提供商所有者查找、渠道设置分类和插件清单都可以读取它,而无需导入插件运行时模块。
|
||||
|
||||
使用 `plugins registry` 检查持久化注册表是否存在、为最新,或已过时。使用 `--refresh` 可根据持久化插件索引、配置策略以及清单/包元数据重建它。这是修复路径,不是运行时激活路径。
|
||||
使用 `plugins registry` 检查持久化注册表是否存在、是否为当前版本或是否已过期。使用 `--refresh` 根据持久化插件索引、配置策略以及清单/包元数据重建它。这是一条修复路径,不是运行时激活路径。
|
||||
|
||||
<Warning>
|
||||
`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` 是一个已弃用的紧急兼容开关,用于处理注册表读取失败。优先使用 `plugins registry --refresh` 或 `openclaw doctor --fix`;环境变量回退只用于迁移推出期间的紧急启动恢复。
|
||||
`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` 是一个已弃用的破窗兼容开关,用于处理注册表读取失败。优先使用 `plugins registry --refresh` 或 `openclaw doctor --fix`;环境变量回退仅用于迁移推出期间的紧急启动恢复。
|
||||
</Warning>
|
||||
|
||||
### 市场
|
||||
@ -394,9 +394,9 @@ openclaw plugins marketplace list <source>
|
||||
openclaw plugins marketplace list <source> --json
|
||||
```
|
||||
|
||||
市场列表接受本地市场路径、`marketplace.json` 路径、像 `owner/repo` 这样的 GitHub 简写、GitHub 仓库 URL,或 git URL。`--json` 会打印解析后的源标签,以及解析后的市场清单和插件条目。
|
||||
市场列表命令接受本地市场路径、`marketplace.json` 路径、类似 `owner/repo` 的 GitHub 简写、GitHub 仓库 URL,或 git URL。`--json` 会打印解析后的来源标签,以及解析后的市场清单和插件条目。
|
||||
|
||||
## 相关
|
||||
## 相关内容
|
||||
|
||||
- [构建插件](/zh-CN/plugins/building-plugins)
|
||||
- [CLI 参考](/zh-CN/cli)
|
||||
|
||||
@ -1,23 +1,23 @@
|
||||
---
|
||||
read_when:
|
||||
- 为长时间运行的聊天轮次配置可见进度更新
|
||||
- 在部分流式传输、分块流式传输和进度流式传输模式之间选择
|
||||
- 为长时间运行的聊天轮次配置可见的进度更新
|
||||
- 在部分、分块和进度流式传输模式之间选择
|
||||
- 说明 OpenClaw 如何在工作进行期间更新一条渠道消息
|
||||
- 进度草稿、独立进度消息或最终化回退的故障排除
|
||||
summary: 进度草稿:智能体运行时会更新的一条可见进行中消息
|
||||
- 故障排除进度草稿、独立进度消息或最终化回退
|
||||
summary: 进度草稿:一条可见的进行中消息,会在智能体运行时更新
|
||||
title: 进度草稿
|
||||
x-i18n:
|
||||
generated_at: "2026-05-04T02:55:00Z"
|
||||
generated_at: "2026-05-04T04:44:06Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: c80397550032903e7c114649b0e3246884c4ab051bc36d2d09fd0b242f4c0c55
|
||||
source_hash: f78c07866cd7f613012a80a40413e5866c1dd2edd477088f9fc141347f5f3788
|
||||
source_path: concepts/progress-drafts.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
进度草稿让长时间运行的智能体回合在聊天中显得有响应,而不会把对话变成一叠临时状态回复。
|
||||
进度草稿让长时间运行的智能体回合在聊天中显得有进展,而不会把对话变成一堆临时状态回复。
|
||||
|
||||
启用进度草稿后,OpenClaw 只会在该回合证明自己确实在执行实际工作后创建一条可见的进行中消息;当智能体读取、规划、调用工具或等待批准时更新它;然后在渠道能够安全处理时,将该草稿变成最终回答。
|
||||
启用进度草稿后,OpenClaw 只会在回合证明正在执行真实工作后创建一条可见的进行中消息,并在智能体读取、规划、调用工具或等待批准时更新它;当渠道可以安全地这样做时,再把该草稿变成最终答案。
|
||||
|
||||
```text
|
||||
Shelling...
|
||||
@ -26,11 +26,11 @@ Shelling...
|
||||
🛠️ Exec: run tests
|
||||
```
|
||||
|
||||
当你希望在工具密集型工作期间只有一条整洁的状态消息,并在回合完成时得到最终回答时,请使用进度草稿。
|
||||
当你希望在工具密集型工作期间显示一条整洁的状态消息,并在回合完成后显示最终答案时,请使用进度草稿。
|
||||
|
||||
## 快速开始
|
||||
|
||||
按渠道使用 `streaming.mode: "progress"` 启用进度草稿:
|
||||
使用 `streaming.mode: "progress"` 按渠道启用进度草稿:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -44,36 +44,36 @@ Shelling...
|
||||
}
|
||||
```
|
||||
|
||||
这通常已经足够。OpenClaw 会选择一个自动的单词标签,等到工作至少持续五秒或发出第二个工作事件后,在有用工作发生时添加紧凑的进度行,并抑制该回合中重复的独立进度闲聊。
|
||||
这通常就足够了。OpenClaw 会选择一个自动的单词标签,等待工作持续至少五秒或发出第二个工作事件,在有用工作发生时添加紧凑的进度行,并抑制该回合中重复的独立进度闲聊。
|
||||
|
||||
## 用户会看到什么
|
||||
|
||||
进度草稿包含两部分:
|
||||
|
||||
| 部分 | 用途 |
|
||||
| 部分 | 用途 |
|
||||
| -------------- | --------------------------------------------------------------------------- |
|
||||
| 标签 | 简短标题,例如 `Thinking...` 或 `Shelling...`。 |
|
||||
| 进度行 | 使用与详细输出相同的工具标签和图标的紧凑运行更新。 |
|
||||
| 标签 | 一个简短标题,例如 `Thinking...` 或 `Shelling...`。 |
|
||||
| 进度行 | 使用与详细输出相同工具标签和图标的紧凑运行更新。 |
|
||||
|
||||
标签会在智能体开始有意义的工作,并且持续忙碌五秒或发出第二个工作事件后出现。纯文本回复不会显示进度草稿。只有当智能体发出有用的工作更新时,才会添加进度行,例如 `🛠️ Exec`、`🔎 Web Search` 或 `✍️ Write: to /tmp/file`。默认情况下,它们使用与 `/verbose` 相同的紧凑解释模式;调试时如果也想附加原始命令/详情,请设置 `agents.defaults.toolProgressDetail: "raw"`。
|
||||
在可能的情况下,最终回答会替换草稿;否则,OpenClaw 会正常发送最终回答,并根据渠道的传输方式清理草稿或停止更新草稿。
|
||||
标签会在智能体开始有意义的工作后出现,并且该工作保持忙碌五秒,或发出第二个工作事件。纯文本回复不会显示进度草稿。只有在智能体发出有用的工作更新时,才会添加进度行,例如 `🛠️ Exec`、`🔎 Web Search` 或 `✍️ Write: to /tmp/file`。默认情况下,它们使用与 `/verbose` 相同的紧凑解释模式;调试时如果也想追加原始命令/详情,请设置 `agents.defaults.toolProgressDetail: "raw"`。
|
||||
在可能时,最终答案会替换草稿;否则 OpenClaw 会正常发送最终答案,并根据渠道的传输方式清理草稿或停止更新草稿。
|
||||
|
||||
## 选择模式
|
||||
|
||||
`channels.<channel>.streaming.mode` 控制可见的进行中行为:
|
||||
|
||||
| 模式 | 最适合 | 聊天中会出现什么 |
|
||||
| 模式 | 最适合 | 聊天中显示的内容 |
|
||||
| ---------- | -------------------------------- | ------------------------------------------------- |
|
||||
| `off` | 安静渠道 | 只有最终回答。 |
|
||||
| `partial` | 观察回答文本出现 | 一个用最新回答文本编辑的草稿。 |
|
||||
| `block` | 更大的回答预览分块 | 一个以更大分块更新或追加的预览。 |
|
||||
| `progress` | 工具密集型或长时间运行的回合 | 一个状态草稿,然后是最终回答。 |
|
||||
| `off` | 安静的渠道 | 只有最终答案。 |
|
||||
| `partial` | 观察答案文本逐步出现 | 一个草稿,编辑为最新答案文本。 |
|
||||
| `block` | 更大的答案预览分块 | 一个预览,以更大的分块更新或追加。 |
|
||||
| `progress` | 工具密集型或长时间运行的回合 | 一个状态草稿,然后是最终答案。 |
|
||||
|
||||
当用户更关心“正在发生什么”,而不是逐个 token 观看回答文本流式输出时,选择 `progress`。
|
||||
当用户更关心“正在发生什么”,而不是逐个 token 观看答案文本流式输出时,选择 `progress`。
|
||||
|
||||
当回答本身就是进度信号时,选择 `partial`。
|
||||
当答案本身就是进度信号时,选择 `partial`。
|
||||
|
||||
当你想要以更大的文本块更新草稿预览时,选择 `block`。在 Discord 和 Telegram 上,`streaming.mode: "block"` 仍是预览流式传输,而不是普通的分块投递。当你想要普通的分块回复时,请使用 `streaming.block.enabled` 或旧版 `blockStreaming`。
|
||||
当你希望以更大的文本分块更新草稿预览时,选择 `block`。在 Discord 和 Telegram 上,`streaming.mode: "block"` 仍然是预览流式传输,而不是普通的分块交付。当你想要普通的分块回复时,请使用 `streaming.block.enabled` 或旧版 `blockStreaming`。
|
||||
|
||||
## 配置标签
|
||||
|
||||
@ -158,9 +158,9 @@ Surfacing...
|
||||
|
||||
## 控制进度行
|
||||
|
||||
在进度模式中,进度行默认启用。它们来自真实运行事件:工具启动、项目更新、任务计划、批准、命令输出、补丁摘要,以及类似的智能体活动。
|
||||
在进度模式下,进度行默认启用。它们来自真实运行事件:工具启动、条目更新、任务计划、批准、命令输出、补丁摘要,以及类似的智能体活动。
|
||||
|
||||
OpenClaw 对进度草稿和 `/verbose` 使用同一个格式化器:
|
||||
OpenClaw 对进度草稿和 `/verbose` 使用相同的格式化器:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -172,14 +172,14 @@ OpenClaw 对进度草稿和 `/verbose` 使用同一个格式化器:
|
||||
}
|
||||
```
|
||||
|
||||
`"explain"` 是默认值,会用类似 `🛠️ Exec: check JS syntax for /tmp/app.js` 的简洁标签保持草稿稳定。`"raw"` 会在可用时附加底层命令/详情,这在调试时很有用,但在聊天中会更嘈杂。
|
||||
`"explain"` 是默认值,会用简洁标签保持草稿稳定,例如 `🛠️ Exec: check JS syntax for /tmp/app.js`。`"raw"` 会在可用时追加底层命令/详情,这在调试时有用,但在聊天中更嘈杂。
|
||||
|
||||
例如,同一个命令会根据详情模式显示为不同内容:
|
||||
例如,同一个命令会根据详情模式显示为不同形式:
|
||||
|
||||
| 模式 | 进度行 |
|
||||
| 模式 | 进度行 |
|
||||
| --------- | -------------------------------------------------------------------- |
|
||||
| `explain` | `🛠️ Exec: check JS syntax for /tmp/app.js` |
|
||||
| `raw` | `🛠️ Exec: check JS syntax for /tmp/app.js, node --check /tmp/app.js` |
|
||||
| `explain` | `🛠️ Exec: check JS syntax for /tmp/app.js` |
|
||||
| `raw` | `🛠️ Exec: check JS syntax for /tmp/app.js, node --check /tmp/app.js` |
|
||||
|
||||
限制保持可见的行数:
|
||||
|
||||
@ -198,9 +198,28 @@ OpenClaw 对进度草稿和 `/verbose` 使用同一个格式化器:
|
||||
}
|
||||
```
|
||||
|
||||
编辑草稿时,进度行会自动压缩,以减少聊天气泡重排。
|
||||
进度行会自动压缩,以减少编辑草稿时聊天气泡的重排。
|
||||
|
||||
OpenClaw 默认会截断过长的进度行,这样重复编辑草稿时不会在每次更新时产生不同换行。前缀保持可读,路径或原始命令等长详情会用省略号缩短。
|
||||
OpenClaw 默认会截断较长的进度行,因此重复编辑草稿不会在每次更新时产生不同换行。前缀会保持可读,路径或原始命令等长详情会用省略号缩短。
|
||||
|
||||
Slack 可以把进度行渲染为结构化的 Block Kit 字段,而不是单个文本正文:
|
||||
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
slack: {
|
||||
streaming: {
|
||||
mode: "progress",
|
||||
progress: {
|
||||
render: "rich",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
富渲染会保留相同的纯文本回退,因此不支持更丰富形态的渠道和客户端仍可显示紧凑进度文本。
|
||||
|
||||
保留单个进度草稿,但隐藏工具和任务行:
|
||||
|
||||
@ -219,54 +238,54 @@ OpenClaw 默认会截断过长的进度行,这样重复编辑草稿时不会
|
||||
}
|
||||
```
|
||||
|
||||
使用 `toolProgress: false` 时,OpenClaw 仍会抑制该回合较旧的独立工具进度消息。除非配置了标签,否则渠道会保持视觉上的安静,直到最终回答出现。
|
||||
使用 `toolProgress: false` 时,OpenClaw 仍会抑制该回合中旧式的独立工具进度消息。除非配置了标签,否则在最终答案之前,渠道会保持视觉上的安静。
|
||||
|
||||
## 渠道行为
|
||||
|
||||
每个渠道都会使用它支持的最简洁传输方式:
|
||||
每个渠道都会使用其支持的最清晰传输方式:
|
||||
|
||||
| 渠道 | 进度传输 | 说明 |
|
||||
| 渠道 | 进度传输 | 备注 |
|
||||
| --------------- | -------------------------------------- | --------------------------------------------------------------------- |
|
||||
| Discord | 发送一条消息,然后编辑它。 | 当最终文本适合一条安全预览消息时,会就地编辑。 |
|
||||
| Matrix | 发送一个事件,然后编辑它。 | 账户级流式传输配置控制账户级草稿。 |
|
||||
| Microsoft Teams | 个人聊天中的原生 Teams 流。 | `streaming.mode: "block"` 映射到 Teams 分块投递。 |
|
||||
| Slack | 原生流或可编辑草稿帖子。 | 线程可用性会影响是否可以使用原生流式传输。 |
|
||||
| Telegram | 发送一条消息,然后编辑它。 | 较旧的可见草稿可能会被替换,以便最终时间戳仍有用。 |
|
||||
| Mattermost | 可编辑草稿帖子。 | 工具活动会折叠到同一个草稿式帖子中。 |
|
||||
| Discord | 发送一条消息,然后编辑它。 | 当最终文本适合一条安全预览消息时,会就地编辑。 |
|
||||
| Matrix | 发送一个事件,然后编辑它。 | 账号级流式配置控制账号级草稿。 |
|
||||
| Microsoft Teams | 在个人聊天中使用原生 Teams 流。 | `streaming.mode: "block"` 映射为 Teams 分块交付。 |
|
||||
| Slack | 原生流或可编辑草稿帖子。 | 线程可用性会影响是否可以使用原生流式传输。 |
|
||||
| Telegram | 发送一条消息,然后编辑它。 | 旧的可见草稿可能会被替换,以保持最终时间戳有用。 |
|
||||
| Mattermost | 可编辑草稿帖子。 | 工具活动会折叠到同一个草稿式帖子中。 |
|
||||
|
||||
没有安全编辑支持的渠道通常会回退到输入状态指示器或仅最终投递。
|
||||
没有安全编辑支持的渠道通常会回退到输入指示器或仅最终交付。
|
||||
|
||||
## 最终化
|
||||
|
||||
最终回答准备就绪后,OpenClaw 会尝试保持聊天整洁:
|
||||
当最终答案准备好时,OpenClaw 会尝试保持聊天整洁:
|
||||
|
||||
- 如果草稿可以安全地变成最终回答,OpenClaw 会就地编辑它。
|
||||
- 如果草稿可以安全地成为最终答案,OpenClaw 会就地编辑它。
|
||||
- 如果渠道使用原生进度流式传输,OpenClaw 会在原生传输接受最终文本时最终化该流。
|
||||
- 如果最终回答包含媒体、批准提示、显式回复目标、过多分块,或者编辑/发送失败,OpenClaw 会通过正常的渠道投递路径发送最终回答。
|
||||
- 如果最终答案包含媒体、批准提示、明确的回复目标、过多分块,或编辑/发送失败,OpenClaw 会通过普通渠道交付路径发送最终答案。
|
||||
|
||||
回退路径是有意设计的。发送一条新的最终回答,比丢失文本、把回复放错线程,或用渠道无法安全表示的载荷覆盖草稿更好。
|
||||
回退路径是有意设计的。发送一条新的最终答案,比丢失文本、回复串错线程,或用渠道无法安全表示的载荷覆盖草稿更好。
|
||||
|
||||
## 故障排除
|
||||
|
||||
**我只看到最终回答。**
|
||||
**我只看到最终答案。**
|
||||
|
||||
检查处理该消息的账户或渠道是否已将 `channels.<channel>.streaming.mode` 设置为 `progress`。当渠道无法安全编辑正确消息时,某些群组或引用回复路径可能会在某个回合禁用草稿预览。
|
||||
检查处理消息的账号或渠道是否已将 `channels.<channel>.streaming.mode` 设置为 `progress`。当渠道无法安全编辑正确消息时,一些群组或引用回复路径可能会为该回合禁用草稿预览。
|
||||
|
||||
**我看到了标签,但没有工具行。**
|
||||
**我看到标签,但没有工具行。**
|
||||
|
||||
检查 `streaming.progress.toolProgress`。如果它是 `false`,OpenClaw 会保留单个草稿行为,但隐藏工具和任务进度行。
|
||||
|
||||
**我看到的是新的最终消息,而不是编辑后的草稿。**
|
||||
**我看到一条新的最终消息,而不是编辑后的草稿。**
|
||||
|
||||
这是安全回退。媒体回复、长回答、显式回复目标、旧 Telegram 草稿、缺失的 Slack 线程目标、被删除的预览消息,或原生流最终化失败,都可能触发这种情况。
|
||||
这是安全回退。它可能发生在媒体回复、长答案、明确回复目标、旧 Telegram 草稿、缺少 Slack 线程目标、已删除预览消息,或原生流最终化失败时。
|
||||
|
||||
**我仍然看到独立进度消息。**
|
||||
|
||||
当草稿处于活动状态时,进度模式会抑制默认的独立工具进度消息。如果仍然出现独立消息,请确认该回合确实使用的是进度模式,而不是 `streaming.mode: "off"`,也不是无法为该消息创建草稿的渠道路径。
|
||||
当草稿处于活动状态时,进度模式会抑制默认的独立工具进度消息。如果仍然出现独立消息,请确认该回合确实正在使用进度模式,而不是 `streaming.mode: "off"`,也不是无法为该消息创建草稿的渠道路径。
|
||||
|
||||
**Teams 的行为与 Discord 或 Telegram 不同。**
|
||||
|
||||
Microsoft Teams 在个人聊天中使用原生流,而不是通用的发送并编辑预览传输。Teams 还会将 `streaming.mode: "block"` 视为 Teams 分块投递,因为它没有 Discord 和 Telegram 使用的同一种草稿预览分块模式。
|
||||
Microsoft Teams 在个人聊天中使用原生流,而不是通用的发送并编辑预览传输。Teams 还会把 `streaming.mode: "block"` 视为 Teams 分块交付,因为它没有 Discord 和 Telegram 所使用的同类草稿预览分块模式。
|
||||
|
||||
## 相关
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user