chore(i18n): refresh zh-CN translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-25 01:55:38 +00:00
parent 85bffed57b
commit 38d4bc0173
10 changed files with 1499 additions and 1485 deletions

View File

@ -1,27 +1,27 @@
---
read_when:
- 你需要了解某个 CI 作业为什么运行或为什么没有运行
- 你需要了解某个 CI 作业为什么运行了,为什么没有运行
- 你正在调试失败的 GitHub Actions 检查
summary: CI 作业图、范围门,以及本地等效命令
summary: CI 作业图、范围门,以及本地等效命令
title: CI 流水线
x-i18n:
generated_at: "2026-04-25T00:40:25Z"
generated_at: "2026-04-25T01:51:43Z"
model: gpt-5.4
provider: openai
source_hash: 03105fd06cf6a913ef0fb8cbe84c64ed89edbc09652f347b4508552a2f33bb71
source_hash: da983f025479feb82baf407e723bb663b1239f1abd931827a4c9f419ea88df67
source_path: ci.md
workflow: 15
---
CI 会在每次推送到 `main` 以及每个拉取请求时运行。它使用智能范围控制,当只有不相关区域发生变更时,会跳过开销较大的作业。
CI 会在每次推送到 `main` 以及每个拉取请求时运行。它使用智能范围控制,在仅更改了不相关区域时跳过高开销作业。
QA Lab 在主智能范围工作流之外还有专门的 CI 通道。`Parity gate` 工作流会在匹配的 PR 变更以及手动触发时运行;它会构建私有 QA 运行时,并比较模拟的 GPT-5.4 和 Opus 4.6 智能体 pack。`QA-Lab - All Lanes` 工作流会在 `main` 上每晚运行,并支持手动触发;它会将模拟 parity gate、实时 Matrix 通道和实时 Telegram 通道作为并行作业展开。实时作业使用 `qa-live-shared` 环境,而 Telegram 通道使用 Convex leases。`OpenClaw Release Checks` 也会在发布审批前运行相同的 QA Lab 通道。
QA Lab 在主智能范围工作流之外有专用的 CI 通道。`Parity gate` 工作流会在匹配的 PR 变更以及手动触发时运行;它会构建私有 QA 运行时,并比较模拟的 GPT-5.4 和 Opus 4.6 agentic 包。`QA-Lab - All Lanes` 工作流会在 `main` 上每晚运行,并支持手动触发;它会将模拟 parity gate、实时 Matrix 通道和实时 Telegram 通道作为并行作业扇出执行。实时作业使用 `qa-live-shared` 环境,而 Telegram 通道使用 Convex 租约。`OpenClaw Release Checks` 也会在发布审批前运行相同的 QA Lab 通道。
`Duplicate PRs After Merge` 工作流是一个供维护者使用的手动工作流,用于合并后的重复 PR 清理。它默认以 dry-run 模式运行,只有在 `apply=true` 时才会关闭明确列出的 PR。在修改 GitHub 之前,它会验证已落地的 PR 确实已合并,并确认每个重复 PR 都具有共享的引用 issue或有重叠的变更 hunk
`Duplicate PRs After Merge` 工作流是一个供维护者使用的手动工作流,用于合并落地后的重复 PR 清理。它默认使用 dry-run并且仅在 `apply=true` 时关闭被明确列出的 PR。在修改 GitHub 之前,它会验证已落地的 PR 确实已合并,并且验证每个重复 PR 都具备共享的被引用 issue或存在重叠的变更代码块
`Docs Agent` 工作流是一个事件驱动的 Codex 维护通道,用于让现有文档与最近已落地的变更保持一致。它没有纯定时调度`main` 上一次成功的、非机器人触发的 push CI 运行可以触发它,手动触发也可以直接运行它。工作流运行触发的调用会在 `main` 已继续前进,或过去一小时内已经创建了另一个未跳过的 Docs Agent 运行时跳过。当它运行时,它会审查从上一次未跳过的 Docs Agent 源 SHA 到当前 `main` 的提交范围,因此每小时一次运行可以覆盖自上次文档处理以来累积的所有 `main` 变更
`Docs Agent` 工作流是一个事件驱动的 Codex 维护通道,用于让现有文档与最近落地的更改保持一致。它没有纯定时计划`main` 上一次成功的、非机器人触发的 push CI 运行可以触发它,手动触发也可以直接运行它。workflow-run 调用会在 `main` 已继续前进,或在最近一小时内已经创建了另一个未被跳过的 Docs Agent 运行时跳过。运行时,它会审查从上一个未被跳过的 Docs Agent 源 SHA 到当前 `main` 的提交范围,因此每小时一次运行可以覆盖自上次文档处理以来累积`main` 上的所有更改
`Test Performance Agent` 工作流是一个事件驱动的 Codex 维护通道,用于处理慢测试。它没有纯定时调度`main` 上一次成功的、非机器人触发的 push CI 运行可以触发它,但如果当天 UTC 已经有另一个 workflow-run 调用运行过或正在运行,它就会跳过。手动触发会绕过这个按日活动门禁。该通道会构建一个完整测试套件的分组 Vitest 性能报告,让 Codex 只进行小范围、保留覆盖率的测试性能修复,而不是大规模重构,然后重新运行完整测试套件报告,并拒绝任何会降低通过基线测试数量的变更。如果基线中存在失败测试Codex 只能修复明显的失败;并且在提交任何内容之前,智能体处理后的完整测试套件报告必须通过。当 `main` 在机器人推送落地之前继续前进时,该通道会对已验证的补丁执行 rebase重新运行 `pnpm check:changed`,然后重试推送;发生冲突的过时补丁会被跳过。它使用 GitHub 托管的 Ubuntu这样 Codex action 就可以与 docs agent 保持相同的 drop-sudo 安全姿态
`Test Performance Agent` 工作流是一个事件驱动的 Codex 维护通道,用于处理慢速测试。它没有纯定时计划`main` 上一次成功的、非机器人触发的 push CI 运行可以触发它,但如果当天 UTC 已经有另一个 workflow-run 调用运行过或正在运行,它就会跳过。手动触发会绕过这个按天统计的活动门控。该通道会构建一份完整测试套件的分组 Vitest 性能报告,让 Codex 只做小规模且不降低覆盖率的测试性能修复,而不是进行大范围重构,然后重新运行完整测试套件报告,并拒绝任何会降低通过基线测试数量的更改。如果基线中已有失败测试Codex 只能修复明显的问题,并且智能体处理后的完整测试套件报告必须通过,之后才会提交任何内容。当 `main` 在机器人推送落地前继续前进时,该通道会 rebase 已验证的补丁,重新运行 `pnpm check:changed`,并重试推送;有冲突的陈旧补丁会被跳过。它使用 GitHub 托管的 Ubuntu这样 Codex action 就可以与 docs agent 保持相同的 drop-sudo 安全策略
```bash
gh workflow run duplicate-after-merge.yml \
@ -34,73 +34,72 @@ gh workflow run duplicate-after-merge.yml \
| 作业 | 用途 | 运行时机 |
| -------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------ |
| `preflight` | 检测是否仅有文档变更、变更范围、变更的扩展,并构建 CI 清单 | 所有非 draft 的 push 和 PR |
| `security-scm-fast` | 通过 `zizmor` 进行私钥检测和工作流审计 | 所有非 draft 的 push 和 PR |
| `security-dependency-audit` | 针对 npm advisory 执行无依赖的生产 lockfile 审计 | 所有非 draft 的 push 和 PR |
| `security-fast` | 快速安全作业的必需聚合作业 | 所有非 draft 的 push 和 PR |
| `build-artifacts` | 构建 `dist/`、Control UI、内置产物检查,以及可复用的下游产物 | 与 Node 相关的变更 |
| `preflight` | 检测是否仅有文档变更、变更的范围、变更的扩展,并构建 CI 清单 | 在所有非草稿 push 和 PR 上始终运行 |
| `security-scm-fast` | 通过 `zizmor` 进行私钥检测和工作流审计 | 在所有非草稿 push 和 PR 上始终运行 |
| `security-dependency-audit` | 针对 npm advisories 执行无依赖的生产 lockfile 审计 | 在所有非草稿 push 和 PR 上始终运行 |
| `security-fast` | 快速安全作业的必需聚合作业 | 在所有非草稿 push 和 PR 上始终运行 |
| `build-artifacts` | 构建 `dist/`、Control UI、构建产物检查以及可复用的下游产物 | 与 Node 相关的变更 |
| `checks-fast-core` | 快速 Linux 正确性通道,例如 bundled/plugin-contract/protocol 检查 | 与 Node 相关的变更 |
| `checks-fast-contracts-channels` | 分片的渠道 contract 检查,并带有稳定的聚合检查结果 | 与 Node 相关的变更 |
| `checks-node-extensions` | 对整个扩展套件执行完整的内置插件测试分片 | 与 Node 相关的变更 |
| `checks-node-core-test` | Core Node 测试分片不包括渠道、内置、contract 和扩展通道 | 与 Node 相关的变更 |
| `extension-fast` | 仅针对已变更的内置插件执行聚焦测试 | 带有扩展变更的拉取请求 |
| `check` | 分片后的主本地门禁等效项生产类型、lint、守卫、测试类型和严格 smoke | 与 Node 相关的变更 |
| `check-additional` | 架构、边界、扩展表面守卫、包边界以及 gateway-watch 分片 | 与 Node 相关的变更 |
| `checks-fast-contracts-channels` | 分片的渠道契约检查,并提供稳定的聚合检查结果 | 与 Node 相关的变更 |
| `checks-node-extensions` | 针对整个扩展套件的完整内置插件测试分片 | 与 Node 相关的变更 |
| `checks-node-core-test` | Node 核心测试分片,不包括渠道、内置、契约和扩展通道 | 与 Node 相关的变更 |
| `extension-fast` | 仅针对已更改内置插件的聚焦测试 | 带有扩展变更的拉取请求 |
| `check` | 分片的主要本地门控等效项生产类型、lint、防护、测试类型和严格 smoke | 与 Node 相关的变更 |
| `check-additional` | 架构、边界、扩展表面防护、包边界以及 gateway-watch 分片 | 与 Node 相关的变更 |
| `build-smoke` | 已构建 CLI 的 smoke 测试和启动内存 smoke 测试 | 与 Node 相关的变更 |
| `checks` | 已构建产物渠道测试的验证器,以及仅在 push 上运行的 Node 22 兼容性检查 | 与 Node 相关的变更 |
| `check-docs` | 文档格式、lint 和失效链接检查 | 文档有变更时 |
| `check-docs` | 文档格式化、lint 和失效链接检查 | 文档发生变更 |
| `skills-python` | 面向 Python 支持的 Skills 的 Ruff + pytest | 与 Python Skills 相关的变更 |
| `checks-windows` | Windows 专用测试通道 | 与 Windows 相关的变更 |
| `macos-node` | 使用共享构建产物的 macOS TypeScript 测试通道 | 与 macOS 相关的变更 |
| `macos-node` | 使用共享构建产物的 macOS TypeScript 测试通道 | 与 macOS 相关的变更 |
| `macos-swift` | macOS 应用的 Swift lint、构建和测试 | 与 macOS 相关的变更 |
| `android` | 两个 flavor 的 Android 单元测试,以及一 debug APK 构建 | 与 Android 相关的变更 |
| `test-performance-agent` | 在受信任活动之后每日运行的 Codex 慢测试优化 | 主 CI 成功后或手动触发 |
| `android` | 两个 flavor 的 Android 单元测试,以及一 debug APK 构建 | 与 Android 相关的变更 |
| `test-performance-agent` | 在可信活动之后进行的每日 Codex 慢测试优化 | `main` CI 成功后或手动触发 |
## Fail-Fast 顺序
## 快速失败顺序
作业按顺序排列,以便让廉价检查先失败,再运行昂贵作业:
作业的排列顺序经过设计,使低成本检查先失败,再决定是否运行高成本作业:
1. `preflight` 决定到底存在哪些通道。`docs-scope` 和 `changed-scope` 逻辑是此作业中的步骤,不是独立作业。
2. `security-scm-fast`、`security-dependency-audit`、`security-fast`、`check`、`check-additional`、`check-docs` 和 `skills-python` 会快速失败,而不会等待更重的产物和平台矩阵作业。
3. `build-artifacts` 会与快速 Linux 通道并行运行,这样下游消费者可以在共享构建准备好后立即启动
4. 之后会展开更重的平台和运行时通道:`checks-fast-core`、`checks-fast-contracts-channels`、`checks-node-extensions`、`checks-node-core-test`、仅 PR 的 `extension-fast`、`checks`、`checks-windows`、`macos-node`、`macos-swift` 和 `android`
1. `preflight` 决定哪些通道实际存在。`docs-scope` 和 `changed-scope` 逻辑是这个作业中的步骤,而不是独立作业。
2. `security-scm-fast`、`security-dependency-audit`、`security-fast`、`check`、`check-additional`、`check-docs` 和 `skills-python` 会快速失败,而不必等待更重的构建产物和平台矩阵作业。
3. `build-artifacts` 会与快速 Linux 通道并行执行,这样下游消费者就可以在共享构建准备好后立即开始
4. 之后再扇出更重的平台和运行时通道:`checks-fast-core`、`checks-fast-contracts-channels`、`checks-node-extensions`、`checks-node-core-test`、仅 PR 的 `extension-fast`、`checks`、`checks-windows`、`macos-node`、`macos-swift` 和 `android`
范围逻辑位于 `scripts/ci-changed-scope.mjs`,并由 `src/scripts/ci-changed-scope.test.ts` 中的单元测试覆盖。
CI 工作流编辑会验证 Node CI 作业图以及工作流 lint它们本身不会强制触发 Windows、Android 或 macOS 原生构建;这些平台通道仍然针对对应平台源码变更进行范围控制。
Windows Node 检查的范围仅限于 Windows 专用的进程/路径包装器、npm/pnpm/UI runner 辅助工具、包管理器配置,以及执行该通道的 CI 工作流表面不相关的源码、插件、install-smoke 和仅测试变更会继续留在 Linux Node 通道中,因此不会为了已经由普通测试分片覆盖的内容去占用一个 16 vCPU 的 Windows worker。
`install-smoke` 工作流通过它自己的 `preflight` 作业复用同一个范围脚本。它将 smoke 覆盖拆分为 `run_fast_install_smoke``run_full_install_smoke`对于拉取请求,快速路径会覆盖 Docker/包表面、内置插件包/manifest 变更,以及 Docker smoke 作业会涉及的 core plugin/channel/Gateway 网关/插件 SDK 表面。仅源码级的内置插件变更、仅测试编辑以及仅文档编辑不会占用 Docker worker。快速路径会构建一次根 Dockerfile 镜像,检查 CLI运行容器 gateway-network e2e验证一个内置扩展 build arg,并在 120 秒命令超时限制下运行受限的内置插件 Docker profile。完整路径则保留 QR 包安装以及 installer Docker/update 覆盖用于每晚定时运行、手动触发、workflow-call 发布检查,以及真正触及 installer/package/Docker 表面的拉取请求。推送到 `main`,包括 merge commit不会强制走完整路径当 changed-scope 逻辑在 push 上请求完整覆盖时,工作流仍只保留快速 Docker smoke而将完整 install smoke 留给夜间或发布验证。较慢的 Bun 全局安装 image-provider smoke 由 `run_bun_global_install_smoke` 单独控制;它会在夜间计划任务和发布检查工作流中运行,手动触发 `install-smoke` 时也可以选择启用,但拉取请求和 `main` push 不会运行它。QR 和 installer Docker 测试保留它们各自以安装为重点的 Dockerfile。本地 `test:docker:all` 会预先构建一个共享的实时测试镜像,以及一个共享的 `scripts/e2e/Dockerfile` built-app 镜像,然后使用加权调度器和 `OPENCLAW_SKIP_DOCKER_BUILD=1` 运行 live/E2E smoke 通道;默认主池槽位数为 10可通过 `OPENCLAW_DOCKER_ALL_PARALLELISM` 调整;对 provider 敏感的尾池槽位数也默认为 10可通过 `OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM` 调整。重型通道上限默认分别为 `OPENCLAW_DOCKER_ALL_LIVE_LIMIT=6`、`OPENCLAW_DOCKER_ALL_NPM_LIMIT=8` 和 `OPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7`,这样 npm install 和多服务通道就不会过度占用 Docker同时较轻的通道仍可填满可用槽位。默认情况下,各通道启动会错开 2 秒,以避免本地 Docker daemon 出现创建风暴;你可以用 `OPENCLAW_DOCKER_ALL_START_STAGGER_MS=0` 或其他毫秒值覆盖。这个本地聚合器会先对 Docker 做预检,移除陈旧的 OpenClaw E2E 容器,输出活动通道状态,持久化通道耗时以便按最长优先排序,并支持使用 `OPENCLAW_DOCKER_ALL_DRY_RUN=1` 检查调度器。默认情况下,它会在第一次失败后停止调度新的池化通道;并且每个通道都有一个 120 分钟的兜底超时,可通过 `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS` 覆盖;部分选定的 live/tail 通道会使用更严格的单通道上限。可复用的 live/E2E 工作流采用相同的共享镜像模式:先在 Docker 矩阵之前构建并推送一个带 SHA 标签的 GHCR Docker E2E 镜像,然后使用 `OPENCLAW_SKIP_DOCKER_BUILD=1` 运行矩阵。定时的 live/E2E 工作流每天运行完整的发布路径 Docker 套件。内置更新矩阵按更新目标进行拆分,以便重复的 npm update 和 doctor repair 轮次可以与其他内置检查一起分片运行。
CI 工作流编辑会验证 Node CI 图以及工作流 lint但不会仅因自身修改就强制触发 Windows、Android 或 macOS 原生构建;这些平台通道仍然针对对应平台源码变更进行范围控制。
Windows Node 检查的范围仅限于 Windows 专用的进程/路径包装器、npm/pnpm/UI 运行器辅助工具、包管理器配置,以及执行该通道的 CI 工作流表面不相关的源码、插件、install-smoke 和纯测试更改仍然只会进入 Linux Node 通道,这样就不会为了已由常规测试分片覆盖的内容而占用一台 16 vCPU 的 Windows worker。
独的 `install-smoke` 工作流通过它自己的 `preflight` 作业复用同一个范围脚本。它将 smoke 覆盖拆分为 `run_fast_install_smoke``run_full_install_smoke`拉取请求会针对 Docker/包表面、内置插件包/清单变更,以及 Docker smoke 作业会覆盖到的核心插件/渠道/Gateway 网关/插件 SDK 表面运行快速路径。仅源码层面的内置插件变更、纯测试编辑和仅文档编辑不会占用 Docker worker。快速路径会构建一次根 Dockerfile 镜像,检查 CLI运行 agents delete shared-workspace CLI smoke运行容器 gateway-network e2e验证一个内置扩展构建参数,并在 120 秒命令超时限制下运行受限的内置插件 Docker profile。完整路径则保留 QR 包安装以及 installer Docker/update 覆盖用于每晚定时运行、手动触发、workflow-call 发布检查,以及真正触及 installer/package/Docker 表面的拉取请求。推送到 `main`,包括 merge commit不会强制走完整路径当 changed-scope 逻辑在 push 上本会请求完整覆盖时,工作流仍会保留快速 Docker smoke而将完整 install smoke 留给每晚运行或发布验证。较慢的 Bun 全局安装 image-provider smoke 由 `run_bun_global_install_smoke` 单独控制;它会在每晚定时任务以及发布检查工作流中运行,手动触发 `install-smoke` 时也可以选择启用,但拉取请求和 `main` push 不会运行它。QR 和 installer Docker 测试继续保留它们各自面向安装的 Dockerfile。本地 `test:docker:all` 会预构建一个共享的 live-test 镜像和一个共享的 `scripts/e2e/Dockerfile` built-app 镜像,然后使用加权调度器和 `OPENCLAW_SKIP_DOCKER_BUILD=1` 运行 live/E2E smoke 通道;默认主池槽位数为 10可通过 `OPENCLAW_DOCKER_ALL_PARALLELISM` 调整,面向 provider 敏感的尾池槽位数默认也为 10可通过 `OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM` 调整。重型通道上限默认分别为 `OPENCLAW_DOCKER_ALL_LIVE_LIMIT=6`、`OPENCLAW_DOCKER_ALL_NPM_LIMIT=8` 和 `OPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7`,这样 npm install 和多服务通道就不会过度占用 Docker同时较轻的通道仍能填满可用槽位。默认会将各通道启动时间错开 2 秒,以避免本地 Docker 守护进程在创建阶段发生风暴;可通过 `OPENCLAW_DOCKER_ALL_START_STAGGER_MS=0` 或其他毫秒值覆盖。这个本地聚合器会在开始前预检查 Docker移除陈旧的 OpenClaw E2E 容器,输出活跃通道状态,保存通道耗时以便按最长优先排序,并支持 `OPENCLAW_DOCKER_ALL_DRY_RUN=1` 用于调度器检查。默认情况下,它会在首次失败后停止调度新的池化通道,并且每个通道都有一个 120 分钟的后备超时,可通过 `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS` 覆盖;部分 live/tail 通道会使用更严格的单通道上限。可复用的 live/E2E 工作流通过在 Docker 矩阵之前先构建并推送一个带 SHA 标签的 GHCR Docker E2E 镜像来复用这种共享镜像模式,然后使用 `OPENCLAW_SKIP_DOCKER_BUILD=1` 运行矩阵。定时的 live/E2E 工作流会每日运行完整的发布路径 Docker 套件。内置更新矩阵会按更新目标拆分,这样重复的 npm update 和 doctor repair 过程就可以与其他内置检查一起分片运行。
本地 changed-lane 逻辑位于 `scripts/changed-lanes.mjs`,由 `scripts/check-changed.mjs` 执行。这个本地门禁在架构边界方面比宽泛的 CI 平台范围更严格core 生产变更会运行 core prod typecheck 加 core testscore 仅测试变更只运行 core test typecheck/tests扩展生产变更会运行 extension prod typecheck 加 extension tests而扩展仅测试变更只运行 extension test typecheck/tests。公开的插件 SDK 或 plugin-contract 变更会扩展到扩展验证,因为扩展依赖这些 core contract。仅包含发布元数据的版本号提升会运行定向的版本/配置/root-dependency 检查。未知的 root/config 变更会以安全优先方式落到所有通道。
本地 changed-lane 逻辑位于 `scripts/changed-lanes.mjs``scripts/check-changed.mjs` 执行。这个本地门控在架构边界方面比宽泛的 CI 平台范围更严格:核心生产代码变更会运行核心生产 typecheck 加核心测试,核心仅测试变更只运行核心测试 typecheck/测试,扩展生产代码变更会运行扩展生产 typecheck 加扩展测试,而扩展仅测试变更只运行扩展测试 typecheck/测试。公共插件 SDK 或 plugin-contract 变更会扩展到扩展验证,因为扩展依赖这些核心契约。仅发布元数据的版本号提升会运行定向的版本/配置/根依赖检查。未知的根目录/配置变更会以安全优先的方式回退到所有通道。
在 push 上,`checks` 矩阵会加仅限 push 的 `compat-node22` 通道。在拉取请求上,这个通道会被跳过,矩阵会继续专注于常规测试/渠道通道。
在 push 上,`checks` 矩阵会加仅限 push 的 `compat-node22` 通道。在拉取请求上,这个通道会被跳过,矩阵仍聚焦于常规测试/渠道通道。
最慢的 Node 测试族会被拆分或重新平衡,以便每个作业都保持较小规模而不会过度占用 runner渠道 contract 会作为 3 个加权分片运行,内置插件测试会在 6 个扩展 worker 之间做平衡,小型 core 单元通道会成对组合,自动回复会作为 3 个平衡 worker 运行而不是 6 个微小 worker而 agentic Gateway 网关/插件配置会分散到现有的仅源码 agentic Node 作业中而不是等待已构建产物。宽泛的浏览器、QA、媒体和杂项插件测试使用它们各自专用的 Vitest 配置,而不是共享的插件兜底配置。扩展分片作业一次最多运行两组插件配置,每组使用一个 Vitest worker并配备更大的 Node heap这样导入密集型的插件批次就不会产生额外的 CI 作业。宽泛的 agents 通道使用共享的 Vitest 文件级并行调度器,因为它主要受导入/调度影响,而不是由单个慢测试文件主导。`runtime-config` 与 infra core-runtime 分片一起运行,以避免共享 runtime 分片成为尾部瓶颈。`check-additional` 会将 package-boundary compile/canary 工作放在一起,并将 runtime topology 架构与 gateway watch 覆盖拆分开boundary guard 分片会在一个作业内部并发运行其小型独立守卫。Gateway watch、渠道测试以及 core support-boundary 分片会在 `build-artifacts` 内部并发运行,此时 `dist/``dist-runtime/` 已经构建完成;这样就能保留它们旧有的检查名称作为轻量验证作业,同时避免额外两个 Blacksmith worker 和第二个产物消费者队列。
最慢的 Node 测试家族会被拆分或平衡,以便每个作业都足够小,同时不过度预留 runner渠道契约会作为三个加权分片运行内置插件测试会在六个扩展 worker 间平衡分配小型核心单元通道会成对组合auto-reply 作为三个平衡 worker 运行而不是六个很小的 worker而 agentic Gateway 网关/插件配置会分布到现有仅源码的 agentic Node 作业中而不是等待构建产物。宽泛的浏览器、QA、媒体和杂项插件测试使用各自专用的 Vitest 配置,而不是共享的插件兜底配置。扩展分片作业一次最多运行两个插件配置组,每组只用一个 Vitest worker并使用更大的 Node heap这样导入密集型的插件批次就不会产生额外的 CI 作业。宽泛的 agents 通道使用共享的 Vitest 文件级并行调度器,因为它主要受导入/调度开销支配,而不是由某个单独的慢测试文件主导。`runtime-config` 会与 infra core-runtime 分片一起运行,以避免共享运行时分片承担拖尾。`check-additional` 将 package-boundary 的 compile/canary 工作保留在一起,并将运行时拓扑架构与 gateway watch 覆盖拆开boundary guard 分片会在一个作业内部并发运行其小型且相互独立的 guard。Gateway watch、渠道测试以及核心 support-boundary 分片会在 `dist/``dist-runtime/` 已构建完成后,在 `build-artifacts` 内部并发运行,保留它们原有的检查名称作为轻量验证作业,同时避免额外占用两个 Blacksmith worker 和第二条产物消费者队列。
Android CI 会运行 `testPlayDebugUnitTest``testThirdPartyDebugUnitTest`,然后构建 Play debug APK。第三方 flavor 没有单独的 source set 或 manifest它的单元测试通道仍会使用 SMS/通话日志 BuildConfig 标志编译该 flavor同时避免在每次与 Android 相关的 push 上重复执行 debug APK 打包作业。
`extension-fast` 仅限 PR因为 push 运行已经会执行完整的内置插件分片。这样可以为评审保留已更改插件的反馈,同时不会在 `main` 上额外占用一个 Blacksmith worker 去做 `checks-node-extensions` 已经覆盖的内容。
Android CI 会运行 `testPlayDebugUnitTest``testThirdPartyDebugUnitTest`,然后构建 Play debug APK。第三方 flavor 没有单独的 source set 或 manifest它的单元测试通道仍会在带有 SMS/call-log BuildConfig 标志的情况下编译该 flavor同时避免在每次与 Android 相关的 push 上重复执行 debug APK 打包作业。
`extension-fast` 仅用于 PR因为 push 运行已经会执行完整的内置插件分片。这样既能为评审保留变更插件的反馈,又不会在 `main` 上额外占用一个 Blacksmith worker 去覆盖 `checks-node-extensions` 中已经存在的内容。
当同一个 PR 或 `main` 引用上有更新的 push 落地时GitHub 可能会将被替代的作业标记为 `cancelled`。除非同一引用的最新运行也失败,否则应将其视为 CI 噪音。聚合分片检查使用 `!cancelled() && always()`,因此它们仍会报告正常的分片失败,但不会在整个工作流已经被替代后继续排队。
CI 并发键是带版本号的(`CI-v7-*`),这样 GitHub 端旧队列组中的僵尸任务就不会无限期阻塞更新的 `main` 运行。
当同一个 PR 或 `main` 引用上有更新的 push 落地时GitHub 可能会将被替代的作业标记为 `cancelled`。除非同一引用的最新运行也失败,否则应将其视为 CI 噪音。聚合分片检查使用 `!cancelled() && always()`,因此它们仍会正常报告分片失败,但不会在整个工作流已经被替代后继续排队。
CI 并发键是带版本号的(`CI-v7-*`),这样 GitHub 侧旧队列组中的僵尸任务就不会无限期阻塞较新的 `main` 运行。
## Runner
| Runner | 作业 |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ubuntu-24.04` | `preflight`、快速安全作业及其聚合作业`security-scm-fast`、`security-dependency-audit`、`security-fast`)、快速 protocol/contract/bundled 检查、分片的渠道 contract 检查、除 lint 外的 `check` 分片、`check-additional` 分片及聚合、Node 测试聚合验证器、文档检查、Python Skills、workflow-sanity、labeler、auto-responseinstall-smoke preflight 也使用 GitHub 托管的 Ubuntu这样 Blacksmith 矩阵可以更早排队 |
| `ubuntu-24.04` | `preflight`、快速安全作业及其聚合(`security-scm-fast`、`security-dependency-audit`、`security-fast`)、快速 protocol/contract/bundled 检查、分片的渠道契约检查、除 lint 外的 `check` 分片、`check-additional` 分片及聚合、Node 测试聚合验证器、文档检查、Python Skills、workflow-sanity、labeler、auto-responseinstall-smoke preflight 也使用 GitHub 托管的 Ubuntu这样 Blacksmith 矩阵可以更早排队 |
| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`、build-smoke、Linux Node 测试分片、内置插件测试分片、`android` |
| `blacksmith-16vcpu-ubuntu-2404` | `check-lint`,它仍然对 CPU 足够敏感,以至于 8 vCPU 的成本高于收益install-smoke Docker 构建,其中 32 vCPU 的排队时间成本高于收益 |
| `blacksmith-16vcpu-ubuntu-2404` | `check-lint`,它对 CPU 仍足够敏感,以至于 8 vCPU 的成本高于节省install-smoke Docker 构建,在这里 32 vCPU 的排队时间成本高于其带来的收益 |
| `blacksmith-16vcpu-windows-2025` | `checks-windows` |
| `blacksmith-6vcpu-macos-latest` | `macos-node`,用于 `openclaw/openclaw`fork 会回退到 `macos-latest` |
| `blacksmith-12vcpu-macos-latest` | `macos-swift`,用于 `openclaw/openclaw`fork 会回退到 `macos-latest` |
| `blacksmith-6vcpu-macos-latest` | `openclaw/openclaw` 上的 `macos-node`fork 会回退到 `macos-latest` |
| `blacksmith-12vcpu-macos-latest` | `openclaw/openclaw` 上的 `macos-swift`fork 会回退到 `macos-latest` |
## 本地等效命令
```bash
pnpm changed:lanes # 检查 origin/main...HEAD 的本地 changed-lane 分类器
pnpm check:changed # 智能本地门禁:按边界通道运行变更的 typecheck/lint/tests
pnpm check # 快速本地门禁:生产 tsgo + 分片 lint + 并行快速守卫
pnpm check:changed # 智能本地门控:按边界通道运行变更相关的 typecheck/lint/测试
pnpm check # 快速本地门控:生产 tsgo + 分片 lint + 并行快速 guard
pnpm check:test-types
pnpm check:timed # 相同门禁,但带有各阶段耗时
pnpm check:timed # 同样的门控,但带有各阶段耗时
pnpm build:strict-smoke
pnpm check:architecture
pnpm test:gateway:watch-regression

View File

@ -1,14 +1,14 @@
---
read_when:
- 你想快速诊断渠道健康状态 + 最近会话接收者
- 你想要一个可直接粘贴的“全部”状态用于调试
- 你想快速诊断渠道健康状况 + 最近会话的接收者
- 你想要一个可直接粘贴的 “all” 状态输出,用于调试
summary: '`openclaw status` 的 CLI 参考(诊断、探测、用法快照)'
title: 状态
x-i18n:
generated_at: "2026-04-25T00:40:13Z"
generated_at: "2026-04-25T01:51:43Z"
model: gpt-5.4
provider: openai
source_hash: ef182b95eabdb2c24d5d011ed3c3291308373620b893750d6d27470bd88ca3dc
source_hash: b191b8d78d43fb9426bfad495815fd06ab7188b413beff6fb7eb90f811b6d261
source_path: cli/status.md
workflow: 15
---
@ -24,25 +24,25 @@ openclaw status --deep
openclaw status --usage
```
注意
说明
- `--deep` 会运行实时探测WhatsApp Web + Telegram + Discord + Slack + Signal
- `--usage`将标准化后的提供商用量窗口打印为 `X% left`
- 会话状态输出会将 `Execution:``Runtime:` 分开显示。`Execution` 是沙箱路径(`direct`、`docker/*`),而 `Runtime` 会告诉你该会话正在使用 `OpenClaw Pi Default`、`OpenAI Codex`、某个 CLI 后端,或是 ACP 后端,例如 `codex (acp/acpx)`
- MiniMax 的原始 `usage_percent` / `usagePercent` 字段表示剩余额度,因此 OpenClaw 会在显示前将其反转;如果存在按计数字段,则优先使用按计数字段。`model_remains` 响应会优先选择聊天模型条目,必要时根据时间戳推导窗口标签,并在套餐标签中包含模型名称。
- `--usage``X% left` 的形式打印标准化后的提供商用量窗口
- 会话状态输出会将 `Execution:``Runtime:` 分开显示。`Execution` 是沙箱路径(`direct`、`docker/*`),而 `Runtime` 会告诉你该会话使用的是 `OpenClaw Pi Default`、`OpenAI Codex`、某个 CLI 后端,还是像 `codex (acp/acpx)` 这样的 ACP 后端。有关提供商 / 模型 / 运行时之间区别的说明,请参见 [Agent Runtimes](/zh-CN/concepts/agent-runtimes)
- MiniMax 的原始 `usage_percent` / `usagePercent` 字段表示剩余额度,因此 OpenClaw 会在显示前将其反转;如果存在基于计数的字段,则优先使用这些字段。`model_remains` 响应会优先选择聊天模型条目,在需要时根据时间戳推导窗口标签,并在套餐标签中包含模型名称。
- 当当前会话快照信息较少时,`/status` 可以从最近的转录用量日志中回填 token 和缓存计数器。现有的非零实时值仍然优先于转录回填值。
- 转录回填还可以在实时会话条目缺少活动运行时模型标签时恢复该标签。如果该转录模型与所选模型不同,状态会根据恢复出的运行时模型而不是所选模型来解析上下文窗口。
- 对于提示大小统计,当会话元数据缺失或更小时,转录回填会优先选择更大的、面向提示词的总量,因此自定义提供商会话不会显示为 `0` token。
- 转录回填还可以在实时会话条目缺少活动运行时模型标签时恢复该标签。如果该转录模型与所选模型不同,状态会根据恢复出的运行时模型而不是所选模型来解析上下文窗口。
- 对于提示大小统计,当会话元数据缺失或更小时,转录回填会优先选择更大的、面向提示的总量,这样自定义提供商会话就不会退化为显示 `0` token。
- 当配置了多个智能体时,输出会包含每个智能体的会话存储。
- 概览在可用时包含 Gateway 网关 + 节点主机服务的安装 / 运行时状态。
- 概览会包含更新道 + git SHA适用于源码检出
- 更新信息会显示在概览中;如果有可用更新,状态会打印运行 `openclaw update` 的提示(参见 [更新](/zh-CN/install/updating))。
- 只读状态展示接口`status`、`status --json`、`status --all`)会在可能的情况下,为其目标配置路径解析受支持的 SecretRef。
- 如果配置受支持的渠道 SecretRef但在当前命令路径中不可用状态会保持只读并报告降级输出而不是崩溃。人类可读输出会显示诸如“configured token unavailable in this command path”之类的警告而 JSON 输出会包含 `secretDiagnostics`
- 当命令本地 SecretRef 解析成功时,状态会优先使用解析后的快照并从最终输出中清除临时的“secret unavailable”渠道标记。
- `status --all` 包含一个 Secrets 概览行和一个诊断部分,用于汇总 Secret 诊断(为便于阅读会截断),同时不会停止报告生成。
- 概览在可用时包含 Gateway 网关 + 节点主机服务的安装 / 运行时状态。
- 概览会包含更新道 + git SHA适用于源码检出
- 更新信息会显示在概览中;如果有可用更新,status 会打印运行 `openclaw update` 的提示(参见 [Updating](/zh-CN/install/updating))。
- 只读状态界面`status`、`status --json`、`status --all`)会在可能的情况下,为其目标配置路径解析受支持的 SecretRef。
- 如果配置受支持的渠道 SecretRef但在当前命令路径中不可用status 会保持只读并报告降级输出而不是崩溃。人类可读输出会显示类似“在此命令路径中已配置的令牌不可用”的警告JSON 输出则会包含 `secretDiagnostics`
- 当命令本地 SecretRef 解析成功时,status 会优先使用解析后的快照并清除最终输出中临时的“secret unavailable” 渠道标记。
- `status --all` 包含一个 Secrets 概览行和一个诊断部分,该部分会汇总密钥诊断信息(为便于阅读会进行截断),同时不会停止报告生成。
## 相关内容
## 相关
- [CLI 参考](/zh-CN/cli)
- [Doctor](/zh-CN/gateway/doctor)

View File

@ -0,0 +1,112 @@
---
read_when:
- 你正在 PI、Codex、ACP 或其他原生智能体运行时之间进行选择
- 你对状态或配置中的提供商 / 模型 / 运行时标签感到困惑
- 你正在为原生 harness 记录支持对齐情况
summary: OpenClaw 如何区分提供商、模型、渠道和 Agent Runtimes
title: Agent Runtimes
x-i18n:
generated_at: "2026-04-25T01:51:46Z"
model: gpt-5.4
provider: openai
source_hash: 1e7da189f66ee57a17ea2df1a3364ba9554d94cb4c6ebad30b0c261daf5496af
source_path: concepts/agent-runtimes.md
workflow: 15
---
**智能体运行时**是负责一个已准备好的模型循环的组件:它接收提示词,驱动模型输出,处理原生工具调用,并将完成的轮次返回给 OpenClaw。
运行时很容易与提供商混淆,因为两者都会出现在模型配置附近。它们是不同的层级:
| 层级 | 示例 | 含义 |
| ------------- | ------------------------------------- | ------------------------------------------------------------------- |
| 提供商 | `openai`, `anthropic`, `openai-codex` | OpenClaw 如何进行认证、发现模型以及命名模型引用。 |
| 模型 | `gpt-5.5`, `claude-opus-4-6` | 为智能体轮次选择的模型。 |
| Agent Runtimes | `pi`, `codex`, ACP 支持的运行时 | 执行已准备轮次的底层循环。 |
| 渠道 | Telegram, Discord, Slack, WhatsApp | 消息进入和离开 OpenClaw 的位置。 |
你还会在代码和配置中看到 **harness** 这个词。harness 是提供智能体运行时的实现。例如,内置的 Codex harness 实现了 `codex` 运行时。出于兼容性原因,配置键仍然叫作 `embeddedHarness`,但面向用户的文档和状态输出通常应使用“运行时”。
常见的 Codex 设置使用 `openai` 提供商和 `codex` 运行时:
```json5
{
agents: {
defaults: {
model: "openai/gpt-5.5",
embeddedHarness: {
runtime: "codex",
},
},
},
}
```
这意味着 OpenClaw 先选择一个 OpenAI 模型引用,然后请求 Codex app-server 运行时运行嵌入式智能体轮次。这并不意味着渠道、模型提供商目录或 OpenClaw 会话存储会变成 Codex。
## 运行时归属
不同运行时负责循环中的不同部分。
| 范围 | OpenClaw PI 嵌入式 | Codex app-server |
| --------------------------- | --------------------------------------- | --------------------------------------------------------------------------- |
| 模型循环所有者 | OpenClaw 通过 PI 嵌入式运行器 | Codex app-server |
| 规范线程状态 | OpenClaw 转录记录 | Codex 线程,加上 OpenClaw 转录镜像 |
| OpenClaw 动态工具 | 原生 OpenClaw 工具循环 | 通过 Codex 适配器桥接 |
| 原生 shell 和文件工具 | PI / OpenClaw 路径 | Codex 原生工具,在支持时通过原生钩子桥接 |
| 上下文引擎 | 原生 OpenClaw 上下文组装 | OpenClaw 项目将上下文组装进 Codex 轮次 |
| 压缩 | OpenClaw 或所选上下文引擎 | Codex 原生压缩,并带有 OpenClaw 通知和镜像维护 |
| 渠道投递 | OpenClaw | OpenClaw |
这种归属划分是主要的设计规则:
- 如果某个范围由 OpenClaw 负责OpenClaw 就可以提供正常的插件钩子行为。
- 如果某个范围由原生运行时负责OpenClaw 就需要运行时事件或原生钩子。
- 如果原生运行时拥有规范线程状态OpenClaw 应该镜像并投射上下文,而不是重写不受支持的内部机制。
## 运行时选择
OpenClaw 会在提供商和模型解析之后选择一个嵌入式运行时:
1. 会话中已记录的运行时优先。配置变更不会将现有转录记录热切换到不同的原生线程系统。
2. `OPENCLAW_AGENT_RUNTIME=<id>` 会为新的或重置后的会话强制指定该运行时。
3. `agents.defaults.embeddedHarness.runtime``agents.list[].embeddedHarness.runtime` 可以设置为 `auto`、`pi` 或已注册的运行时 id例如 `codex`
4. 在 `auto` 模式下,已注册的插件运行时可以声明自己支持的提供商 / 模型组合。
5. 如果在 `auto` 模式下没有运行时接管某个轮次,并且设置了 `fallback: "pi"`默认值OpenClaw 会使用 PI 作为兼容性回退。将 `fallback: "none"` 设置为无,以便让未匹配的 `auto` 模式选择直接失败。
显式插件运行时默认会以封闭失败方式处理。例如,`runtime: "codex"` 表示必须使用 Codex否则给出明确的选择错误除非你在同一覆盖作用域中设置 `fallback: "pi"`
## 兼容性契约
当运行时不是 PI 时,它应记录自己支持哪些 OpenClaw 范围。运行时文档应使用如下结构:
| 问题 | 重要原因 |
| -------------------------------------- | ------------------------------------------------------------------------------------------------- |
| 谁拥有模型循环? | 这决定了重试、工具续接以及最终答案决策发生在哪里。 |
| 谁拥有规范线程历史? | 这决定了 OpenClaw 能编辑历史,还是只能镜像它。 |
| OpenClaw 动态工具是否可用? | 消息传递、会话、cron 和 OpenClaw 自有工具都依赖这一点。 |
| 动态工具钩子是否可用? | 插件期望在 OpenClaw 自有工具周围使用 `before_tool_call`、`after_tool_call` 和中间件。 |
| 原生工具钩子是否可用? | shell、patch 和运行时自有工具需要原生钩子来实现策略与观测。 |
| 上下文引擎生命周期是否运行? | Memory 和上下文插件依赖 assemble、ingest、after-turn 和 compaction 生命周期。 |
| 暴露了哪些压缩数据? | 有些插件只需要通知,而另一些插件需要保留 / 丢弃元数据。 |
| 哪些内容是有意不支持的? | 当原生运行时拥有更多状态时,用户不应假定它与 PI 等价。 |
Codex 运行时支持契约记录在
[Codex harness](/zh-CN/plugins/codex-harness#v1-support-contract) 中。
## 状态标签
状态输出可能同时显示 `Execution``Runtime` 标签。应将它们视为诊断信息,而不是提供商名称。
- 像 `openai/gpt-5.5` 这样的模型引用,表示已选择的提供商 / 模型。
- 像 `codex` 这样的运行时 id表示哪个循环正在执行该轮次。
- 像 Telegram 或 Discord 这样的渠道标签,表示对话发生的位置。
如果你在更改运行时配置后,会话仍显示为 PI请使用 `/new` 开启新会话,或使用 `/reset` 清除当前会话。现有会话会保留其记录的运行时,这样转录记录就不会被通过两个不兼容的原生会话系统重复回放。
## 相关内容
- [Codex harness](/zh-CN/plugins/codex-harness)
- [Agent harness plugins](/zh-CN/plugins/sdk-agent-harness)
- [Agent loop](/zh-CN/concepts/agent-loop)
- [Models](/zh-CN/concepts/models)

View File

@ -1,45 +1,47 @@
---
read_when:
- 添加或修改模型 CLI`models list`/`set`/`scan`/`aliases`/`fallbacks`
- 添加或修改 Models CLI`models list`/`set`/`scan`/`aliases`/`fallbacks`
- 更改模型回退行为或选择 UX
- 更新模型扫描探测项(工具 / 图像)
summary: 模型 CLI列表、设置、别名、回退、扫描、状态
title: 模型 CLI
summary: Models CLI列出、设置、别名、回退、扫描、状态
title: Models CLI
x-i18n:
generated_at: "2026-04-24T18:58:36Z"
generated_at: "2026-04-25T01:51:44Z"
model: gpt-5.4
provider: openai
source_hash: be8d474b525f2605a332d1a509dcbbecda0e3f8f705e636ec9379fae1505c233
source_hash: f6a98f44872d5de81f02dc7318bb8ecdff3860996d286b6aa9d42abbd8ce6670
source_path: concepts/models.md
workflow: 15
---
有关凭证配置文件轮换、冷却时间及其与回退如何交互的信息,请参阅 [/concepts/model-failover](/zh-CN/concepts/model-failover)。
提供商快速概览 + 示例:[/concepts/model-providers](/zh-CN/concepts/model-providers)。
有关凭证配置轮换、冷却时间,以及它们如何与回退机制交互,请参阅 [/concepts/model-failover](/zh-CN/concepts/model-failover)。
提供商快速概览与示例:[/concepts/model-providers](/zh-CN/concepts/model-providers)。
模型引用会选择一个提供商和模型。它们通常不会选择底层的 Agent Runtimes。例如`openai/gpt-5.5` 可以通过常规的 OpenAI 提供商路径运行,也可以通过 Codex 应用服务器运行时运行,具体取决于 `agents.defaults.embeddedHarness.runtime`。请参阅
[/concepts/agent-runtimes](/zh-CN/concepts/agent-runtimes)。
## 模型选择的工作方式
## 模型选择如何工作
OpenClaw 按以下顺序选择模型:
1. **主**模型(`agents.defaults.model.primary` 或 `agents.defaults.model`)。
2. `agents.defaults.model.fallbacks` 中的**回退模型**(按顺序)。
3. **提供商凭证故障转移**会先在提供商内部发生,然后才会切换到下一个模型。
1. **主模型**`agents.defaults.model.primary` 或 `agents.defaults.model`)。
2. `agents.defaults.model.fallbacks` 中的 **回退模型**(按顺序)。
3. **提供商凭证故障切换**在提供商内部发生,然后才会切换到下一个模型。
相关内容:
- `agents.defaults.models` 是 OpenClaw 可使用模型的允许列表 / 目录(也包括别名)。
- `agents.defaults.imageModel` **仅在**主模型无法接受图像时使用。
- `agents.defaults.pdfModel``pdf` 工具使用。如果省略,工具会依次回退到 `agents.defaults.imageModel`,然后是解析后的会话 / 默认模型。
- `agents.defaults.imageGenerationModel` 用于共享的图像生成能力。如果省略,`image_generate` 仍可推断出一个具备凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的图像生成提供商。如果你设置了特定的提供商 / 模型,也要同时配置该提供商的凭证 / API 密钥。
- `agents.defaults.musicGenerationModel` 用于共享的音乐生成能力。如果省略,`music_generate` 仍可推断出一个具备凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的音乐生成提供商。如果你设置了特定的提供商 / 模型,也要同时配置该提供商的凭证 / API 密钥。
- `agents.defaults.videoGenerationModel` 用于共享的视频生成能力。如果省略,`video_generate` 仍可推断出一个具备凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的视频生成提供商。如果你设置了特定的提供商 / 模型,也要同时配置该提供商的凭证 / API 密钥。
- 每个智能体的默认值可以通过 `agents.list[].model` 加上绑定覆盖 `agents.defaults.model`(参见 [/concepts/multi-agent](/zh-CN/concepts/multi-agent))。
- `agents.defaults.models` 是 OpenClaw 可使用模型的允许列表 / 目录(以及别名)。
- `agents.defaults.imageModel` **仅在** 主模型无法接受图像时使用。
- `agents.defaults.pdfModel``pdf` 工具使用。如果省略,工具会依次回退到 `agents.defaults.imageModel`,然后是解析后的当前会话 / 默认模型。
- `agents.defaults.imageGenerationModel` 由共享图像生成功能使用。如果省略,`image_generate` 仍然可以推断出一个由凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 id 顺序尝试其余已注册的图像生成提供商。如果你设置了特定的提供商 / 模型,也配置该提供商的凭证 / API 密钥。
- `agents.defaults.musicGenerationModel` 由共享音乐生成功能使用。如果省略,`music_generate` 仍然可以推断出一个由凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 id 顺序尝试其余已注册的音乐生成提供商。如果你设置了特定的提供商 / 模型,也配置该提供商的凭证 / API 密钥。
- `agents.defaults.videoGenerationModel` 由共享视频生成功能使用。如果省略,`video_generate` 仍然可以推断出一个由凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 id 顺序尝试其余已注册的视频生成提供商。如果你设置了特定的提供商 / 模型,也配置该提供商的凭证 / API 密钥。
- 每个智能体的默认值可以通过 `agents.list[].model` 加上绑定覆盖 `agents.defaults.model`(参见 [/concepts/multi-agent](/zh-CN/concepts/multi-agent))。
## 快速模型策略
- 将主模型设置为你可用的最强、最新一代模型。
- 对成本 / 延迟敏感的任务以及风险较低的聊天,使用回退模型。
- 对启用了工具的智能体或不受信任的输入,避免使用较旧 / 较弱的模型层级。
- 将你的主模型设置为你当前可用的、能力最强的最新一代模型。
- 对于对成本 / 延迟敏感的任务和风险较低的聊天,使用回退模型。
- 对启用了工具的智能体或不受信任的输入,避免使用较旧 / 较弱的模型层级。
## 新手引导(推荐)
@ -49,7 +51,7 @@ OpenClaw 按以下顺序选择模型:
openclaw onboard
```
它可以为常见提供商设置模型 + 凭证,包括 **OpenAI CodeCodex订阅**
它可以为常见提供商设置模型凭证,包括 **OpenAI CodeCodex订阅**
OAuth**Anthropic**API 密钥或 Claude CLI
## 配置键名(概览)
@ -62,40 +64,45 @@ openclaw onboard
- `agents.defaults.models`(允许列表 + 别名 + 提供商参数)
- `models.providers`(写入 `models.json` 的自定义提供商)
模型引用会被规范化为小写。像 `z.ai/*` 这样的提供商别名会规范化
`zai/*`
模型引用会被规范化为小写。像 `z.ai/*` 这样的提供商别名会规范化
`zai/*`
提供商配置示例(包括 OpenCode位于
[/providers/opencode](/zh-CN/providers/opencode)。
### 安全编辑允许列表
### 安全编辑允许列表
手动更新 `agents.defaults.models` 时,使用追加式写入:
手动更新 `agents.defaults.models` 时,使用追加式写入:
```bash
openclaw config set agents.defaults.models '{"openai/gpt-5.4":{}}' --strict-json --merge
```
`openclaw config set` 会保护模型 / 提供商映射,避免被意外覆盖。对 `agents.defaults.models`、`models.providers` 或 `models.providers.<id>.models` 进行普通对象赋值时,如果会删除现有条目,就会被拒绝。追加式更改请使用 `--merge`;仅当提供的值应成为完整目标值时,才使用 `--replace`
`openclaw config set` 会保护模型 / 提供商映射,防止被意外覆盖。对
`agents.defaults.models`、`models.providers` 或
`models.providers.<id>.models` 进行普通对象赋值时,如果会删除现有条目,则会被拒绝。对于追加式更改,请使用 `--merge`;仅当提供的值应成为完整目标值时,才使用 `--replace`
交互式提供商设置和 `openclaw configure --section model` 也会把提供商作用域的选择合并到现有允许列表中,因此添加 Codex、Ollama 或其他提供商时,不会删除无关的模型条目。
交互式提供商设置和 `openclaw configure --section model` 也会将按提供商划分的选择合并到现有允许列表中,因此添加 Codex、
Ollama 或其他提供商时,不会丢失无关的模型条目。
当重新应用提供商凭证时Configure 会保留现有的 `agents.defaults.model.primary`。像
`openclaw models auth login --provider <id> --set-default` 和
`openclaw models set <model>`样的显式默认值设置命令,仍会替换 `agents.defaults.model.primary`
`openclaw models auth login --provider <id> --set-default>` 和
`openclaw models set <model>`类显式设置默认值的命令,仍然会替换 `agents.defaults.model.primary`
## “Model is not allowed”以及为什么回复会停止
如果设置了 `agents.defaults.models`,它就会成为 `/model` 以及会话覆盖的**允许列表**。当用户选择了不在该允许列表中的模型时,
如果设置了 `agents.defaults.models`,它就会成为 `/model`
会话覆盖的**允许列表**。当用户选择了不在该允许列表中的模型时,
OpenClaw 会返回:
```
Model "provider/model" is not allowed. Use /model to list available models.
```
这会发生在生成正常回复**之前**,因此消息看起来会像是“没有响应”。解决方法是:
这会发生在生成正常回复**之前**,因此消息会让人感觉像“没有响应”。
修复方法包括:
- 将该模型添加到 `agents.defaults.models`,或
- 清空允许列表(移`agents.defaults.models`),或
- 清除允许列表(删`agents.defaults.models`),或
- 从 `/model list` 中选择一个模型。
允许列表示例配置:
@ -114,7 +121,7 @@ Model "provider/model" is not allowed. Use /model to list available models.
## 在聊天中切换模型(`/model`
你可以在不重启的情况下切换当前会话使用的模型
你可以为当前会话切换模型,而无需重启
```
/model
@ -127,24 +134,24 @@ Model "provider/model" is not allowed. Use /model to list available models.
注意:
- `/model`(以及 `/model list`)是一个紧凑的编号选择器(模型家族 + 可用提供商)。
- 在 Discord 上,`/model` 和 `/models` 会打开一个交互式选择器,其中包含提供商和模型下拉菜单,以及一个 Submit 步骤。
- `/models add` 已弃用,现在不会再从聊天中注册模型,而是返回一条弃用提示信息
- 在 Discord 上,`/model` 和 `/models` 会打开一个交互式选择器,其中包含提供商和模型下拉菜单,以及一个提交步骤。
- `/models add` 已弃用,现在会返回弃用提示消息,而不是从聊天中注册模型
- `/model <#>` 会从该选择器中进行选择。
- `/model` 会立即持久化新的会话选择。
- 如果智能体处于空闲状态,下一次运行会立即使用新模型。
- 如果某次运行已经处于活动状态OpenClaw 会将实时切换标记为待处理,并只会在一个干净的重试点重启到新模型。
- 如果工具活动或回复输出已经开始,待处理切换可能会继续排队,直到之后的重试机会或下一轮用户输入
- `/model status` 是详细视图(凭证候选项,以及在已配置时提供商端点 `baseUrl` + `api` 模式)。
- 模型引用通过按**第一个** `/` 进行拆分来解析。输入 `/model <ref>` 时请使用 `provider/model`
- 如果模型 ID 本身包含 `/`OpenRouter 风格),你必须包含提供商前缀(例如:`/model openrouter/moonshotai/kimi-k2`)。
- 如果你省略提供商OpenClaw 会按以下顺序解析输入:
- 如果已有运行处于活动状态OpenClaw 会将实时切换标记为待处理,并只会在一个干净的重试点重启到新模型。
- 如果工具活动或回复输出已经开始,待处理的切换可能会保持排队状态,直到稍后的重试机会或下一个用户轮次
- `/model status` 是详细视图(凭证候选项,以及在已配置时显示提供商端点 `baseUrl` + `api` 模式)。
- 模型引用通过在**第一个** `/` 处分割来解析。输入 `/model <ref>` 时请使用 `provider/model`
- 如果模型 id 本身包含 `/`OpenRouter 风格),你必须包含提供商前缀(例如:`/model openrouter/moonshotai/kimi-k2`)。
- 如果你省略提供商OpenClaw 会按以下顺序解析输入:
1. 别名匹配
2. 对该精确无前缀模型 ID 的唯一已配置提供商匹配
2. 对该精确无前缀模型 id 的唯一已配置提供商匹配
3. 已弃用的回退:使用已配置的默认提供商
如果该提供商不再公开已配置的默认模型OpenClaw
将改为回退到第一个已配置的提供商 / 模型,以避免暴露已过时、已移除提供商的默认值。
会改为回退到第一个已配置的提供商 / 模型,以避免向用户暴露一个过时的、已移除提供商默认值。
完整的命令行为 / 配置: [Slash commands](/zh-CN/tools/slash-commands)。
完整命令行为 / 配置: [斜杠命令](/zh-CN/tools/slash-commands)。
## CLI 命令
@ -177,25 +184,26 @@ openclaw models image-fallbacks clear
- `--all`:完整目录
- `--local`:仅本地提供商
- `--provider <id>`:按提供商 ID 过滤,例如 `moonshot`;不接受交互式选择器中的显示标签
- `--provider <id>`:按提供商 id 过滤,例如 `moonshot`;不接受交互式选择器中的显示标签
- `--plain`:每行一个模型
- `--json`:机器可读输出
`--all` 会在配置凭证之前,先包含内置的、由提供商拥有的静态目录行,因此仅发现视图也可以显示那些在你添加匹配提供商凭证之前不可用的模型。
`--all` 会在配置凭证之前包含提供商自带的静态目录条目,因此仅发现用途的视图可以显示那些在你添加匹配提供商凭证之前不可用的模型。
### `models status`
显示解析的主模型、回退模型、图像模型,以及已配置提供商的凭证概览。它还会显示凭证存储中找到的配置文件的 OAuth 过期状态(默认在 24 小时内到期时发出警告)。`--plain` 只输出解析后的主模型。
OAuth 状态始终会显示(并包含在 `--json` 输出中)。如果某个已配置提供商没有凭证,`models status` 会输出一个 **Missing auth** 部分。
显示解析的主模型、回退模型、图像模型,以及已配置提供商的凭证概览。它还会显示凭证存储中找到的配置文件的 OAuth 过期状态(默认在 24 小时内到期时发出警告)。`--plain` 只打印已解析的主模型。
OAuth 状态始终会显示(并包含在 `--json` 输出中)。如果某个已配置的提供商没有凭证,`models status` 会打印一个 **缺少凭证** 部分。
JSON 包含 `auth.oauth`(警告窗口 + 配置文件)和 `auth.providers`
(每个提供商的生效凭证,包括基于环境变量的凭证)。`auth.oauth`
仅表示凭证存储中配置文件健康状态;仅使用环境变量的提供商不会出现在其中。
自动化场景请使用 `--check`(缺失 / 已过期时退出码为 `1`,即将过期时为 `2`)。
实时凭证检查请使用 `--probe`;探测行可能来自凭证配置文件、环境变量凭证,或 `models.json`
如果显式的 `auth.order.<provider>` 省略了个已存储配置文件,探测会报告
`excluded_by_auth_order`,而不是尝试它。如果存在凭证,但无法为该提供商解析出可探测模型,探测会报告 `status: no_model`
仅表示凭证存储中配置文件健康状态;仅使用环境变量的提供商不会出现在其中。
自动化场景请使用 `--check`(缺失 / 已过期时退出码为 `1`,即将过期时为 `2`)。
对实时凭证检查,请使用 `--probe`;探测行可以来自凭证配置文件、环境变量凭证,或 `models.json`
如果显式的 `auth.order.<provider>` 省略了个已存储配置文件,探测会报告
`excluded_by_auth_order`,而不是尝试它。如果存在凭证,但无法为该提供商解析出可探测模型,探测会报告 `status: no_model`
凭证选择取决于提供商 / 账户。对于始终在线的 Gateway 网关主机API 密钥通常最可预测;也支持复用 Claude CLI以及现有的 Anthropic OAuth / token 配置文件。
凭证选择取决于提供商 / 账户。对于始终在线的 Gateway 网关主机API 密钥通常最可预测;也支持复用 Claude CLI 和现有的 Anthropic
OAuth / token 配置文件。
示例Claude CLI
@ -212,11 +220,11 @@ openclaw models status
- `--no-probe`:跳过实时探测(仅元数据)
- `--min-params <b>`:最小参数规模(十亿)
- `--max-age-days <days>`:跳过较旧模型
- `--max-age-days <days>`:跳过较旧模型
- `--provider <name>`:提供商前缀过滤
- `--max-candidates <n>`:回退列表大小
- `--set-default`:将 `agents.defaults.model.primary` 设置为第一个选中的
- `--set-image`:将 `agents.defaults.imageModel.primary` 设置为第一个图像选中的
- `--set-default`:将 `agents.defaults.model.primary` 设置为第一个选
- `--set-image`:将 `agents.defaults.imageModel.primary` 设置为第一个图像选
探测需要 OpenRouter API 密钥(来自凭证配置文件或
`OPENROUTER_API_KEY`)。如果没有密钥,请使用 `--no-probe` 仅列出候选项。
@ -230,33 +238,34 @@ openclaw models status
输入
- OpenRouter `/models` 列表(过滤 `:free`
- OpenRouter `/models` 列表(筛选 `:free`
- 需要来自凭证配置文件或 `OPENROUTER_API_KEY` 的 OpenRouter API 密钥(参见 [/environment](/zh-CN/help/environment)
- 可选过滤条件`--max-age-days`、`--min-params`、`--provider`、`--max-candidates`
- 可选过滤`--max-age-days`、`--min-params`、`--provider`、`--max-candidates`
- 探测控制:`--timeout`、`--concurrency`
在 TTY 中运行时,你可以交互式选择回退模型。在非交互模式下,传入 `--yes` 以接受默认值。
在 TTY 中运行时,你可以交互式选择回退模型。在非交互模式下,传入 `--yes` 以接受默认值。
## 模型注册表(`models.json`
## Models 注册表(`models.json`
`models.providers` 中的自定义提供商会写入智能体目录下的 `models.json`
(默认路径为 `~/.openclaw/agents/<agentId>/agent/models.json`)。默认情况下,该文件合并,除非 `models.mode` 被设置为 `replace`
`models.providers` 中的自定义提供商会写入智能体目录下的 `models.json`
(默认路径为 `~/.openclaw/agents/<agentId>/agent/models.json`)。默认情况下会合并此文件,除非 `models.mode` 被设置为 `replace`
匹配提供商 ID 时,合并模式的优先级:
匹配提供商 id 的合并模式优先级:
- 智能体 `models.json` 中已存在的非空 `baseUrl` 优先。
- 智能体 `models.json` 中的非空 `apiKey` 仅在该提供商在当前配置 / 凭证配置文件上下文中**不是**由 SecretRef 管理时优先
- SecretRef 管理的提供商 `apiKey` 值会从源标记刷新(环境变量引用使用 `ENV_VAR_NAME`,文件 / exec 引用使用 `secretref-managed`),而不是持久化已解析的密钥。
- 由 SecretRef 管理的提供商请求头值会从源标记中刷新(环境变量引用使用 `secretref-env:ENV_VAR_NAME`,文件 / exec 引用使用 `secretref-managed`)。
- 智能体 `models.json` 中已存在的非空 `baseUrl` 优先生效
- 智能体 `models.json` 中的非空 `apiKey` 仅在该提供商在当前配置 / 凭证配置文件上下文中不受 SecretRef 管理时优先生效
- SecretRef 管理的提供商 `apiKey` 值会从源标记刷新(环境变量引用使用 `ENV_VAR_NAME`,文件 / exec 引用使用 `secretref-managed`),而不是持久化已解析的密钥。
- 受 SecretRef 管理的提供商 header 值会从源标记刷新(环境变量引用使用 `secretref-env:ENV_VAR_NAME`,文件 / exec 引用使用 `secretref-managed`)。
- 空的或缺失的智能体 `apiKey` / `baseUrl` 会回退到配置中的 `models.providers`
- 其他提供商字段会从配置和规范化后的目录数据中刷新。
标记持久化以源为权威OpenClaw 会根据当前活动源配置快照(预解析),而不是根据运行时已解析的密钥值来写入标记
这适用于 OpenClaw 重新生成 `models.json`任何场景,包括像 `openclaw agent` 这样的命令驱动路径。
标记持久化以源为OpenClaw 从当前激活的源配置快照(解析前)写入标记,而不是从已解析的运行时密钥值写入
这适用于 OpenClaw 重新生成 `models.json`所有情况,包括 `openclaw agent` 这类由命令驱动的路径。
## 相关内容
- [Model Providers](/zh-CN/concepts/model-providers) — 提供商路由和凭证
- [Model Providers](/zh-CN/concepts/model-providers) — 提供商路由与凭证
- [Agent Runtimes](/zh-CN/concepts/agent-runtimes) — PI、Codex 和其他 Agent loop 运行时
- [Model Failover](/zh-CN/concepts/model-failover) — 回退链
- [Image Generation](/zh-CN/tools/image-generation) — 图像模型配置
- [Music Generation](/zh-CN/tools/music-generation) — 音乐模型配置

View File

@ -2,19 +2,19 @@
read_when:
- 调整智能体默认设置模型、思考、工作区、心跳、媒体、Skills
- 配置多智能体路由和绑定
- 调整会话、消息传递和通话模式行为
summary: 智能体默认设置、多智能体路由、会话、消息和话配置
- 调整会话、消息投递和对话模式行为
summary: 智能体默认设置、多智能体路由、会话、消息和话配置
title: 配置 — 智能体
x-i18n:
generated_at: "2026-04-25T01:27:31Z"
generated_at: "2026-04-25T01:51:44Z"
model: gpt-5.4
provider: openai
source_hash: 3df297e134f10215ac30bb582180dc06413f81f80c3f673926bf26f8c36a640e
source_hash: a0b90bb7a1d46dc2ae68d44de45f0861ec6400bb19ba36d2066d642ecbecc0b3
source_path: gateway/config-agents.md
workflow: 15
---
`agents.*`、`multiAgent.*`、`session.*`、`messages.*` 和 `talk.*`按智能体作用域划分的配置键。关于渠道、工具、Gateway 网关运行时以及其他顶层键,请参见 [配置参考](/zh-CN/gateway/configuration-reference)。
位于 `agents.*`、`multiAgent.*`、`session.*`、`messages.*` 和 `talk.*`的智能体作用域配置键。关于渠道、工具、Gateway 网关运行时以及其他顶层键,请参阅[配置参考](/zh-CN/gateway/configuration-reference)。
## 智能体默认设置
@ -55,14 +55,14 @@ x-i18n:
}
```
- 省略 `agents.defaults.skills` 可使默认 Skills 不受限制
- 省略 `agents.list[].skills`继承默认值。
- 设置 `agents.list[].skills: []` 表示没有 Skills。
- 省略 `agents.defaults.skills`,则默认不限制 Skills
- 省略 `agents.list[].skills`,则继承默认值。
- `agents.list[].skills: []` 设为空 Skills。
- 非空的 `agents.list[].skills` 列表就是该智能体的最终集合;它不会与默认值合并。
### `agents.defaults.skipBootstrap`
禁用工作区引导文件的自动创建`AGENTS.md`、`SOUL.md`、`TOOLS.md`、`IDENTITY.md`、`USER.md`、`HEARTBEAT.md`、`BOOTSTRAP.md`)。
禁用自动创建工作区引导文件(`AGENTS.md`、`SOUL.md`、`TOOLS.md`、`IDENTITY.md`、`USER.md`、`HEARTBEAT.md`、`BOOTSTRAP.md`)。
```json5
{
@ -74,7 +74,7 @@ x-i18n:
控制何时将工作区引导文件注入系统提示。默认值:`"always"`。
- `"continuation-skip"`:安全的续接轮次(在助手完成响应之后会跳过重新注入工作区引导内容从而减小提示大小。Heartbeat 运行和压缩后的重试仍会重建上下文。
- `"continuation-skip"`:安全的续接轮次(在助手完成一次响应之后)会跳过工作区引导内容的重新注入,从而减小提示大小。心跳运行和压缩后的重试仍会重建上下文。
```json5
{
@ -84,7 +84,7 @@ x-i18n:
### `agents.defaults.bootstrapMaxChars`
每个工作区引导文件在被截断前允许的最大字符数。默认值:`12000`。
单个工作区引导文件在截断前允许的最大字符数。默认值:`12000`。
```json5
{
@ -94,7 +94,7 @@ x-i18n:
### `agents.defaults.bootstrapTotalMaxChars`
所有工作区引导文件注入的总最大字符数。默认值:`60000`。
所有工作区引导文件注入内容的总最大字符数。默认值:`60000`。
```json5
{
@ -104,11 +104,12 @@ x-i18n:
### `agents.defaults.bootstrapPromptTruncationWarning`
控制在引导上下文被截断时,向智能体显示的警告文本。默认值:`"once"`。
控制在引导上下文被截断时,向智能体显示的警告文本。
默认值:`"once"`。
- `"off"`:绝不将警告文本注入系统提示。
- `"once"`:每个唯一的截断签名只注入一次警告(推荐)。
- `"always"`:只要存在截断,就在每次运行时注入警告。
- `"once"`每个唯一的截断签名只注入一次警告(推荐)。
- `"always"`:只要存在截断,每次运行都注入警告。
```json5
{
@ -118,20 +119,20 @@ x-i18n:
### 上下文预算归属映射
OpenClaw 有多个高容量提示 / 上下文预算,并且这些预算会按子系统有意拆分,而不是全都通过一个通用开关控制。
OpenClaw 有多个高容量的提示/上下文预算,并且它们是按子系统有意拆分的,而不是都通过一个通用旋钮来控制。
- `agents.defaults.bootstrapMaxChars` /
`agents.defaults.bootstrapTotalMaxChars`
常规工作区引导内容注入。
常规工作区引导注入。
- `agents.defaults.startupContext.*`
一次性的 `/new``/reset` 启动前导内容,包括最近的每日
`memory/*.md` 文件。
- `skills.limits.*`
注入系统提示中的紧凑 Skills 列表。
注入系统提示中的精简 Skills 列表。
- `agents.defaults.contextLimits.*`
有界的运行时摘录以及注入的运行时自有区块。
有界运行时摘录和由运行时注入的内容块。
- `memory.qmd.limits.*`
已索引的内存搜索片段及注入大小控制。
已索引的内存搜索片段及注入大小控制。
仅当某个智能体需要不同预算时,才使用对应的按智能体覆盖项:
@ -140,7 +141,7 @@ OpenClaw 有多个高容量提示 / 上下文预算,并且这些预算会按
#### `agents.defaults.startupContext`
控制在空白 `/new``/reset` 运行时注入的首轮启动前导内容。
控制在 `/new``/reset` 运行时注入的首轮启动前导内容。
```json5
{
@ -161,7 +162,7 @@ OpenClaw 有多个高容量提示 / 上下文预算,并且这些预算会按
#### `agents.defaults.contextLimits`
用于有界运行时上下文表面的共享默认值。
为有界运行时上下文面提供共享默认值。
```json5
{
@ -181,11 +182,11 @@ OpenClaw 有多个高容量提示 / 上下文预算,并且这些预算会按
- `memoryGetMaxChars``memory_get` 摘录在添加截断元数据和续接提示前的默认上限。
- `memoryGetDefaultLines`:当省略 `lines` 时,`memory_get` 的默认行窗口。
- `toolResultMaxChars`:用于持久化结果和溢出恢复的实时工具结果上限。
- `postCompactionMaxChars`:压缩后刷新注入期间`AGENTS.md` 摘录的字符上限。
- `postCompactionMaxChars`:压缩后刷新注入期间使用的 `AGENTS.md` 摘录上限。
#### `agents.list[].contextLimits`
对共享 `contextLimits` 开关提供按智能体覆盖。省略的字段会继承自 `agents.defaults.contextLimits`
共享 `contextLimits` 控件的按智能体覆盖项。省略的字段会继承 `agents.defaults.contextLimits`
```json5
{
@ -211,7 +212,7 @@ OpenClaw 有多个高容量提示 / 上下文预算,并且这些预算会按
#### `skills.limits.maxSkillsPromptChars`
注入系统提示中的紧凑 Skills 列表的全局上限。这不会影响按需读取 `SKILL.md` 文件。
注入系统提示中的精简 Skills 列表的全局上限。这不会影响按需读取 `SKILL.md` 文件。
```json5
{
@ -244,11 +245,11 @@ Skills 提示预算的按智能体覆盖项。
### `agents.defaults.imageMaxDimensionPx`
在调用提供商之前,transcript / 工具图像区块中图像最长边的最大像素尺寸。
在调用提供商之前,转录/工具图像块中图像最长边的最大像素尺寸。
默认值:`1200`。
较低的值通常会减少视觉 token 使用量以及以截图为主的运行请求负载大小
较高的值会保留更多视觉细节。
较低的值通常会减少视觉 token 使用量和请求负载大小,适合以截图为主的运行
较高的值会保留更多视觉细节。
```json5
{
@ -325,52 +326,53 @@ Skills 提示预算的按智能体覆盖项。
}
```
- `model`接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)两种形式
- `model`既可接受字符串(`"provider/model"`),也可接受对象(`{ primary, fallbacks }`
- 字符串形式只设置主模型。
- 对象形式设置主模型以及按顺序排列的故障切换模型。
- `imageModel`接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)两种形式
- 作 `image` 工具路径的视觉模型配置使用
- 当所选 / 默认模型无法接受图像输入时,也会用作回退路由。
- `imageGenerationModel`接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)两种形式
- 用于共享图像生成能力,以及任何未来会生成图像的工具 / 插件表面。
- `imageModel`既可接受字符串(`"provider/model"`),也可接受对象(`{ primary, fallbacks }`
- `image` 工具路径的视觉模型配置。
- 当所选/默认模型无法接受图像输入时,也会用作回退路由。
- `imageGenerationModel`既可接受字符串(`"provider/model"`),也可接受对象(`{ primary, fallbacks }`
- 用于共享的图像生成能力,以及未来任何生成图像的工具/插件表面。
- 典型值:`google/gemini-3.1-flash-image-preview` 用于原生 Gemini 图像生成,`fal/fal-ai/flux/dev` 用于 fal`openai/gpt-image-2` 用于 OpenAI Images。
- 如果你直接选择某个 provider / model也要配置匹配的提供商凭证例如`google/*` 需要 `GEMINI_API_KEY``GOOGLE_API_KEY``openai/gpt-image-2` 需要 `OPENAI_API_KEY` 或 OpenAI Codex OAuth`fal/*` 需要 `FAL_KEY`
- 如果省略,`image_generate` 仍可推断出一个有凭证支持的默认提供商。它会先尝试当前默认提供商,然后按 provider id 顺序尝试其余已注册的图像生成提供商。
- `musicGenerationModel`接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)两种形式
- 用于共享音乐生成能力以及内置的 `music_generate` 工具。
- 如果你直接选择某个提供商/模型,也要配置匹配的提供商凭证,例如 `google/*` 使用 `GEMINI_API_KEY``GOOGLE_API_KEY``openai/gpt-image-2` 使用 `OPENAI_API_KEY` 或 OpenAI Codex OAuth`fal/*` 使用 `FAL_KEY`
- 如果省略,`image_generate` 仍可推断出一个有凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 id 顺序尝试其余已注册的图像生成提供商。
- `musicGenerationModel`既可接受字符串(`"provider/model"`),也可接受对象(`{ primary, fallbacks }`
- 用于共享的音乐生成能力和内置的 `music_generate` 工具。
- 典型值:`google/lyria-3-clip-preview`、`google/lyria-3-pro-preview` 或 `minimax/music-2.5+`
- 如果省略,`music_generate` 仍可推断出一个有凭证支持的默认提供商。它会先尝试当前默认提供商,然后按 provider id 顺序尝试其余已注册的音乐生成提供商。
- 如果你直接选择某个 provider / model也要配置匹配的提供商凭证 / API 密钥。
- `videoGenerationModel`接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)两种形式
- 用于共享视频生成能力以及内置的 `video_generate` 工具。
- 如果省略,`music_generate` 仍可推断出一个有凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 id 顺序尝试其余已注册的音乐生成提供商。
- 如果你直接选择某个提供商/模型,也要配置匹配的提供商凭证/API 密钥。
- `videoGenerationModel`既可接受字符串(`"provider/model"`),也可接受对象(`{ primary, fallbacks }`
- 用于共享的视频生成能力和内置的 `video_generate` 工具。
- 典型值:`qwen/wan2.6-t2v`、`qwen/wan2.6-i2v`、`qwen/wan2.6-r2v`、`qwen/wan2.6-r2v-flash` 或 `qwen/wan2.7-r2v`
- 如果省略,`video_generate` 仍可推断出一个有凭证支持的默认提供商。它会先尝试当前默认提供商,然后按 provider id 顺序尝试其余已注册的视频生成提供商。
- 如果你直接选择某个 provider / model也要配置匹配的提供商凭证 / API 密钥。
- 如果省略,`video_generate` 仍可推断出一个有凭证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 id 顺序尝试其余已注册的视频生成提供商。
- 如果你直接选择某个提供商/模型,也要配置匹配的提供商凭证/API 密钥。
- 内置的 Qwen 视频生成提供商最多支持 1 个输出视频、1 张输入图像、4 个输入视频、10 秒时长,以及提供商级别的 `size`、`aspectRatio`、`resolution`、`audio` 和 `watermark` 选项。
- `pdfModel`接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)两种形式
- `pdfModel`既可接受字符串(`"provider/model"`),也可接受对象(`{ primary, fallbacks }`
- 用于 `pdf` 工具的模型路由。
- 如果省略PDF 工具会依次回退到 `imageModel`,然后回退到已解析的会话 / 默认模型。
- `pdfMaxBytesMb`:当调用时未传入 `maxBytesMb``pdf` 工具使用的默认 PDF 大小限制。
- `pdfMaxPages``pdf` 工具在提取回退模式下默认考虑的最大页数。
- 如果省略PDF 工具会先回退到 `imageModel`,再回退到解析后的会话/默认模型。
- `pdfMaxBytesMb`:当调用时未传入 `maxBytesMb``pdf` 工具使用的默认 PDF 大小限制。
- `pdfMaxPages``pdf` 工具在提取回退模式中考虑的默认最大页数。
- `verboseDefault`:智能体的默认详细级别。取值:`"off"`、`"on"`、`"full"`。默认值:`"off"`。
- `elevatedDefault`:智能体的默认增强输出级别。取值:`"off"`、`"on"`、`"ask"`、`"full"`。默认值:`"on"`。
- `model.primary`:格式为 `provider/model`(例如,`openai/gpt-5.4` 用于 API 密钥访问,或 `openai-codex/gpt-5.5` 用于 Codex OAuth。如果你省略 providerOpenClaw 会先尝试别名,然后尝试与该精确 model id 唯一匹配的已配置提供商,最后才回退到已配置的默认提供商(这是已弃用的兼容行为,因此建议优先使用显式 `provider/model`。如果该提供商不再暴露已配置的默认模型OpenClaw 会回退到第一个已配置的 provider / model而不是显示一个已过期、已移除提供商的默认值。
- `models``/model` 配置模型目录和允许列表。每个条目都可以包含 `alias`(快捷方式)和 `params`(提供商特定参数,例如 `temperature`、`maxTokens`、`cacheRetention`、`context1m`、`responsesServerCompaction`、`responsesCompactThreshold`)。
- 安全编辑:使用 `openclaw config set agents.defaults.models '<json>' --strict-json --merge` 添加条目。除非你传入 `--replace`,否则 `config set` 会拒绝会删除现有允许列表条目的替换操作。
- 以提供商为作用域的 configure / onboarding 流程会将选定提供商的模型合并到此映射中,并保留已配置的无关提供商。
- `model.primary`:格式为 `provider/model`(例如,`openai/gpt-5.4` 用于 API 密钥访问,或 `openai-codex/gpt-5.5` 用于 Codex OAuth。如果你省略提供商OpenClaw 会先尝试别名,然后尝试精确匹配该模型 id 的唯一已配置提供商,最后才回退到已配置的默认提供商(这是已弃用的兼容行为,因此建议优先使用显式 `provider/model`。如果该提供商不再暴露已配置的默认模型OpenClaw 会回退到第一个已配置的提供商/模型,而不是暴露一个已经失效、来自已移除提供商的默认值。
- `models``/model` 使用的已配置模型目录和允许列表。每个条目都可以包含 `alias`(快捷方式)和 `params`(提供商特定参数,例如 `temperature`、`maxTokens`、`cacheRetention`、`context1m`、`responsesServerCompaction`、`responsesCompactThreshold`)。
- 安全编辑方式:使用 `openclaw config set agents.defaults.models '<json>' --strict-json --merge` 添加条目。除非你传入 `--replace`,否则 `config set` 会拒绝会删除现有允许列表条目的替换操作。
- 以提供商为作用域的配置/新手引导流程会将所选提供商模型合并到这个映射中,并保留已经配置好的无关提供商。
- 对于直接使用的 OpenAI Responses 模型,会自动启用服务端压缩。使用 `params.responsesServerCompaction: false` 可停止注入 `context_management`,或使用 `params.responsesCompactThreshold` 覆盖阈值。参见 [OpenAI 服务端压缩](/zh-CN/providers/openai#server-side-compaction-responses-api)。
- `params`:应用于所有模型的全局默认提供商参数。设置位置为 `agents.defaults.params`(例如 `{ cacheRetention: "long" }`)。
- `params`:应用到所有模型的全局默认提供商参数。在 `agents.defaults.params` 中设置(例如 `{ cacheRetention: "long" }`)。
- `params` 合并优先级(配置):`agents.defaults.params`(全局基础)会被 `agents.defaults.models["provider/model"].params`(按模型)覆盖,然后再由 `agents.list[].params`(匹配的智能体 id按键覆盖。详见 [提示缓存](/zh-CN/reference/prompt-caching)。
- `embeddedHarness`:默认的底层嵌入式智能体运行时策略。省略 runtime 时默认使用 OpenClaw Pi。使用 `runtime: "pi"` 可强制使用内置 PI harness使用 `runtime: "auto"` 可让已注册的插件 harness 接管其支持的模型,或使用已注册的 harness id例如 `runtime: "codex"`。设置 `fallback: "none"` 可禁用自动 PI 回退。请将模型引用保持为标准 `provider/model`;通过运行时配置而不是旧式运行时 provider 前缀来选择 Codex、Claude CLI、Gemini CLI 以及其他执行后端。
- 会修改这些字段的配置写入器(例如 `/models set`、`/models set-image` 以及 fallback add / remove 命令)会保存为标准对象形式,并尽可能保留现有的回退列表。
- `maxConcurrent`跨会话的最大并行智能体运行数每个会话仍然串行。默认值4。
- `embeddedHarness`:默认的底层嵌入式智能体运行时策略。省略 `runtime` 时默认使用 OpenClaw Pi。使用 `runtime: "pi"` 可强制使用内置 PI harness使用 `runtime: "auto"` 可让已注册的插件 harness 认领受支持的模型,或使用已注册的 harness id例如 `runtime: "codex"`。设置 `fallback: "none"` 可禁用自动回退到 PI。像 `codex` 这样的显式插件运行时默认采用失败即关闭,除非你在同一覆盖作用域中设置 `fallback: "pi"`。请将模型引用保持为规范形式 `provider/model`Codex、Claude CLI、Gemini CLI 以及其他执行后端应通过运行时配置来选择,而不是使用旧式运行时提供商前缀。参见 [Agent Runtimes](/zh-CN/concepts/agent-runtimes),了解它与提供商/模型选择有何不同
- 会修改这些字段的配置写入器(例如 `/models set`、`/models set-image` 以及回退模型的添加/移除命令)会保存为规范对象形式,并尽可能保留现有回退列表。
- `maxConcurrent`:跨会话的最大并行智能体运行数(每个会话本身仍然串行。默认值4。
### `agents.defaults.embeddedHarness`
`embeddedHarness` 控制哪个底层执行器运行嵌入式智能体轮次。
大多数部署应保留默认的 OpenClaw Pi 运行时。
当受信任的插件提供原生 harness 时使用它,例如内置的
Codex app-server harness。
Codex 应用服务器 harness。关于其思维模型请参见
[Agent Runtimes](/zh-CN/concepts/agent-runtimes)。
```json5
{
@ -386,12 +388,12 @@ Codex app-server harness。
}
```
- `runtime``"auto"`、`"pi"` 或已注册的插件 harness id。内置 Codex 插件注册的是 `codex`
- `fallback``"pi"` 或 `"none"`。在 `runtime: "auto"` 中,省略 `fallback` 时默认`"pi"`,这样旧配置在没有插件 harness 接管运行时仍可继续使用 PI。在显式插件运行时模式下例如 `runtime: "codex"`,省略 `fallback` 时默认`"none"`,这样缺失 harness 时会直接失败,而不是静默使用 PI。运行时覆盖不会继承更广作用域中的 fallback如果你确实想要这种兼容回退请在显式 runtime 旁边一起设置 `fallback: "pi"`。所选插件 harness 的失败总是会直接暴露出来。
- 环境变量覆盖:`OPENCLAW_AGENT_RUNTIME=<id|auto|pi>` 会覆盖 `runtime``OPENCLAW_AGENT_HARNESS_FALLBACK=pi|none` 会覆盖该进程的 fallback
- 对于仅使用 Codex 的部署,设置 `model: "openai/gpt-5.5"``embeddedHarness.runtime: "codex"`。你也可以为了可读性显式设置 `embeddedHarness.fallback: "none"`;对于显式插件运行时,这本来就是默认值。
- 第一次嵌入式运行之后harness 选择会按每个 session id 固定。配置 / 环境变量变更只会影响新的或已重置的会话,不会影响现有 transcript。带有 transcript 历史但没有记录固定值的旧会话会被视为固定到 PI。`/status` 会在 `Fast` 旁显示非 PI 的 harness id例如 `codex`
- 这只控制嵌入式聊天 harness。媒体生成、视觉、PDF、音乐、视频和 TTS 仍使用各自的 provider / model 设置。
- `runtime``"auto"`、`"pi"` 或已注册的插件 harness id。内置 Codex 插件注册 `codex`
- `fallback``"pi"` 或 `"none"`。在 `runtime: "auto"` 中,省略 `fallback` 时默认值为 `"pi"`,这样旧配置在没有插件 harness 认领运行时仍可继续使用 PI。在显式插件运行时模式下例如 `runtime: "codex"`,省略 `fallback` 时默认值为 `"none"`,这样缺少 harness 时会失败,而不是静默改用 PI。运行时覆盖项不会从更宽范围继承 `fallback`;当你有意需要这种兼容性回退时,请在显式运行时旁边同时设置 `fallback: "pi"`。所选插件 harness 的失败总是会直接暴露出来。
- 环境变量覆盖:`OPENCLAW_AGENT_RUNTIME=<id|auto|pi>` 会覆盖 `runtime``OPENCLAW_AGENT_HARNESS_FALLBACK=pi|none` 会为该进程覆盖 `fallback`
- 对于仅使用 Codex 的部署,设置 `model: "openai/gpt-5.5"``embeddedHarness.runtime: "codex"`。你也可以显式设置 `embeddedHarness.fallback: "none"` 以提高可读性;对于显式插件运行时,这就是默认值。
- 第一次嵌入式运行之后harness 选择会按会话 id 固定。配置/环境变量变更只影响新的或已重置的会话,不影响现有转录。具有转录历史但没有记录固定值的旧会话会被视为固定到 PI。`/status` 会在 `Fast` 旁显示非 PI 的 harness id例如 `codex`
- 这只控制嵌入式聊天 harness。媒体生成、视觉、PDF、音乐、视频和 TTS 仍使用各自的提供商/模型设置。
**内置别名简写**(仅当模型位于 `agents.defaults.models` 中时适用):
@ -399,7 +401,7 @@ Codex app-server harness。
| ------------------- | -------------------------------------------------- |
| `opus` | `anthropic/claude-opus-4-6` |
| `sonnet` | `anthropic/claude-sonnet-4-6` |
| `gpt` | `openai/gpt-5.4` 或已配置 Codex OAuth GPT-5.5 |
| `gpt` | `openai/gpt-5.4` 或已配置 Codex OAuth GPT-5.5 |
| `gpt-mini` | `openai/gpt-5.4-mini` |
| `gpt-nano` | `openai/gpt-5.4-nano` |
| `gemini` | `google/gemini-3.1-pro-preview` |
@ -408,13 +410,13 @@ Codex app-server harness。
你配置的别名始终优先于默认值。
Z.AI GLM-4.x 模型会自动启用 thinking 模式,除非你设置 `--thinking off`,或自行定义 `agents.defaults.models["zai/<model>"].params.thinking`
Z.AI 模型默认启用 `tool_stream`支持工具调用流式传输。将 `agents.defaults.models["zai/<model>"].params.tool_stream``false` 可禁用它。
Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用 `adaptive` thinking
Z.AI 的 GLM-4.x 模型会自动启用思考模式,除非你设置 `--thinking off`,或自行定义 `agents.defaults.models["zai/<model>"].params.thinking`
Z.AI 模型默认启用 `tool_stream`进行工具调用流式传输。将 `agents.defaults.models["zai/<model>"].params.tool_stream` 设为 `false` 可禁用它。
Anthropic Claude 4.6 模型在未显式设置思考级别时,默认使用 `adaptive` 思考
### `agents.defaults.cliBackends`
用于纯文本回退运行(无工具调用)的可选 CLI 后端。当 API 提供商失败时,可作为备份。
用于纯文本回退运行(无工具调用)的可选 CLI 后端。当 API 提供商失败时,可作为备份。
```json5
{
@ -443,12 +445,12 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
```
- CLI 后端以文本为主;工具始终被禁用。
- 设置了 `sessionArg` 时支持会话。
- 当 `imageArg` 接受文件路径时,支持图像透传
- 设置了 `sessionArg` 时支持会话。
- 当 `imageArg` 接受文件路径时,支持图像直通
### `agents.defaults.systemPromptOverride`
用固定字符串替换整个由 OpenClaw 组装的系统提示。可在默认级(`agents.defaults.systemPromptOverride`)设置,也可按智能体设置(`agents.list[].systemPromptOverride`)。按智能体设置的值优先;空值或仅含空白字符的值会被忽略。这对受控提示实验很有用
一个固定字符串替换整个由 OpenClaw 组装的系统提示。可在默认级`agents.defaults.systemPromptOverride`)设置,也可按智能体设置(`agents.list[].systemPromptOverride`)。按智能体的值优先;空值或仅空白字符的值会被忽略。适用于受控的提示实验
```json5
{
@ -462,7 +464,7 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
### `agents.defaults.promptOverlays`
按模型家族应用的、与提供商无关的提示覆盖层。GPT-5 家族模型 id 会在各提供商之间收到共享的行为契约;`personality` 仅控制友好交互风格这一层。
按模型家族应用、与提供商无关的提示覆盖层。GPT-5 系列模型 id 会在不同提供商之间接收共享行为契约;`personality` 仅控制友好的交互风格层。
```json5
{
@ -479,12 +481,12 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
```
- `"friendly"`(默认)和 `"on"` 会启用友好交互风格层。
- `"off"` 只会禁用友好层;带标签的 GPT-5 行为契约仍保持启用。
- 旧版 `plugins.entries.openai.config.personality`此共享设置未设置时仍会被读取。
- `"off"` 禁用友好层;带标签的 GPT-5 行为契约仍保持启用。
- 旧版 `plugins.entries.openai.config.personality`这个共享设置未配置时仍会被读取。
### `agents.defaults.heartbeat`
周期性 Heartbeat 运行。
周期性心跳运行。
```json5
{
@ -496,10 +498,10 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
includeReasoning: false,
includeSystemPromptSection: true, // 默认值truefalse 会从系统提示中省略 Heartbeat 部分
lightContext: false, // 默认值falsetrue 只保留工作区引导文件中的 HEARTBEAT.md
isolatedSession: false, // 默认值falsetrue 会在全新会话中运行每次 heartbeat无对话历史)
isolatedSession: false, // 默认值falsetrue 会让每次心跳在一个全新的会话中运行(无会话历史)
session: "main",
to: "+15555550123",
directPolicy: "allow", // allow默认| block
directPolicy: "allow", // allow默认 | block
target: "none", // 默认值none | 可选值last | whatsapp | telegram | discord | ...
prompt: "Read HEARTBEAT.md if it exists...",
ackMaxChars: 300,
@ -512,14 +514,14 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
```
- `every`时长字符串ms/s/m/h。默认值`30m`API 密钥认证)或 `1h`OAuth 认证)。设置为 `0m` 可禁用。
- `includeSystemPromptSection`为 false 时,会从系统提示中省略 Heartbeat 部分,并跳过将 `HEARTBEAT.md` 注入引导上下文。默认值:`true`。
- `suppressToolErrorWarnings`设为 true 时,会在 heartbeat 运行期间抑制工具错误警告负载。
- `timeoutSeconds`在 heartbeat 智能体轮次被中止前允许的最长秒数。若不设置,则使用 `agents.defaults.timeoutSeconds`
- `directPolicy`:直接 / 私信投递策略。`allow`(默认)允许直接目标投递。`block` 会阻止直接目标投递,并发出 `reason=dm-blocked`
- `lightContext`设为 true 时heartbeat 运行会使用轻量级引导上下文,并且只保留工作区引导文件中的 `HEARTBEAT.md`
- `isolatedSession`设为 true 时,每次 heartbeat 都会在一个没有任何先前对话历史的全新会话中运行。隔离模式与 cron `sessionTarget: "isolated"` 相同。可将每次 heartbeat 的 token 成本从约 100K 降低到约 25K token。
- 按智能体设置:使用 `agents.list[].heartbeat`。当任意智能体定义了 `heartbeat` 时,**只有这些智能体**会运行 heartbeat
- Heartbeat 会运行完整的智能体轮次——间隔越短,消耗的 token 越多。
- `includeSystemPromptSection`:为 false 时,会从系统提示中省略 Heartbeat 部分,并跳过将 `HEARTBEAT.md` 注入引导上下文。默认值:`true`。
- `suppressToolErrorWarnings`为 true 时,会在心跳运行期间抑制工具错误警告负载。
- `timeoutSeconds`心跳智能体轮次在被中止前允许的最长秒数。留空则使用 `agents.defaults.timeoutSeconds`
- `directPolicy`:直接/私信投递策略。`allow`(默认)允许投递到直接目标。`block` 会阻止投递到直接目标,并发出 `reason=dm-blocked`
- `lightContext`为 true 时,心跳运行使用轻量引导上下文,并且只保留工作区引导文件中的 `HEARTBEAT.md`
- `isolatedSession`为 true 时,每次心跳都会在一个没有先前会话历史的新会话中运行。与 cron `sessionTarget: "isolated"` 使用相同的隔离模式。可将每次心跳的 token 成本从约 100K 降低到约 2-5K token。
- 按智能体设置:使用 `agents.list[].heartbeat`。当任何智能体定义了 `heartbeat` 时,**只有这些智能体**会运行心跳
- 心跳会运行完整的智能体轮次——间隔越短,消耗的 token 越多。
### `agents.defaults.compaction`
@ -535,7 +537,7 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
identifierPolicy: "strict", // strict | off | custom
identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // 当 identifierPolicy=custom 时使用
postCompactionSections: ["Session Startup", "Red Lines"], // [] 表示禁用重新注入
model: "openrouter/anthropic/claude-sonnet-4-6", // 仅用于压缩的可选模型覆盖
model: "openrouter/anthropic/claude-sonnet-4-6", // 可选,仅用于压缩的模型覆盖
notifyUser: true, // 在压缩开始和完成时向用户发送简短通知默认值false
memoryFlush: {
enabled: true,
@ -549,19 +551,19 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
}
```
- `mode``default` 或 `safeguard`(针对长历史的分块摘要)。参见 [压缩](/zh-CN/concepts/compaction)。
- `provider`:已注册压缩提供商插件的 id。设置后会调用该提供商的 `summarize()`,而不是内置的 LLM 摘要功能。失败时会回退到内置实现。设置提供商会强制使用 `mode: "safeguard"`。参见 [压缩](/zh-CN/concepts/compaction)。
- `timeoutSeconds`OpenClaw 中止单次压缩操作前允许的最秒数。默认值:`900`。
- `mode``default` 或 `safeguard`(针对长历史的分块摘要)。参见[压缩](/zh-CN/concepts/compaction)。
- `provider`:已注册压缩提供商插件的 id。设置后会调用该提供商的 `summarize()`,而不是使用内置 LLM 摘要。失败时会回退到内置方式。设置提供商会强制使用 `mode: "safeguard"`。参见[压缩](/zh-CN/concepts/compaction)。
- `timeoutSeconds`OpenClaw 中止单次压缩操作前允许的最秒数。默认值:`900`。
- `identifierPolicy``strict`(默认)、`off` 或 `custom`。`strict` 会在压缩摘要时预先添加内置的不透明标识符保留指引。
- `identifierInstructions`:当 `identifierPolicy=custom` 时使用的可选自定义标识符保留文本。
- `postCompactionSections`:压缩后重新注入的可选 `AGENTS.md` H2 / H3 节名。默认值为 `["Session Startup", "Red Lines"]`;设为 `[]` 可禁用重新注入。当未设置或显式设为这对默认值时,也接受旧版的 `Every Session` / `Safety` 标题作为兼容回退。
- `model`仅用于压缩摘要的可选 `provider/model-id` 覆盖。当主会话应继续使用一个模型,而压缩摘要应使用另一个模型时使用此项;未设置时,压缩会使用会话的主模型。
- `notifyUser``true` 时,在压缩开始和完成时向用户发送简短通知(例如,“正在压缩上下文...” 和 “压缩完成”)。默认禁用,以保持压缩静默。
- `memoryFlush`自动压缩前的静默智能体轮次,用于存储持久记忆。当工作区为只读时会跳过。
- `identifierInstructions`:当 `identifierPolicy=custom` 时使用的可选自定义标识符保留说明文本。
- `postCompactionSections`:压缩后重新注入的可选 `AGENTS.md` H2/H3 节名。默认值为 `["Session Startup", "Red Lines"]`;设为 `[]` 可禁用重新注入。未设置时,或显式设置为该默认组合时,也接受旧版 `Every Session`/`Safety` 标题作为兼容回退。
- `model`:可选 `provider/model-id` 覆盖项,仅用于压缩摘要。当主会话应继续使用一个模型,而压缩摘要应使用另一个模型时使用此项;未设置时,压缩会使用会话的主模型。
- `notifyUser`:为 `true` 时,在压缩开始和完成时向用户发送简短通知(例如“Compacting context...” 和 “Compaction complete”。默认关闭,以保持压缩静默。
- `memoryFlush`在自动压缩前执行静默智能体轮次,以存储持久记忆。当工作区为只读时会跳过。
### `agents.defaults.contextPruning`
在将上下文发送给 LLM 之前,从内存中的上下文中修剪**旧工具结果**。**不会**修改磁盘上的会话历史。
在将内容发送给 LLM 之前,从内存上下文中修剪**旧的工具结果**。**不会**修改磁盘上的会话历史。
```json5
{
@ -585,23 +587,23 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
<Accordion title="`cache-ttl` 模式行为">
- `mode: "cache-ttl"` 会启用修剪程。
- `ttl` 控制再次允许执行修剪的频率(基于上次缓存触碰之后)。
- 修剪会先对过大的工具结果执行软裁剪,然后在需要时对更旧的工具结果执行硬清除。
- `mode: "cache-ttl"` 会启用修剪程。
- `ttl` 控制多久之后才能再次运行修剪(从上次缓存触达后开始计算)。
- 修剪会先对过大的工具结果进行软修剪,如果仍有需要,再对更旧的工具结果执行硬清除。
**软剪**会保留开头和结尾,并在中间插入 `...`
**软剪**会保留开头和结尾,并在中间插入 `...`
**硬清除**会用占位文本替换整个工具结果。
**硬清除**会用占位替换整个工具结果。
说明:
- 图像区块永远不会被裁剪 / 清除。
- 比例按字符数计算(近似值),不是精确 token 计数。
- 如果助手消息少于 `keepLastAssistants` 条,则跳过修剪。
- 图像块永远不会被修剪/清除。
- 比例是基于字符的近似值,而不是精确 token 计数。
- 如果助手消息少于 `keepLastAssistants` 条,则跳过修剪。
</Accordion>
行为详情请参见 [会话修剪](/zh-CN/concepts/session-pruning)。
行为细节参见[会话修剪](/zh-CN/concepts/session-pruning)。
### 分块流式传输
@ -619,13 +621,13 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
}
```
- 非 Telegram 渠道需要显式设置 `*.blockStreaming: true`启用分块回复。
- 渠道覆盖:`channels.<channel>.blockStreamingCoalesce`以及按账号的变体。Signal / Slack / Discord / Google Chat 默认 `minChars: 1500`
- `humanDelay`:分块回复之间的随机暂停。`natural` = 8002500 ms。按智能体覆盖:`agents.list[].humanDelay`。
- 非 Telegram 渠道需要显式设置 `*.blockStreaming: true`启用分块回复。
- 渠道覆盖`channels.<channel>.blockStreamingCoalesce`以及按账号的变体。Signal/Slack/Discord/Google Chat 默认 `minChars: 1500`
- `humanDelay`:分块回复之间的随机停顿。`natural` = 8002500 毫秒。按智能体覆盖:`agents.list[].humanDelay`。
行为和分块详情请参见 [流式传输](/zh-CN/concepts/streaming)。
行为和分块细节参见[流式传输](/zh-CN/concepts/streaming)。
### 输入状态指示器
### 输入指示器
```json5
{
@ -638,16 +640,16 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
}
```
- 默认值:直接聊天 / 提及时为 `instant`,未被提及的群聊中为 `message`
- 默认值:直接聊天/提及时使用 `instant`,未提及的群聊使用 `message`
- 按会话覆盖:`session.typingMode`、`session.typingIntervalSeconds`。
参见 [输入状态指示器](/zh-CN/concepts/typing-indicators)。
参见[输入中指示器](/zh-CN/concepts/typing-indicators)。
<a id="agentsdefaultssandbox"></a>
### `agents.defaults.sandbox`
嵌入式智能体的可选沙箱隔离。完整指南参见 [沙箱隔离](/zh-CN/gateway/sandboxing)。
嵌入式智能体的可选沙箱隔离。完整指南参见[沙箱隔离](/zh-CN/gateway/sandboxing)。
```json5
{
@ -747,17 +749,17 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
**后端:**
- `docker`:本地 Docker 运行时(默认)
- `ssh`:通用的基于 SSH 远程运行时
- `ssh`:通用 SSH 远程运行时
- `openshell`OpenShell 运行时
当选择 `backend: "openshell"` 时,运行时特定设置会移动到
当选择 `backend: "openshell"` 时,运行时专属设置会移动到
`plugins.entries.openshell.config`
**SSH 后端配置:**
- `target``user@host[:port]` 形式的 SSH 目标
- `target`采用 `user@host[:port]` 形式的 SSH 目标
- `command`SSH 客户端命令(默认值:`ssh`
- `workspaceRoot`用于按作用域划分工作区的远程绝对根路径
- `workspaceRoot`供各作用域工作区使用的远程绝对根路径
- `identityFile` / `certificateFile` / `knownHostsFile`:传递给 OpenSSH 的现有本地文件
- `identityData` / `certificateData` / `knownHostsData`:内联内容或 SecretRefOpenClaw 会在运行时将其实体化为临时文件
- `strictHostKeyChecking` / `updateHostKeys`OpenSSH 主机密钥策略开关
@ -767,12 +769,12 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
- `identityData` 优先于 `identityFile`
- `certificateData` 优先于 `certificateFile`
- `knownHostsData` 优先于 `knownHostsFile`
- 基于 SecretRef 的 `*Data` 值会在沙箱会话启动前从当前活动的 secrets 运行时快照中解析
- 基于 SecretRef 的 `*Data` 值会在沙箱会话开始前,从活动的 secrets 运行时快照中解析
**SSH 后端行为:**
- 在创建或重建后仅为远程工作区执行一次初始化播种
- 然后保持远程 SSH 工作区为标准副本
- 在创建或重建后,会先对远程工作区执行一次初始化填充
- 然后保持远程 SSH 工作区为规范副本
- 通过 SSH 路由 `exec`、文件工具和媒体路径
- 不会自动将远程更改同步回主机
- 不支持沙箱浏览器容器
@ -802,10 +804,10 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
from: "openclaw",
remoteWorkspaceDir: "/sandbox",
remoteAgentWorkspaceDir: "/agent",
gateway: "lab", // 可选
gatewayEndpoint: "https://lab.example", // 可选
policy: "strict", // 可选的 OpenShell policy id
providers: ["openai"], // 可选
gateway: "lab", // optional
gatewayEndpoint: "https://lab.example", // optional
policy: "strict", // optional OpenShell policy id
providers: ["openai"], // optional
autoProviders: true,
timeoutSeconds: 120,
},
@ -817,30 +819,30 @@ Anthropic Claude 4.6 模型在未设置显式 thinking 级别时,默认使用
**OpenShell 模式:**
- `mirror`:在执行前从本地向远程播种,执行后再同步回本地;本地工作区保持为标准副本
- `remote`:在创建沙箱时仅向远程播种一次,之后保持远程工作区为标准副本
- `mirror`:在执行前将本地内容初始化到远程,执行后再同步回本地;本地工作区保持为规范副本
- `remote`:在创建沙箱时仅向远程初始化一次,此后保持远程工作区为规范副本
`remote` 模式下,在 OpenClaw 之外于主机本地所做的编辑,在播种步骤之后不会自动同步进沙箱
`remote` 模式下,在 OpenClaw 之外于主机本地所做的编辑,在初始化步骤之后不会自动同步到沙箱中
传输方式是通过 SSH 连接到 OpenShell 沙箱,但插件负责沙箱生命周期以及可选的镜像同步。
**`setupCommand`** 会在容器创建后运行一次(通过 `sh -lc`)。需要网络出口、可写根文件系统以及 root 用户。
**`setupCommand`** 会在容器创建后运行一次(通过 `sh -lc`)。需要网络出口、可写根文件系统以及 root 用户。
**容器默认使用 `network: "none"`** —— 如果智能体需要出站访问,请设置为 `"bridge"`(或自定义 bridge 网络)。
默认会阻止 `"host"`。默认也会阻止 `"container:<id>"`,除非你显式设置
`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true`(破玻璃紧急开关)。
**容器默认使用 `network: "none"`** —— 如果智能体需要出站访问,请设置为 `"bridge"`(或自定义桥接网络)。
`"host"` 会被阻止。默认也会阻止 `"container:<id>"`,除非你显式设置
`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true`(破开关)。
**入站附件** 会暂存到活动工作区中的 `media/inbound/*`
**入站附件** 会暂存到活动工作区中的 `media/inbound/*`
**`docker.binds`** 会挂载其他主机目录;全局和按智能体的 binds 会合并。
**`docker.binds`** 会挂载额外的主机目录;全局和按智能体的挂载会合并。
**沙箱浏览器**`sandbox.browser.enabled`):在容器中运行 Chromium + CDP。noVNC URL 会注入到系统提示中。无需`openclaw.json` 中启用 `browser.enabled`
noVNC 观察者访问默认使用 VNC 认证OpenClaw 会发出一个短时有效的 token URL而不是在共享 URL 中暴露密码)。
**沙箱浏览器**`sandbox.browser.enabled`):在容器中运行 Chromium + CDP。noVNC URL 会注入到系统提示中。不需要`openclaw.json` 中启用 `browser.enabled`
noVNC 观察者访问默认使用 VNC 认证OpenClaw 会发出短时有效的 token URL而不是在共享 URL 中暴露密码)。
- `allowHostControl: false`(默认)会阻止沙箱隔离会话以主机浏览器为目标。
- `network` 默认是 `openclaw-sandbox-browser`(专用 bridge 网络)。仅当你明确需要全局 bridge 连通性时,才设置为 `bridge`
- `cdpSourceRange` 可选地将容器边界上的 CDP 入站访问限制到某个 CIDR 范围内(例如 `172.21.0.1/32`)。
- `sandbox.browser.binds` 只会将额外的主机目录挂载到沙箱浏览器容器中。设置后(包括 `[]`),它会替换浏览器容器的 `docker.binds`
- 启动默认值定义在 `scripts/sandbox-browser-entrypoint.sh` 中,并针对容器宿主机做了调优:
- `allowHostControl: false`(默认)会阻止沙箱会话将主机浏览器作为目标。
- `network` 默认是 `openclaw-sandbox-browser`(专用桥接网络)。只有在你明确需要全局桥接连通性时,才设置为 `bridge`
- `cdpSourceRange` 可选择将容器边缘的 CDP 入站限制为某个 CIDR 范围(例如 `172.21.0.1/32`)。
- `sandbox.browser.binds` 将额外的主机目录挂载到沙箱浏览器容器中。设置后(包括 `[]`),它会替换浏览器容器的 `docker.binds`
- 启动默认值定义在 `scripts/sandbox-browser-entrypoint.sh` 中,并针对容器主机进行了调优:
- `--remote-debugging-address=127.0.0.1`
- `--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>`
- `--user-data-dir=${HOME}/.chrome`
@ -859,16 +861,16 @@ noVNC 观察者访问默认使用 VNC 认证OpenClaw 会发出一个短时有
- `--metrics-recording-only`
- `--disable-extensions`(默认启用)
- `--disable-3d-apis`、`--disable-software-rasterizer` 和 `--disable-gpu`
默认启用;如果 WebGL / 3D 使用场景需要它们,可通过
默认启用;如果 WebGL/3D 使用场景需要它们,可通过
`OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` 禁用这些标志。
- 如果你的工作流依赖扩展,可通过 `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0`
重新启用扩展
- `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` 会重新启用扩展,如果你的工作流
依赖于它们
- `--renderer-process-limit=2` 可通过
`OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>` 修改;设置为 `0` 使用 Chromium 的
`OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>` 修改;设置为 `0` 使用 Chromium 的
默认进程限制。
- 以及当启用 `noSandbox`附加 `--no-sandbox``--disable-setuid-sandbox`
- 默认值是容器镜像基线;如需更改容器默认值,请使用带有自定义
entrypoint 的自定义浏览器镜像。
- 以及当启用 `noSandbox` `--no-sandbox``--disable-setuid-sandbox`
- 这些默认值是容器镜像基线;如果要更改容器默认值,请使用带自定义
入口点的自定义浏览器镜像。
</Accordion>
@ -893,13 +895,13 @@ scripts/sandbox-browser-setup.sh # 可选浏览器镜像
name: "Main Agent",
workspace: "~/.openclaw/workspace",
agentDir: "~/.openclaw/agents/main/agent",
model: "anthropic/claude-opus-4-6", // { primary, fallbacks }
thinkingDefault: "high", // 按智能体覆盖 thinking 级别
reasoningDefault: "on", // 按智能体覆盖 reasoning 可见性
fastModeDefault: false, // 按智能体覆盖 fast mode
model: "anthropic/claude-opus-4-6", // or { primary, fallbacks }
thinkingDefault: "high", // per-agent thinking level override
reasoningDefault: "on", // per-agent reasoning visibility override
fastModeDefault: false, // per-agent fast mode override
embeddedHarness: { runtime: "auto", fallback: "pi" },
params: { cacheRetention: "none" }, // 按键覆盖匹配的 defaults.models params
skills: ["docs-search"], // 设置后会替换 agents.defaults.skills
params: { cacheRetention: "none" }, // overrides matching defaults.models params by key
skills: ["docs-search"], // replaces agents.defaults.skills when set
identity: {
name: "Samantha",
theme: "helpful sloth",
@ -931,26 +933,26 @@ scripts/sandbox-browser-setup.sh # 可选浏览器镜像
```
- `id`:稳定的智能体 id必填
- `default`:当设置了多个时,第一个生效(会记录警告)。如果一个都没设,列表中的第一个条目就是默认值。
- `model`:字符串形式覆盖 `primary`;对象形式 `{ primary, fallbacks }` 会同时覆盖两者(`[]` 会禁用全局 fallbacks。只覆盖 `primary` 的 cron 作业仍会继承默认 fallbacks,除非你设置 `fallbacks: []`
- `params`:按智能体的流参数,会合并到 `agents.defaults.models`选模型条目之上。用于智能体特定覆盖,例如 `cacheRetention`、`temperature` 或 `maxTokens`,而无需复制整个模型目录。
- `skills`:可选的按智能体 Skills 允许列表。如果省略,在设置了 `agents.defaults.skills` 时,该智能体会继承它;显式列表会替换默认值而不是合并,`[]` 表示无 Skills。
- `thinkingDefault`:可选的按智能体默认 thinking 级别(`off | minimal | low | medium | high | xhigh | adaptive | max`)。当未设置按消息或按会话覆盖时,会覆盖该智能体的 `agents.defaults.thinkingDefault`。所选 provider / model 配置决定了哪些值有效;对于 Google Gemini`adaptive` 会保留由提供商管理的动态 thinkingGemini 3 / 3.1 上省略 `thinkingLevel`Gemini 2.5 上使用 `thinkingBudget: -1`)。
- `reasoningDefault`:可选的按智能体默认 reasoning 可见性(`on | off | stream`)。当未设置按消息或按会话的 reasoning 覆盖时生效。
- `fastModeDefault`:可选的按智能体默认 fast mode`true | false`)。当未设置按消息或按会话的 fast mode 覆盖时生效。
- `embeddedHarness`:可选的按智能体底层 harness 策略覆盖。使用 `{ runtime: "codex" }` 可让某一个智能体仅使用 Codex而其他智能体仍保留默认的 `auto` 模式 PI 回退。
- `runtime`:可选的按智能体运行时描述符。当智能体应默认使用 ACP harness 会话时,使用 `type: "acp"`配合 `runtime.acp` 默认值(`agent`、`backend`、`mode`、`cwd`)。
- `default`:当设置了多个时,以第一个为准(会记录警告)。如果都未设置,则列表中的第一个条目为默认值。
- `model`:字符串形式覆盖 `primary`;对象形式 `{ primary, fallbacks }` 会同时覆盖两者(`[]` 会禁用全局故障切换)。只覆盖 `primary` 的 cron 作业仍会继承默认故障切换,除非你设置 `fallbacks: []`
- `params`:按智能体的流参数,会合并覆盖`agents.defaults.models` 中选模型条目之上。用于为特定智能体覆盖 `cacheRetention`、`temperature` 或 `maxTokens`,而无需复制整个模型目录。
- `skills`:可选的按智能体 Skills 允许列表。如果省略,则在已设置时该智能体会继承 `agents.defaults.skills`;显式列表会替换默认值而不是合并,`[]` 表示无 Skills。
- `thinkingDefault`:可选的按智能体默认思考级别(`off | minimal | low | medium | high | xhigh | adaptive | max`)。当未设置按消息或按会话覆盖时,会覆盖该智能体的 `agents.defaults.thinkingDefault`。所选提供商/模型配置决定哪些值有效;对于 Google Gemini`adaptive` 会保留由提供商控制的动态思考Gemini 3/3.1 上省略 `thinkingLevel`Gemini 2.5 上使用 `thinkingBudget: -1`)。
- `reasoningDefault`:可选的按智能体默认推理可见性(`on | off | stream`)。当未设置按消息或按会话的推理覆盖时生效。
- `fastModeDefault`:可选的按智能体快速模式默认值(`true | false`)。当未设置按消息或按会话的快速模式覆盖时生效。
- `embeddedHarness`:可选的按智能体底层 harness 策略覆盖。使用 `{ runtime: "codex" }` 可让某个智能体仅使用 Codex而其他智能体在 `auto` 模式下继续保留默认的 PI 回退。
- `runtime`:可选的按智能体运行时描述符。当智能体应默认使用 ACP harness 会话时,使用 `type: "acp"`设置 `runtime.acp` 默认值(`agent`、`backend`、`mode`、`cwd`)。
- `identity.avatar`:工作区相对路径、`http(s)` URL 或 `data:` URI。
- `identity` 会派生默认值:`ackReaction` 取自 `emoji``mentionPatterns` 取自 `name` / `emoji`
- `subagents.allowAgents`:用于 `sessions_spawn` 的智能体 id 允许列表(`["*"]` = 任意;默认:仅同智能体)。
- 沙箱继承保护:如果请求方会话已处于沙箱隔离中,`sessions_spawn` 会拒绝那些本应在非沙箱隔离环境中运行的目标
- `subagents.requireAgentId`为 true 时,会阻止省略 `agentId``sessions_spawn` 调用强制显式选择配置默认false
- `identity` 会派生默认值:`ackReaction` 来自 `emoji``mentionPatterns` 来自 `name`/`emoji`
- `subagents.allowAgents`:用于 `sessions_spawn` 的智能体 id 允许列表(`["*"]` = 任意;默认:仅同智能体)。
- 沙箱继承保护:如果请求方会话处于沙箱中,`sessions_spawn` 会拒绝会导致目标在非沙箱中运行的请求
- `subagents.requireAgentId`:为 true 时,会阻止省略 `agentId``sessions_spawn` 调用强制显式选择配置默认false
---
## 多智能体路由
在一个 Gateway 网关中运行多个彼此隔离的智能体。参见 [多智能体](/zh-CN/concepts/multi-agent)。
在一个 Gateway 网关中运行多个彼此隔离的智能体。参见[多智能体](/zh-CN/concepts/multi-agent)。
```json5
{
@ -969,29 +971,29 @@ scripts/sandbox-browser-setup.sh # 可选浏览器镜像
### 绑定匹配字段
- `type`(可选):普通路由使用 `route`(缺失时默认是 route持久 ACP 对话绑定使用 `acp`
- `type`(可选):普通路由使用 `route`(缺失时默认是 route持久 ACP 会话绑定使用 `acp`
- `match.channel`(必填)
- `match.accountId`(可选;`*` = 任意账号;省略 = 默认账号)
- `match.peer`(可选;`{ kind: direct|group|channel, id }`
- `match.guildId` / `match.teamId`(可选;渠道特定
- `acp`(可选;仅用于 `type: "acp"``{ mode, label, cwd, backend }`
- `match.guildId` / `match.teamId`(可选;特定于渠道)
- `acp`(可选;仅用于 `type: "acp"``{ mode, label, cwd, backend }`
**确定性匹配顺序:**
**确定性匹配顺序:**
1. `match.peer`
2. `match.guildId`
3. `match.teamId`
4. `match.accountId`(精确匹配,无 peer / guild / team
4. `match.accountId`(精确匹配,无 peer/guild/team
5. `match.accountId: "*"`(整个渠道范围)
6. 默认智能体
在每个层级内,第一条匹配的 `bindings` 条目胜出
在每一层内,第一个匹配的 `bindings` 条目获胜
对于 `type: "acp"` 条目OpenClaw 会按精确会话身份解析(`match.channel` + account + `match.peer.id`),不会使用上述 route 绑定层级顺序。
对于 `type: "acp"` 条目OpenClaw 会按精确会话标识(`match.channel` + 账号 + `match.peer.id`)解析,不使用上面的 route 绑定层级顺序。
### 按智能体划分的访问配置
### 按智能体的访问配置
<Accordion title="完全访问(无沙箱隔离">
<Accordion title="完全访问(无沙箱">
```json5
{
@ -1038,7 +1040,7 @@ scripts/sandbox-browser-setup.sh # 可选浏览器镜像
</Accordion>
<Accordion title="无文件系统访问(仅消息">
<Accordion title="无文件系统访问(仅消息传递">
```json5
{
@ -1084,7 +1086,7 @@ scripts/sandbox-browser-setup.sh # 可选浏览器镜像
</Accordion>
关于优先级详情,请参见 [多智能体沙箱隔离与工具](/zh-CN/tools/multi-agent-sandbox-tools)。
有关优先级细节,请参阅[多智能体沙箱隔离与工具](/zh-CN/tools/multi-agent-sandbox-tools)。
---
@ -1110,20 +1112,20 @@ scripts/sandbox-browser-setup.sh # 可选浏览器镜像
},
resetTriggers: ["/new", "/reset"],
store: "~/.openclaw/agents/{agentId}/sessions/sessions.json",
parentForkMaxTokens: 100000, // 高于此 token 数时跳过父线程分叉0 表示禁用)
parentForkMaxTokens: 100000, // 父线程 token 数超过此值时跳过父线程分叉0 表示禁用)
maintenance: {
mode: "warn", // warn | enforce
pruneAfter: "30d",
maxEntries: 500,
rotateBytes: "10mb",
resetArchiveRetention: "30d", // 时长或 false
maxDiskBytes: "500mb", // 可选硬预算
highWaterBytes: "400mb", // 可选清理目标
resetArchiveRetention: "30d", // duration or false
maxDiskBytes: "500mb", // optional hard budget
highWaterBytes: "400mb", // optional cleanup target
},
threadBindings: {
enabled: true,
idleHours: 24, // 默认按小时计算的无活动自动取消聚焦时间`0` 表示禁用)
maxAgeHours: 0, // 默认按小时计算的硬性最大年龄`0` 表示禁用)
idleHours: 24, // 默认按不活动时间自动取消聚焦的小时数`0` 表示禁用)
maxAgeHours: 0, // 默认硬性最长存续小时数`0` 表示禁用)
},
mainKey: "main", // 旧版字段(运行时始终使用 "main"
agentToAgent: { maxPingPongTurns: 5 },
@ -1137,35 +1139,35 @@ scripts/sandbox-browser-setup.sh # 可选浏览器镜像
<Accordion title="会话字段详情">
- **`scope`**:群聊上下文的基础会话分组策略。
- **`scope`**:群聊上下文的基础会话分组策略。
- `per-sender`(默认):在某个渠道上下文中,每个发送者都有独立会话。
- `global`:某个渠道上下文中的所有参与者共享一个会话(仅在确需要共享上下文时使用)。
- `global`:某个渠道上下文中的所有参与者共享一个会话(仅在确需要共享上下文时使用)。
- **`dmScope`**:私信的分组方式。
- `main`:所有私信共享主会话。
- `per-peer`:按发送者 id 跨渠道隔离。
- `per-channel-peer`:按渠道 + 发送者隔离(推荐用于多用户收件箱)。
- `per-account-channel-peer`:按账号 + 渠道 + 发送者隔离(推荐用于多账号)。
- **`identityLinks`**:将标准 id 映射到带提供商前缀的 peer以便跨渠道共享会话。
- **`reset`**:主重置策略。`daily` 会在本地时间 `atHour` 重置;`idle` 会在 `idleMinutes` 后重置。当两者都配置时,以先到期者为准
- **`resetByType`**:按类型覆盖(`direct`、`group`、`thread`)。旧版 `dm` 也可作为 `direct` 的别名使用
- **`identityLinks`**:将规范 id 映射到带提供商前缀的 peer用于跨渠道共享会话。
- **`reset`**:主重置策略。`daily` 会在本地时间 `atHour` 重置;`idle` 会在空闲 `idleMinutes` 后重置。如果两者都已配置,则先到期者生效
- **`resetByType`**:按类型覆盖`direct`、`group`、`thread`)。旧版 `dm` 仍接受,作为 `direct` 的别名
- **`parentForkMaxTokens`**:创建分叉线程会话时,父会话允许的最大 `totalTokens`(默认 `100000`)。
- 如果父会话的 `totalTokens` 高于此值OpenClaw 会启动一个新的线程会话,而不是继承父 transcript 历史。
- 设置为 `0` 可禁用此保护,并始终允许父会话分叉。
- 如果父会话的 `totalTokens` 高于此值OpenClaw 会启动一个全新的线程会话,而不是继承父转录历史。
- 设置为 `0` 可禁用此保护,并始终允许父会话分叉。
- **`mainKey`**:旧版字段。运行时始终对主私聊桶使用 `"main"`
- **`agentToAgent.maxPingPongTurns`**在智能体之间交互时,智能体间来回回复的最大轮次(整数,范围:`0``5`)。`0` 会禁用 ping-pong 链式交互
- **`sendPolicy`**:按 `channel`、`chatType``direct|group|channel`,旧版别名 `dm` 也可用)、`keyPrefix` 或 `rawKeyPrefix` 匹配。第一个 deny 规则优先。
- **`agentToAgent.maxPingPongTurns`**智能体之间来回对话时允许的最大回复轮数(整数,范围:`0``5`)。`0` 表示禁用来回链式对话
- **`sendPolicy`**:按 `channel`、`chatType``direct|group|channel`,旧版 `dm` 仍可作为别名)、`keyPrefix` 或 `rawKeyPrefix` 匹配。第一个 deny 规则优先。
- **`maintenance`**:会话存储清理 + 保留控制。
- `mode``warn` 只发出警告;`enforce` 会实际执行清理。
- `pruneAfter`过期条目的年龄截止时间(默认 `30d`)。
- `maxEntries``sessions.json` 中条目的最大数(默认 `500`)。
- `rotateBytes`:当 `sessions.json` 超过此大小时轮转(默认 `10mb`)。
- `resetArchiveRetention``*.reset.<timestamp>` transcript 归档的保留时长。默认继承 `pruneAfter`;设置`false` 可禁用。
- `maxDiskBytes`:可选的会话目录磁盘预算。在 `warn` 模式下会记录警告;在 `enforce` 模式下会优先移除最旧的制品 / 会话。
- `mode``warn` 仅发出警告;`enforce` 执行清理。
- `pruneAfter`陈旧条目的保留截止时间(默认 `30d`)。
- `maxEntries``sessions.json` 中的最大条目数(默认 `500`)。
- `rotateBytes`:当 `sessions.json` 超过该大小时进行轮转(默认 `10mb`)。
- `resetArchiveRetention``*.reset.<timestamp>` 转录归档的保留时长。默认跟随 `pruneAfter`;设`false` 可禁用。
- `maxDiskBytes`:可选的会话目录磁盘预算。在 `warn` 模式下会记录警告;在 `enforce` 模式下会优先删除最旧的产物/会话。
- `highWaterBytes`:预算清理后的可选目标值。默认是 `maxDiskBytes``80%`
- **`threadBindings`**:线程绑定会话功能的全局默认值。
- `enabled`:主默认开关(提供商可覆盖Discord 使用 `channels.discord.threadBindings.enabled`
- `idleHours`:默认按小时计算的无活动自动取消聚焦时间(`0` 表示禁用;提供商可以覆盖)
- `maxAgeHours`:默认按小时计算的硬性最大年龄(`0` 表示禁用;提供商可以覆盖)
- `enabled`主默认开关提供商可覆盖Discord 使用 `channels.discord.threadBindings.enabled`
- `idleHours`:默认按不活动时间自动取消聚焦的小时数(`0` 表示禁用;提供商可覆盖)
- `maxAgeHours`:默认硬性最长存续小时数(`0` 表示禁用;提供商可覆盖)
</Accordion>
@ -1203,36 +1205,36 @@ scripts/sandbox-browser-setup.sh # 可选浏览器镜像
### 响应前缀
按渠道 / 账号覆盖:`channels.<channel>.responsePrefix`、`channels.<channel>.accounts.<id>.responsePrefix`。
按渠道/账号覆盖:`channels.<channel>.responsePrefix`、`channels.<channel>.accounts.<id>.responsePrefix`。
解析顺序(越具体越优先):账号 → 渠道 → 全局。`""` 会禁用并停止级联。`"auto"` 会推导`[{identity.name}]`
解析顺序(越具体越优先):账号 → 渠道 → 全局。`""` 会禁用并停止继续回退。`"auto"` 会派生`[{identity.name}]`
**模板变量:**
| 变量 | 说明 | 示例 |
| ----------------- | ------------------ | --------------------------- |
| `{model}` | 短模型名 | `claude-opus-4-6` |
| `{modelFull}` | 完整模型标识符 | `anthropic/claude-opus-4-6` |
| `{provider}` | 提供商名称 | `anthropic` |
| `{thinkingLevel}` | 当前 thinking 级别 | `high`、`low`、`off` |
| `{identity.name}` | 智能体身份名称 | (与 `"auto"` 相同) |
| 变量 | 说明 | 示例 |
| ----------------- | -------------- | --------------------------- |
| `{model}` | 短模型名 | `claude-opus-4-6` |
| `{modelFull}` | 完整模型标识符 | `anthropic/claude-opus-4-6` |
| `{provider}` | 提供商名称 | `anthropic` |
| `{thinkingLevel}` | 当前思考级别 | `high`、`low`、`off` |
| `{identity.name}` | 智能体身份名称 | (与 `"auto"` 相同) |
变量不区分大小写。`{think}` 是 `{thinkingLevel}` 的别名。
### 确认反应
- 默认取当前活动智能体的 `identity.emoji`,否则为 `"👀"`。设置 `""` 可禁用。
- 默认使用活动智能体的 `identity.emoji`,否则为 `"👀"`。设置 `""` 可禁用。
- 按渠道覆盖:`channels.<channel>.ackReaction`、`channels.<channel>.accounts.<id>.ackReaction`。
- 解析顺序:账号 → 渠道 → `messages.ackReaction` → identity 回退值。
- 作用域:`group-mentions`(默认)、`group-all`、`direct`、`all`。
- `removeAckAfterReply`:在 Slack、Discord 和 Telegram 上会在回复后移除确认反应。
- `removeAckAfterReply`:在 Slack、Discord 和 Telegram 上回复后移除确认反应。
- `messages.statusReactions.enabled`:在 Slack、Discord 和 Telegram 上启用生命周期状态反应。
在 Slack 和 Discord 上,未设置时如果确认反应处于启用状态,则状态反应也保持启用。
在 Telegram 上,需显式将它设为 `true` 才会启用生命周期状态反应。
在 Slack 和 Discord 上,未设置时如果确认反应处于激活状态,则状态反应保持启用。
在 Telegram 上,需显式设为 `true` 才会启用生命周期状态反应。
### 入站防抖
来自同一发送者的快速纯文本消息批量合并为一个智能体轮次。媒体 / 附件会立即刷新。控制命令会绕过防抖。
同一发送者的快速连续纯文本消息批处理为单个智能体轮次。媒体/附件会立即触发发送。控制命令会绕过防抖。
### TTS文本转语音
@ -1275,18 +1277,18 @@ scripts/sandbox-browser-setup.sh # 可选浏览器镜像
}
```
- `auto` 控制默认自动 TTS 模式:`off`、`always`、`inbound` 或 `tagged`。`/tts on|off` 可覆盖本地偏好,`/tts status` 会显示生效状态。
- `summaryModel` 会覆盖用于自动摘要的 `agents.defaults.model.primary`
- `modelOverrides` 默认启用;`modelOverrides.allowProvider` 默认`false`(需显式开启)。
- API 密钥会回退到 `ELEVENLABS_API_KEY` / `XI_API_KEY``OPENAI_API_KEY`
- `openai.baseUrl` 会覆盖 OpenAI TTS 端点。解析顺序配置,然后是 `OPENAI_TTS_BASE_URL`,最后是 `https://api.openai.com/v1`
- 当 `openai.baseUrl` 指向非 OpenAI 端点时OpenClaw 会将其视为兼容 OpenAI 的 TTS 服务器,并放宽模型 / 语音校验。
- `auto` 控制默认自动 TTS 模式:`off`、`always`、`inbound` 或 `tagged`。`/tts on|off` 可覆盖本地偏好设置`/tts status` 会显示实际生效状态。
- `summaryModel` 会覆盖自动摘要所使用`agents.defaults.model.primary`
- `modelOverrides` 默认启用;`modelOverrides.allowProvider` 默认`false`(需主动启用)。
- API 密钥会回退到 `ELEVENLABS_API_KEY`/`XI_API_KEY` 和 `OPENAI_API_KEY`
- `openai.baseUrl` 会覆盖 OpenAI TTS 端点。解析顺序配置,然后是 `OPENAI_TTS_BASE_URL`,最后是 `https://api.openai.com/v1`
- 当 `openai.baseUrl` 指向非 OpenAI 端点时OpenClaw 会将其视为兼容 OpenAI 的 TTS 服务器,并放宽模型/语音校验。
---
##
##
Talk 模式的默认值macOS / iOS / Android
对话模式的默认设置macOS/iOS/Android
```json5
{
@ -1310,18 +1312,18 @@ Talk 模式的默认值macOS / iOS / Android
}
```
- `talk.provider` 在配置了多个 Talk 提供商时必须匹配 `talk.providers` 中的某个键。
- 旧版扁平 Talk 键(`talk.voiceId`、`talk.voiceAliases`、`talk.modelId`、`talk.outputFormat`、`talk.apiKey`)仅用于兼容,会自动迁移到 `talk.providers.<provider>`
- Voice id 会回退到 `ELEVENLABS_VOICE_ID``SAG_VOICE_ID`
- `talk.provider` 在配置了多个对话提供商时,必须匹配 `talk.providers` 中的某个键。
- 旧版扁平 Talk 键(`talk.voiceId`、`talk.voiceAliases`、`talk.modelId`、`talk.outputFormat`、`talk.apiKey`)仅用于兼容,会自动迁移到 `talk.providers.<provider>`
- 语音 id 会回退到 `ELEVENLABS_VOICE_ID``SAG_VOICE_ID`
- `providers.*.apiKey` 接受明文字符串或 SecretRef 对象。
- 仅当未配置 Talk API 密钥时,才会使`ELEVENLABS_API_KEY` 回退。
- `providers.*.voiceAliases` 允许 Talk 指令使用友好名称。
- `silenceTimeoutMs` 控制 Talk 模式在用户静音后等待多久再发送 transcript。未设置时会保留平台默认的停顿窗口`macOS 和 Android 上为 700 msiOS 上为 900 ms`)。
- 只有在未配置对话 API 密钥时,才会应`ELEVENLABS_API_KEY` 回退。
- `providers.*.voiceAliases` 允许对话指令使用友好名称。
- `silenceTimeoutMs` 控制对话模式在用户停止说话后等待多久才发送转录。未设置时,将保持平台默认停顿窗口(`macOS 和 Android 为 700 msiOS 为 900 ms`)。
---
## 相关内容
- [配置参考](/zh-CN/gateway/configuration-reference) — 所有其他配置键
- [配置](/zh-CN/gateway/configuration) — 常见任务和快速设置
- [配置参考](/zh-CN/gateway/configuration-reference) — 所有其他配置键
- [配置](/zh-CN/gateway/configuration) — 常见任务和快速设置
- [配置示例](/zh-CN/gateway/configuration-examples)

File diff suppressed because it is too large Load Diff

View File

@ -2,28 +2,25 @@
read_when:
- 你想使用内置的 Codex app-server harness
- 你需要 Codex harness 配置示例
- 你希望仅使用 Codex 的部署在失败时直接报错,而不是回退到 PI
summary: 通过内置的 Codex app-server harness 运行 OpenClaw 嵌入式智能体轮次
- 你希望仅使用 Codex 的部署在无法使用时直接失败,而不是回退到 PI
summary: 通过内置的 Codex app-server harness 运行 OpenClaw 嵌入式智能体回合
title: Codex harness
x-i18n:
generated_at: "2026-04-25T00:42:00Z"
generated_at: "2026-04-25T01:51:48Z"
model: gpt-5.4
provider: openai
source_hash: 366400f3d4018d6149e80b0b87b49ad7332c6164e8b3b70a0c4359068ee2685f
source_hash: bf0292de4a3e189bb96f02dfeaa42df6e4b1b24cf335cbb83f8821d33585cb5b
source_path: plugins/codex-harness.md
workflow: 15
---
内置的 `codex` 插件可让 OpenClaw 通过
Codex app-server 运行嵌入式智能体轮次,而不是使用内置的 PI harness。
内置的 `codex` 插件让 OpenClaw 可以通过 Codex app-server 而不是内置的 PI harness 来运行嵌入式智能体回合。
当你希望由 Codex 接管底层智能体会话时,请使用此方式:模型
发现、原生线程恢复、原生压缩,以及 app-server 执行。
OpenClaw 仍负责聊天渠道、会话文件、模型选择、工具、
审批、媒体投递,以及可见的转录镜像。
当你希望由 Codex 接管底层智能体会话时,请使用此功能:模型发现、原生线程恢复、原生压缩,以及 app-server 执行。OpenClaw 仍然负责聊天渠道、会话文件、模型选择、工具、审批、媒体传递,以及可见的转录镜像。
原生 Codex 轮次将 OpenClaw 插件钩子保留为公共兼容层。
这些是进程内的 OpenClaw 钩子,而不是 Codex `hooks.json` 命令钩子:
如果你正在了解整体结构,请先从 [Agent Runtimes](/zh-CN/concepts/agent-runtimes) 开始。简要来说:`openai/gpt-5.5` 是模型引用,`codex` 是运行时,而 Telegram、Discord、Slack 或其他渠道仍然是通信界面。
原生 Codex 回合会将 OpenClaw 插件钩子保留为公开兼容层。这些是进程内的 OpenClaw 钩子,不是 Codex `hooks.json` 命令钩子:
- `before_prompt_build`
- `before_compaction`, `after_compaction`
@ -32,59 +29,33 @@ OpenClaw 仍负责聊天渠道、会话文件、模型选择、工具、
- 用于镜像转录记录的 `before_message_write`
- `agent_end`
插件还可以注册与运行时无关的工具结果中间件,在 OpenClaw 执行工具之后、将结果返回给 Codex 之前,重写 OpenClaw 动态工具结果。这与公共
`tool_result_persist` 插件钩子是分开的;后者会转换由 OpenClaw 管理的转录
工具结果写入。
插件还可以注册与运行时无关的工具结果中间件,在 OpenClaw 执行工具之后、结果返回给 Codex 之前,重写 OpenClaw 动态工具结果。这与公开的 `tool_result_persist` 插件钩子不同,后者用于转换由 OpenClaw 管理的转录工具结果写入。
该 harness 默认关闭。新配置应将 OpenAI 模型引用
保持为规范形式 `openai/gpt-*`,并在需要原生 app-server 执行时显式强制指定
`embeddedHarness.runtime: "codex"``OPENCLAW_AGENT_RUNTIME=codex`。旧版 `codex/*` 模型引用仍会出于兼容性自动选择
该 harness但由运行时支持的旧版提供商前缀不会显示为普通模型 / 提供商选项。
该 harness 默认关闭。新配置应保持 OpenAI 模型引用使用规范形式 `openai/gpt-*`,并在需要原生 app-server 执行时显式强制设置 `embeddedHarness.runtime: "codex"``OPENCLAW_AGENT_RUNTIME=codex`。旧版 `codex/*` 模型引用仍会为了兼容性自动选择该 harness但由运行时支持的旧版 provider 前缀不会显示为常规模型 / 提供商选项。
## 选择正确的模型前缀
OpenAI 系列路由对前缀很敏感。当你希望通过 PI 使用
Codex OAuth 时,请使用 `openai-codex/*`;当你希望直接访问 OpenAI API
当你强制使用原生 Codex app-server harness 时,请使用 `openai/*`
OpenAI 系列路由对前缀很敏感。当你想通过 PI 使用 Codex OAuth 时,请使用 `openai-codex/*`;当你想直接使用 OpenAI API或你正在强制使用原生 Codex app-server harness 时,请使用 `openai/*`
| 模型引用 | 运行时路径 | 使用场景 |
| Model ref | Runtime path | Use when |
| ----------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------- |
| `openai/gpt-5.4` | 通过 OpenClaw / PI 流程的 OpenAI 提供商 | 你希望使用当前通过 `OPENAI_API_KEY` 访问的直接 OpenAI Platform API。 |
| `openai-codex/gpt-5.5` | 通过 OpenClaw / PI 的 OpenAI Codex OAuth | 你希望通过默认 PI 运行器使用 ChatGPT / Codex 订阅认证。 |
| `openai/gpt-5.5` + `embeddedHarness.runtime: "codex"` | Codex app-server harness | 你希望嵌入式智能体轮次使用原生 Codex app-server 执行。 |
| `openai/gpt-5.4` | 通过 OpenClaw / PI 管道的 OpenAI provider | 你希望使用带有 `OPENAI_API_KEY` 的当前直接 OpenAI Platform API 访问。 |
| `openai-codex/gpt-5.5` | 通过 OpenClaw / PI 的 OpenAI Codex OAuth | 你希望使用默认 PI 运行器的 ChatGPT / Codex 订阅认证。 |
| `openai/gpt-5.5` + `embeddedHarness.runtime: "codex"` | Codex app-server harness | 你希望为嵌入式智能体回合使用原生 Codex app-server 执行。 |
GPT-5.5 目前在 OpenClaw 中仅支持订阅 / OAuth。请使用
`openai-codex/gpt-5.5` 用于 PI OAuth或使用带 Codex
app-server harness 的 `openai/gpt-5.5`
一旦 OpenAI 在公共 API 上启用 GPT-5.5,即支持对 `openai/gpt-5.5` 的直接 API key 访问。
GPT-5.5 目前在 OpenClaw 中仅支持订阅 / OAuth。PI OAuth 请使用 `openai-codex/gpt-5.5`,或者将 `openai/gpt-5.5` 与 Codex app-server harness 搭配使用。一旦 OpenAI 在公共 API 上启用 GPT-5.5,就会支持通过 API key 直接访问 `openai/gpt-5.5`
旧版 `codex/gpt-*` 引用仍然作为兼容别名被接受。Doctor
兼容性迁移会将旧版主运行时引用重写为规范模型引用,并单独记录运行时策略,而仅作为回退的旧版引用则保持不变,因为运行时是为整个智能体容器配置的。
新的 PI Codex OAuth 配置应使用 `openai-codex/gpt-*`;新的原生
app-server harness 配置应使用 `openai/gpt-*`,并搭配
`embeddedHarness.runtime: "codex"`
旧版 `codex/gpt-*` 引用仍然作为兼容别名被接受。Doctor 兼容性迁移会将旧版主运行时引用重写为规范模型引用,并单独记录运行时策略;而仅作为回退使用的旧版引用会保持不变,因为运行时是为整个智能体容器配置的。新的 PI Codex OAuth 配置应使用 `openai-codex/gpt-*`;新的原生 app-server harness 配置应使用 `openai/gpt-*`,再加上 `embeddedHarness.runtime: "codex"`
`agents.defaults.imageModel` 也遵循相同的前缀划分。请使用
`openai-codex/gpt-*`,当图像理解应通过 OpenAI
Codex OAuth 提供商路径运行时。请使用 `codex/gpt-*`,当图像理解应通过
受限的 Codex app-server 轮次运行时。Codex app-server 模型必须
声明支持图像输入;纯文本 Codex 模型会在媒体轮次开始前失败。
`agents.defaults.imageModel` 也遵循相同的前缀划分。当图像理解应通过 OpenAI Codex OAuth provider 路径运行时,请使用 `openai-codex/gpt-*`。当图像理解应通过受限的 Codex app-server 回合运行时,请使用 `codex/gpt-*`。Codex app-server 模型必须声明支持图像输入;仅文本的 Codex 模型会在媒体回合开始前失败。
使用 `/status` 确认当前会话的实际 harness。如果选择结果出乎意料请为 `agents/harness` 子系统启用调试日志,并检查 Gateway 网关的结构化 `agent harness selected` 记录。它
包含选中的 harness id、选择原因、运行时 / 回退策略,以及在
`auto` 模式下每个插件候选项的支持结果。
使用 `/status` 确认当前会话的实际 harness。如果选择结果出乎意料请为 `agents/harness` 子系统启用调试日志,并检查 Gateway 网关中的结构化 `agent harness selected` 记录。它包含所选 harness id、选择原因、运行时 / 回退策略,以及在 `auto` 模式下每个插件候选项的支持结果。
Harness 选择不是实时会话控制。当嵌入式轮次运行时,
OpenClaw 会在该会话上记录所选 harness id并在同一会话 id 的后续轮次中继续使用它。若你希望未来的会话使用其他 harness请更改 `embeddedHarness` 配置或
`OPENCLAW_AGENT_RUNTIME`;在将现有会话从 PI 切换到 Codex 之前,请使用 `/new``/reset` 启动新会话。
这样可以避免通过两套不兼容的原生会话系统重放同一份转录。
Harness 选择不是实时会话控制。当嵌入式回合运行时OpenClaw 会在该会话上记录所选 harness id并在同一会话 id 的后续回合中继续使用它。当你希望未来会话改用其他 harness 时,请修改 `embeddedHarness` 配置或 `OPENCLAW_AGENT_RUNTIME`;在现有对话于 PI 和 Codex 之间切换之前,请使用 `/new``/reset` 启动一个全新会话。这样可以避免同一份转录被两个不兼容的原生会话系统重复回放。
在 harness 固定机制引入之前创建的旧会话,一旦具有转录历史,就会被视为固定到 PI。更改配置后如需让该会话切换到
Codex请使用 `/new``/reset`
在引入 harness 固定之前创建的旧会话,一旦已有转录历史,就会被视为固定到 PI。更改配置后请使用 `/new``/reset`,以便让该对话切换到 Codex。
`/status` 会显示实际的模型运行时。默认 PI harness 显示为
`Runtime: OpenClaw Pi Default`,而 Codex app-server harness 显示为
`Runtime: OpenAI Codex`
`/status` 会显示实际的模型运行时。默认的 PI harness 显示为 `Runtime: OpenClaw Pi Default`,而 Codex app-server harness 显示为 `Runtime: OpenAI Codex`
## 要求
@ -92,11 +63,9 @@ Codex请使用 `/new` 或 `/reset`。
- Codex app-server `0.118.0` 或更高版本。
- app-server 进程可用的 Codex 认证。
该插件会阻止较旧或无版本信息的 app-server 握手。
这样可以确保 OpenClaw 使用它已测试过的协议接口。
该插件会阻止旧版本或未标注版本的 app-server 握手。这可确保 OpenClaw 始终使用它已测试过的协议接口。
对于 live 和 Docker 冒烟测试,认证通常来自 `OPENAI_API_KEY`,外加可选的 Codex CLI 文件,例如 `~/.codex/auth.json`
`~/.codex/config.toml`。请使用与你本地 Codex app-server 相同的认证材料。
对于 live 和 Docker 冒烟测试,认证通常来自 `OPENAI_API_KEY`,以及可选的 Codex CLI 文件,例如 `~/.codex/auth.json``~/.codex/config.toml`。请使用与你本地 Codex app-server 相同的认证材料。
## 最小配置
@ -116,14 +85,13 @@ Codex请使用 `/new` 或 `/reset`。
model: "openai/gpt-5.5",
embeddedHarness: {
runtime: "codex",
fallback: "none",
},
},
},
}
```
如果你的配置使用 `plugins.allow`,也请将 `codex` 包含进去
如果你的配置使用 `plugins.allow`,也请将 `codex` 包含在其中
```json5
{
@ -134,18 +102,23 @@ Codex请使用 `/new` 或 `/reset`。
enabled: true,
},
},
},
}
}
```
`agents.defaults.model` 或某个智能体模型设置为
`codex/<model>` 的旧版配置仍会自动启用内置 `codex` 插件。新配置应
优先使用 `openai/<model>`,并显式添加上述 `embeddedHarness` 条目。
旧版配置如果将 `agents.defaults.model` 或某个智能体模型设为 `codex/<model>`,仍会自动启用内置的 `codex` 插件。新配置应优先使用 `openai/<model>`,再加上上面的显式 `embeddedHarness` 条目。
## 添加 Codex 而不替换其他模型
## 将 Codex 与其他模型一同使用
当你希望旧版 `codex/*` 引用选择 Codex而其他所有情况都使用
PI 时,请保留 `runtime: "auto"`。对于新配置,建议在应使用该 harness 的智能体上显式指定 `runtime: "codex"`
如果同一个智能体需要在 Codex 和非 Codex provider 模型之间自由切换,请不要全局设置 `runtime: "codex"`。强制运行时会作用于该智能体或会话的每一个嵌入式回合。如果你在该运行时被强制时选择了 Anthropic 模型OpenClaw 仍会尝试使用 Codex harness并以封闭失败的方式结束而不是悄悄通过 PI 路由该回合。
请改用以下其中一种方式:
- 为 Codex 使用一个专用智能体,并设置 `embeddedHarness.runtime: "codex"`
- 将默认智能体保持为 `runtime: "auto"`,并为正常的混合 provider 使用保留 PI 回退。
- 仅为兼容性使用旧版 `codex/*` 引用。新配置应优先使用 `openai/*`,再加上显式的 Codex 运行时策略。
例如,下面的配置会让默认智能体保持常规自动选择,并新增一个独立的 Codex 智能体:
```json5
{
@ -158,34 +131,39 @@ PI 时,请保留 `runtime: "auto"`。对于新配置,建议在应使用该 h
},
agents: {
defaults: {
model: {
primary: "openai/gpt-5.5",
fallbacks: ["openai/gpt-5.5", "anthropic/claude-opus-4-6"],
},
models: {
"openai/gpt-5.5": { alias: "gpt" },
"anthropic/claude-opus-4-6": { alias: "opus" },
},
embeddedHarness: {
runtime: "codex",
runtime: "auto",
fallback: "pi",
},
},
list: [
{
id: "main",
default: true,
model: "anthropic/claude-opus-4-6",
},
{
id: "codex",
name: "Codex",
model: "openai/gpt-5.5",
embeddedHarness: {
runtime: "codex",
},
},
],
},
}
```
在这种配置下:
使用这种形式时
- `/model gpt``/model openai/gpt-5.5` 会在此配置中使用 Codex app-server harness。
- `/model opus` 使用 Anthropic 提供商路径。
- 如果选择了非 Codex 模型PI 仍然是兼容性 harness。
- 默认的 `main` 智能体使用常规 provider 路径和 PI 兼容性回退
- `codex` 智能体使用 Codex app-server harness
- 如果 `codex` 智能体缺少 Codex 或不受支持,该回合会失败,而不是悄悄改用 PI
## 仅 Codex 部署
当你需要证明每个嵌入式智能体轮次
都使用 Codex 时,请强制使用 Codex harness。显式插件运行时默认不会回退到 PI因此
`fallback: "none"` 是可选的,但通常有助于作为文档说明:
当你需要证明每一个嵌入式智能体回合都使用 Codex 时,请强制使用 Codex harness。显式插件运行时默认不使用 PI 回退,因此 `fallback: "none"` 是可选的,但通常有助于作为文档说明:
```json5
{
@ -201,20 +179,17 @@ PI 时,请保留 `runtime: "auto"`。对于新配置,建议在应使用该 h
}
```
环境变量覆盖:
环境覆盖:
```bash
OPENCLAW_AGENT_RUNTIME=codex openclaw gateway run
```
强制使用 Codex 时,如果 Codex 插件被禁用、
app-server 版本过旧,或 app-server 无法启动OpenClaw 会尽早失败。仅当你明确希望在缺失 harness 选择时由 PI 处理时,才设置
`OPENCLAW_AGENT_HARNESS_FALLBACK=pi`
强制使用 Codex 后,如果 Codex 插件被禁用、app-server 版本过旧,或 app-server 无法启动OpenClaw 会尽早失败。仅当你明确希望 PI 处理缺失的 harness 选择时,才设置 `OPENCLAW_AGENT_HARNESS_FALLBACK=pi`
## 按智能体使用 Codex
## 按智能体配置 Codex
你可以让某个智能体仅使用 Codex而默认智能体保持正常的
自动选择:
你可以让某一个智能体仅使用 Codex而默认智能体仍保持正常自动选择
```json5
{
@ -245,21 +220,17 @@ app-server 版本过旧,或 app-server 无法启动OpenClaw 会尽早失败
}
```
使用普通会话命令即可切换智能体和模型。`/new` 会创建一个新的
OpenClaw 会话,而 Codex harness 会根据需要创建或恢复其 sidecar app-server
线程。`/reset` 会清除该线程的 OpenClaw 会话绑定,
并让下一轮再次根据当前配置解析 harness。
使用常规会话命令来切换智能体和模型。`/new` 会创建一个新的 OpenClaw 会话,而 Codex harness 会按需创建或恢复其 sidecar app-server 线程。`/reset` 会清除该线程的 OpenClaw 会话绑定,并让下一回合再次根据当前配置解析 harness。
## 模型发现
默认情况下Codex 插件会向 app-server 请求可用模型。如果
发现失败或超时,它会使用内置的回退目录,包括:
默认情况下,`codex` 插件会向 app-server 查询可用模型。如果发现失败或超时,它会使用内置的回退目录,适用于:
- GPT-5.5
- GPT-5.4 mini
- GPT-5.2
你可以通过 `plugins.entries.codex.config.discovery` 调整发现设置:
你可以`plugins.entries.codex.config.discovery` 下调整发现配置:
```json5
{
@ -279,8 +250,7 @@ OpenClaw 会话,而 Codex harness 会根据需要创建或恢复其 sidecar ap
}
```
当你希望启动时避免探测 Codex 并固定使用
回退目录时,请禁用发现:
当你希望启动时避免探测 Codex并固定使用回退目录时请禁用发现
```json5
{
@ -301,19 +271,15 @@ OpenClaw 会话,而 Codex harness 会根据需要创建或恢复其 sidecar ap
## App-server 连接与策略
默认情况下,插件会通过以下命令在本地启动 Codex
默认情况下,插件会在本地通过以下命令启动 Codex
```bash
codex app-server --listen stdio://
```
默认情况下OpenClaw 会以 YOLO 模式启动本地 Codex harness 会话:
`approvalPolicy: "never"`、`approvalsReviewer: "user"`,以及
`sandbox: "danger-full-access"`。这是受信任的本地操作员姿态,用于
自主心跳Codex 可以使用 shell 和网络工具,而无需停下来等待无人应答的原生审批提示。
默认情况下OpenClaw 会以 YOLO 模式启动本地 Codex harness 会话:`approvalPolicy: "never"`、`approvalsReviewer: "user"`,以及 `sandbox: "danger-full-access"`。这是用于自主心跳的受信任本地操作员姿态Codex 可以使用 shell 和网络工具,而不会停在无人可回答的原生审批提示上。
若要选择启用由 Codex guardian 审核的审批,请设置 `appServer.mode:
"guardian"`
若要选择启用由 Codex Guardian 审核的审批,请设置 `appServer.mode: "guardian"`
```json5
{
@ -333,9 +299,9 @@ codex app-server --listen stdio://
}
```
Guardian 是原生 Codex 审批审核者。当 Codex 请求离开沙箱、在工作区外写入或添加如网络访问之类的权限时Codex 会将该审批请求路由给审核子智能体,而不是弹出人工提示。审核者会应用 Codex 的风险框架,并批准或拒绝该具体请求。如果你希望比 YOLO 模式有更多防护措施,但仍需要无人值守的智能体持续推进,请使用 Guardian。
Guardian 是原生的 Codex 审批审查器。当 Codex 请求离开沙箱、在工作区外写入,或添加如网络访问之类的权限时Codex 会将该审批请求路由给一个审查子智能体,而不是向人工发出提示。该审查器会应用 Codex 的风险框架,并批准或拒绝该特定请求。如果你希望比 YOLO 模式有更多防护措施,同时仍需要无人值守的智能体持续推进,请使用 Guardian。
`guardian` 预设会展开为 `approvalPolicy: "on-request"`、`approvalsReviewer: "guardian_subagent"` 和 `sandbox: "workspace-write"`。单独的策略字段仍会覆盖 `mode`,因此高级部署可以将该预设与显式选混合使用。
`guardian` 预设会展开为 `approvalPolicy: "on-request"`、`approvalsReviewer: "guardian_subagent"` 和 `sandbox: "workspace-write"`。单独的策略字段仍会覆盖 `mode`,因此高级部署可以将该预设与显式选混合使用。
对于已经在运行的 app-server请使用 WebSocket 传输:
@ -361,22 +327,22 @@ Guardian 是原生 Codex 审批审核者。当 Codex 请求离开沙箱、在工
支持的 `appServer` 字段:
| 字段 | 默认值 | 含义 |
| ------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `transport` | `"stdio"` | `"stdio"` 会启动 Codex`"websocket"` 会连接到 `url`。 |
| `command` | `"codex"` | `stdio` 传输使用的可执行文件。 |
| `args` | `["app-server", "--listen", "stdio://"]` | `stdio` 传输的参数。 |
| `url` | unset | WebSocket app-server URL。 |
| `authToken` | unset | WebSocket 传输的 Bearer token。 |
| `headers` | `{}` | 额外的 WebSocket 标头。 |
| `requestTimeoutMs` | `60000` | app-server 控制平面调用的超时时间。 |
| `mode` | `"yolo"` | 用于 YOLO 或 guardian 审核执行的预设。 |
| `approvalPolicy` | `"never"` | 发送到线程启动 / 恢复 / 轮次的原生 Codex 审批策略。 |
| `sandbox` | `"danger-full-access"` | 发送到线程启动 / 恢复的原生 Codex 沙箱模式。 |
| `approvalsReviewer` | `"user"` | 使用 `"guardian_subagent"` 让 Codex Guardian 审核提示。 |
| `serviceTier` | unset | 可选的 Codex app-server 服务层级:`"fast"`、`"flex"` 或 `null`。无效的旧值会被忽略。 |
| Field | Default | Meaning |
| ------------------- | ---------------------------------------- | ----------------------------------------------------------------------- |
| `transport` | `"stdio"` | `"stdio"` 会启动 Codex`"websocket"` 会连接到 `url` |
| `command` | `"codex"` | 用于 stdio 传输的可执行文件。 |
| `args` | `["app-server", "--listen", "stdio://"]` | 用于 stdio 传输的参数。 |
| `url` | unset | WebSocket app-server URL。 |
| `authToken` | unset | 用于 WebSocket 传输的 Bearer token。 |
| `headers` | `{}` | 额外的 WebSocket 请求头。 |
| `requestTimeoutMs` | `60000` | app-server 控制平面调用的超时时间。 |
| `mode` | `"yolo"` | 用于 YOLO 或 guardian 审核执行的预设。 |
| `approvalPolicy` | `"never"` | 发送到线程启动 / 恢复 / 回合的原生 Codex 审批策略。 |
| `sandbox` | `"danger-full-access"` | 发送到线程启动 / 恢复的原生 Codex 沙箱模式。 |
| `approvalsReviewer` | `"user"` | 使用 `"guardian_subagent"` 让 Codex Guardian 审核提示。 |
| `serviceTier` | unset | 可选的 Codex app-server 服务层级:`"fast"`、`"flex"` 或 `null`。无效的旧值会被忽略。 |
旧的环境变量在匹配的配置字段未设置时,仍可作为本地测试的回退:
早的环境变量在对应配置字段未设置时,仍可作为本地测试的回退方式使用
- `OPENCLAW_CODEX_APP_SERVER_BIN`
- `OPENCLAW_CODEX_APP_SERVER_ARGS`
@ -384,14 +350,11 @@ Guardian 是原生 Codex 审批审核者。当 Codex 请求离开沙箱、在工
- `OPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICY`
- `OPENCLAW_CODEX_APP_SERVER_SANDBOX`
`OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1` 已移除。请改用
`plugins.entries.codex.config.appServer.mode: "guardian"`,或
`OPENCLAW_CODEX_APP_SERVER_MODE=guardian` 进行一次性本地测试。对于可重复部署,
更推荐使用配置,因为这样可以将插件行为与 Codex harness 其余设置保存在同一个经过审查的文件中。
`OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1` 已移除。请改用 `plugins.entries.codex.config.appServer.mode: "guardian"`,或者在一次性本地测试中使用 `OPENCLAW_CODEX_APP_SERVER_MODE=guardian`。对于可重复的部署,优先使用配置,因为这样可以将插件行为与 Codex harness 其余设置一起保存在同一个经过审查的文件中。
## 常见配方
使用默认 `stdio` 传输的本地 Codex
使用默认 stdio 传输的本地 Codex
```json5
{
@ -405,12 +368,17 @@ Guardian 是原生 Codex 审批审核者。当 Codex 请求离开沙箱、在工
}
```
仅 Codex harness 验证,禁用 PI 回退
仅 Codex harness 验证:
```json5
{
embeddedHarness: {
fallback: "none",
agents: {
defaults: {
model: "openai/gpt-5.5",
embeddedHarness: {
runtime: "codex",
},
},
},
plugins: {
entries: {
@ -444,7 +412,7 @@ Guardian 是原生 Codex 审批审核者。当 Codex 请求离开沙箱、在工
}
```
带显式头的远程 app-server
带显式请求头的远程 app-server
```json5
{
@ -467,118 +435,110 @@ Guardian 是原生 Codex 审批审核者。当 Codex 请求离开沙箱、在工
}
```
模型切换仍由 OpenClaw 控制。当 OpenClaw 会话附加到现有 Codex 线程时,下一轮会再次将当前选定的
OpenAI 模型、提供商、审批策略、沙箱和服务层级发送给
app-server。从 `openai/gpt-5.5` 切换到 `openai/gpt-5.2` 时会保留
线程绑定,但会要求 Codex 使用新选定的模型继续。
模型切换仍由 OpenClaw 控制。当一个 OpenClaw 会话附加到现有的 Codex 线程时,下一回合会再次将当前所选的 OpenAI 模型、provider、审批策略、沙箱和服务层级发送给 app-server。从 `openai/gpt-5.5` 切换到 `openai/gpt-5.2` 会保留线程绑定,但会要求 Codex 继续使用新选择的模型。
## Codex 命令
内置插件将 `/codex` 注册为已授权斜杠命令。它是通用的,可在任何支持 OpenClaw 文本命令的渠道上运行
内置插件将 `/codex` 注册为一个已授权斜杠命令。它是通用的,可在任何支持 OpenClaw 文本命令的渠道中使用
常见形式:
- `/codex status` 显示实时 app-server 连接状态、模型、账户、速率限制、MCP 服务器和 Skills。
- `/codex status` 显示实时 app-server 连接、模型、账户、速率限制、MCP 服务器和 Skills。
- `/codex models` 列出实时 Codex app-server 模型。
- `/codex threads [filter]` 列出最近的 Codex 线程。
- `/codex resume <thread-id>` 将当前 OpenClaw 会话附加到现有 Codex 线程。
- `/codex compact` 请求 Codex app-server 压缩已附加线程。
- `/codex review` 为已附加线程启动 Codex 原生审查。
- `/codex resume <thread-id>` 将当前 OpenClaw 会话附加到现有 Codex 线程。
- `/codex compact` 请求 Codex app-server 压缩已附加线程。
- `/codex review` 启动已附加线程的 Codex 原生审查。
- `/codex account` 显示账户和速率限制状态。
- `/codex mcp` 列出 Codex app-server MCP 服务器状态。
- `/codex skills` 列出 Codex app-server Skills。
`/codex resume` 会写入与 harness 正常轮次
使用的同一个 sidecar 绑定文件。在下一条消息时OpenClaw 会恢复该 Codex 线程,将当前选定的 OpenClaw 模型传入 app-server并保持扩展历史记录
处于启用状态。
`/codex resume` 会写入与 harness 正常回合所使用的相同 sidecar 绑定文件。下一条消息到来时OpenClaw 会恢复该 Codex 线程,将当前所选的 OpenClaw 模型传入 app-server并保持扩展历史已启用。
该命令界面需要 Codex app-server `0.118.0` 或更高版本。如果未来或自定义 app-server 未暴露某个 JSON-RPC 方法,
各个控制方法会报告为 `unsupported by this Codex app-server`
该命令界面要求 Codex app-server `0.118.0` 或更高版本。如果未来版本或自定义 app-server 未暴露某个 JSON-RPC 方法,则单个控制方法会显示为 `unsupported by this Codex app-server`
## 钩子边界
Codex harness 有三层钩子:
| 层级 | 所有者 | 用途 |
| ------------------------------------- | ------------------------ | ------------------------------------------------------------------- |
| OpenClaw 插件钩子 | OpenClaw | 在 PI 和 Codex harness 之间提供产品 / 插件兼容性。 |
| Codex app-server 扩展中间件 | OpenClaw 内置插件 | 围绕 OpenClaw 动态工具的每轮适配器行为。 |
| Codex 原生钩子 | Codex | 来自 Codex 配置的底层 Codex 生命周期和原生工具策略。 |
| Layer | Owner | Purpose |
| ------------------------------------- | ------------------------ | ------------------------------------------------------------- |
| OpenClaw plugin hooks | OpenClaw | 在 PI 和 Codex harness 之间提供产品 / 插件兼容性。 |
| Codex app-server extension middleware | OpenClaw bundled plugins | 围绕 OpenClaw 动态工具的每回合适配器行为。 |
| Codex native hooks | Codex | 来自 Codex 配置的底层 Codex 生命周期和原生工具策略。 |
OpenClaw 不使用项目级或全局 Codex `hooks.json` 文件来路由
OpenClaw 插件行为。Codex 原生钩子适用于由 Codex 管理的
操作,例如 shell 策略、原生工具结果审查、停止处理,以及
原生压缩 / 模型生命周期,但它们不是 OpenClaw 插件 API。
OpenClaw 不使用项目级或全局 Codex `hooks.json` 文件来路由 OpenClaw 插件行为。Codex 原生钩子对于由 Codex 管理的操作很有用,例如 shell 策略、原生工具结果审查、停止处理以及原生压缩 / 模型生命周期,但它们不是 OpenClaw 插件 API。
对于 OpenClaw 动态工具,在 Codex 请求调用之后OpenClaw 才执行该工具,因此 OpenClaw 会在
harness 适配器中触发其拥有的插件和中间件行为。对于 Codex 原生工具Codex 持有规范工具记录。
OpenClaw 可以镜像选定事件,但除非 Codex 通过 app-server 或原生钩子
回调暴露该操作,否则它无法重写原生 Codex
线程。
对于 OpenClaw 动态工具Codex 发起调用请求后OpenClaw 会执行该工具,因此 OpenClaw 会在 harness 适配器中触发它所管理的插件和中间件行为。对于 Codex 原生工具Codex 拥有规范的工具记录。OpenClaw 可以镜像部分事件,但除非 Codex 通过 app-server 或原生钩子回调暴露该操作,否则它无法重写原生 Codex 线程。
当较新的 Codex app-server 构建暴露原生压缩和模型生命周期
钩子事件时OpenClaw 应对该协议支持进行版本门控,并在语义真实的前提下将这些事件映射到现有 OpenClaw 钩子契约中。
在此之前OpenClaw 的 `before_compaction`、`after_compaction`、`llm_input` 和
`llm_output` 事件属于适配器层观察结果,而不是对 Codex 内部请求或压缩负载的逐字节捕获。
当更新的 Codex app-server 版本暴露出原生压缩和模型生命周期钩子事件时OpenClaw 应对该协议支持进行版本门控,并在语义真实的前提下,将这些事件映射到现有 OpenClaw 钩子契约中。在此之前OpenClaw 的 `before_compaction`、`after_compaction`、`llm_input` 和 `llm_output` 事件都属于适配器级观察,而不是对 Codex 内部请求或压缩负载的逐字节捕获。
Codex 原生 `hook/started``hook/completed` app-server 通知会被投射为 `codex_app_server.hook` 智能体事件,用于轨迹和调试。
它们不会调用 OpenClaw 插件钩子。
Codex 原生 `hook/started``hook/completed` app-server 通知会被投影为 `codex_app_server.hook` 智能体事件,用于轨迹记录和调试。它们不会调用 OpenClaw 插件钩子。
## 工具、媒体与压缩
## V1 支持契约
Codex 模式并不是“底层只是换了模型调用的 PI”。Codex 接管了更多原生模型循环,而 OpenClaw 会围绕这一边界适配其插件和会话界面。
Codex runtime v1 中支持的内容:
| Surface | Support | Why |
| --------------------------------------- | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| 通过 Codex 的 OpenAI 模型循环 | 支持 | Codex app-server 负责 OpenAI 回合、原生线程恢复和原生工具续接。 |
| OpenClaw 渠道路由与传递 | 支持 | Telegram、Discord、Slack、WhatsApp、iMessage 以及其他渠道仍位于模型运行时之外。 |
| OpenClaw 动态工具 | 支持 | Codex 会请求 OpenClaw 执行这些工具,因此 OpenClaw 仍在执行路径中。 |
| 提示词和上下文插件 | 支持 | OpenClaw 会在启动或恢复线程之前构建提示词覆盖层,并将上下文投射到 Codex 回合中。 |
| 上下文引擎生命周期 | 支持 | 组装、摄取或回合后维护,以及上下文引擎压缩协调,都会在 Codex 回合中运行。 |
| 动态工具钩子 | 支持 | `before_tool_call`、`after_tool_call` 和工具结果中间件会围绕由 OpenClaw 管理的动态工具运行。 |
| 生命周期钩子 | 以适配器观察形式支持 | `llm_input`、`llm_output`、`agent_end`、`before_compaction` 和 `after_compaction` 会以真实的 Codex 模式负载触发。 |
| 原生 shell 和 patch 的阻止或观察 | 通过原生钩子转发支持 | 对受支持的 Codex 原生工具,会转发 Codex `PreToolUse``PostToolUse`。支持阻止,不支持参数重写。 |
| 原生权限策略 | 通过原生钩子转发支持 | 当运行时暴露该能力时Codex `PermissionRequest` 可以通过 OpenClaw 策略进行路由。 |
| App-server 轨迹捕获 | 支持 | OpenClaw 会记录它发送给 app-server 的请求,以及它收到的 app-server 通知。 |
Codex runtime v1 中不支持的内容:
| Surface | V1 Boundary | Future Path |
| --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| 原生工具参数修改 | Codex 原生预工具钩子可以阻止执行,但 OpenClaw 不会重写 Codex 原生工具参数。 | 需要 Codex 钩子 / schema 支持替换后的工具输入。 |
| 可编辑的 Codex 原生转录历史 | Codex 拥有规范的原生线程历史。OpenClaw 拥有镜像,并可投射未来上下文,但不应修改不受支持的内部实现。 | 如果需要原生线程手术操作,应添加显式的 Codex app-server API。 |
| 用于 Codex 原生工具记录的 `tool_result_persist` | 该钩子转换的是由 OpenClaw 管理的转录写入,而不是 Codex 原生工具记录。 | 可以镜像转换后的记录,但规范重写需要 Codex 支持。 |
| 丰富的原生压缩元数据 | OpenClaw 可观察到压缩开始和完成,但不会收到稳定的保留 / 丢弃列表、token 增量或摘要负载。 | 需要更丰富的 Codex 压缩事件。 |
| 压缩干预 | 当前 OpenClaw 的压缩钩子在 Codex 模式下属于通知级别。 | 如果插件需要否决或重写原生压缩,应添加 Codex 压缩前 / 后钩子。 |
| 停止或最终答案门控 | Codex 具有原生停止钩子,但 OpenClaw 未将最终答案门控公开为 v1 插件契约。 | 未来可提供带循环和超时保护的可选启用原语。 |
| 原生 MCP 钩子一致性 | Codex 拥有 MCP 执行,而完整的前 / 后钩子负载一致性取决于 Codex MCP 处理器支持。 | 添加 Codex MCP 钩子负载,然后通过相同的原生钩子路径转发它们。 |
| 逐字节模型 API 请求捕获 | OpenClaw 可以捕获 app-server 请求和通知,但最终的 OpenAI API 请求由 Codex 核心在内部构建。 | 需要 Codex 模型请求跟踪事件或调试 API。 |
## 工具、媒体和压缩
Codex harness 只改变底层嵌入式智能体执行器。
OpenClaw 仍会构建工具列表,并从 harness 接收动态工具结果。文本、图像、视频、音乐、TTS、审批和消息工具输出
仍通过常规 OpenClaw 投递路径处理。
OpenClaw 仍然构建工具列表,并从 harness 接收动态工具结果。文本、图像、视频、音乐、TTS、审批以及消息工具输出都会继续通过正常的 OpenClaw 传递路径处理。
当 Codex 将 `_meta.codex_approval_kind` 标记为
`"mcp_tool_call"`Codex MCP 工具审批征询会通过 OpenClaw 的插件
审批流进行路由。Codex `request_user_input` 提示会发回原始聊天,
而下一条排队的后续消息会响应该原生
服务器请求,而不是被作为额外上下文引导。其他 MCP 征询请求仍然会默认拒绝。
当 Codex 将 `_meta.codex_approval_kind` 标记为 `"mcp_tool_call"`Codex MCP 工具审批征求会通过 OpenClaw 的插件审批流程进行路由。Codex `request_user_input` 提示会被发送回发起的聊天,而下一个排队的后续消息会用于回答该原生服务器请求,而不是作为额外上下文被引导。其他 MCP 征求请求仍然会以封闭失败的方式处理。
当选中的模型使用 Codex harness 时,原生线程压缩会委托给 Codex app-server。OpenClaw 会保留一个转录镜像,用于渠道历史、搜索、`/new`、`/reset` 以及未来的模型或 harness 切换。该镜像
包含用户提示、最终助手文本,以及在 app-server 发出时的轻量级 Codex
推理或计划记录。目前OpenClaw 仅记录原生压缩开始和完成信号。它尚未公开
人类可读的压缩摘要,也未提供 Codex 在压缩后保留了哪些条目的可审计列表。
当所选模型使用 Codex harness 时,原生线程压缩会委托给 Codex app-server。OpenClaw 会保留一个转录镜像,用于渠道历史、搜索、`/new`、`/reset` 以及未来的模型或 harness 切换。该镜像包括用户提示、最终助手文本,以及当 app-server 发出这些记录时的轻量级 Codex 推理或计划记录。目前OpenClaw 仅记录原生压缩开始和完成信号。它尚未公开人类可读的压缩摘要,也未提供 Codex 在压缩后保留了哪些条目的可审计列表。
由于 Codex 持有规范原生线程,`tool_result_persist` 当前不会
重写 Codex 原生工具结果记录。它仅在
OpenClaw 写入由 OpenClaw 管理的会话转录工具结果时生效。
由于 Codex 拥有规范的原生线程,`tool_result_persist` 当前不会重写 Codex 原生工具结果记录。它仅在 OpenClaw 写入由 OpenClaw 管理的会话转录工具结果时生效。
媒体生成不需要 PI。图像、视频、音乐、PDF、TTS 和媒体
理解仍继续使用匹配的提供商 / 模型设置,例如
`agents.defaults.imageGenerationModel`、`videoGenerationModel`、`pdfModel` 和
`messages.tts`
媒体生成不需要 PI。图像、视频、音乐、PDF、TTS 和媒体理解会继续使用相应的 provider / 模型设置,例如 `agents.defaults.imageGenerationModel`、`videoGenerationModel`、`pdfModel` 和 `messages.tts`
## 故障排除
**`/model` 中没有出现 Codex** 启用 `plugins.entries.codex.enabled`
选择带有 `embeddedHarness.runtime: "codex"``openai/gpt-*` 模型(或
旧版 `codex/*` 引用),并检查 `plugins.allow` 是否排除了 `codex`
**`/model` 中未出现 Codex** 启用 `plugins.entries.codex.enabled`,选择带有 `embeddedHarness.runtime: "codex"``openai/gpt-*` 模型(或旧版 `codex/*` 引用),并检查 `plugins.allow` 是否排除了 `codex`
**OpenClaw 使用了 PI 而不是 Codex** `runtime: "auto"` 在没有 Codex harness 认领该运行时,
仍可能使用 PI 作为兼容性后端。测试时请设置
`embeddedHarness.runtime: "codex"` 以强制选择 Codex。现在强制使用 Codex 运行时会直接失败,而不是回退到 PI除非你
显式设置 `embeddedHarness.fallback: "pi"`。一旦选中了 Codex app-server
其失败会直接暴露出来,而不会有额外的回退配置。
**OpenClaw 使用的是 PI 而不是 Codex** 当没有 Codex harness 声明该运行时,`runtime: "auto"` 仍可能使用 PI 作为兼容性后端。测试时请设置 `embeddedHarness.runtime: "codex"` 以强制选择 Codex。强制的 Codex 运行时现在会直接失败,而不是回退到 PI除非你显式设置 `embeddedHarness.fallback: "pi"`。一旦选择了 Codex app-server其失败会直接暴露出来而不会有额外的回退配置。
**app-server 被拒绝:** 升级 Codex使 app-server 握手
报告版本 `0.118.0` 或更高。
**app-server 被拒绝:** 升级 Codex使 app-server 握手报告版本 `0.118.0` 或更高。
**模型发现很慢:** 降低 `plugins.entries.codex.config.discovery.timeoutMs`
或禁用发现。
**模型发现过慢:** 降低 `plugins.entries.codex.config.discovery.timeoutMs` 或禁用发现。
**WebSocket 传输立即失败:** 检查 `appServer.url`、`authToken`
以及远程 app-server 是否使用相同的 Codex app-server 协议版本。
**WebSocket 传输立即失败:** 检查 `appServer.url`、`authToken`,并确认远程 app-server 使用相同版本的 Codex app-server 协议。
**非 Codex 模型使用了 PI** 这是预期行为,除非你强制设置了
`embeddedHarness.runtime: "codex"`(或选择了旧版 `codex/*` 引用)。普通
`openai/gpt-*` 和其他提供商引用会保留在它们正常的提供商路径上。
**非 Codex 模型使用了 PI** 这是预期行为,除非你为该智能体强制设置了 `embeddedHarness.runtime: "codex"`,或选择了旧版 `codex/*` 引用。普通的 `openai/gpt-*` 和其他 provider 引用在 `auto` 模式下会保持其正常的 provider 路径。如果你强制设置 `runtime: "codex"`,则该智能体的每一个嵌入式回合都必须是受 Codex 支持的 OpenAI 模型。
## 相关内容
- [智能体 Harness 插件](/zh-CN/plugins/sdk-agent-harness)
- [模型提供商](/zh-CN/concepts/model-providers)
- [配置参考](/zh-CN/gateway/configuration-reference)
- [Agent harness plugins](/zh-CN/plugins/sdk-agent-harness)
- [Agent Runtimes](/zh-CN/concepts/agent-runtimes)
- [Model Providers](/zh-CN/concepts/model-providers)
- [Configuration Reference](/zh-CN/gateway/configuration-reference)
- [测试](/zh-CN/help/testing-live#live-codex-app-server-harness-smoke)

View File

@ -1,51 +1,58 @@
---
read_when:
- 你正在更改内嵌智能体运行时或 Harness 注册表
- 你正在从内置或受信任的插件注册一个智能体 Harness
- 你正在更改嵌入式智能体运行时或 harness 注册表
- 你正在从内置或受信任插件注册一个智能体 harness
- 你需要了解 Codex 插件与模型提供商之间的关系
sidebarTitle: Agent Harness
summary: 供替换底层内嵌智能体执行器的插件使用的实验性 SDK 接口
title: 智能体 Harness 插件
summary: 面向替换底层嵌入式智能体执行器的插件的实验性 SDK 接口
title: Agent harness plugins
x-i18n:
generated_at: "2026-04-25T01:27:31Z"
generated_at: "2026-04-25T01:51:47Z"
model: gpt-5.4
provider: openai
source_hash: 6a451995a18bce70b02eea88e2ac52561e21208c40cf93b88fc921aad49dffec
source_hash: bceb0ccf51431918aec2dfca047af6ed916aa1a8a7c34ca38cb64a14655e4d50
source_path: plugins/sdk-agent-harness.md
workflow: 15
---
**智能体 Harness** 是为单个已准备好的 OpenClaw 智能体轮次提供的底层执行器。它不是模型提供商,不是渠道,也不是工具注册表。
**智能体 harness** 是为一个已准备好的 OpenClaw 智能体轮次提供底层执行的组件。它不是模型提供商,不是渠道,也不是工具注册表。
关于面向用户的心智模型,请参见 [Agent Runtimes](/zh-CN/concepts/agent-runtimes)。
仅将此接口用于内置或受信任的原生插件。该契约仍然是实验性的,因为参数类型有意映射当前的内嵌运行器。
仅将此接口用于内置或受信任的原生插件。该契约
仍然是实验性的,因为其参数类型有意映射当前的
嵌入式运行器。
## 何时使用 Harness
## 何时使用 harness
当某个模型家族拥有自己的原生会话运行时,而常规的 OpenClaw 提供商传输层并不是合适抽象时,请注册一个智能体 Harness。
当某个模型家族拥有自己的原生会话
运行时,而常规的 OpenClaw 提供商传输层是错误抽象时,请注册一个智能体 harness。
示例:
- 拥有线程和压缩能力的原生编码智能体服务器
- 必须流式传输原生计划 / 推理 / 工具事件的本地 CLI 或守护进程
- 除 OpenClaw 会话转录记录之外,还需要自己的恢复 id 的模型运行时
- 除 OpenClaw
会话转录之外,还需要自己恢复 id 的模型运行时
**不要** 只是为了添加一个新的 LLM API 就注册 Harness。对于普通的 HTTP 或 WebSocket 模型 API请构建一个[提供商插件](/zh-CN/plugins/sdk-provider-plugins)。
不要只是为了添加一个新的 LLM API 而注册 harness。对于普通的 HTTP 或
WebSocket 模型 API请构建一个[提供商插件](/zh-CN/plugins/sdk-provider-plugins)。
## 核心仍然负责的内容
## 核心仍然负责什么
在选择 Harness 之前OpenClaw 已经解析了:
在选择 harness 之前OpenClaw 已经解析了:
- 提供商和模型
- 运行时证状态
- 运行时证状态
- 思考级别和上下文预算
- OpenClaw 转录记录 / 会话文件
- OpenClaw 转录 / 会话文件
- 工作区、沙箱和工具策略
- 渠道回复回调和流式传输回调
- 模型回退和实时模型切换策略
这种划分是有意设计的。Harness 运行的是一个已准备好的尝试;它不会选择提供商、替换渠道投递,或静默切换模型。
这种划分是有意为之。harness 负责执行一个已准备好的尝试;它不会选择
提供商、替换渠道投递,或静默切换模型。
## 注册 Harness
## 注册 harness
**导入:** `openclaw/plugin-sdk/agent-harness`
@ -83,58 +90,104 @@ export default definePluginEntry({
## 选择策略
OpenClaw 会在提供商 / 模型解析完成后选择一个 Harness
OpenClaw 会在提供商 / 模型解析之后选择一个 harness
1. 现有会话中记录的 Harness id 优先,因此配置 / 环境变量变更不会将该转录记录热切换到另一个运行时。
2. `OPENCLAW_AGENT_RUNTIME=<id>` 会为尚未固定的会话强制使用具有该 id 的已注册 Harness。
3. `OPENCLAW_AGENT_RUNTIME=pi` 会强制使用内置的 PI Harness。
4. `OPENCLAW_AGENT_RUNTIME=auto` 会询问已注册的 Harness 是否支持已解析的提供商 / 模型。
5. 如果没有匹配的已注册 Harness除非 PI 回退已被禁用,否则 OpenClaw 会使用 PI。
1. 现有会话中记录的 harness id 优先,因此配置 / 环境变化不会
将该转录热切换到另一个运行时。
2. `OPENCLAW_AGENT_RUNTIME=<id>` 会为
尚未被固定的会话强制使用具有该 id 的已注册 harness。
3. `OPENCLAW_AGENT_RUNTIME=pi` 会强制使用内置的 PI harness。
4. `OPENCLAW_AGENT_RUNTIME=auto` 会询问已注册的 harness它们是否支持已解析的
提供商 / 模型。
5. 如果没有匹配的已注册 harnessOpenClaw 会使用 PI除非禁用了 PI 回退。
插件 Harness 失败会表现为运行失败。在 `auto` 模式下,仅当没有任何已注册的插件 Harness 支持已解析的提供商 / 模型时,才会使用 PI 回退。一旦某个插件 Harness 已接管一次运行OpenClaw 不会再通过 PI 重放同一个轮次,因为那可能改变凭证 / 运行时语义或导致副作用重复。
插件 harness 故障会表现为运行失败。在 `auto` 模式下,只有当没有已注册的插件 harness 支持已解析的
提供商 / 模型时,才会使用 PI 回退。一旦某个插件 harness 已经接管了一次运行OpenClaw 就不会通过 PI 重新执行同一轮次,因为这可能改变认证 / 运行时语义
或导致副作用重复。
选中的 Harness id 会在一次内嵌运行后与会话 id 一起持久化。在 Harness 固定机制出现之前创建的旧会话,只要已有转录历史,就会被视为已固定到 PI。在 PI 与原生插件 Harness 之间切换时,请使用新的 / 重置后的会话。`/status` 会在 `Fast` 旁显示诸如 `codex` 之类的非默认 Harness idPI 因为是默认兼容路径而保持隐藏。如果选中的 Harness 出乎你的预期,请启用 `agents/harness` 调试日志,并检查 Gateway 网关的结构化 `agent harness selected` 记录。它包含选中的 Harness id、选择原因、运行时 / 回退策略,以及在 `auto` 模式下每个插件候选项的支持结果。
在一次嵌入式运行之后,所选的 harness id 会与会话 id 一起持久化。
在 harness 固定机制出现之前创建的旧会话,只要已有转录历史,就会被视为已固定到 PI。
在 PI 和原生插件 harness 之间切换时,请使用新的 / 已重置的会话。`/status` 会在 `Fast` 旁边显示诸如 `codex`
这样的非默认 harness idPI 因为是默认兼容路径而保持隐藏。
如果所选 harness 让你感到意外,请启用 `agents/harness` 调试日志,并检查 Gateway 网关 的结构化 `agent harness selected` 记录。它包含
所选 harness id、选择原因、运行时 / 回退策略,以及在 `auto` 模式下每个插件候选项的支持结果。
内置的 Codex 插件将 `codex` 注册为它的 Harness id。核心将其视为普通的插件 Harness idCodex 专用别名应放在插件或操作员配置中,而不是共享运行时选择器中。
内置的 Codex 插件会将 `codex` 注册为其 harness id。核心将其视为普通的插件 harness idCodex 专用别名应放在插件
或操作员配置中,而不是放在共享的运行时选择器中。
## 提供商与 Harness 配对
## 提供商与 harness 的配对
大多数 Harness 也应注册一个提供商。提供商会让模型引用、凭证状态、模型元数据和 `/model` 选择对 OpenClaw 的其余部分可见。然后 Harness 在 `supports(...)` 中声明该提供商。
大多数 harness 也应该注册一个提供商。提供商使模型引用、
认证状态、模型元数据以及 `/model` 选择对 OpenClaw 的其余部分可见。
然后harness 在 `supports(...)` 中声明支持该提供商。
内置的 Codex 插件遵循这一模式:
内置的 Codex 插件遵循模式:
- provider id`codex`
- 用户模型引用:`openai/gpt-5.5` 加上 `embeddedHarness.runtime: "codex"`;旧版 `codex/gpt-*` 引用仍然出于兼容性而被接受
- 首选的用户模型引用:`openai/gpt-5.5` 加上
`embeddedHarness.runtime: "codex"`
- 兼容性引用:旧版 `codex/gpt-*` 引用仍然被接受,但新的
配置不应将其用作普通提供商 / 模型引用
- harness id`codex`
- auth合成的提供商可用性因为 Codex Harness 拥有原生 Codex 登录 / 会话
- app-server 请求OpenClaw 将裸模型 id 发送给 Codex并让 Harness 与原生 app-server 协议通信
- 认证:合成的提供商可用性,因为 Codex harness 拥有
原生 Codex 登录 / 会话
- app-server 请求OpenClaw 向 Codex 发送裸模型 id并让
harness 与原生 app-server 协议通信
Codex 插件是增量式的。普通的 `openai/gpt-*` 引用会继续使用常规 OpenClaw 提供商路径,除非你通过 `embeddedHarness.runtime: "codex"` 强制使用 Codex Harness。较旧的 `codex/gpt-*` 引用仍会出于兼容性而选择 Codex 提供商和 Harness。
Codex 插件是增量式的。普通的 `openai/gpt-*` 引用仍会使用
常规 OpenClaw 提供商路径,除非你通过
`embeddedHarness.runtime: "codex"` 强制使用 Codex harness。较旧的 `codex/gpt-*` 引用
出于兼容性考虑仍会选择 Codex 提供商和 harness。
关于操作员设置、模型前缀示例和仅限 Codex 的配置,请参见 [Codex Harness](/zh-CN/plugins/codex-harness)。
关于操作员设置、模型前缀示例和仅 Codex 配置,请参见
[Codex harness](/zh-CN/plugins/codex-harness)。
OpenClaw 要求 Codex app-server 为 `0.118.0` 或更高版本。Codex 插件会检查 app-server 初始化握手,并阻止更旧或未带版本号的服务器,以确保 OpenClaw 仅在它已测试过的协议接口上运行。
OpenClaw 要求 Codex app-server 为 `0.118.0` 或更高版本。Codex 插件会检查
app-server 初始化握手,并阻止较旧或未标明版本的服务器,以便
OpenClaw 仅针对其已测试过的协议接口运行。
### 工具结果中间件
当内置插件的清单在 `contracts.agentToolResultMiddleware` 中声明了目标运行时 id 时,它们可以通过 `api.registerAgentToolResultMiddleware(...)` 附加运行时无关的工具结果中间件。这个受信任接口用于异步工具结果转换,这些转换必须在 PI 或 Codex 将工具输出反馈给模型之前运行。
内置插件可以通过
`api.registerAgentToolResultMiddleware(...)` 附加运行时无关的工具结果中间件,前提是
其清单在 `contracts.agentToolResultMiddleware` 中声明了目标运行时 id。这个受信任的接口
用于必须在 PI 或 Codex 将
工具输出送回模型之前运行的异步工具结果转换。
旧版内置插件仍可使用 `api.registerCodexAppServerExtensionFactory(...)` 来实现仅适用于 Codex app-server 的中间件,但新的结果转换应使用运行时无关 API。
仅限 Pi 的 `api.registerEmbeddedExtensionFactory(...)` 钩子已被移除Pi 工具结果转换必须使用运行时无关中间件。
旧版内置插件仍然可以使用
`api.registerCodexAppServerExtensionFactory(...)` 来实现仅适用于 Codex app-server 的
中间件,但新的结果转换应使用运行时无关 API。
仅适用于 Pi 的 `api.registerEmbeddedExtensionFactory(...)` 钩子已被移除;
Pi 工具结果转换必须使用运行时无关中间件。
### 原生 Codex Harness 模式
### 原生 Codex harness 模式
内置的 `codex` Harness 是内嵌 OpenClaw 智能体轮次的原生 Codex 模式。请先启用内置的 `codex` 插件;如果你的配置使用了限制性 allowlist还需要在 `plugins.allow` 中包含 `codex`。原生 app-server 配置应使用 `openai/gpt-*` 并设置 `embeddedHarness.runtime: "codex"`。若要通过 PI 使用 Codex OAuth请改用 `openai-codex/*`。旧版 `codex/*` 模型引用仍保留为原生 Harness 的兼容别名。
内置的 `codex` harness 是嵌入式 OpenClaw
智能体轮次的原生 Codex 模式。请先启用内置的 `codex` 插件,并在
你的配置使用限制性 allowlist 时,将 `codex` 包含在
`plugins.allow` 中。原生 app-server 配置应使用 `openai/gpt-*`,并设置 `embeddedHarness.runtime: "codex"`
如果要通过 PI 使用 Codex OAuth请改用 `openai-codex/*`。旧版 `codex/*`
模型引用仍然保留为原生 harness 的兼容性别名。
当该模式运行时Codex 负责原生线程 id、恢复行为、压缩和 app-server 执行。OpenClaw 仍然负责聊天渠道、可见转录镜像、工具策略、审批、媒体投递和会话选择。当你需要证明只有 Codex app-server 路径可以接管运行时,请使用 `embeddedHarness.runtime: "codex"` 并配合 `embeddedHarness.fallback: "none"`。该配置只是一个选择保护措施Codex app-server 失败本来就会直接失败,而不是通过 PI 重试。
当此模式运行时Codex 负责原生线程 id、恢复行为、
压缩以及 app-server 执行。OpenClaw 仍然负责聊天渠道、
可见转录镜像、工具策略、批准、媒体投递和会话选择。
当你需要证明只有 Codex app-server 路径能够接管该运行时,请使用 `embeddedHarness.runtime: "codex"`,且不要设置 `fallback` 覆盖。
显式插件运行时默认已经是失败即关闭。只有在你明确希望缺失的 harness 选择由 PI 处理时,才设置 `fallback: "pi"`
Codex app-server 故障本来就会直接失败,而不会通过 PI 重试。
## 禁用 PI 回退
默认情况下OpenClaw 运行内嵌智能体时,`agents.defaults.embeddedHarness` 设置为 `{ runtime: "auto", fallback: "pi" }`。在 `auto` 模式下,已注册的插件 Harness 可以接管某个提供商 / 模型对。如果没有匹配项OpenClaw 会回退到 PI。
默认情况下OpenClaw 会以 `agents.defaults.embeddedHarness`
设置为 `{ runtime: "auto", fallback: "pi" }` 的方式运行嵌入式智能体。在 `auto` 模式下,已注册的插件
harness 可以声明接管某个提供商 / 模型对。如果没有匹配项OpenClaw 会回退到 PI。
当你需要在缺少插件 Harness 选择时直接失败,而不是使用 PI 时,请设置 `fallback: "none"`。已选中的插件 Harness 失败本来就会硬失败。这不会阻止显式的 `runtime: "pi"``OPENCLAW_AGENT_RUNTIME=pi`
`auto` 模式下,当你需要在缺失插件 harness
选择时直接失败而不是使用 PI请设置 `fallback: "none"`。显式插件运行时,例如
`runtime: "codex"`,默认已经是失败即关闭,除非在同一配置或环境覆盖作用域中设置了 `fallback: "pi"`
所选插件 harness 的故障始终会硬失败。这不会阻止显式的 `runtime: "pi"`
`OPENCLAW_AGENT_RUNTIME=pi`
对于仅限 Codex 的内嵌运行:
对于仅 Codex 的嵌入式运行:
```json
{
@ -142,15 +195,15 @@ OpenClaw 要求 Codex app-server 为 `0.118.0` 或更高版本。Codex 插件会
"defaults": {
"model": "openai/gpt-5.5",
"embeddedHarness": {
"runtime": "codex",
"fallback": "none"
"runtime": "codex"
}
}
}
}
```
如果你希望任何已注册的插件 Harness 都可以接管匹配的模型,但绝不希望 OpenClaw 静默回退到 PI请保持 `runtime: "auto"` 并禁用回退:
如果你希望任何已注册的插件 harness 都可以接管匹配的模型,但又绝不希望 OpenClaw 静默回退到 PI请保持 `runtime: "auto"` 并禁用
回退:
```json
{
@ -165,7 +218,7 @@ OpenClaw 要求 Codex app-server 为 `0.118.0` 或更高版本。Codex 插件会
}
```
按智能体覆盖使用相同的结构:
每个智能体的覆盖使用相同的结构:
```json
{
@ -190,7 +243,9 @@ OpenClaw 要求 Codex app-server 为 `0.118.0` 或更高版本。Codex 插件会
}
```
`OPENCLAW_AGENT_RUNTIME` 仍会覆盖已配置的运行时。使用 `OPENCLAW_AGENT_HARNESS_FALLBACK=none` 可通过环境变量禁用 PI 回退。
`OPENCLAW_AGENT_RUNTIME` 仍然会覆盖已配置的运行时。使用
`OPENCLAW_AGENT_HARNESS_FALLBACK=none` 可通过
环境变量禁用 PI 回退。
```bash
OPENCLAW_AGENT_RUNTIME=codex \
@ -198,39 +253,50 @@ OPENCLAW_AGENT_HARNESS_FALLBACK=none \
openclaw gateway run
```
在禁用回退的情况下,如果请求的 Harness 未注册、不支持已解析的提供商 / 模型,或在产生轮次副作用之前失败,会话会尽早失败。这是 Codex 专用部署以及必须证明 Codex app-server 路径确实在使用中的实时测试所期望的行为。
在禁用回退后,如果请求的 harness 未注册、
不支持已解析的提供商 / 模型,或在产生轮次副作用之前失败,会话就会提前失败。这对于仅 Codex 的部署以及必须证明
Codex app-server 路径确实在使用中的在线测试来说,是有意设计的行为。
此设置仅控制内嵌智能体 Harness。它不会禁用图像、视频、音乐、TTS、PDF 或其他特定提供商的模型路由。
此设置只控制嵌入式智能体 harness。它不会禁用
图像、视频、音乐、TTS、PDF 或其他提供商特定的模型路由。
## 原生会话转录镜像
## 原生会话转录镜像
Harness 可以保留原生会话 id、线程 id 或守护进程侧恢复令牌。请将这种绑定显式地与 OpenClaw 会话关联,并持续将用户可见的助手 / 工具输出镜像到 OpenClaw 转录记录中。
harness 可以保留原生会话 id、线程 id 或守护进程侧恢复令牌。
请让这种绑定明确关联到 OpenClaw 会话,并继续将用户可见的助手 / 工具输出镜像到 OpenClaw 转录中。
OpenClaw 转录记录仍然是以下内容的兼容层:
OpenClaw 转录仍然是以下场景的兼容层:
- 渠道可见的会话历史
- 转录记录搜索与索引
- 在后续轮次切换回内置 PI Harness
- 转录搜索和索引
- 在后续轮次切换回内置 PI harness
- 通用的 `/new`、`/reset` 和会话删除行为
如果你的 Harness 存储了一个 sidecar 绑定,请实现 `reset(...)`,以便 OpenClaw 在所属 OpenClaw 会话被重置时清除它。
如果你的 harness 存储了 sidecar 绑定,请实现 `reset(...)`,以便 OpenClaw 能够在所属 OpenClaw 会话被重置时
清除它。
## 工具和媒体结果
核心会构造 OpenClaw 工具列表并将其传入已准备好的尝试中。当 Harness 执行动态工具调用时,请通过 Harness 结果结构返回工具结果,而不是自行发送渠道媒体。
核心会构造 OpenClaw 工具列表,并将其传入已准备好的尝试中。
当 harness 执行动态工具调用时,请通过
harness 结果结构返回工具结果,而不是自己发送渠道媒体。
这样可以让文本、图像、视频、音乐、TTS、审批以及消息工具输出与基于 PI 的运行共享同一条投递路径。
这样可以让文本、图像、视频、音乐、TTS、批准以及消息工具输出
与基于 PI 的运行使用相同的投递路径。
## 当前限制
- 公共导入路径是通用的,但某些 attempt / result 类型别名仍然保留 `Pi` 命名以维持兼容性。
- 第三方 Harness 安装仍是实验性的。在你确实需要原生会话运行时之前,请优先使用提供商插件。
- 支持跨轮次切换 Harness。不要在一个轮次中途、在原生工具、审批、助手文本或消息发送已经开始后切换 Harness。
- 公共导入路径是通用的,但一些 attempt / result 类型别名
出于兼容性考虑仍然带有 `Pi` 名称。
- 第三方 harness 安装仍处于实验阶段。在你确实需要原生会话运行时之前,
优先使用提供商插件。
- 支持跨轮次切换 harness。不要在一个轮次进行到一半时切换 harness
特别是在原生工具、批准、助手文本或消息发送已经开始之后。
## 相关内容
- [SDK 概览](/zh-CN/plugins/sdk-overview)
- [运行时辅助工具](/zh-CN/plugins/sdk-runtime)
- [提供商插件](/zh-CN/plugins/sdk-provider-plugins)
- [Codex Harness](/zh-CN/plugins/codex-harness)
- [Codex harness](/zh-CN/plugins/codex-harness)
- [模型提供商](/zh-CN/concepts/model-providers)

View File

@ -2,57 +2,64 @@
read_when:
- 你看到了 `OPENCLAW_PLUGIN_SDK_COMPAT_DEPRECATED` 警告
- 你看到了 `OPENCLAW_EXTENSION_API_DEPRECATED` 警告
- 你在 OpenClaw 2026.4.24 之前使用 `api.registerEmbeddedExtensionFactory`
- 你正在将插件更新现代插件架构
- 你维护一个外部 OpenClaw 插件
- 你在 OpenClaw 2026.4.24 之前使用 `api.registerEmbeddedExtensionFactory`
- 你正在将插件更新现代插件架构
- 你维护一个外部 OpenClaw 插件
sidebarTitle: Migrate to SDK
summary: 从旧版向后兼容层迁移到现代插件 SDK
title: 插件 SDK 迁移
x-i18n:
generated_at: "2026-04-25T01:27:32Z"
generated_at: "2026-04-25T01:51:59Z"
model: gpt-5.4
provider: openai
source_hash: 109261bd1358dab30dc521b5103201e6f8b06800650497bcb86bb4e423694eff
source_hash: 7072e690b1f23fd80d4de9a00bc0352f0c635d1ed89d4b530bfbb1f9f6eab483
source_path: plugins/sdk-migration.md
workflow: 15
---
OpenClaw 已从宽泛的向后兼容层迁移到现代插件架构,采用聚焦、文档化的导入方式。如果你的插件是在新架构之前构建的,本指南将帮助你完成迁移。
OpenClaw 已从宽泛的向后兼容层迁移到现代插件架构,提供更聚焦、文档完善的导入路径。如果你的插件是在新架构之前构建的,本指南可帮助你完成迁移。
## 正在发生什么变化
插件系统提供了两个开放范围很大的接口,使插件可以从单一入口点导入所需的任何内容:
旧插件系统提供了两个开放范围很大的接口面,使插件能够从单一入口点导入所需的任何内容:
- **`openclaw/plugin-sdk/compat`** — 一个会重新导出几十个辅助函数的单一导入入口。它的引入是为了在构建新插件架构期间,让较旧的基于钩子的插件继续正常工作。
- **`openclaw/extension-api`** — 一个桥接层,让插件能够直接访问宿主端的辅助功能,例如嵌入式智能体运行器。
- **`api.registerEmbeddedExtensionFactory(...)`** — 一个已移除的、仅限 Pi 的内置扩展钩子,可以观察诸如 `tool_result` 之类的嵌入式运行器事件
- **`openclaw/plugin-sdk/compat`** — 一个单一导入路径,会重新导出数十个辅助函数。它最初是为了在构建新插件架构期间,让较旧的基于钩子的插件继续工作。
- **`openclaw/extension-api`** — 一个桥接层,使插件能够直接访问宿主端辅助函数,例如嵌入式智能体运行器。
- **`api.registerEmbeddedExtensionFactory(...)`** — 一个已移除的、仅限 Pi 的内置扩展钩子,可观察嵌入式运行器事件,例如 `tool_result`
这些宽泛的导入接口现已**弃用**。它们在运行时仍然可用,但新插件不得再使用它们,现有插件也应在下一个主要版本移除它们之前完成迁移。仅限 Pi 的嵌入式扩展工厂注册 API 已被移除;请改用工具结果中间件。
这些宽泛的导入接口现已**弃用**。它们在运行时仍然可用,但新插件不得再使用它们,现有插件也应在下一个主要版本移除它们之前完成迁移。仅限 Pi 的嵌入式扩展工厂注册 API 已被移除;请改用工具结果中间件。
OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释已文档化的插件行为。破坏契约变更必须先经过兼容适配器、诊断、文档以及弃用窗口。这一规则适用于 SDK 导入、清单字段、设置 API、钩子以及运行时注册行为。
OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释已文档化的插件行为。破坏契约变更必须先经过兼容适配器、诊断、文档和弃用窗口。这适用于 SDK 导入、清单字段、设置 API、钩子和运行时注册行为。
<Warning>
向后兼容层将在未来的主要版本中移除。
到那时,仍从这些接口导入的插件将会中断
仅限 Pi 的嵌入式扩展工厂注册已经不再加载。
向后兼容层将在未来的一个主要版本中移除。
仍然从这些接口面导入的插件届时将会失效
仅限 Pi 的嵌入式扩展工厂注册现在已经不再加载。
</Warning>
## 为什么会有这个变化
## 为什么会有这项变更
旧方法会导致一些问题:
旧方法会带来一些问题:
- **启动缓慢** — 导入一个辅助函数会加载十个无关模块
- **循环依赖** — 宽泛的重新导出使创建导入循环变得很容易
- **API 接口不清晰** — 无法分辨哪些导出是稳定的,哪些是内部实现
- **启动缓慢** — 导入一个辅助函数会加载十个无关模块
- **循环依赖** — 宽泛的重新导出很容易造成导入循环
- **API 接口面不清晰** — 无法判断哪些导出是稳定的,哪些属于内部实现
现代插件 SDK 解决了这些问题:每个导入路径(`openclaw/plugin-sdk/\<subpath\>`)都是一个小型、自包含模块,具有明确用途和文档化契约。
现代插件 SDK 解决了这些问题:每个导入路径(`openclaw/plugin-sdk/\<subpath\>`)都是一个小型、自包含模块,具有明确用途和文档化契约。
面向内置渠道的旧版提供商便捷接口也已经移除。诸如 `openclaw/plugin-sdk/slack`、`openclaw/plugin-sdk/discord`、`openclaw/plugin-sdk/signal`、`openclaw/plugin-sdk/whatsapp`、带渠道品牌的辅助接口以及 `openclaw/plugin-sdk/telegram-core` 之类的导入,都是私有单体仓库快捷方式,而不是稳定的插件契约。请改用更窄的通用 SDK 子路径。在内置插件工作区内部,请将提供商自有辅助函数保留在该插件自己的 `api.ts``runtime-api.ts` 中。
面向内置渠道的旧版提供商便捷接口也已移除。类似
`openclaw/plugin-sdk/slack`、`openclaw/plugin-sdk/discord`、
`openclaw/plugin-sdk/signal`、`openclaw/plugin-sdk/whatsapp`、
带有渠道品牌的辅助接口,以及
`openclaw/plugin-sdk/telegram-core`
这样的导入路径,都是私有 monorepo 快捷方式,而不是稳定的插件契约。请改用更窄、更通用的 SDK 子路径。在内置插件工作区内部,应将提供商自有的辅助函数保留在该插件自己的
`api.ts``runtime-api.ts` 中。
当前内置提供商示例:
- Anthropic 将 Claude 专用的流式辅助函数保留在其自己的 `api.ts` / `contract-api.ts` 接口中
- OpenAI 将提供商构建器、默认模型辅助函数以及实时提供商构建器保留在其自己的 `api.ts`
- Anthropic 将 Claude 专用的流式传输辅助函数保留在其自己的 `api.ts` /
`contract-api.ts` 接口中
- OpenAI 将提供商构建器、默认模型辅助函数和实时提供商构建器保留在其自己的 `api.ts`
- OpenRouter 将提供商构建器以及新手引导 / 配置辅助函数保留在其自己的 `api.ts`
## 兼容性策略
@ -60,13 +67,13 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
对于外部插件,兼容性工作遵循以下顺序:
1. 添加新契约
2. 通过兼容适配器保持旧行为继续接通
2. 通过兼容适配器保持旧行为继续可用
3. 发出诊断或警告,明确指出旧路径及其替代方案
4. 在测试中覆盖两条路径
5. 记录弃用信息和迁移路径
6. 仅在宣布的迁移窗口结束后移除,通常是在主要版本中
6. 仅在宣布的迁移窗口结束后移除,通常是在主要版本中
如果某个清单字段仍被接受,插件作者就可以继续使用它,直到文档和诊断另有说明。新代码应优先使用文档化的替代方案,但现有插件不应在普通的小版本发布中被破坏
如果某个清单字段仍被接受,插件作者就可以继续使用它,直到文档和诊断另有说明。新代码应优先使用文档化的替代方案,但现有插件不应在普通次要版本中失效
## 如何迁移
@ -95,40 +102,39 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
}
```
外部插件不能注册工具结果中间件,因为它可以在模型看到高信任度工具输出之前重写这些输出。
外部插件不能注册工具结果中间件,因为它可以在模型看到之前重写高信任级别的工具输出。
</Step>
<Step title="将原生审批处理器迁移到能力事实">
具备审批能力的渠道插件现在通过
`approvalCapability.nativeRuntime` 加上共享运行时上下文注册表来公开原生审批行为。
支持审批的渠道插件现在通过
`approvalCapability.nativeRuntime` 加上共享运行时上下文注册表来暴露原生审批行为。
关键变化:
- 将 `approvalCapability.handler.loadRuntime(...)` 替换为
`approvalCapability.nativeRuntime`
- 将审批专用的认证 / 投递逻辑从旧版 `plugin.auth` /
`plugin.approvals` 线迁移到 `approvalCapability`
- `ChannelPlugin.approvals` 已从公渠道插件契约中移除;
`plugin.approvals` 线迁移到 `approvalCapability`
- `ChannelPlugin.approvals` 已从公开的渠道插件契约中移除;
请将 delivery / native / render 字段迁移到 `approvalCapability`
- `plugin.auth` 仅保留给渠道登录 / 登出流程使用;其中的审批认证
钩子不再核心读取
- `plugin.auth` 仅保留用于渠道登录 / 登出流程;其中的审批认证
钩子不再核心读取
- 通过 `openclaw/plugin-sdk/channel-runtime-context`
注册渠道自有的运行时对象,例如客户端、令牌或 Bolt
应用
- 不要从原生审批处理器发送插件自有的改道路由通知;
核心现在会根据实际投递结果统一负责“已路由到其他位置”的通知
- 当把 `channelRuntime` 传入 `createChannelManager(...)` 时,请提供一个
- 不要从原生审批处理器发送插件自有的路由通知;
核心现在会根据实际投递结果统一处理“已路由到其他地方”的通知
- `channelRuntime` 传入 `createChannelManager(...)` 时,请提供一个
真实的 `createPluginRuntime().channel` 接口。部分桩实现将被拒绝。
请参阅 `/plugins/sdk-channel-plugins`,了解当前的审批能力布局
有关当前审批能力布局,请参见 `/plugins/sdk-channel-plugins`
</Step>
<Step title="审查 Windows 包装器回退行为">
如果你的插件使用 `openclaw/plugin-sdk/windows-spawn`
那么未解析的 Windows `.cmd`/`.bat` 包装器现在会默认失败关闭,
除非你显式传入 `allowShellFallback: true`
那么当 Windows `.cmd` / `.bat` 包装器无法解析时,现在会默认失败关闭,除非你显式传入 `allowShellFallback: true`
```typescript
// Before
@ -149,7 +155,7 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
</Step>
<Step title="查找已弃用的导入">
在你的插件中搜索来自以下任一已弃用接口的导入:
在你的插件中搜索来自这两个已弃用接口面的导入:
```bash
grep -r "plugin-sdk/compat" my-plugin/
@ -159,7 +165,7 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
</Step>
<Step title="替换为聚焦导入">
旧接口中的每个导出都映射到一个特定的现代导入路径:
旧接口中的每个导出都映射到一个特定的现代导入路径:
```typescript
// Before (deprecated backwards-compatibility layer)
@ -186,9 +192,9 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
const result = await api.runtime.agent.runEmbeddedPiAgent({ sessionId, prompt });
```
样的模式也适用于其他旧版桥接辅助函数:
同模式也适用于其他旧版桥接辅助函数:
| 旧导入 | 现代等价方式 |
| 旧导入 | 现代等价 |
| --- | --- |
| `resolveAgentDir` | `api.runtime.agent.resolveAgentDir` |
| `resolveAgentWorkspaceDir` | `api.runtime.agent.resolveAgentWorkspaceDir` |
@ -196,7 +202,7 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
| `resolveThinkingDefault` | `api.runtime.agent.resolveThinkingDefault` |
| `resolveAgentTimeoutMs` | `api.runtime.agent.resolveAgentTimeoutMs` |
| `ensureAgentWorkspace` | `api.runtime.agent.ensureAgentWorkspace` |
| 会话存储辅助函数 | `api.runtime.agent.session.*` |
| session store helpers | `api.runtime.agent.session.*` |
</Step>
@ -210,42 +216,42 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
## 导入路径参考
<Accordion title="常导入路径表">
<Accordion title="常导入路径表">
| 导入路径 | 用途 | 关键导出 |
| --- | --- | --- |
| `plugin-sdk/plugin-entry` | 规范插件入口辅助函数 | `definePluginEntry` |
| `plugin-sdk/core` | 用于渠道入口定义 / 构建器的旧版伞式重新导出 | `defineChannelPluginEntry`, `createChatChannelPlugin` |
| `plugin-sdk/plugin-entry` | 规范插件入口辅助函数 | `definePluginEntry` |
| `plugin-sdk/core` | 用于渠道入口定义 / 构建器的旧版聚合重新导出 | `defineChannelPluginEntry`, `createChatChannelPlugin` |
| `plugin-sdk/config-schema` | 根配置 schema 导出 | `OpenClawSchema` |
| `plugin-sdk/provider-entry` | 单提供商入口辅助函数 | `defineSingleProviderPluginEntry` |
| `plugin-sdk/channel-core` | 聚焦的渠道入口定义和构建器 | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` |
| `plugin-sdk/setup` | 共享设置向导辅助函数 | Allowlist 提示、设置状态构建器 |
| `plugin-sdk/setup-runtime` | 设置时运行时辅助函数 | 导入安全的设置补丁适配器、lookup-note 辅助函数、`promptResolvedAllowFrom`、`splitSetupEntries`、委托设置代理 |
| `plugin-sdk/setup` | 共享设置向导辅助函数 | Allowlist 提示、设置状态构建器 |
| `plugin-sdk/setup-runtime` | 设置时运行时辅助函数 | 可安全导入的设置补丁适配器、查找说明辅助函数、`promptResolvedAllowFrom`、`splitSetupEntries`、委派设置代理 |
| `plugin-sdk/setup-adapter-runtime` | 设置适配器辅助函数 | `createEnvPatchedAccountSetupAdapter` |
| `plugin-sdk/setup-tools` | 设置工具辅助函数 | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
| `plugin-sdk/account-core` | 多账户辅助函数 | 账户列表 / 配置 / action-gate 辅助函数 |
| `plugin-sdk/account-core` | 多账户辅助函数 | 账户列表 / 配置 / 操作门控辅助函数 |
| `plugin-sdk/account-id` | account-id 辅助函数 | `DEFAULT_ACCOUNT_ID`、account-id 规范化 |
| `plugin-sdk/account-resolution` | 账户查找辅助函数 | 账户查找 + 默认回退辅助函数 |
| `plugin-sdk/account-helpers` | 窄范围账户辅助函数 | 账户列表 / 账户操作辅助函数 |
| `plugin-sdk/channel-setup` | 设置向导适配器 | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`,以及 `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
| `plugin-sdk/channel-pairing` | 私信 配对原语 | `createChannelPairingController` |
| `plugin-sdk/channel-reply-pipeline` | 回复前缀 + 正在输入接线 | `createChannelReplyPipeline` |
| `plugin-sdk/channel-setup` | 设置向导适配器 | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`,以及 `DEFAULT_ACCOUNT_ID`、`createTopLevelChannelDmPolicy`、`setSetupChannelEnabled`、`splitSetupEntries` |
| `plugin-sdk/channel-pairing` | 私信配对原语 | `createChannelPairingController` |
| `plugin-sdk/channel-reply-pipeline` | 回复前缀 + 输入中状态线路 | `createChannelReplyPipeline` |
| `plugin-sdk/channel-config-helpers` | 配置适配器工厂 | `createHybridChannelConfigAdapter` |
| `plugin-sdk/channel-config-schema` | 配置 schema 构建器 | 共享渠道配置 schema 原语;带内置渠道名称的 schema 导出仅用于旧版兼容性 |
| `plugin-sdk/telegram-command-config` | Telegram 命令配置辅助函数 | 命令名规范化、描述裁剪、重复 / 冲突校验 |
| `plugin-sdk/channel-policy` | 群组 / 私信 策略解析 | `resolveChannelGroupRequireMention` |
| `plugin-sdk/channel-lifecycle` | 账户状态和草稿流生命周期辅助函数 | `createAccountStatusSink`、草稿预览完成辅助函数 |
| `plugin-sdk/inbound-envelope` | 入站 envelope 辅助函数 | 共享 route + envelope 构建辅助函数 |
| `plugin-sdk/inbound-reply-dispatch` | 入站回复辅助函数 | 共享 record-and-dispatch 辅助函数 |
| `plugin-sdk/channel-config-schema` | 配置 schema 构建器 | 共享渠道配置 schema 原语;以内置渠道命名的 schema 导出仅用于旧版兼容性 |
| `plugin-sdk/telegram-command-config` | Telegram 命令配置辅助函数 | 命令名规范化、描述裁剪、重复 / 冲突校验 |
| `plugin-sdk/channel-policy` | 群组 / 私信策略解析 | `resolveChannelGroupRequireMention` |
| `plugin-sdk/channel-lifecycle` | 账户状态和草稿流生命周期辅助函数 | `createAccountStatusSink`、草稿预览收尾辅助函数 |
| `plugin-sdk/inbound-envelope` | 入站 envelope 辅助函数 | 共享路由 + envelope 构建器辅助函数 |
| `plugin-sdk/inbound-reply-dispatch` | 入站回复辅助函数 | 共享记录并分发辅助函数 |
| `plugin-sdk/messaging-targets` | 消息目标解析 | 目标解析 / 匹配辅助函数 |
| `plugin-sdk/outbound-media` | 出站媒体辅助函数 | 共享出站媒体加载 |
| `plugin-sdk/outbound-runtime` | 出站运行时辅助函数 | 出站身份 / 发送委托和负载规划辅助函数 |
| `plugin-sdk/outbound-runtime` | 出站运行时辅助函数 | 出站身份 / 发送委派和载荷规划辅助函数 |
| `plugin-sdk/thread-bindings-runtime` | 线程绑定辅助函数 | 线程绑定生命周期和适配器辅助函数 |
| `plugin-sdk/agent-media-payload` | 旧版媒体负载辅助函数 | 用于旧版字段布局的智能体媒体负载构建器 |
| `plugin-sdk/channel-runtime` | 已弃用的兼容性垫片 | 仅限旧版渠道运行时工具 |
| `plugin-sdk/agent-media-payload` | 旧版媒体载荷辅助函数 | 面向旧字段布局的智能体媒体载荷构建器 |
| `plugin-sdk/channel-runtime` | 已弃用的兼容性 shim | 仅保留旧版渠道运行时工具 |
| `plugin-sdk/channel-send-result` | 发送结果类型 | 回复结果类型 |
| `plugin-sdk/runtime-store` | 持久化插件存储 | `createPluginRuntimeStore` |
| `plugin-sdk/runtime` | 宽范围运行时辅助函数 | 运行时 / 日志 / 备份 / 插件安装辅助函数 |
| `plugin-sdk/runtime-env` | 窄范围运行时环境辅助函数 | Logger / 运行时环境、超时、重试和退避辅助函数 |
| `plugin-sdk/runtime-env` | 窄范围运行时环境辅助函数 | 日志器 / 运行时环境、超时、重试和退避辅助函数 |
| `plugin-sdk/plugin-runtime` | 共享插件运行时辅助函数 | 插件命令 / 钩子 / http / 交互式辅助函数 |
| `plugin-sdk/hook-runtime` | 钩子流水线辅助函数 | 共享 webhook / 内部钩子流水线辅助函数 |
| `plugin-sdk/lazy-runtime` | 惰性运行时辅助函数 | `createLazyRuntimeModule`, `createLazyRuntimeMethod`, `createLazyRuntimeMethodBinder`, `createLazyRuntimeNamedExport`, `createLazyRuntimeSurface` |
@ -253,105 +259,105 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
| `plugin-sdk/cli-runtime` | CLI 运行时辅助函数 | 命令格式化、等待、版本辅助函数 |
| `plugin-sdk/gateway-runtime` | Gateway 网关辅助函数 | Gateway 网关客户端和渠道状态补丁辅助函数 |
| `plugin-sdk/config-runtime` | 配置辅助函数 | 配置加载 / 写入辅助函数 |
| `plugin-sdk/telegram-command-config` | Telegram 命令辅助函数 | 当内置 Telegram 契约接口不可用时,提供回退稳定的 Telegram 命令校验辅助函数 |
| `plugin-sdk/approval-runtime` | 审批提示辅助函数 | exec / 插件审批负载、approval capability / profile 辅助函数、原生审批路由 / 运行时辅助函数 |
| `plugin-sdk/approval-auth-runtime` | 审批认证辅助函数 | approver 解析、同聊天操作认证 |
| `plugin-sdk/approval-client-runtime` | 审批客户端辅助函数 | 原生 exec 审批 profile / filter 辅助函数 |
| `plugin-sdk/approval-delivery-runtime` | 审批投递辅助函数 | 原生 approval capability / delivery 适配器 |
| `plugin-sdk/telegram-command-config` | Telegram 命令辅助函数 | 当内置 Telegram 契约接口不可用时,提供具备稳定回退行为的 Telegram 命令校验辅助函数 |
| `plugin-sdk/approval-runtime` | 审批提示辅助函数 | exec / 插件审批载荷、审批能力 / 配置文件辅助函数、原生审批路由 / 运行时辅助函数,以及结构化审批显示路径格式化 |
| `plugin-sdk/approval-auth-runtime` | 审批认证辅助函数 | 审批人解析、同聊天操作认证 |
| `plugin-sdk/approval-client-runtime` | 审批客户端辅助函数 | 原生 exec 审批配置文件 / 过滤器辅助函数 |
| `plugin-sdk/approval-delivery-runtime` | 审批投递辅助函数 | 原生审批能力 / 投递适配器 |
| `plugin-sdk/approval-gateway-runtime` | 审批 Gateway 网关辅助函数 | 共享审批 Gateway 网关解析辅助函数 |
| `plugin-sdk/approval-handler-adapter-runtime` | 审批适配器辅助函数 | 用于渠道入口点的轻量级原生审批适配器加载辅助函数 |
| `plugin-sdk/approval-handler-runtime` | 审批处理器辅助函数 | 范围更广的审批处理器运行时辅助函数;如果更窄的 adapter / gateway 接口已足够,优先使用它们 |
| `plugin-sdk/approval-handler-adapter-runtime` | 审批适配器辅助函数 | 用于高频渠道入口点的轻量级原生审批适配器加载辅助函数 |
| `plugin-sdk/approval-handler-runtime` | 审批处理器辅助函数 | 范围更广的审批处理器运行时辅助函数;如果较窄的 adapter / gateway 接口已足够,则优先使用后者 |
| `plugin-sdk/approval-native-runtime` | 审批目标辅助函数 | 原生审批目标 / 账户绑定辅助函数 |
| `plugin-sdk/approval-reply-runtime` | 审批回复辅助函数 | exec / 插件审批回复载辅助函数 |
| `plugin-sdk/approval-reply-runtime` | 审批回复辅助函数 | exec / 插件审批回复载辅助函数 |
| `plugin-sdk/channel-runtime-context` | 渠道运行时上下文辅助函数 | 通用渠道运行时上下文 register / get / watch 辅助函数 |
| `plugin-sdk/security-runtime` | 安全辅助函数 | 共享信任、私信 门控、外部内容和密钥收集辅助函数 |
| `plugin-sdk/security-runtime` | 安全辅助函数 | 共享信任、私信门控、外部内容和密钥收集辅助函数 |
| `plugin-sdk/ssrf-policy` | SSRF 策略辅助函数 | 主机 allowlist 和私有网络策略辅助函数 |
| `plugin-sdk/ssrf-runtime` | SSRF 运行时辅助函数 | pinned-dispatcher、guarded fetch、SSRF 策略辅助函数 |
| `plugin-sdk/ssrf-runtime` | SSRF 运行时辅助函数 | 固定 dispatcher、受保护 fetch、SSRF 策略辅助函数 |
| `plugin-sdk/collection-runtime` | 有界缓存辅助函数 | `pruneMapToMaxSize` |
| `plugin-sdk/diagnostic-runtime` | 诊断门控辅助函数 | `isDiagnosticFlagEnabled`, `isDiagnosticsEnabled` |
| `plugin-sdk/error-runtime` | 错误格式化辅助函数 | `formatUncaughtError`, `isApprovalNotFoundError`、错误图辅助函数 |
| `plugin-sdk/fetch-runtime` | 封装 fetch / proxy 辅助函数 | `resolveFetch`、proxy 辅助函数 |
| `plugin-sdk/fetch-runtime` | 包装后的 fetch / 代理辅助函数 | `resolveFetch`、代理辅助函数 |
| `plugin-sdk/host-runtime` | 主机规范化辅助函数 | `normalizeHostname`, `normalizeScpRemoteHost` |
| `plugin-sdk/retry-runtime` | 重试辅助函数 | `RetryConfig`, `retryAsync`、策略运行器 |
| `plugin-sdk/allow-from` | allowlist 格式化 | `formatAllowFromLowercase` |
| `plugin-sdk/allowlist-resolution` | allowlist 输入映射 | `mapAllowlistResolutionInputs` |
| `plugin-sdk/command-auth` | 命令门控和命令接口辅助函数 | `resolveControlCommandGate`、发送授权辅助函数、命令注册表辅助函数 |
| `plugin-sdk/allow-from` | Allowlist 格式化 | `formatAllowFromLowercase` |
| `plugin-sdk/allowlist-resolution` | Allowlist 输入映射 | `mapAllowlistResolutionInputs` |
| `plugin-sdk/command-auth` | 命令门控和命令接口辅助函数 | `resolveControlCommandGate`、发送授权辅助函数、命令注册表辅助函数 |
| `plugin-sdk/command-status` | 命令状态 / 帮助渲染器 | `buildCommandsMessage`, `buildCommandsMessagePaginated`, `buildHelpMessage` |
| `plugin-sdk/secret-input` | 密钥输入解析 | 密钥输入辅助函数 |
| `plugin-sdk/webhook-ingress` | webhook 请求辅助函数 | webhook 目标工具 |
| `plugin-sdk/webhook-request-guards` | webhook 请求体守卫辅助函数 | 请求体读取 / 限制辅助函数 |
| `plugin-sdk/webhook-ingress` | Webhook 请求辅助函数 | Webhook 目标工具函数 |
| `plugin-sdk/webhook-request-guards` | Webhook 请求体保护辅助函数 | 请求体读取 / 限制辅助函数 |
| `plugin-sdk/reply-runtime` | 共享回复运行时 | 入站分发、心跳、回复规划器、分块 |
| `plugin-sdk/reply-dispatch-runtime` | 窄范围回复分发辅助函数 | 完成、提供商分发和会话标签辅助函数 |
| `plugin-sdk/reply-dispatch-runtime` | 窄范围回复分发辅助函数 | 收尾、提供商分发和会话标签辅助函数 |
| `plugin-sdk/reply-history` | 回复历史辅助函数 | `buildHistoryContext`, `buildPendingHistoryContextFromMap`, `recordPendingHistoryEntry`, `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/reply-reference` | 回复引用规划 | `createReplyReferencePlanner` |
| `plugin-sdk/reply-chunking` | 回复分块辅助函数 | 文本 / markdown 分块辅助函数 |
| `plugin-sdk/reply-chunking` | 回复分块辅助函数 | 文本 / Markdown 分块辅助函数 |
| `plugin-sdk/session-store-runtime` | 会话存储辅助函数 | 存储路径 + updated-at 辅助函数 |
| `plugin-sdk/state-paths` | 状态路径辅助函数 | 状态和 OAuth 目录辅助函数 |
| `plugin-sdk/state-paths` | 状态路径辅助函数 | 状态目录和 OAuth 目录辅助函数 |
| `plugin-sdk/routing` | 路由 / session-key 辅助函数 | `resolveAgentRoute`, `buildAgentSessionKey`, `resolveDefaultAgentBoundAccountId`、session-key 规范化辅助函数 |
| `plugin-sdk/status-helpers` | 渠道状态辅助函数 | 渠道 / 账户状态摘要构建器、运行时状态默认值、问题元数据辅助函数 |
| `plugin-sdk/target-resolver-runtime` | 目标解析器辅助函数 | 共享目标解析器辅助函数 |
| `plugin-sdk/string-normalization-runtime` | 字符串规范化辅助函数 | slug / 字符串规范化辅助函数 |
| `plugin-sdk/request-url` | 请求 URL 辅助函数 | 从类请求输入中提取字符串 URL |
| `plugin-sdk/request-url` | 请求 URL 辅助函数 | 从类请求输入中提取字符串 URL |
| `plugin-sdk/run-command` | 定时命令辅助函数 | 带标准化 stdout / stderr 的定时命令运行器 |
| `plugin-sdk/param-readers` | 参数读取器 | 通用工具 / CLI 参数读取器 |
| `plugin-sdk/tool-payload` | 工具载提取 | 从工具结果对象中提取标准化载 |
| `plugin-sdk/tool-send` | 工具发送提取 | 从工具参数中提取规范发送目标字段 |
| `plugin-sdk/tool-payload` | 工具载提取 | 从工具结果对象中提取标准化载 |
| `plugin-sdk/tool-send` | 工具发送提取 | 从工具参数中提取规范发送目标字段 |
| `plugin-sdk/temp-path` | 临时路径辅助函数 | 共享临时下载路径辅助函数 |
| `plugin-sdk/logging-core` | 日志辅助函数 | 子系统 logger 和脱敏辅助函数 |
| `plugin-sdk/logging-core` | 日志辅助函数 | 子系统日志器和脱敏辅助函数 |
| `plugin-sdk/markdown-table-runtime` | Markdown 表格辅助函数 | Markdown 表格模式辅助函数 |
| `plugin-sdk/reply-payload` | 消息回复类型 | 回复载类型 |
| `plugin-sdk/provider-setup` | 精选的本地 / 自托管提供商设置辅助函数 | 自托管提供商发现 / 配置辅助函数 |
| `plugin-sdk/self-hosted-provider-setup` | 聚焦的 OpenAI 兼容自托管提供商设置辅助函数 | 相同的自托管提供商发现 / 配置辅助函数 |
| `plugin-sdk/reply-payload` | 消息回复类型 | 回复载类型 |
| `plugin-sdk/provider-setup` | 面向本地 / 自托管提供商的精选设置辅助函数 | 自托管提供商发现 / 配置辅助函数 |
| `plugin-sdk/self-hosted-provider-setup` | 聚焦的 OpenAI 兼容自托管提供商设置辅助函数 | 同一组自托管提供商发现 / 配置辅助函数 |
| `plugin-sdk/provider-auth-runtime` | 提供商运行时认证辅助函数 | 运行时 API key 解析辅助函数 |
| `plugin-sdk/provider-auth-api-key` | 提供商 API key 设置辅助函数 | API key 新手引导 / profile 写入辅助函数 |
| `plugin-sdk/provider-auth-result` | 提供商 auth-result 辅助函数 | 标准 OAuth auth-result 构建器 |
| `plugin-sdk/provider-auth-api-key` | 提供商 API key 设置辅助函数 | API key 新手引导 / 配置文件写入辅助函数 |
| `plugin-sdk/provider-auth-result` | 提供商认证结果辅助函数 | 标准 OAuth 认证结果构建器 |
| `plugin-sdk/provider-auth-login` | 提供商交互式登录辅助函数 | 共享交互式登录辅助函数 |
| `plugin-sdk/provider-selection-runtime` | 提供商选择辅助函数 | 已配置或自动提供商选择,以及原始提供商配置合并 |
| `plugin-sdk/provider-env-vars` | 提供商环境变量辅助函数 | 提供商认证环境变量查找辅助函数 |
| `plugin-sdk/provider-model-shared` | 共享提供商模型 / 重放辅助函数 | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`、共享 replay-policy 构建器、provider-endpoint 辅助函数以及 model-id 规范化辅助函数 |
| `plugin-sdk/provider-model-shared` | 共享提供商模型 / 重放辅助函数 | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`、共享重放策略构建器、提供商端点辅助函数,以及 model-id 规范化辅助函数 |
| `plugin-sdk/provider-catalog-shared` | 共享提供商目录辅助函数 | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
| `plugin-sdk/provider-onboard` | 提供商新手引导补丁 | 新手引导配置辅助函数 |
| `plugin-sdk/provider-http` | 提供商 HTTP 辅助函数 | 通用提供商 HTTP / endpoint capability 辅助函数,包括音频转录 multipart form 辅助函数 |
| `plugin-sdk/provider-http` | 提供商 HTTP 辅助函数 | 通用提供商 HTTP / 端点能力辅助函数,包括音频转录 multipart 表单辅助函数 |
| `plugin-sdk/provider-web-fetch` | 提供商 web-fetch 辅助函数 | web-fetch 提供商注册 / 缓存辅助函数 |
| `plugin-sdk/provider-web-search-config-contract` | 提供商 web-search 配置辅助函数 | 面向不需要插件启用接线的提供商的窄范围 web-search 配置 / 凭证辅助函数 |
| `plugin-sdk/provider-web-search-contract` | 提供商 web-search 契约辅助函数 | 窄范围 web-search 配置 / 凭证契约辅助函数,例如 `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` 以及作用域凭证 setter / getter |
| `plugin-sdk/provider-web-search-config-contract` | 提供商 web-search 配置辅助函数 | 面向无需插件启用线路的提供商的窄范围 web-search 配置 / 凭证辅助函数 |
| `plugin-sdk/provider-web-search-contract` | 提供商 web-search 契约辅助函数 | 窄范围 web-search 配置 / 凭证契约辅助函数,例如 `createWebSearchProviderContractFields`、`enablePluginInConfig`、`resolveProviderWebSearchPluginConfig`,以及作用域化凭证 setter / getter |
| `plugin-sdk/provider-web-search` | 提供商 web-search 辅助函数 | web-search 提供商注册 / 缓存 / 运行时辅助函数 |
| `plugin-sdk/provider-tools` | 提供商工具 / schema 兼容辅助函数 | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`、Gemini schema 清理 + 诊断,以及 xAI 兼容性辅助函数,例如 `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-tools` | 提供商工具 / schema 兼容辅助函数 | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, Gemini schema 清理 + 诊断,以及 xAI 兼容辅助函数,例如 `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-usage` | 提供商用量辅助函数 | `fetchClaudeUsage`, `fetchGeminiUsage`, `fetchGithubCopilotUsage` 以及其他提供商用量辅助函数 |
| `plugin-sdk/provider-stream` | 提供商流包装辅助函数 | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`、流包装类型,以及共享 Anthropic / Bedrock / Google / Kilocode / Moonshot AI / OpenAI / OpenRouter / Z.A.I / MiniMax / Copilot 包装辅助函数 |
| `plugin-sdk/provider-transport-runtime` | 提供商传输辅助函数 | 原生提供商传输辅助函数,例如 guarded fetch、传输消息转换以及可写传输事件流 |
| `plugin-sdk/provider-stream` | 提供商流包装辅助函数 | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`、流包装类型,以及共享 Anthropic / Bedrock / Google / Kilocode / Moonshot / OpenAI / OpenRouter / Z.A.I / MiniMax / Copilot 包装辅助函数 |
| `plugin-sdk/provider-transport-runtime` | 提供商传输辅助函数 | 原生提供商传输辅助函数,例如受保护 fetch、传输消息转换和可写传输事件流 |
| `plugin-sdk/keyed-async-queue` | 有序异步队列 | `KeyedAsyncQueue` |
| `plugin-sdk/media-runtime` | 共享媒体辅助函数 | 媒体获取 / 转换 / 存储辅助函数,以及媒体载构建器 |
| `plugin-sdk/media-generation-runtime` | 共享媒体生成辅助函数 | 图像 / 视频 / 音乐生成的共享故障转移辅助函数、候选项选择以及缺失模型消息 |
| `plugin-sdk/media-understanding` | 媒体理解辅助函数 | 媒体理解提供商类型,以及面向提供商的图像 / 音频辅助导出 |
| `plugin-sdk/text-runtime` | 共享文本辅助函数 | 对助手可见文本的剥离、markdown 渲染 / 分块 / 表格辅助函数、脱敏辅助函数、directive-tag 辅助函数、安全文本工具以及相关文本 / 日志辅助函数 |
| `plugin-sdk/media-runtime` | 共享媒体辅助函数 | 媒体获取 / 转换 / 存储辅助函数,以及媒体载构建器 |
| `plugin-sdk/media-generation-runtime` | 共享媒体生成辅助函数 | 共享故障转移辅助函数、候选项选择,以及用于图像 / 视频 / 音乐生成的缺失模型提示 |
| `plugin-sdk/media-understanding` | 媒体理解辅助函数 | 媒体理解提供商类型,以及面向提供商的图像 / 音频辅助函数导出 |
| `plugin-sdk/text-runtime` | 共享文本辅助函数 | 面向助手可见文本剥离、Markdown 渲染 / 分块 / 表格辅助函数、脱敏辅助函数、指令标签辅助函数、安全文本工具,以及相关文本 / 日志辅助函数 |
| `plugin-sdk/text-chunking` | 文本分块辅助函数 | 出站文本分块辅助函数 |
| `plugin-sdk/speech` | 语音辅助函数 | 语音提供商类型,以及面向提供商的 directive、注册表和校验辅助函数 |
| `plugin-sdk/speech-core` | 共享语音核心 | 语音提供商类型、注册表、directives、规范化 |
| `plugin-sdk/realtime-transcription` | 实时转录辅助函数 | 提供商类型、注册表辅助函数以及共享 WebSocket 会话辅助函数 |
| `plugin-sdk/realtime-voice` | 实时语音辅助函数 | 提供商类型、注册表 / 解析辅助函数以及桥接会话辅助函数 |
| `plugin-sdk/speech` | 语音辅助函数 | 语音提供商类型,以及面向提供商的指令、注册表和校验辅助函数 |
| `plugin-sdk/speech-core` | 共享语音核心 | 语音提供商类型、注册表、指令、规范化 |
| `plugin-sdk/realtime-transcription` | 实时转录辅助函数 | 提供商类型、注册表辅助函数共享 WebSocket 会话辅助函数 |
| `plugin-sdk/realtime-voice` | 实时语音辅助函数 | 提供商类型、注册表 / 解析辅助函数桥接会话辅助函数 |
| `plugin-sdk/image-generation-core` | 共享图像生成核心 | 图像生成类型、故障转移、认证和注册表辅助函数 |
| `plugin-sdk/music-generation` | 音乐生成辅助函数 | 音乐生成提供商 / 请求 / 结果类型 |
| `plugin-sdk/music-generation-core` | 共享音乐生成核心 | 音乐生成类型、故障转移辅助函数、提供商查找和 model-ref 解析 |
| `plugin-sdk/video-generation` | 视频生成辅助函数 | 视频生成提供商 / 请求 / 结果类型 |
| `plugin-sdk/video-generation-core` | 共享视频生成核心 | 视频生成类型、故障转移辅助函数、提供商查找和 model-ref 解析 |
| `plugin-sdk/interactive-runtime` | 交互式回复辅助函数 | 交互式回复负载规范化 / 归约 |
| `plugin-sdk/interactive-runtime` | 交互式回复辅助函数 | 交互式回复载荷规范化 / 缩减 |
| `plugin-sdk/channel-config-primitives` | 渠道配置原语 | 窄范围渠道 config-schema 原语 |
| `plugin-sdk/channel-config-writes` | 渠道 config-write 辅助函数 | 渠道 config-write 授权辅助函数 |
| `plugin-sdk/channel-config-writes` | 渠道配置写入辅助函数 | 渠道配置写入授权辅助函数 |
| `plugin-sdk/channel-plugin-common` | 共享渠道前导模块 | 共享渠道插件前导导出 |
| `plugin-sdk/channel-status` | 渠道状态辅助函数 | 共享渠道状态快照 / 摘要辅助函数 |
| `plugin-sdk/allowlist-config-edit` | allowlist 配置辅助函数 | allowlist 配置编辑 / 读取辅助函数 |
| `plugin-sdk/allowlist-config-edit` | Allowlist 配置辅助函数 | Allowlist 配置编辑 / 读取辅助函数 |
| `plugin-sdk/group-access` | 群组访问辅助函数 | 共享群组访问决策辅助函数 |
| `plugin-sdk/direct-dm` | 直接私信辅助函数 | 共享直接私信 认证 / 守卫辅助函数 |
| `plugin-sdk/direct-dm` | 直接私信辅助函数 | 共享直接私信认证 / 保护辅助函数 |
| `plugin-sdk/extension-shared` | 共享扩展辅助函数 | 被动渠道 / 状态和环境代理辅助原语 |
| `plugin-sdk/webhook-targets` | webhook 目标辅助函数 | webhook 目标注册表和 route-install 辅助函数 |
| `plugin-sdk/webhook-path` | webhook 路径辅助函数 | webhook 路径规范化辅助函数 |
| `plugin-sdk/web-media` | 共享 Web 媒体辅助函数 | 远程 / 本地媒体加载辅助函数 |
| `plugin-sdk/zod` | Zod 重新导出 | 为插件 SDK 使用重新导出的 `zod` |
| `plugin-sdk/memory-core` | 内置 memory-core 辅助函数 | Memory 核心管理器 / 配置 / 文件 / CLI 辅助接口 |
| `plugin-sdk/memory-core-engine-runtime` | Memory 引擎运行时外观 | Memory 索引 / 搜索运行时外观 |
| `plugin-sdk/webhook-targets` | Webhook 目标辅助函数 | Webhook 目标注册表和路由安装辅助函数 |
| `plugin-sdk/webhook-path` | Webhook 路径辅助函数 | Webhook 路径规范化辅助函数 |
| `plugin-sdk/web-media` | 共享 web 媒体辅助函数 | 远程 / 本地媒体加载辅助函数 |
| `plugin-sdk/zod` | Zod 重新导出 | 为插件 SDK 使用重新导出的 `zod` |
| `plugin-sdk/memory-core` | 内置 memory-core 辅助函数 | Memory 管理器 / 配置 / 文件 / CLI 辅助接口 |
| `plugin-sdk/memory-core-engine-runtime` | Memory 引擎运行时门面 | Memory 索引 / 搜索运行时门面 |
| `plugin-sdk/memory-core-host-engine-foundation` | Memory 宿主基础引擎 | Memory 宿主基础引擎导出 |
| `plugin-sdk/memory-core-host-engine-embeddings` | Memory 宿主嵌入引擎 | Memory 嵌入契约、注册表访问、本地提供商以及通用批处理 / 远程辅助函数;具体远程提供商位于其所属插件中 |
| `plugin-sdk/memory-core-host-engine-embeddings` | Memory 宿主嵌入引擎 | Memory 嵌入契约、注册表访问、本地提供商通用批处理 / 远程辅助函数;具体远程提供商位于其所属插件中 |
| `plugin-sdk/memory-core-host-engine-qmd` | Memory 宿主 QMD 引擎 | Memory 宿主 QMD 引擎导出 |
| `plugin-sdk/memory-core-host-engine-storage` | Memory 宿主存储引擎 | Memory 宿主存储引擎导出 |
| `plugin-sdk/memory-core-host-multimodal` | Memory 宿主多模态辅助函数 | Memory 宿主多模态辅助函数 |
@ -362,60 +368,62 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
| `plugin-sdk/memory-core-host-runtime-cli` | Memory 宿主 CLI 运行时 | Memory 宿主 CLI 运行时辅助函数 |
| `plugin-sdk/memory-core-host-runtime-core` | Memory 宿主核心运行时 | Memory 宿主核心运行时辅助函数 |
| `plugin-sdk/memory-core-host-runtime-files` | Memory 宿主文件 / 运行时辅助函数 | Memory 宿主文件 / 运行时辅助函数 |
| `plugin-sdk/memory-host-core` | Memory 宿主核心运行时别名 | 面向供应商中立的 Memory 宿主核心运行时辅助函数别名 |
| `plugin-sdk/memory-host-events` | Memory 宿主事件日志别名 | 面向供应商中立的 Memory 宿主事件日志辅助函数别名 |
| `plugin-sdk/memory-host-files` | Memory 宿主文件 / 运行时别名 | 面向供应商中立的 Memory 宿主文件 / 运行时辅助函数别名 |
| `plugin-sdk/memory-host-markdown` | 托管 markdown 辅助函数 | 面向与 Memory 邻接插件的共享托管 markdown 辅助函数 |
| `plugin-sdk/memory-host-search` | 活跃 Memory 搜索外观 | 惰性活跃 Memory search-manager 运行时外观 |
| `plugin-sdk/memory-host-status` | Memory 宿主状态别名 | 面向供应商中立的 Memory 宿主状态辅助函数别名 |
| `plugin-sdk/memory-host-core` | Memory 宿主核心运行时别名 | 面向商中立的 Memory 宿主核心运行时辅助函数别名 |
| `plugin-sdk/memory-host-events` | Memory 宿主事件日志别名 | 面向商中立的 Memory 宿主事件日志辅助函数别名 |
| `plugin-sdk/memory-host-files` | Memory 宿主文件 / 运行时别名 | 面向商中立的 Memory 宿主文件 / 运行时辅助函数别名 |
| `plugin-sdk/memory-host-markdown` | 托管 Markdown 辅助函数 | 面向 Memory 相邻插件的共享托管 Markdown 辅助函数 |
| `plugin-sdk/memory-host-search` | 活动 Memory 搜索门面 | 惰性活动 Memory 搜索管理器运行时门面 |
| `plugin-sdk/memory-host-status` | Memory 宿主状态别名 | 面向商中立的 Memory 宿主状态辅助函数别名 |
| `plugin-sdk/memory-lancedb` | 内置 memory-lancedb 辅助函数 | Memory-lancedb 辅助接口 |
| `plugin-sdk/testing` | 测试工具 | 测试辅助函数和 mocks |
</Accordion>
这个表刻意只包含常见迁移子集,而不是完整的 SDK
接口。完整的 200+ 个入口点列表位于
接口。完整的 200+ 个入口点列表位于
`scripts/lib/plugin-sdk-entrypoints.json`
该列表仍然包含一些内置插件辅助接口,例如
`plugin-sdk/feishu`, `plugin-sdk/feishu-setup`, `plugin-sdk/zalo`,
`plugin-sdk/zalo-setup``plugin-sdk/matrix*`。这些接口仍会继续导出,
用于内置插件维护和兼容性,但它们被有意省略在常见迁移表之外,也不是
新插件代码推荐使用的目标。
`plugin-sdk/feishu`、`plugin-sdk/feishu-setup`、`plugin-sdk/zalo`、
`plugin-sdk/zalo-setup``plugin-sdk/matrix*`。这些导出仍会保留
用于内置插件维护和兼容性,但它们被有意排除在常见迁移表之外,
也不是新插件代码推荐目标。
同样的规则也适用于其他内置辅助函数家族,例如:
同样的规则也适用于其他内置辅助接口族,例如:
- 浏览器支持辅助函数:`plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support`
- 浏览器支持辅助函数:`plugin-sdk/browser-cdp`、`plugin-sdk/browser-config-runtime`、`plugin-sdk/browser-config-support`、`plugin-sdk/browser-control-auth`、`plugin-sdk/browser-node-runtime`、`plugin-sdk/browser-profiles`、`plugin-sdk/browser-security-runtime`、`plugin-sdk/browser-setup-tools`、`plugin-sdk/browser-support`
- Matrix`plugin-sdk/matrix*`
- LINE`plugin-sdk/line*`
- IRC`plugin-sdk/irc*`
- 内置辅助函数 / 插件接口,例如 `plugin-sdk/googlechat`,
`plugin-sdk/zalouser`, `plugin-sdk/bluebubbles*`,
`plugin-sdk/mattermost*`, `plugin-sdk/msteams`,
`plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`,
`plugin-sdk/twitch`,
`plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`,
`plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`,
- 内置辅助函数 / 插件接口,例如 `plugin-sdk/googlechat`
`plugin-sdk/zalouser`、`plugin-sdk/bluebubbles*`、
`plugin-sdk/mattermost*`、`plugin-sdk/msteams`、
`plugin-sdk/nextcloud-talk`、`plugin-sdk/nostr`、`plugin-sdk/tlon`、
`plugin-sdk/twitch`
`plugin-sdk/github-copilot-login`、`plugin-sdk/github-copilot-token`、
`plugin-sdk/diagnostics-otel`、`plugin-sdk/diffs`、`plugin-sdk/llm-task`、
`plugin-sdk/thread-ownership``plugin-sdk/voice-call`
`plugin-sdk/github-copilot-token` 当前暴露了窄范围的令牌辅助接口
`DEFAULT_COPILOT_API_BASE_URL`,
`plugin-sdk/github-copilot-token` 当前公开的是窄范围 token 辅助接口
`DEFAULT_COPILOT_API_BASE_URL`
`deriveCopilotApiBaseUrlFromToken``resolveCopilotApiToken`
请使用与任务最匹配的最窄导入路径。如果你找不到某个导出,
`src/plugin-sdk/` 中的源码,或在 Discord 中提问。
请使用最符合当前任务的最窄导入路径。如果你找不到某个导出,
请查 `src/plugin-sdk/` 中的源码,或在 Discord 中提问。
## 当前弃用项
以下是横跨插件 SDK、提供商契约、运行时接口和清单的更窄范围弃用项。它们目前仍然可用但将在未来的主要版本中移除。每个条目下方都给出了旧 API 到其规范替代方案的映射。
这些更窄范围的弃用项适用于整个插件 SDK、提供商契约、
运行时接口和清单。它们目前仍然可用,但将在未来的主要版本中移除。
每个条目下方都给出了旧 API 与其规范替代方案的映射。
<AccordionGroup>
<Accordion title="command-auth help builders → command-status">
**旧版(`openclaw/plugin-sdk/command-auth`**`buildCommandsMessage`,
`buildCommandsMessagePaginated`, `buildHelpMessage`
<Accordion title="command-auth 帮助构建器 → command-status">
**旧版(`openclaw/plugin-sdk/command-auth`**`buildCommandsMessage`
`buildCommandsMessagePaginated`、`buildHelpMessage`
**新版(`openclaw/plugin-sdk/command-status`**:签名相同,导出相同——
只是从更窄的子路径导入。`command-auth`
将它们重新导出为兼容性桩
**新版(`openclaw/plugin-sdk/command-status`**:签名相同,导出相同——
只是改为从更窄的子路径导入。`command-auth`
将它们作为兼容性 stub 重新导出。
```typescript
// Before
@ -427,95 +435,93 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
</Accordion>
<Accordion title="Mention gating helpers → resolveInboundMentionDecision">
<Accordion title="提及门控辅助函数 → resolveInboundMentionDecision">
**旧版**`resolveInboundMentionRequirement({ facts, policy })` 和
`shouldDropInboundForMention(...)`,来自
`openclaw/plugin-sdk/channel-inbound`
`openclaw/plugin-sdk/channel-mention-gating`
**新版**`resolveInboundMentionDecision({ facts, policy })` —— 返回一个
**新版**`resolveInboundMentionDecision({ facts, policy })` —— 返回一个
单一决策对象,而不是拆分为两个调用。
下游渠道插件Slack、Discord、Matrix、Microsoft Teams已经完成切换。
下游渠道插件Slack、Discord、Matrix、MS Teams已全部完成切换。
</Accordion>
<Accordion title="Channel runtime shim and channel actions helpers">
`openclaw/plugin-sdk/channel-runtime`为较旧
渠道插件提供的兼容性垫片。新代码不要导入它;请使
<Accordion title="渠道运行时 shim 和渠道操作辅助函数">
`openclaw/plugin-sdk/channel-runtime`面向旧渠道插件的兼容性 shim。
新代码不要导入它;请改
`openclaw/plugin-sdk/channel-runtime-context` 来注册运行时
对象。
`openclaw/plugin-sdk/channel-actions` 中的 `channelActions*` 辅助函数
已与原始 “actions” 渠道导出一起弃用。请改为通过语义化的
`presentation` 接口暴露能力——渠道插件声明它们能渲染什么
cards、buttons、selects而不是声明它们接受哪些原始
action 名称。
`openclaw/plugin-sdk/channel-actions` 中的 `channelActions*`
辅助函数也已随原始 “actions” 渠道导出一同弃用。请改为通过语义化的
`presentation` 接口暴露能力——渠道插件应声明它们能渲染什么
(卡片、按钮、选择器),而不是声明它们接受哪些原始操作名称。
</Accordion>
<Accordion title="Web search provider tool() helper → createTool() on the plugin">
<Accordion title="Web 搜索提供商 tool() 辅助函数 → 插件上的 createTool()">
**旧版**:来自 `openclaw/plugin-sdk/provider-web-search``tool()`
工厂。
工厂函数
**新版**:直接在提供商插件上实现 `createTool(...)`
OpenClaw 不再需要 SDK 辅助函数来注册工具包装器。
OpenClaw 不再需要 SDK 辅助函数来注册工具包装器。
</Accordion>
<Accordion title="Plaintext channel envelopes → BodyForAgent">
<Accordion title="纯文本渠道 envelope → BodyForAgent">
**旧版**`formatInboundEnvelope(...)`(以及
`ChannelMessageForAgent.channelEnvelope`),用于从入站渠道消息构建
扁平纯文本提示 envelope。
扁平纯文本提示 envelope。
**新版**`BodyForAgent` 加结构化用户上下文块。渠道
插件会将路由元数据thread、topic、reply-to、reactions作为
类型化字段附加,而不是把它们拼接进提示字符串中。
`formatAgentEnvelope(...)` 辅助函数仍支持用于合成的
面向助手的 envelope但入站纯文本 envelope 正在逐步淘汰。
**新版**`BodyForAgent` 加结构化用户上下文块。
渠道插件会将路由元数据(线程、主题、reply-to、reactions作为
类型化字段附加,而不是将它们拼接到提示字符串中。
`formatAgentEnvelope(...)` 辅助函数仍支持用于合成面向助手
envelope但入站纯文本 envelope 正在逐步淘汰。
受影响区域:`inbound_claim`、`message_received`,以及任何对
`channelEnvelope` 文本后处理的自定义渠道插件。
受影响区域:`inbound_claim`、`message_received`,以及任何
`channelEnvelope` 文本进行后处理的自定义渠道插件。
</Accordion>
<Accordion title="Provider discovery types → provider catalog types">
四个 discovery 类型别名现在只是对
catalog 时代类型的轻量封装:
<Accordion title="提供商发现类型 → 提供商目录类型">
四个发现类型别名现在只是目录时代类型的薄包装:
| 旧别名 | 新类型 |
| ------------------------- | ------------------------- |
| `ProviderDiscoveryOrder` | `ProviderCatalogOrder` |
| `ProviderDiscoveryContext`| `ProviderCatalogContext` |
| `ProviderDiscoveryResult` | `ProviderCatalogResult` |
| `ProviderPluginDiscovery` | `ProviderPluginCatalog` |
| `ProviderDiscoveryOrder` | `ProviderCatalogOrder` |
| `ProviderDiscoveryContext`| `ProviderCatalogContext` |
| `ProviderDiscoveryResult` | `ProviderCatalogResult` |
| `ProviderPluginDiscovery` | `ProviderPluginCatalog` |
以及旧版的 `ProviderCapabilities` 静态集合——提供商插件
另外,旧版的 `ProviderCapabilities` 静态集合也已不再推荐——提供商插件
应通过提供商运行时契约附加能力事实,而不是使用静态对象。
</Accordion>
<Accordion title="Thinking policy hooks → resolveThinkingProfile">
**旧版**`ProviderThinkingPolicy` 上三个独立钩子):
<Accordion title="Thinking 策略钩子 → resolveThinkingProfile">
**旧版**`ProviderThinkingPolicy` 上分散的三个钩子):
`isBinaryThinking(ctx)`、`supportsXHighThinking(ctx)` 和
`resolveDefaultThinkingLevel(ctx)`
**新版**:单个 `resolveThinkingProfile(ctx)`,返回一个
`ProviderThinkingProfile`,包含规范 `id`、可选 `label` 以及
按级别排序的列表。OpenClaw 会按 profile 排名自动降级过期的已存储值。
**新版**:单个 `resolveThinkingProfile(ctx)`返回一个
`ProviderThinkingProfile`其中包含规范 `id`、可选 `label` 以及
已排序的级别列表。OpenClaw 会按 profile 排名自动降级过时的已存储值。
只需实现一个钩子,而不是三个。旧版钩子在弃用窗口期间仍可使用,
但不会与 profile 结果进行组合。
现在只需实现一个钩子,而不是三个。旧版钩子在弃用窗口期间仍可继续使用,
但不会与 profile 结果组合。
</Accordion>
<Accordion title="External OAuth provider fallback → contracts.externalAuthProviders">
**旧版**在插件清单中未声明提供商的情况下,实现
`resolveExternalOAuthProfiles(...)`
<Accordion title="外部 OAuth 提供商回退 → contracts.externalAuthProviders">
**旧版**:实现 `resolveExternalOAuthProfiles(...)`
但不在插件清单中声明该提供商
**新版**:在插件清单中声明 `contracts.externalAuthProviders`
**并且**实现 `resolveExternalAuthProfiles(...)`。旧 “auth
fallback” 路径会在运行时发出警告,并将在后续移除。
**并且**实现 `resolveExternalAuthProfiles(...)`。旧 “auth
fallback” 路径会在运行时发出警告,并将在之后被移除。
```json
{
@ -527,19 +533,19 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
</Accordion>
<Accordion title="Provider env-var lookup → setup.providers[].envVars">
**旧版**清单字段:`providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }`。
<Accordion title="提供商环境变量查找 → setup.providers[].envVars">
**旧版** 清单字段:`providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }`。
**新版**:将相同的环境变量查找镜像到清单中的 `setup.providers[].envVars`
中。这样可以把设置 / 状态环境变量元数据整合到一个位置,
并避免仅回答环境变量查找而启动插件运行时。
**新版**:将相同的环境变量查找镜像到清单中的 `setup.providers[].envVars`
这样可以将设置 / 状态环境变量元数据统一到一个位置,
并避免仅为回答环境变量查找而启动插件运行时。
`providerAuthEnvVars` 仍然通过兼容适配器支持,
`providerAuthEnvVars` 会通过兼容适配器继续受支持,
直到弃用窗口结束。
</Accordion>
<Accordion title="Memory plugin registration → registerMemoryCapability">
<Accordion title="Memory 插件注册 → registerMemoryCapability">
**旧版**:三个独立调用——
`api.registerMemoryPromptSection(...)`
`api.registerMemoryFlushPlan(...)`
@ -548,22 +554,22 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
**新版**:在 memory-state API 上使用一个调用——
`registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime })`
相同插槽,单次注册调用。附加型 Memory 辅助函数
`registerMemoryPromptSupplement`, `registerMemoryCorpusSupplement`,
插槽相同,但统一为单次注册调用。增量式 Memory 辅助函数
`registerMemoryPromptSupplement`、`registerMemoryCorpusSupplement`、
`registerMemoryEmbeddingProvider`)不受影响。
</Accordion>
<Accordion title="Subagent session messages types renamed">
仍从 `src/plugins/runtime/types.ts` 导出的两个旧类型别名:
<Accordion title="Subagent 会话消息类型已重命名">
`src/plugins/runtime/types.ts` 导出的两个旧类型别名:
| 旧版 | 新版 |
| ----------------------------- | ------------------------------- |
| `SubagentReadSessionParams` | `SubagentGetSessionMessagesParams` |
| `SubagentReadSessionResult` | `SubagentGetSessionMessagesResult` |
| `SubagentReadSessionParams` | `SubagentGetSessionMessagesParams` |
| `SubagentReadSessionResult` | `SubagentGetSessionMessagesResult` |
运行时方法 `readSession` 已弃用,改用
`getSessionMessages`。签名相同;旧方法会直接调用
运行时方法 `readSession` 已弃用,推荐改用
`getSessionMessages`。签名相同;旧方法会转调到
新方法。
</Accordion>
@ -572,7 +578,7 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
**旧版**`runtime.tasks.flow`(单数)返回一个实时 task-flow 访问器。
**新版**`runtime.tasks.flows`(复数)返回基于 DTO 的 TaskFlow 访问,
它具备导入安全性,且不需要加载完整任务运行时。
这种方式可安全导入,且不需要加载完整任务运行时。
```typescript
// Before
@ -583,18 +589,18 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
</Accordion>
<Accordion title="Embedded extension factories → agent tool-result middleware">
上文“如何迁移 → 将 Pi 工具结果扩展迁移到中间件”中已涵盖。这里列出
仅为完整性考虑:已移除的、仅限 Pi 的
`api.registerEmbeddedExtensionFactory(...)` 路径现由
`api.registerAgentToolResultMiddleware(...)` 替代,并在
`contracts.agentToolResultMiddleware`提供显式运行时
<Accordion title="嵌入式扩展工厂 → 智能体工具结果中间件">
上文 “如何迁移 → 将 Pi 工具结果扩展迁移到中间件” 已对此进行说明。
这里为了完整性再次列出:已移除的、仅限 Pi 的
`api.registerEmbeddedExtensionFactory(...)` 路径,现替换为
`api.registerAgentToolResultMiddleware(...)`,并在
`contracts.agentToolResultMiddleware` 中显式声明运行时
列表。
</Accordion>
<Accordion title="OpenClawSchemaType alias → OpenClawConfig">
`openclaw/plugin-sdk` 重新导出的 `OpenClawSchemaType` 现在是
`OpenClawConfig`行别名。请优先使用规范名称。
<Accordion title="OpenClawSchemaType 别名 → OpenClawConfig">
`openclaw/plugin-sdk` 重新导出的 `OpenClawSchemaType` 现在
`OpenClawConfig`行别名。请优先使用规范名称。
```typescript
// Before
@ -609,32 +615,32 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
<Note>
扩展级弃用项(位于 `extensions/` 下的内置渠道 / 提供商插件内部)
会在它们各自的 `api.ts``runtime-api.ts`
barrel 中跟踪。它们不会影响第三方插件契约,因此未在此列出。如果你直接
使用某个内置插件的本地 barrel请在升级前先阅读
barrel 中的弃用注释。
barrel 中跟踪。它们不会影响第三方插件契约,因此这里不列出。
如果你直接使用某个内置插件的本地 barrel请在升级前先阅读
barrel 中的弃用注释。
</Note>
## 移除时间线
| 时间 | 会发生什么 |
| 时间 | 将发生的事情 |
| ---------------------- | ----------------------------------------------------------------------- |
| **现在** | 已弃用接口会发出运行时警告 |
| **下一个主要版本** | 已弃用接口将被移除;仍在使用它们的插件将会失 |
| **现在** | 已弃用接口会发出运行时警告 |
| **下一个主要版本** | 已弃用接口将被移除;仍在使用它们的插件将会失 |
所有核心插件都已完成迁移。外部插件应在下一个主要版本之前完成迁移。
所有核心插件都已完成迁移。外部插件应在下一个主要版本之前完成迁移。
## 临时抑制警告
你进行迁移期间,设置这些环境变量:
迁移期间工作时,可以设置以下环境变量:
```bash
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
```
这只是临时逃生舱口,不是永久解决方案。
这只是临时的应急出口,不是永久解决方案。
## 相关内容
## 相关
- [入门指南](/zh-CN/plugins/building-plugins) — 构建你的第一个插件
- [SDK 概览](/zh-CN/plugins/sdk-overview) — 完整子路径导入参考

View File

@ -1,22 +1,23 @@
---
read_when:
- 为插件导入选择合适的 plugin-sdk 子路径
- 审查 bundled-plugin 子路径和辅助接口
summary: 插件 SDK 子路径目录:按领域分组,说明各导入路径分别位于何处
- 为插件导入选择正确的 plugin-sdk 子路径
- 审查内置插件子路径和辅助接口
summary: 插件 SDK 子路径目录:按领域分组说明各导入项所在位置
title: 插件 SDK 子路径
x-i18n:
generated_at: "2026-04-24T18:37:19Z"
generated_at: "2026-04-25T01:52:11Z"
model: gpt-5.4
provider: openai
source_hash: 502fe07a2e1c8c6d70c5750d7a229e0262ecb94d4e535516a9cb939a8fa3e28c
source_hash: f24d5add576ec0985d8d4335fb244ffcc1b9fc4643b87f4d72d42ec44b138520
source_path: plugins/sdk-subpaths.md
workflow: 15
---
插件 SDK 通过 `openclaw/plugin-sdk/` 下的一组精简子路径对外暴露。
本页按用途对常用子路径进行归类说明。生成的完整列表包含 200 多个子路径,位于 `scripts/lib/plugin-sdk-entrypoints.json`;其中也会出现为 bundled-plugin 预留的辅助子路径,但除非文档页面明确将其作为公开能力介绍,否则它们都属于实现细节。
插件 SDK 以 `openclaw/plugin-sdk/` 下的一组精细子路径形式公开。
本页按用途分组,汇总了常用子路径。生成的完整列表包含 200 多个子路径,位于 `scripts/lib/plugin-sdk-entrypoints.json`
其中也包含为内置插件保留的辅助子路径,但除非某个文档页面明确将其列为公开能力,否则它们都属于实现细节。
关于插件编写指南,请参 [插件 SDK 概览](/zh-CN/plugins/sdk-overview)。
关于插件编写指南,请参 [插件 SDK 概览](/zh-CN/plugins/sdk-overview)。
## 插件入口
@ -34,181 +35,182 @@ x-i18n:
| `plugin-sdk/channel-core` | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` |
| `plugin-sdk/config-schema` | 根级 `openclaw.json` Zod schema 导出(`OpenClawSchema` |
| `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`,以及 `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
| `plugin-sdk/setup` | 共享的设置向导辅助函数、allowlist 提示、设置状态构建器 |
| `plugin-sdk/setup` | 共享的设置向导辅助工具、allowlist 提示和设置状态构建器 |
| `plugin-sdk/setup-runtime` | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` |
| `plugin-sdk/setup-adapter-runtime` | `createEnvPatchedAccountSetupAdapter` |
| `plugin-sdk/setup-tools` | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
| `plugin-sdk/account-core` | 多账户配置 / action-gate 辅助函数,以及默认账户回退辅助函数 |
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`account-id 规范化辅助函数 |
| `plugin-sdk/account-resolution` | 账户查找 + 默认回退辅助函数 |
| `plugin-sdk/account-helpers` | 精简的账户列表 / 账户操作辅助函数 |
| `plugin-sdk/account-core` | 多账户配置 / 操作门控辅助工具,以及默认账户回退辅助工具 |
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`账户 id 规范化辅助工具 |
| `plugin-sdk/account-resolution` | 账户查找 + 默认回退辅助工具 |
| `plugin-sdk/account-helpers` | 精细的账户列表 / 账户操作辅助工具 |
| `plugin-sdk/channel-pairing` | `createChannelPairingController` |
| `plugin-sdk/channel-reply-pipeline` | `createChannelReplyPipeline` |
| `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter` |
| `plugin-sdk/channel-config-schema` | 渠道配置 schema 类型 |
| `plugin-sdk/telegram-command-config` | Telegram 自定义命令规范化 / 校验辅助函数,带 bundled-contract 回退 |
| `plugin-sdk/command-gating` | 精简的命令授权 gate 辅助函数 |
| `plugin-sdk/telegram-command-config` | Telegram 自定义命令规范化 / 校验辅助工具,带内置契约回退 |
| `plugin-sdk/command-gating` | 精细的命令授权门控辅助工具 |
| `plugin-sdk/channel-policy` | `resolveChannelGroupRequireMention` |
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`、草稿流生命周期 / 完成辅助函数 |
| `plugin-sdk/inbound-envelope` | 共享的入站路由 + envelope 构建辅助函数 |
| `plugin-sdk/inbound-reply-dispatch` | 共享的入站记录与分发辅助函数 |
| `plugin-sdk/messaging-targets` | 目标解析 / 匹配辅助函数 |
| `plugin-sdk/outbound-media` | 共享的出站媒体加载辅助函数 |
| `plugin-sdk/outbound-runtime` | 出站身份、发送委托和负载规划辅助函数 |
| `plugin-sdk/poll-runtime` | 精简的投票规范化辅助函数 |
| `plugin-sdk/thread-bindings-runtime` | 线程绑定生命周期和适配器辅助函数 |
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`、草稿流生命周期 / 完成辅助工具 |
| `plugin-sdk/inbound-envelope` | 共享的入站路由 + envelope 构建辅助工具 |
| `plugin-sdk/inbound-reply-dispatch` | 共享的入站记录与分发辅助工具 |
| `plugin-sdk/messaging-targets` | 目标解析 / 匹配辅助工具 |
| `plugin-sdk/outbound-media` | 共享的出站媒体加载辅助工具 |
| `plugin-sdk/outbound-runtime` | 出站身份、发送委托和负载规划辅助工具 |
| `plugin-sdk/poll-runtime` | 精细的投票规范化辅助工具 |
| `plugin-sdk/thread-bindings-runtime` | 线程绑定生命周期与适配器辅助工具 |
| `plugin-sdk/agent-media-payload` | 旧版智能体媒体负载构建器 |
| `plugin-sdk/conversation-runtime` | 会话 / 线程绑定、配对和已配置绑定辅助函数 |
| `plugin-sdk/runtime-config-snapshot` | 运行时配置快照辅助函数 |
| `plugin-sdk/runtime-group-policy` | 运行时群组策略解析辅助函数 |
| `plugin-sdk/channel-status` | 共享的渠道状态快照 / 摘要辅助函数 |
| `plugin-sdk/channel-config-primitives` | 精的渠道配置 schema 基元 |
| `plugin-sdk/channel-config-writes` | 渠道配置写入授权辅助函数 |
| `plugin-sdk/conversation-runtime` | 对话 / 线程绑定、配对和已配置绑定辅助工具 |
| `plugin-sdk/runtime-config-snapshot` | 运行时配置快照辅助工具 |
| `plugin-sdk/runtime-group-policy` | 运行时群组策略解析辅助工具 |
| `plugin-sdk/channel-status` | 共享的渠道状态快照 / 摘要辅助工具 |
| `plugin-sdk/channel-config-primitives` | 精的渠道配置 schema 基元 |
| `plugin-sdk/channel-config-writes` | 渠道配置写入授权辅助工具 |
| `plugin-sdk/channel-plugin-common` | 共享的渠道插件前导导出 |
| `plugin-sdk/allowlist-config-edit` | allowlist 配置编辑 / 读取辅助函数 |
| `plugin-sdk/group-access` | 共享的群组访问决策辅助函数 |
| `plugin-sdk/direct-dm` | 共享的直接私信认证 / 守卫辅助函数 |
| `plugin-sdk/interactive-runtime` | 语义消息展示、投递以及旧版交互式回复辅助函数。参阅 [消息展示](/zh-CN/plugins/message-presentation) |
| `plugin-sdk/channel-inbound` | 兼容性 barrel包含入站去抖、提及匹配、提及策略辅助函数以及 envelope 辅助函数 |
| `plugin-sdk/channel-inbound-debounce` | 精简的入站去抖辅助函数 |
| `plugin-sdk/channel-mention-gating` | 精简的提及策略和提及文本辅助函数,不包含更广泛入站运行时接口 |
| `plugin-sdk/channel-envelope` | 精简的入站 envelope 格式化辅助函数 |
| `plugin-sdk/channel-location` | 渠道位置上下文和格式化辅助函数 |
| `plugin-sdk/channel-logging` | 用于入站丢弃以及 typing / ack 失败的渠道日志辅助函数 |
| `plugin-sdk/allowlist-config-edit` | allowlist 配置编辑 / 读取辅助工具 |
| `plugin-sdk/group-access` | 共享的群组访问决策辅助工具 |
| `plugin-sdk/direct-dm` | 共享的直接私信认证 / 守卫辅助工具 |
| `plugin-sdk/interactive-runtime` | 语义化消息呈现、投递以及旧版交互式回复辅助工具。参见 [消息呈现](/zh-CN/plugins/message-presentation) |
| `plugin-sdk/channel-inbound` | 入站防抖、提及匹配、提及策略辅助工具以及 envelope 辅助工具的兼容性 barrel |
| `plugin-sdk/channel-inbound-debounce` | 精细的入站防抖辅助工具 |
| `plugin-sdk/channel-mention-gating` | 不包含更广泛入站运行时接口的精细提及策略与提及文本辅助工具 |
| `plugin-sdk/channel-envelope` | 精细的入站 envelope 格式化辅助工具 |
| `plugin-sdk/channel-location` | 渠道位置上下文与格式化辅助工具 |
| `plugin-sdk/channel-logging` | 用于入站丢弃和 typing / ack 失败的渠道日志辅助工具 |
| `plugin-sdk/channel-send-result` | 回复结果类型 |
| `plugin-sdk/channel-actions` | 渠道消息动作辅助函数,以及为插件兼容性保留的已弃用原生 schema 辅助函数 |
| `plugin-sdk/channel-targets` | 目标解析 / 匹配辅助函数 |
| `plugin-sdk/channel-actions` | 渠道消息操作辅助工具,以及为插件兼容性保留的已弃用原生 schema 辅助工具 |
| `plugin-sdk/channel-targets` | 目标解析 / 匹配辅助工具 |
| `plugin-sdk/channel-contract` | 渠道契约类型 |
| `plugin-sdk/channel-feedback` | 反馈 / reaction 连接逻辑 |
| `plugin-sdk/channel-secret-runtime` | 精简的 secret-contract 辅助函数,例如 `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`,以及 secret target 类型 |
| `plugin-sdk/channel-feedback` | 反馈 / reaction 连接 |
| `plugin-sdk/channel-secret-runtime` | 精细的 secret 契约辅助工具,例如 `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`,以及 secret target 类型 |
</Accordion>
<Accordion title="提供商子路径">
| 子路径 | 关键导出 |
| --- | --- |
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
| `plugin-sdk/provider-setup` | 精选的本地 / 自托管 provider 设置辅助函数 |
| `plugin-sdk/self-hosted-provider-setup` | 专注于 OpenAI 兼容自托管 provider 的设置辅助函数 |
| `plugin-sdk/provider-setup` | 精选的本地 / 自托管提供商设置辅助工具 |
| `plugin-sdk/self-hosted-provider-setup` | 聚焦 OpenAI 兼容自托管提供商的设置辅助工具 |
| `plugin-sdk/cli-backend` | CLI 后端默认值 + watchdog 常量 |
| `plugin-sdk/provider-auth-runtime` | 面向 provider 插件的运行时 API key 解析辅助函数 |
| `plugin-sdk/provider-auth-api-key` | API key 新手引导 / profile 写入辅助函数,例如 `upsertApiKeyProfile` |
| `plugin-sdk/provider-auth-runtime` | 面向提供商插件的运行时 API key 解析辅助工具 |
| `plugin-sdk/provider-auth-api-key` | API key 新手引导 / profile 写入辅助工具,例如 `upsertApiKeyProfile` |
| `plugin-sdk/provider-auth-result` | 标准 OAuth 认证结果构建器 |
| `plugin-sdk/provider-auth-login` | 面向 provider 插件的共享交互式登录辅助函数 |
| `plugin-sdk/provider-env-vars` | provider 认证环境变量查找辅助函数 |
| `plugin-sdk/provider-auth-login` | 面向提供商插件的共享交互式登录辅助工具 |
| `plugin-sdk/provider-env-vars` | 提供商认证环境变量查找辅助工具 |
| `plugin-sdk/provider-auth` | `createProviderApiKeyAuthMethod`, `ensureApiKeyFromOptionEnvOrPrompt`, `upsertAuthProfile`, `upsertApiKeyProfile`, `writeOAuthCredentials` |
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`、共享 replay-policy 构建器、provider endpoint 辅助函数,以及 `normalizeNativeXaiModelId` 等 model-id 规范化辅助函数 |
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`、共享 replay-policy 构建器、provider-endpoint 辅助工具,以及模型 id 规范化辅助工具,如 `normalizeNativeXaiModelId` |
| `plugin-sdk/provider-catalog-shared` | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
| `plugin-sdk/provider-http` | 通用 provider HTTP / endpoint 能力辅助函数、provider HTTP 错误,以及音频转录 multipart form 辅助函数 |
| `plugin-sdk/provider-web-fetch-contract` | 精简的 web-fetch 配置 / 选择契约辅助函数,例如 `enablePluginInConfig``WebFetchProviderPlugin` |
| `plugin-sdk/provider-web-fetch` | web-fetch provider 注册 / 缓存辅助函数 |
| `plugin-sdk/provider-web-search-config-contract` | 面向不需要插件启用连接逻辑的 provider 的精简 web-search 配置 / 凭证辅助函数 |
| `plugin-sdk/provider-web-search-contract` | 精简的 web-search 配置 / 凭证契约辅助函数,例如 `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig`,以及作用域化凭证 setter / getter |
| `plugin-sdk/provider-web-search` | web-search provider 注册 / 缓存 / 运行时辅助函数 |
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, Gemini schema 清理 + 诊断,以及 xAI 兼容辅助函数,例`resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-usage` | `fetchClaudeUsage` 及类似导出 |
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`、流包装器类型,以及共享的 Anthropic / Bedrock / Google / Kilocode / Moonshot / OpenAI / OpenRouter / Z.A.I / MiniMax / Copilot 包装器辅助函数 |
| `plugin-sdk/provider-transport-runtime` | 原生 provider 传输辅助函数,例如受保护的 fetch、传输消息转换以及可写传输事件流 |
| `plugin-sdk/provider-onboard` | 新手引导配置补丁辅助函数 |
| `plugin-sdk/global-singleton` | 进程本地 singleton / map / cache 辅助函数 |
| `plugin-sdk/group-activation` | 精简的群组激活模式和命令解析辅助函数 |
| `plugin-sdk/provider-http` | 通用提供商 HTTP / endpoint 能力辅助工具、提供商 HTTP 错误,以及音频转录 multipart form 辅助工具 |
| `plugin-sdk/provider-web-fetch-contract` | 精细的 web-fetch 配置 / 选择契约辅助工具,例如 `enablePluginInConfig``WebFetchProviderPlugin` |
| `plugin-sdk/provider-web-fetch` | web-fetch 提供商注册 / 缓存辅助工具 |
| `plugin-sdk/provider-web-search-config-contract` | 适用于不需要插件启用连接逻辑的提供商的精细 web-search 配置 / 凭证辅助工具 |
| `plugin-sdk/provider-web-search-contract` | 精细的 web-search 配置 / 凭证契约辅助工具,例如 `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig`,以及作用域化凭证设置 / 获取器 |
| `plugin-sdk/provider-web-search` | web-search 提供商注册 / 缓存 / 运行时辅助工具 |
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, Gemini schema 清理 + 诊断,以及 xAI 兼容性辅助工具,`resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-usage` | `fetchClaudeUsage` 及类似 |
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`、流包装器类型,以及共享的 Anthropic / Bedrock / Google / Kilocode / Moonshot / OpenAI / OpenRouter / Z.A.I / MiniMax / Copilot 包装器辅助工具 |
| `plugin-sdk/provider-transport-runtime` | 原生提供商传输辅助工具,例如受保护的 fetch、传输消息转换以及可写传输事件流 |
| `plugin-sdk/provider-onboard` | 新手引导配置补丁辅助工具 |
| `plugin-sdk/global-singleton` | 进程本地 singleton / map / cache 辅助工具 |
| `plugin-sdk/group-activation` | 精细的群组激活模式与命令解析辅助工具 |
</Accordion>
<Accordion title="认证与安全子路径">
| 子路径 | 关键导出 |
| --- | --- |
| `plugin-sdk/command-auth` | `resolveControlCommandGate`、命令注册表辅助函数、发送者授权辅助函数 |
| `plugin-sdk/command-auth` | `resolveControlCommandGate`、命令注册表辅助工具、发送者授权辅助工具 |
| `plugin-sdk/command-status` | 命令 / 帮助消息构建器,例如 `buildCommandsMessagePaginated``buildHelpMessage` |
| `plugin-sdk/approval-auth-runtime` | 审批人解析以及同一聊天内 action-auth 辅助函数 |
| `plugin-sdk/approval-client-runtime` | 原生 exec 审批 profile / filter 辅助函数 |
| `plugin-sdk/approval-delivery-runtime` | 原生审批能力 / 传递适配器 |
| `plugin-sdk/approval-gateway-runtime` | 共享的审批 Gateway 网关解析辅助函数 |
| `plugin-sdk/approval-handler-adapter-runtime` | 面向高频渠道入口点的轻量级原生审批适配器加载辅助函数 |
| `plugin-sdk/approval-handler-runtime` | 范围更广的审批处理器运行时辅助函数;如果更精简的 adapter / gateway 接口已经足够,优先使用它们 |
| `plugin-sdk/approval-native-runtime` | 原生审批目标 + 账户绑定辅助函数 |
| `plugin-sdk/approval-reply-runtime` | exec / 插件审批回复负载辅助函数 |
| `plugin-sdk/reply-dedupe` | 精简的入站回复去重重置辅助函数 |
| `plugin-sdk/channel-contract-testing` | 精简的渠道契约测试辅助函数,不包含宽泛的测试 barrel |
| `plugin-sdk/command-auth-native` | 原生命令认证 + 原生会话目标辅助函数 |
| `plugin-sdk/command-detection` | 共享的命令检测辅助函数 |
| `plugin-sdk/command-primitives-runtime` | 面向高频渠道路径的轻量级命令文本谓词 |
| `plugin-sdk/command-surface` | 命令主体规范化和命令表面辅助函数 |
| `plugin-sdk/approval-auth-runtime` | 审批人解析和同聊天操作认证辅助工具 |
| `plugin-sdk/approval-client-runtime` | 原生 exec 审批 profile / filter 辅助工具 |
| `plugin-sdk/approval-delivery-runtime` | 原生审批能力 / 投递适配器 |
| `plugin-sdk/approval-gateway-runtime` | 共享的审批 Gateway 网关解析辅助工具 |
| `plugin-sdk/approval-handler-adapter-runtime` | 适用于热渠道入口点的轻量级原生审批适配器加载辅助工具 |
| `plugin-sdk/approval-handler-runtime` | 更广泛的审批处理器运行时辅助工具;当更精细的 adapter / gateway 接口已足够时,应优先使用它们 |
| `plugin-sdk/approval-native-runtime` | 原生审批目标 + 账户绑定辅助工具 |
| `plugin-sdk/approval-reply-runtime` | exec / 插件审批回复负载辅助工具 |
| `plugin-sdk/approval-runtime` | exec / 插件审批负载辅助工具、原生审批路由 / 运行时辅助工具,以及结构化审批显示辅助工具,例如 `formatApprovalDisplayPath` |
| `plugin-sdk/reply-dedupe` | 精细的入站回复去重重置辅助工具 |
| `plugin-sdk/channel-contract-testing` | 不包含广泛 testing barrel 的精细渠道契约测试辅助工具 |
| `plugin-sdk/command-auth-native` | 原生命令认证 + 原生会话目标辅助工具 |
| `plugin-sdk/command-detection` | 共享的命令检测辅助工具 |
| `plugin-sdk/command-primitives-runtime` | 适用于热渠道路径的轻量级命令文本谓词 |
| `plugin-sdk/command-surface` | 命令主体规范化和命令接口辅助工具 |
| `plugin-sdk/allow-from` | `formatAllowFromLowercase` |
| `plugin-sdk/channel-secret-runtime` | 面向渠道 / 插件 secret surface 的精简 secret-contract 收集辅助函数 |
| `plugin-sdk/secret-ref-runtime` | 面向 secret-contract / 配置解析的精简 `coerceSecretRef` 和 SecretRef 类型辅助函数 |
| `plugin-sdk/security-runtime` | 共享的信任、私信 gate、外部内容和 secret 收集辅助函数 |
| `plugin-sdk/ssrf-policy` | 主机 allowlist 和私有网络 SSRF 策略辅助函数 |
| `plugin-sdk/ssrf-dispatcher` | 精简的 pinned-dispatcher 辅助函数,不包含宽泛的基础设施运行时接口 |
| `plugin-sdk/ssrf-runtime` | pinned-dispatcher、受 SSRF 保护的 fetch以及 SSRF 策略辅助函数 |
| `plugin-sdk/secret-input` | secret 输入解析辅助函数 |
| `plugin-sdk/webhook-ingress` | webhook 请求 / 目标辅助函数 |
| `plugin-sdk/webhook-request-guards` | 请求体大小 / 超时辅助函数 |
| `plugin-sdk/channel-secret-runtime` | 面向渠道 / 插件 secret 接口的精细 secret 契约收集辅助工具 |
| `plugin-sdk/secret-ref-runtime` | 面向 secret 契约 / 配置解析的精细 `coerceSecretRef``SecretRef` 类型辅助工具 |
| `plugin-sdk/security-runtime` | 共享的信任、私信门控、外部内容和 secret 收集辅助工具 |
| `plugin-sdk/ssrf-policy` | 主机 allowlist 和私有网络 SSRF 策略辅助工具 |
| `plugin-sdk/ssrf-dispatcher` | 不包含广泛基础设施运行时接口的精细 pinned-dispatcher 辅助工具 |
| `plugin-sdk/ssrf-runtime` | pinned-dispatcher、受 SSRF 保护的 fetch以及 SSRF 策略辅助工具 |
| `plugin-sdk/secret-input` | secret 输入解析辅助工具 |
| `plugin-sdk/webhook-ingress` | webhook 请求 / 目标辅助工具 |
| `plugin-sdk/webhook-request-guards` | 请求体大小 / 超时辅助工具 |
</Accordion>
<Accordion title="运行时与存储子路径">
| 子路径 | 关键导出 |
| --- | --- |
| `plugin-sdk/runtime` | 范围广泛的运行时 / 日志 / 备份 / 插件安装辅助函数 |
| `plugin-sdk/runtime-env` | 精简的运行时环境、logger、timeout、retry 和 backoff 辅助函数 |
| `plugin-sdk/channel-runtime-context` | 通用渠道运行时上下文注册和查找辅助函数 |
| `plugin-sdk/runtime` | 广泛的运行时 / 日志 / 备份 / 插件安装辅助工具 |
| `plugin-sdk/runtime-env` | 精细的运行时环境、logger、超时、重试和退避辅助工具 |
| `plugin-sdk/channel-runtime-context` | 通用渠道运行时上下文注册和查找辅助工具 |
| `plugin-sdk/runtime-store` | `createPluginRuntimeStore` |
| `plugin-sdk/plugin-runtime` | 共享的插件命令 / hook / http / 交互式辅助函数 |
| `plugin-sdk/hook-runtime` | 共享的 webhook / 内部 hook 管道辅助函数 |
| `plugin-sdk/lazy-runtime` | 惰性运行时导入 / 绑定辅助函数,例如 `createLazyRuntimeModule`, `createLazyRuntimeMethod``createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | 进程 exec 辅助函数 |
| `plugin-sdk/cli-runtime` | CLI 格式化、等待和版本辅助函数 |
| `plugin-sdk/gateway-runtime` | Gateway 网关客户端和渠道状态补丁辅助函数 |
| `plugin-sdk/config-runtime` | 配置加载 / 写入辅助函数,以及插件配置查找辅助函数 |
| `plugin-sdk/telegram-command-config` | Telegram 命令名称 / 描述规范化,以及重复 / 冲突检查,即使 bundled Telegram 契约接口不可用时也可使用 |
| `plugin-sdk/text-autolink-runtime` | 文件引用自动链接检测,不包含宽泛的 text-runtime barrel |
| `plugin-sdk/approval-runtime` | exec / 插件审批辅助函数、审批能力构建器、认证 / profile 辅助函数、原生路由 / 运行时辅助函数 |
| `plugin-sdk/reply-runtime` | 共享的入站 / 回复运行时辅助函数、分块、分发、心跳、回复规划器 |
| `plugin-sdk/reply-dispatch-runtime` | 精简的回复分发 / 完成,以及会话标签辅助函数 |
| `plugin-sdk/reply-history` | 共享的短时间窗口回复历史辅助函数,例如 `buildHistoryContext`, `recordPendingHistoryEntry``clearHistoryEntriesIfEnabled` |
| `plugin-sdk/plugin-runtime` | 共享的插件命令 / 钩子 / HTTP / 交互式辅助工具 |
| `plugin-sdk/hook-runtime` | 共享的 webhook / 内部钩子流水线辅助工具 |
| `plugin-sdk/lazy-runtime` | 延迟运行时导入 / 绑定辅助工具,例如 `createLazyRuntimeModule`, `createLazyRuntimeMethod``createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | 进程 exec 辅助工具 |
| `plugin-sdk/cli-runtime` | CLI 格式化、等待和版本辅助工具 |
| `plugin-sdk/gateway-runtime` | Gateway 网关客户端和渠道状态补丁辅助工具 |
| `plugin-sdk/config-runtime` | 配置加载 / 写入辅助工具,以及插件配置查找辅助工具 |
| `plugin-sdk/telegram-command-config` | Telegram 命令名称 / 描述规范化以及重复 / 冲突检查,即使内置的 Telegram 契约接口不可用时也可使用 |
| `plugin-sdk/text-autolink-runtime` | 不包含广泛 text-runtime barrel 的文件引用自动链接检测 |
| `plugin-sdk/approval-runtime` | exec / 插件审批辅助工具、审批能力构建器、认证 / profile 辅助工具、原生路由 / 运行时辅助工具,以及结构化审批显示路径格式化 |
| `plugin-sdk/reply-runtime` | 共享的入站 / 回复运行时辅助工具、分块、分发、心跳、回复规划器 |
| `plugin-sdk/reply-dispatch-runtime` | 精细的回复分发 / 完成,以及对话标签辅助工具 |
| `plugin-sdk/reply-history` | 共享的短窗口回复历史辅助工具,例如 `buildHistoryContext`, `recordPendingHistoryEntry``clearHistoryEntriesIfEnabled` |
| `plugin-sdk/reply-reference` | `createReplyReferencePlanner` |
| `plugin-sdk/reply-chunking` | 精简的文本 / Markdown 分块辅助函数 |
| `plugin-sdk/session-store-runtime` | 会话存储路径 + `updated-at` 辅助函数 |
| `plugin-sdk/state-paths` | 状态 / OAuth 目录路径辅助函数 |
| `plugin-sdk/routing` | 路由 / 会话键 / 账户绑定辅助函数,例如 `resolveAgentRoute`, `buildAgentSessionKey``resolveDefaultAgentBoundAccountId` |
| `plugin-sdk/status-helpers` | 共享的渠道 / 账户状态摘要辅助函数、运行时状态默认值以及问题元数据辅助函数 |
| `plugin-sdk/target-resolver-runtime` | 共享的目标解析器辅助函数 |
| `plugin-sdk/string-normalization-runtime` | slug / 字符串规范化辅助函数 |
| `plugin-sdk/reply-chunking` | 精细的文本 / Markdown 分块辅助工具 |
| `plugin-sdk/session-store-runtime` | 会话存储路径 + updated-at 辅助工具 |
| `plugin-sdk/state-paths` | 状态 / OAuth 目录路径辅助工具 |
| `plugin-sdk/routing` | 路由 / 会话键 / 账户绑定辅助工具,例如 `resolveAgentRoute`, `buildAgentSessionKey``resolveDefaultAgentBoundAccountId` |
| `plugin-sdk/status-helpers` | 共享的渠道 / 账户状态摘要辅助工具、运行时状态默认值和问题元数据辅助工具 |
| `plugin-sdk/target-resolver-runtime` | 共享的目标解析器辅助工具 |
| `plugin-sdk/string-normalization-runtime` | slug / 字符串规范化辅助工具 |
| `plugin-sdk/request-url` | 从 fetch / request 类输入中提取字符串 URL |
| `plugin-sdk/run-command` | 带超时控制的命令执行器,返回规范化的 stdout / stderr 结果 |
| `plugin-sdk/run-command` | 带超时控制的命令运行器,并返回规范化的 stdout / stderr 结果 |
| `plugin-sdk/param-readers` | 通用工具 / CLI 参数读取器 |
| `plugin-sdk/tool-payload` | 从工具结果对象中提取规范化负载 |
| `plugin-sdk/tool-send` | 从工具参数中提取规范发送目标字段 |
| `plugin-sdk/temp-path` | 共享的临时下载路径辅助函数 |
| `plugin-sdk/logging-core` | 子系统 logger 和脱敏辅助函数 |
| `plugin-sdk/markdown-table-runtime` | Markdown 表格模式和转换辅助函数 |
| `plugin-sdk/json-store` | 小型 JSON 状态读写辅助函数 |
| `plugin-sdk/file-lock` | 可重入文件锁辅助函数 |
| `plugin-sdk/persistent-dedupe` | 磁盘支持的去重缓存辅助函数 |
| `plugin-sdk/acp-runtime` | ACP 运行时 / 会话和回复分发辅助函数 |
| `plugin-sdk/acp-binding-resolve-runtime` | 只读 ACP 绑定解析,不引入生命周期启动相关导入 |
| `plugin-sdk/agent-config-primitives` | 精的智能体运行时配置 schema 基元 |
| `plugin-sdk/tool-send` | 从工具参数中提取规范发送目标字段 |
| `plugin-sdk/temp-path` | 共享的临时下载路径辅助工具 |
| `plugin-sdk/logging-core` | 子系统 logger 和脱敏辅助工具 |
| `plugin-sdk/markdown-table-runtime` | Markdown 表格模式和转换辅助工具 |
| `plugin-sdk/json-store` | 小型 JSON 状态读取 / 写入辅助工具 |
| `plugin-sdk/file-lock` | 可重入文件锁辅助工具 |
| `plugin-sdk/persistent-dedupe` | 磁盘支持的去重缓存辅助工具 |
| `plugin-sdk/acp-runtime` | ACP 运行时 / 会话和回复分发辅助工具 |
| `plugin-sdk/acp-binding-resolve-runtime` | 不包含生命周期启动导入的只读 ACP 绑定解析 |
| `plugin-sdk/agent-config-primitives` | 精的智能体运行时配置 schema 基元 |
| `plugin-sdk/boolean-param` | 宽松布尔参数读取器 |
| `plugin-sdk/dangerous-name-runtime` | 危险名称匹配解析辅助函数 |
| `plugin-sdk/device-bootstrap` | 设备引导和配对令牌辅助函数 |
| `plugin-sdk/dangerous-name-runtime` | 危险名称匹配解析辅助工具 |
| `plugin-sdk/device-bootstrap` | 设备引导和配对令牌辅助工具 |
| `plugin-sdk/extension-shared` | 共享的被动渠道、状态和环境代理辅助基元 |
| `plugin-sdk/models-provider-runtime` | `/models` 命令 / provider 回复辅助函数 |
| `plugin-sdk/skill-commands-runtime` | Skill 命令列表辅助函数 |
| `plugin-sdk/native-command-registry` | 原生命令注册表 / 构建 / 序列化辅助函数 |
| `plugin-sdk/agent-harness` | 面向受信任插件的实验性低层智能体 harness 接口harness 类型、活动运行 steer / abort 辅助函数、OpenClaw 工具桥接辅助函数、工具进度格式化 / 详情辅助函数,以及尝试结果工具函数 |
| `plugin-sdk/provider-zai-endpoint` | Z.A.I endpoint 检测辅助函数 |
| `plugin-sdk/infra-runtime` | 系统事件 / 心跳辅助函数 |
| `plugin-sdk/collection-runtime` | 小型有界缓存辅助函数 |
| `plugin-sdk/diagnostic-runtime` | 诊断标志和事件辅助函数 |
| `plugin-sdk/error-runtime` | 错误图、格式化、共享错误分类辅助函数,以及 `isApprovalNotFoundError` |
| `plugin-sdk/fetch-runtime` | 封装的 fetch、代理和 pinned lookup 辅助函数 |
| `plugin-sdk/runtime-fetch` | 感知 dispatcher 的运行时 fetch引入 proxy / guarded-fetch 导入 |
| `plugin-sdk/response-limit-runtime` | 有界响应体读取器,不包含宽泛的媒体运行时接口 |
| `plugin-sdk/session-binding-runtime` | 当前话绑定状态,不包含已配置绑定路由或配对存储 |
| `plugin-sdk/session-store-runtime` | 会话存储读取辅助函数,不引入宽泛的配置写入 / 维护导入 |
| `plugin-sdk/context-visibility-runtime` | 上下文可见性解析和补充上下文过滤,不引入宽泛的配置 / 安全导入 |
| `plugin-sdk/string-coerce-runtime` | 精简的基础类型记录 / 字符串强制转换和规范化辅助函数,不引入 Markdown / 日志导入 |
| `plugin-sdk/host-runtime` | 主机名和 SCP 主机规范化辅助函数 |
| `plugin-sdk/retry-runtime` | 重试配置和重试执行器辅助函数 |
| `plugin-sdk/agent-runtime` | 智能体目录 / 身份 / 工作区辅助函数 |
| `plugin-sdk/models-provider-runtime` | `/models` 命令 / 提供商回复辅助工具 |
| `plugin-sdk/skill-commands-runtime` | Skills 命令列表辅助工具 |
| `plugin-sdk/native-command-registry` | 原生命令注册表 / 构建 / 序列化辅助工具 |
| `plugin-sdk/agent-harness` | 面向底层智能体 harness 的实验性可信插件接口harness 类型、活动运行 steer / abort 辅助工具、OpenClaw 工具桥接辅助工具、工具进度格式化 / 详情辅助工具,以及 attempt 结果工具 |
| `plugin-sdk/provider-zai-endpoint` | Z.A.I endpoint 检测辅助工具 |
| `plugin-sdk/infra-runtime` | 系统事件 / 心跳辅助工具 |
| `plugin-sdk/collection-runtime` | 小型有界缓存辅助工具 |
| `plugin-sdk/diagnostic-runtime` | 诊断标志和事件辅助工具 |
| `plugin-sdk/error-runtime` | 错误图、格式化、共享错误分类辅助工具,`isApprovalNotFoundError` |
| `plugin-sdk/fetch-runtime` | 包装的 fetch、代理和固定查找辅助工具 |
| `plugin-sdk/runtime-fetch` | 感知 dispatcher 的运行时 fetch包含 proxy / guarded-fetch 导入 |
| `plugin-sdk/response-limit-runtime` | 不包含广泛媒体运行时接口的有界响应体读取器 |
| `plugin-sdk/session-binding-runtime` | 当前话绑定状态,不包含已配置绑定路由或配对存储 |
| `plugin-sdk/session-store-runtime` | 不包含广泛配置写入 / 维护导入的会话存储读取辅助工具 |
| `plugin-sdk/context-visibility-runtime` | 不包含广泛配置 / 安全导入的上下文可见性解析和补充上下文过滤 |
| `plugin-sdk/string-coerce-runtime` | 不包含 Markdown / 日志导入的精细基元记录 / 字符串强制转换与规范化辅助工具 |
| `plugin-sdk/host-runtime` | 主机名和 SCP 主机规范化辅助工具 |
| `plugin-sdk/retry-runtime` | 重试配置和重试运行器辅助工具 |
| `plugin-sdk/agent-runtime` | 智能体目录 / 身份 / 工作区辅助工具 |
| `plugin-sdk/directory-runtime` | 基于配置的目录查询 / 去重 |
| `plugin-sdk/keyed-async-queue` | `KeyedAsyncQueue` |
</Accordion>
@ -216,64 +218,64 @@ x-i18n:
<Accordion title="能力与测试子路径">
| 子路径 | 关键导出 |
| --- | --- |
| `plugin-sdk/media-runtime` | 共享的媒体获取 / 转换 / 存储辅助函数,以及媒体负载构建器 |
| `plugin-sdk/media-store` | 精简的媒体存储辅助函数,例如 `saveMediaBuffer` |
| `plugin-sdk/media-generation-runtime` | 共享的媒体生成故障转移辅助函数、候选选择和缺失模型提示 |
| `plugin-sdk/media-understanding` | 媒体理解 provider 类型,以及面向 provider 的图像 / 音频辅助导出 |
| `plugin-sdk/text-runtime` | 共享的文本 / Markdown / 日志辅助函数,例如对 assistant 可见文本的剥离、Markdown 渲染 / 分块 / 表格辅助函数、脱敏辅助函数、directive-tag 辅助函数以及安全文本工具函数 |
| `plugin-sdk/text-chunking` | 出站文本分块辅助函数 |
| `plugin-sdk/speech` | 语音 provider 类型,以及面向 provider 的 directive、注册表、校验和语音辅助导出 |
| `plugin-sdk/speech-core` | 共享的语音 provider 类型、注册表、directive、规范化和语音辅助导出 |
| `plugin-sdk/realtime-transcription` | 实时转录 provider 类型、注册表辅助函数和共享 WebSocket 会话辅助函数 |
| `plugin-sdk/realtime-voice` | 实时语音 provider 类型和注册表辅助函数 |
| `plugin-sdk/image-generation` | 图像生成 provider 类型 |
| `plugin-sdk/image-generation-core` | 共享的图像生成类型、故障转移、认证和注册表辅助函数 |
| `plugin-sdk/music-generation` | 音乐生成 provider / 请求 / 结果类型 |
| `plugin-sdk/music-generation-core` | 共享的音乐生成类型、故障转移辅助函数、provider 查找和 model-ref 解析 |
| `plugin-sdk/video-generation` | 视频生成 provider / 请求 / 结果类型 |
| `plugin-sdk/video-generation-core` | 共享的视频生成类型、故障转移辅助函数、provider 查找和 model-ref 解析 |
| `plugin-sdk/webhook-targets` | webhook 目标注册表和路由安装辅助函数 |
| `plugin-sdk/webhook-path` | webhook 路径规范化辅助函数 |
| `plugin-sdk/web-media` | 共享的远程 / 本地媒体加载辅助函数 |
| `plugin-sdk/zod` | 为插件 SDK 使用重新导出的 `zod` |
| `plugin-sdk/media-runtime` | 共享的媒体获取 / 转换 / 存储辅助工具,以及媒体负载构建器 |
| `plugin-sdk/media-store` | 精细的媒体存储辅助工具,例如 `saveMediaBuffer` |
| `plugin-sdk/media-generation-runtime` | 共享的媒体生成故障切换辅助工具、候选项选择和缺失模型消息 |
| `plugin-sdk/media-understanding` | 媒体理解提供商类型,以及面向提供商的图像 / 音频辅助导出 |
| `plugin-sdk/text-runtime` | 共享的文本 / Markdown / 日志辅助工具例如面向助手可见文本剥离、Markdown 渲染 / 分块 / 表格辅助工具、脱敏辅助工具、directive-tag 辅助工具和安全文本工具 |
| `plugin-sdk/text-chunking` | 出站文本分块辅助工具 |
| `plugin-sdk/speech` | 语音提供商类型,以及面向提供商的 directive、注册表、校验和语音辅助导出 |
| `plugin-sdk/speech-core` | 共享的语音提供商类型、注册表、directive、规范化和语音辅助导出 |
| `plugin-sdk/realtime-transcription` | 实时转录提供商类型、注册表辅助工具和共享 WebSocket 会话辅助工具 |
| `plugin-sdk/realtime-voice` | 实时语音提供商类型和注册表辅助工具 |
| `plugin-sdk/image-generation` | 图像生成提供商类型 |
| `plugin-sdk/image-generation-core` | 共享的图像生成类型、故障切换、认证和注册表辅助工具 |
| `plugin-sdk/music-generation` | 音乐生成提供商 / 请求 / 结果类型 |
| `plugin-sdk/music-generation-core` | 共享的音乐生成类型、故障切换辅助工具、提供商查找和 model-ref 解析 |
| `plugin-sdk/video-generation` | 视频生成提供商 / 请求 / 结果类型 |
| `plugin-sdk/video-generation-core` | 共享的视频生成类型、故障切换辅助工具、提供商查找和 model-ref 解析 |
| `plugin-sdk/webhook-targets` | webhook 目标注册表和路由安装辅助工具 |
| `plugin-sdk/webhook-path` | webhook 路径规范化辅助工具 |
| `plugin-sdk/web-media` | 共享的远程 / 本地媒体加载辅助工具 |
| `plugin-sdk/zod` | 为插件 SDK 使用重新导出的 `zod` |
| `plugin-sdk/testing` | `installCommonResolveTargetErrorCases`, `shouldAckReaction` |
</Accordion>
<Accordion title="Memory 子路径">
| 子路径 | 关键导出 |
| --- | --- |
| `plugin-sdk/memory-core` | bundled memory-core 辅助接口,包含 manager / config / file / CLI 辅助函数 |
| `plugin-sdk/memory-core-engine-runtime` | Memory 索引 / 搜索运行时门面 |
| `plugin-sdk/memory-core` | 内置的 memory-core 辅助接口,用于 manager / config / file / CLI 辅助工具 |
| `plugin-sdk/memory-core-engine-runtime` | Memory 索引 / 搜索运行时 facade |
| `plugin-sdk/memory-core-host-engine-foundation` | Memory host foundation engine 导出 |
| `plugin-sdk/memory-core-host-engine-embeddings` | Memory host embedding 契约、注册表访问、本地 provider 以及通用批处理 / 远程辅助函数 |
| `plugin-sdk/memory-core-host-engine-embeddings` | Memory host embedding 契约、注册表访问、本地提供商以及通用批处理 / 远程辅助工具 |
| `plugin-sdk/memory-core-host-engine-qmd` | Memory host QMD engine 导出 |
| `plugin-sdk/memory-core-host-engine-storage` | Memory host 存储 engine 导出 |
| `plugin-sdk/memory-core-host-multimodal` | Memory host 多模态辅助函数 |
| `plugin-sdk/memory-core-host-query` | Memory host 查询辅助函数 |
| `plugin-sdk/memory-core-host-secret` | Memory host secret 辅助函数 |
| `plugin-sdk/memory-core-host-events` | Memory host 事件日志辅助函数 |
| `plugin-sdk/memory-core-host-status` | Memory host 状态辅助函数 |
| `plugin-sdk/memory-core-host-runtime-cli` | Memory host CLI 运行时辅助函数 |
| `plugin-sdk/memory-core-host-runtime-core` | Memory host 核心运行时辅助函数 |
| `plugin-sdk/memory-core-host-runtime-files` | Memory host 文件 / 运行时辅助函数 |
| `plugin-sdk/memory-host-core` | 面向供应商中立的别名,对应 memory host 核心运行时辅助函数 |
| `plugin-sdk/memory-host-events` | 面向供应商中立的别名,对应 memory host 事件日志辅助函数 |
| `plugin-sdk/memory-host-files` | 面向供应商中立的别名,对应 memory host 文件 / 运行时辅助函数 |
| `plugin-sdk/memory-host-markdown` | 面向 memory 相邻插件的共享托管 Markdown 辅助函数 |
| `plugin-sdk/memory-host-search` | 用于访问 search-manager 的活动 Memory 运行时门面 |
| `plugin-sdk/memory-host-status` | 面向供应商中立的别名,对应 memory host 状态辅助函数 |
| `plugin-sdk/memory-lancedb` | bundled memory-lancedb 辅助接口 |
| `plugin-sdk/memory-core-host-engine-storage` | Memory host storage engine 导出 |
| `plugin-sdk/memory-core-host-multimodal` | Memory host 多模态辅助工具 |
| `plugin-sdk/memory-core-host-query` | Memory host 查询辅助工具 |
| `plugin-sdk/memory-core-host-secret` | Memory host secret 辅助工具 |
| `plugin-sdk/memory-core-host-events` | Memory host 事件日志辅助工具 |
| `plugin-sdk/memory-core-host-status` | Memory host 状态辅助工具 |
| `plugin-sdk/memory-core-host-runtime-cli` | Memory host CLI 运行时辅助工具 |
| `plugin-sdk/memory-core-host-runtime-core` | Memory host 核心运行时辅助工具 |
| `plugin-sdk/memory-core-host-runtime-files` | Memory host 文件 / 运行时辅助工具 |
| `plugin-sdk/memory-host-core` | 面向供应商中立的 memory host 核心运行时辅助工具别名 |
| `plugin-sdk/memory-host-events` | 面向供应商中立的 memory host 事件日志辅助工具别名 |
| `plugin-sdk/memory-host-files` | 面向供应商中立的 memory host 文件 / 运行时辅助工具别名 |
| `plugin-sdk/memory-host-markdown` | 面向 memory 相邻插件的共享托管 Markdown 辅助工具 |
| `plugin-sdk/memory-host-search` | 用于 search-manager 访问的活动 Memory 运行时 facade |
| `plugin-sdk/memory-host-status` | 面向供应商中立的 memory host 状态辅助工具别名 |
| `plugin-sdk/memory-lancedb` | 内置的 memory-lancedb 辅助接口 |
</Accordion>
<Accordion title="保留的 bundled-helper 子路径">
| 家族 | 当前子路径 | 预期用途 |
<Accordion title="保留的内置辅助子路径">
| 系列 | 当前子路径 | 预期用途 |
| --- | --- | --- |
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | bundled browser 插件支持辅助函数`browser-support` 仍然是兼容性 barrel |
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | bundled Matrix 辅助 / 运行时接口 |
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | bundled LINE 辅助 / 运行时接口 |
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | bundled IRC 辅助接口 |
| 渠道专用辅助函数 | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | bundled 渠道兼容性 / 辅助接口 |
| 认证 / 插件专用辅助函数 | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | bundled 功能 / 插件辅助接口;`plugin-sdk/github-copilot-token` 当前导出 `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken``resolveCopilotApiToken` |
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | 内置 Browser 插件支持辅助工具`browser-support` 仍然是兼容性 barrel |
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | 内置 Matrix 辅助 / 运行时接口 |
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | 内置 LINE 辅助 / 运行时接口 |
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | 内置 IRC 辅助接口 |
| 渠道专用辅助工具 | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | 内置渠道兼容性 / 辅助接口 |
| 认证 / 插件专用辅助工具 | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | 内置功能 / 插件辅助接口;`plugin-sdk/github-copilot-token` 当前导出 `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken``resolveCopilotApiToken` |
</Accordion>
</AccordionGroup>