chore(i18n): refresh zh-CN translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-29 15:42:46 +00:00
parent 96736b8116
commit 5b2f625a31
5 changed files with 1115 additions and 1121 deletions

File diff suppressed because it is too large Load Diff

View File

@ -4,40 +4,40 @@ read_when:
summary: Slack 设置和运行时行为Socket 模式 + HTTP 请求 URL
title: Slack
x-i18n:
generated_at: "2026-04-29T03:16:11Z"
generated_at: "2026-04-29T15:39:31Z"
model: gpt-5.5
provider: openai
source_hash: 4cad48c342c4edf0857d79264e5a3213e58b8f5cde6bd04fa11eca1c969a8f1a
source_hash: e888211dc4729da87c2f2d269dca691aec280b5f09ceb3416f5ea16d7930cdd3
source_path: channels/slack.md
workflow: 16
---
可用于通过 Slack app 集成在私信和渠道中投入生产。默认模式为 Socket Mode也支持 HTTP Request URLs。
Production-ready for DMs and channels via Slack app integrations. Default mode is Socket Mode; HTTP Request URLs are also supported.
<CardGroup cols={3}>
<Card title="Pairing" icon="link" href="/zh-CN/channels/pairing">
Slack 私信默认使用配对模式。
Slack DMs default to pairing mode.
</Card>
<Card title="Slash commands" icon="terminal" href="/zh-CN/tools/slash-commands">
原生命令行为和命令目录。
Native command behavior and command catalog.
</Card>
<Card title="Channel troubleshooting" icon="wrench" href="/zh-CN/channels/troubleshooting">
跨渠道诊断和修复手册。
Cross-channel diagnostics and repair playbooks.
</Card>
</CardGroup>
## 快速设置
## Quick setup
<Tabs>
<Tab title="Socket Mode (default)">
<Steps>
<Step title="Create a new Slack app">
在 Slack app 设置中点击 **[Create New App](https://api.slack.com/apps/new)** 按钮:
In Slack app settings press the **[Create New App](https://api.slack.com/apps/new)** button:
- 选择 **from a manifest**,并为你的 app 选择一个工作区
- 粘贴下方的[示例 manifest](#manifest-and-scope-checklist),然后继续创建
- 生成具有 `connections:write`**App-Level Token**`xapp-...`
- 安装 app并复制显示的 **Bot Token**`xoxb-...`
- choose **from a manifest** and select a workspace for your app
- paste the [example manifest](#manifest-and-scope-checklist) from below and continue to create
- generate an **App-Level Token** (`xapp-...`) with `connections:write`
- install app and copy the **Bot Token** (`xoxb-...`) shown
</Step>
@ -56,7 +56,7 @@ x-i18n:
}
```
环境变量回退(仅默认账号):
Env fallback (default account only):
```bash
SLACK_APP_TOKEN=xapp-...
@ -79,12 +79,12 @@ openclaw gateway
<Tab title="HTTP Request URLs">
<Steps>
<Step title="Create a new Slack app">
在 Slack app 设置中点击 **[Create New App](https://api.slack.com/apps/new)** 按钮:
In Slack app settings press the **[Create New App](https://api.slack.com/apps/new)** button:
- 选择 **from a manifest**,并为你的 app 选择一个工作区
- 粘贴[示例 manifest](#manifest-and-scope-checklist),并在创建前更新 URL
- 保存用于请求验证的 **Signing Secret**
- 安装 app并复制显示的 **Bot Token**`xoxb-...`
- choose **from a manifest** and select a workspace for your app
- paste the [example manifest](#manifest-and-scope-checklist) and update the URLs before create
- save the **Signing Secret** for request verification
- install app and copy the **Bot Token** (`xoxb-...`) shown
</Step>
@ -105,9 +105,9 @@ openclaw gateway
```
<Note>
为多账号 HTTP 使用唯一的 webhook 路径
Use unique webhook paths for multi-account HTTP
为每个账号提供不同的 `webhookPath`(默认 `/slack/events`),避免注册冲突。
Give each account a distinct `webhookPath` (default `/slack/events`) so registrations do not collide.
</Note>
</Step>
@ -124,9 +124,9 @@ openclaw gateway
</Tab>
</Tabs>
## Socket Mode 传输调优
## Socket Mode transport tuning
OpenClaw 默认将 Socket Mode 的 Slack SDK 客户端 pong 超时设置为 15 秒。仅在需要针对工作区或主机进行特定调优时覆盖传输设置:
OpenClaw sets the Slack SDK client pong timeout to 15 seconds by default for Socket Mode. Override the transport settings only when you need workspace- or host-specific tuning:
```json5
{
@ -143,13 +143,13 @@ OpenClaw 默认将 Socket Mode 的 Slack SDK 客户端 pong 超时设置为 15
}
```
仅当 Socket Mode 工作区记录 Slack websocket pong/server-ping 超时,或运行在已知存在事件循环饥饿问题的主机上时才使用此设置。`clientPingTimeout` 是 SDK 发送客户端 ping 后等待 pong 的时间;`serverPingTimeout` 是等待 Slack 服务器 ping 的时间。App 消息和事件仍然是应用状态,而不是传输活性信号。
Use this only for Socket Mode workspaces that log Slack websocket pong/server-ping timeouts or run on hosts with known event-loop starvation. `clientPingTimeout` is the pong wait after the SDK sends a client ping; `serverPingTimeout` is the wait for Slack server pings. App messages and events remain application state, not transport liveness signals.
## Manifest 和 scope 清单
## Manifest and scope checklist
基础 Slack app manifest 对 Socket Mode 和 HTTP Request URLs 相同。只有 `settings` 块(以及 slash command 的 `url`)不同。
The base Slack app manifest is the same for Socket Mode and HTTP Request URLs. Only the `settings` block (and the slash command `url`) differs.
基础 manifestSocket Mode 默认):
Base manifest (Socket Mode default):
```json
{
@ -221,7 +221,7 @@ OpenClaw 默认将 Socket Mode 的 Slack SDK 客户端 pong 超时设置为 15
}
```
对于 **HTTP Request URLs 模式**,将 `settings` 替换为 HTTP 变体,并向每个 slash command 添加 `url`。需要公开 URL
For **HTTP Request URLs mode**, replace `settings` with the HTTP variant and add `url` to each slash command. Public URL required:
```json
{
@ -251,19 +251,19 @@ OpenClaw 默认将 Socket Mode 的 Slack SDK 客户端 pong 超时设置为 15
}
```
### 其他 manifest 设置
### Additional manifest settings
呈现扩展上述默认设置的不同功能。
Surface different features that extend the above defaults.
<AccordionGroup>
<Accordion title="Optional native slash commands">
可以使用多个[原生 slash command](#commands-and-slash-behavior) 来替代单个已配置命令,但需要注意细节:
Multiple [native slash commands](#commands-and-slash-behavior) can be used instead of a single configured command with nuance:
- 使用 `/agentstatus` 而不是 `/status`,因为 `/status` 命令是保留的。
- 一次最多只能提供 25 个 slash command。
- Use `/agentstatus` instead of `/status` because the `/status` command is reserved.
- No more than 25 slash commands can be made available at once.
将你现有的 `features.slash_commands` 部分替换为[可用命令](/zh-CN/tools/slash-commands#command-list)的一个子集:
Replace your existing `features.slash_commands` section with a subset of [available commands](/zh-CN/tools/slash-commands#command-list):
<Tabs>
<Tab title="Socket Mode (default)">
@ -383,7 +383,7 @@ OpenClaw 默认将 Socket Mode 的 Slack SDK 客户端 pong 超时设置为 15
</Tab>
<Tab title="HTTP Request URLs">
使用上方与 Socket Mode 相同的 `slash_commands` 列表,并向每个条目添加 `"url": "https://gateway-host.example.com/slack/events"`。示例:
Use the same `slash_commands` list as Socket Mode above, and add `"url": "https://gateway-host.example.com/slack/events"` to every entry. Example:
```json
"slash_commands": [
@ -407,13 +407,13 @@ OpenClaw 默认将 Socket Mode 的 Slack SDK 客户端 pong 超时设置为 15
</Accordion>
<Accordion title="Optional authorship scopes (write operations)">
如果你希望传出消息使用活跃智能体身份(自定义用户名和图标),而不是默认 Slack app 身份,请添加 `chat:write.customize` bot scope。
Add the `chat:write.customize` bot scope if you want outgoing messages to use the active agent identity (custom username and icon) instead of the default Slack app identity.
如果使用 emoji 图标Slack 需要 `:emoji_name:` 语法。
If you use an emoji icon, Slack expects `:emoji_name:` syntax.
</Accordion>
<Accordion title="Optional user-token scopes (read operations)">
如果你配置了 `channels.slack.userToken`,典型的读取 scope 为:
If you configure `channels.slack.userToken`, typical read scopes are:
- `channels:history`, `groups:history`, `im:history`, `mpim:history`
- `channels:read`, `groups:read`, `im:read`, `mpim:read`
@ -421,81 +421,84 @@ OpenClaw 默认将 Socket Mode 的 Slack SDK 客户端 pong 超时设置为 15
- `reactions:read`
- `pins:read`
- `emoji:read`
- `search:read`(如果你依赖 Slack 搜索读取)
- `search:read` (if you depend on Slack search reads)
</Accordion>
</AccordionGroup>
## Token 模型
## Token model
- Socket Mode 需要 `botToken` + `appToken`
- HTTP 模式需要 `botToken` + `signingSecret`
- `botToken`、`appToken`、`signingSecret` 和 `userToken` 接受明文字符串或 SecretRef 对象。
- 配置 token 会覆盖环境变量回退。
- `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` 环境变量回退仅适用于默认账号。
- `userToken``xoxp-...`)仅可通过配置设置(没有环境变量回退),并且默认使用只读行为(`userTokenReadOnly: true`)。
- `botToken` + `appToken` are required for Socket Mode.
- HTTP mode requires `botToken` + `signingSecret`.
- `botToken`, `appToken`, `signingSecret`, and `userToken` accept plaintext
strings or SecretRef objects.
- Config tokens override env fallback.
- `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` env fallback applies only to the default account.
- `userToken` (`xoxp-...`) is config-only (no env fallback) and defaults to read-only behavior (`userTokenReadOnly: true`).
Status 快照行为:
Status snapshot behavior:
- Slack 账检查会跟踪每个凭据的 `*Source``*Status`
- Slack 账检查会跟踪每个凭据的 `*Source``*Status`
字段(`botToken`、`appToken`、`signingSecret`、`userToken`)。
- Status 为 `available`、`configured_unavailable` 或 `missing`
- `configured_unavailable` 表示账通过 SecretRef
- `configured_unavailable` 表示账通过 SecretRef
或其他非内联密钥来源配置,但当前命令/运行时路径
无法解析实际值。
- 在 HTTP 模式下,会包含 `signingSecretStatus`;在 Socket Mode 下,
必需的组合是 `botTokenStatus` + `appTokenStatus`
<Tip>
对于操作/目录读取,配置后可以优先使用用户令牌。对于写入,仍优先使用机器人令牌;仅当 `userTokenReadOnly: false` 且机器人令牌不可用时,才允许使用用户令牌写入。
对于操作/目录读取,配置后可以优先使用用户令牌。对于写入,仍优先使用 bot 令牌;只有当 `userTokenReadOnly: false` 且 bot 令牌不可用时,才允许使用用户令牌写入。
</Tip>
## 操作和门控
Slack 操作由 `channels.slack.actions.*` 控制。
当前 Slack 工具中可用操作组:
当前 Slack 工具中可用操作组:
| 组 | 默认值 |
| ---------- | ------- |
| messages | 启用 |
| reactions | 启用 |
| pins | 启用 |
| memberInfo | 启用 |
| emojiList | 启用 |
| messages | 启用 |
| reactions | 启用 |
| pins | 启用 |
| memberInfo | 启用 |
| emojiList | 启用 |
当前 Slack 消息操作包括 `send`、`upload-file`、`download-file`、`read`、`edit`、`delete`、`pin`、`unpin`、`list-pins`、`member-info` 和 `emoji-list`。`download-file` 接受入站文件占位符中显示的 Slack 文件 ID并为图片返回图片预览为其他文件类型返回本地文件元数据。
当前 Slack 消息操作包括 `send`、`upload-file`、`download-file`、`read`、`edit`、`delete`、`pin`、`unpin`、`list-pins`、`member-info` 和 `emoji-list`。`download-file` 接受入站文件占位符中显示的 Slack 文件 ID并为图片返回图片预览为其他文件类型返回本地文件元数据。
## 访问控制和路由
<Tabs>
<Tab title="DM policy">
`channels.slack.dmPolicy` 控制私信访问(旧版:`channels.slack.dm.policy`
<Tab title="私信策略">
`channels.slack.dmPolicy` 控制私信访问。`channels.slack.allowFrom` 是规范的私信允许列表。
- `pairing`(默认)
- `allowlist`
- `open`(要求 `channels.slack.allowFrom` 包含 `"*"`;旧版:`channels.slack.dm.allowFrom`
- `open`(要求 `channels.slack.allowFrom` 包含 `"*"`
- `disabled`
私信标志:
- `dm.enabled`(默认 true
- `channels.slack.allowFrom`(首选)
- `channels.slack.allowFrom`
- `dm.allowFrom`(旧版)
- `dm.groupEnabled`(群组私信默认 false
- `dm.groupChannels`(可选 MPIM 允许列表)
多账优先级:
多账优先级:
- `channels.slack.accounts.default.allowFrom` 仅应用于 `default` 账户。
- 命名账户在自己的 `allowFrom` 未设置时继承 `channels.slack.allowFrom`
- 命名账户不会继承 `channels.slack.accounts.default.allowFrom`
- `channels.slack.accounts.default.allowFrom` 仅适用于 `default` 账号。
- 命名账号在自身 `allowFrom` 未设置时继承 `channels.slack.allowFrom`
- 命名账号不会继承 `channels.slack.accounts.default.allowFrom`
旧版 `channels.slack.dm.policy``channels.slack.dm.allowFrom` 仍会读取以保持兼容。`openclaw doctor --fix` 会在不改变访问权限的情况下,将它们迁移到 `dmPolicy``allowFrom`
私信中的配对使用 `openclaw pairing approve slack <code>`
</Tab>
<Tab title="Channel policy">
<Tab title="渠道策略">
`channels.slack.groupPolicy` 控制渠道处理:
- `open`
@ -504,24 +507,24 @@ Slack 操作由 `channels.slack.actions.*` 控制。
渠道允许列表位于 `channels.slack.channels` 下,并应使用稳定的渠道 ID。
运行时说明:如果完全缺少 `channels.slack`(仅环境配置),运行时会回退到 `groupPolicy="allowlist"` 并记录警告(即使已设置 `channels.defaults.groupPolicy`)。
运行时注意事项:如果 `channels.slack` 完全缺失(仅环境变量设置),运行时会回退到 `groupPolicy="allowlist"` 并记录警告(即使已设置 `channels.defaults.groupPolicy`)。
名称/ID 解析:
- 当令牌访问允许时,渠道允许列表条目和私信允许列表条目会在启动时解析
- 未解析的渠道名称条目会按配置保留,但默认会在路由时被忽略
- 入站授权和渠道路由默认优先使用 ID;直接用户名/slug 匹配需要 `channels.slack.dangerouslyAllowNameMatching: true`
- 未解析的渠道名称条目会按配置保留,但默认会在路由忽略
- 入站授权和渠道路由默认以 ID 优先;直接用户名/slug 匹配需要 `channels.slack.dangerouslyAllowNameMatching: true`
</Tab>
<Tab title="Mentions and channel users">
渠道消息默认提及门控。
<Tab title="提及和渠道用户">
渠道消息默认提及门控。
提及来源:
- 显式应用提及(`<@botId>`
- 提及正则表达式模式(`agents.list[].groupChat.mentionPatterns`,回退到 `messages.groupChat.mentionPatterns`
- 隐式回复机器人线程行为(当 `thread.requireExplicitMention``true` 时禁用)
- 提及正则模式(`agents.list[].groupChat.mentionPatterns`,回退到 `messages.groupChat.mentionPatterns`
- 隐式回复 bot 线程行为(当 `thread.requireExplicitMention``true` 时禁用)
按渠道控制(`channels.slack.channels.<id>`;名称仅通过启动解析或 `dangerouslyAllowNameMatching` 使用):
@ -542,15 +545,15 @@ Slack 操作由 `channels.slack.actions.*` 控制。
- 私信路由为 `direct`;渠道路由为 `channel`MPIM 路由为 `group`
- 使用默认 `session.dmScope=main`Slack 私信会折叠到智能体主会话。
- 渠道会话:`agent:<agentId>:slack:channel:<channelId>`。
- 适用时,线程回复可以创建线程会话后缀(`:thread:<threadTs>`)。
- 线程回复可在适用时创建线程会话后缀(`:thread:<threadTs>`)。
- `channels.slack.thread.historyScope` 默认值为 `thread``thread.inheritParent` 默认值为 `false`
- `channels.slack.thread.initialHistoryLimit` 控制新线程会话开始时获取多少条现有线程消息(默认 `20`;设为 `0` 可禁用)。
- `channels.slack.thread.requireExplicitMention`(默认 `false`):当为 `true` 时,抑制隐式线程提及,因此机器人只会响应线程内显式 `@bot` 提及,即使机器人已参与该线程。没有此设置时,机器人参与过的线程中的回复会绕过 `requireMention` 门控。
- `channels.slack.thread.initialHistoryLimit` 控制新线程会话启动时获取多少条现有线程消息(默认 `20`;设`0` 可禁用)。
- `channels.slack.thread.requireExplicitMention`(默认 `false`):当为 `true` 时,会抑制隐式线程提及,因此 bot 只会响应线程内显式 `@bot` 提及,即使 bot 已经参与该线程。如果不这样设置bot 参与过的线程中的回复会绕过 `requireMention` 门控。
回复线程控制:
- `channels.slack.replyToMode``off|first|all|batched`(默认 `off`
- `channels.slack.replyToModeByChatType`:按 `direct|group|channel`
- `channels.slack.replyToModeByChatType`:按 `direct|group|channel` 设置
- 直接聊天的旧版回退:`channels.slack.dm.replyToMode`
支持手动回复标签:
@ -559,12 +562,12 @@ Slack 操作由 `channels.slack.actions.*` 控制。
- `[[reply_to:<id>]]`
<Note>
`replyToMode="off"` 会禁用 Slack 中的**所有**回复线程,包括显式 `[[reply_to_*]]` 标签。这与 Telegram 不同,后者在 `"off"` 模式下仍会遵循显式标签。Slack 线程会在渠道中隐藏消息,而 Telegram 回复会以内联方式保持可见。
`replyToMode="off"` 会禁用 Slack 中的**所有**回复线程,包括显式 `[[reply_to_*]]` 标签。这不同于 Telegram后者在 `"off"` 模式下仍会遵循显式标签。Slack 线程会从渠道中隐藏消息,而 Telegram 回复仍以内联方式可见。
</Note>
## 确认表情反应
## 确认响应表情
`ackReaction` 会在 OpenClaw 处理入站消息时发送确认表情符号。
`ackReaction` 会在 OpenClaw 处理入站消息时发送一个确认表情符号。
解析顺序:
@ -573,10 +576,10 @@ Slack 操作由 `channels.slack.actions.*` 控制。
- `messages.ackReaction`
- 智能体身份表情符号回退(`agents.list[].identity.emoji`,否则为 "👀"
说明
注意事项
- Slack 期望使用短代码(例如 `"eyes"`)。
- 使用 `""` 可为 Slack 账户或全局禁用该表情反应。
- Slack 需要短代码(例如 `"eyes"`)。
- 使用 `""` 可为 Slack 账号或全局禁用该响应。
## 文本流式传输
@ -585,19 +588,19 @@ Slack 操作由 `channels.slack.actions.*` 控制。
- `off`:禁用实时预览流式传输。
- `partial`(默认):用最新的部分输出替换预览文本。
- `block`:追加分块预览更新。
- `progress`:生成时显示进度 Status 文本,然后发送最终文本。
- `streaming.preview.toolProgress`草稿预览处于活动状态时,将工具/进度更新路由到同一条已编辑的预览消息(默认:`true`)。设为 `false` 可保留单独的工具/进度消息。
- `progress`:生成期间显示进度状态文本,然后发送最终文本。
- `streaming.preview.toolProgress`:草稿预览处于活动状态时,将工具/进度更新路由到同一条已编辑的预览消息(默认:`true`)。设`false` 可保留单独的工具/进度消息。
`channels.slack.streaming.mode``partial` 时,`channels.slack.streaming.nativeTransport` 控制 Slack 原生文本流式传输(默认:`true`)。
- 必须有可用的回复线程,原生文本流式传输和 Slack 助手线程 Status 才会显示。线程选择仍遵循 `replyToMode`
- 必须有可用的回复线程,原生文本流式传输和 Slack assistant 线程状态才会显示。线程选择仍遵循 `replyToMode`
- 当原生流式传输不可用时,渠道和群聊根消息仍可使用普通草稿预览。
- 顶层 Slack 私信默认不在线程中,因此不会显示线程样式预览;如果你希望在那里显示可见进度,请使用线程回复或 `typingReaction`
- 顶层 Slack 私信默认保持在线程外,因此不会显示线程样式预览;如果想在那里看到可见进度,请使用线程回复或 `typingReaction`
- 媒体和非文本载荷会回退到普通投递。
- 媒体/错误最终消息会取消待处理的预览编辑;符合条件的文本/分块最终消息仅在可以原地编辑预览时刷新。
- 媒体/错误最终消息会取消待处理的预览编辑;符合条件的文本/分块最终消息仅在能就地编辑预览时才会刷新。
- 如果流式传输在回复中途失败OpenClaw 会对剩余载荷回退到普通投递。
使用草稿预览而不是 Slack 原生文本流式传输:
使用草稿预览而不是 Slack 原生文本流式传输:
```json5
{
@ -618,41 +621,41 @@ Slack 操作由 `channels.slack.actions.*` 控制。
- 布尔值 `channels.slack.streaming` 会自动迁移到 `channels.slack.streaming.mode``channels.slack.streaming.nativeTransport`
- 旧版 `channels.slack.nativeStreaming` 会自动迁移到 `channels.slack.streaming.nativeTransport`
## 输入状态表情反应回退
## 输入应回退
`typingReaction` 会在 OpenClaw 处理回复时向入站 Slack 消息添加一个临时表情反应,并在运行结束时移除它。这在非线程回复中最有用,因为线程回复会使用默认的 “is typing...” Status 指示器。
`typingReaction` 会在 OpenClaw 处理回复时向入站 Slack 消息添加临时响应,并在运行完成时将其移除。这在线程回复之外最有用,因为线程回复使用默认的 "is typing..." 状态指示器。
解析顺序:
- `channels.slack.accounts.<accountId>.typingReaction`
- `channels.slack.typingReaction`
说明
注意事项
- Slack 期望使用短代码(例如 `"hourglass_flowing_sand"`)。
- 表情反应是尽力而为的,并会在回复或失败路径完成后自动尝试清理。
- Slack 需要短代码(例如 `"hourglass_flowing_sand"`)。
- 该响应会尽力执行,并会在回复或失败路径完成后自动尝试清理。
## 媒体、分块和投递
<AccordionGroup>
<Accordion title="Inbound attachments">
Slack 文件附件会从 Slack 托管的私有 URL 下载(令牌认证请求流程),并在获取成功且大小限制允许时写入媒体存储。文件占位符包含 Slack `fileId`,因此智能体可以使用 `download-file` 获取原始文件。
<Accordion title="入站附件">
Slack 文件附件会从 Slack 托管的私有 URL 下载(使用令牌认证请求流程),并在获取成功且大小限制允许时写入媒体存储。文件占位符包含 Slack `fileId`,因此智能体可以使用 `download-file` 获取原始文件。
下载使用有界空闲超时和总超时。如果 Slack 文件检索停滞或失败OpenClaw 会继续处理消息并回退到文件占位符。
下载使用有界空闲超时和总超时。如果 Slack 文件检索停滞或失败OpenClaw 会继续处理消息并回退到文件占位符。
除非由 `channels.slack.mediaMaxMb` 覆盖,运行时入站大小上限默认为 `20MB`
运行时入站大小上限默认为 `20MB`除非由 `channels.slack.mediaMaxMb` 覆盖。
</Accordion>
<Accordion title="Outbound text and files">
<Accordion title="出站文本和文件">
- 文本分块使用 `channels.slack.textChunkLimit`(默认 4000
- `channels.slack.chunkMode="newline"` 启用优先按段落拆分
- `channels.slack.chunkMode="newline"` 启用段落优先拆分
- 文件发送使用 Slack 上传 API并可包含线程回复`thread_ts`
- 配置后,出站媒体上限遵循 `channels.slack.mediaMaxMb`;否则,渠道发送会使用媒体管道中的 MIME 类型默认值
- 配置后,出站媒体上限遵循 `channels.slack.mediaMaxMb`;否则,渠道发送使用媒体管线中的 MIME 类型默认值
</Accordion>
<Accordion title="Delivery targets">
<Accordion title="投递目标">
首选显式目标:
- `user:<id>` 用于私信
@ -665,7 +668,7 @@ Slack 操作由 `channels.slack.actions.*` 控制。
## 命令和斜杠行为
斜杠命令在 Slack 中会显示为一个已配置命令或多个原生命令。配置 `channels.slack.slashCommand` 可更改命令默认值:
斜杠命令在 Slack 中显示为单个已配置命令或多个原生命令。配置 `channels.slack.slashCommand` 可更改命令默认值:
- `enabled: false`
- `name: "openclaw"`
@ -676,9 +679,9 @@ Slack 操作由 `channels.slack.actions.*` 控制。
/openclaw /help
```
原生命令需要在你的 Slack 应用中配置[额外清单设置](#additional-manifest-settings),并通过 `channels.slack.commands.native: true` 启用,或在全局配置中改用 `commands.native: true` 启用。
原生命令需要在你的 Slack 应用中配置[额外清单设置](#additional-manifest-settings),并改为通过 `channels.slack.commands.native: true` 或全局配置中的 `commands.native: true` 启用。
- 对 Slack 而言,原生命令自动模式为**关闭**,因此 `commands.native: "auto"` 不会启用 Slack 原生命令。
- Slack 的原生命令自动模式为**关闭**,因此 `commands.native: "auto"` 不会启用 Slack 原生命令。
```txt
/help
@ -688,14 +691,14 @@ Slack 操作由 `channels.slack.actions.*` 控制。
- 最多 5 个选项:按钮块
- 6-100 个选项:静态选择菜单
- 超过 100 个选项:当交互选项处理可用时,使用带异步选项过滤的外部选择
- 超出 Slack 限制:编码后的选项值回退按钮
- 超过 100 个选项:当交互选项处理程序可用时,使用带异步选项过滤的外部选择
- 超出 Slack 限制:编码后的选项值回退按钮
```txt
/think
```
斜杠会话使用类似 `agent:<agentId>:slack:slash:<userId>` 的隔离键,并使用 `CommandTargetSessionKey` 将命令执行路由到目标对话会话。
斜杠会话使用类似 `agent:<agentId>:slack:slash:<userId>` 的隔离键,并仍使用 `CommandTargetSessionKey` 将命令执行路由到目标会话。
## 交互式回复
@ -715,7 +718,7 @@ Slack 可以渲染智能体编写的交互式回复控件,但此功能默认
}
```
或仅为一个 Slack 账启用:
或仅为一个 Slack 账启用:
```json5
{
@ -733,44 +736,41 @@ Slack 可以渲染智能体编写的交互式回复控件,但此功能默认
}
```
启用后,智能体可以发出仅适用于 Slack 的回复指令:
启用后,智能体可以发出仅 Slack 使用的回复指令:
- `[[slack_buttons: Approve:approve, Reject:reject]]`
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
这些指令会编译为 Slack Block Kit并通过现有 Slack 交互事件路径将点击或选择路由回来
这些指令会编译成 Slack Block Kit并通过现有的 Slack 交互事件路径路由点击或选择
说明
注意
- 这是 Slack 专用 UI。其他渠道不会 Slack Block Kit 指令转换成自己的按钮系统。
- 交互式回调值是 OpenClaw 生成的不透明令牌,不是智能体编写的原始值。
- 如果生成的交互式块会超出 Slack Block Kit 限制OpenClaw 会回退到原始文本回复,而不是发送无效的 blocks 载。
- 这是 Slack 专用 UI。其他渠道不会 Slack Block Kit 指令转换成自己的按钮系统。
- 交互式回调值是 OpenClaw 生成的不透明令牌,不是智能体编写的原始值。
- 如果生成的交互式块会超出 Slack Block Kit 限制OpenClaw 会回退到原始文本回复,而不是发送无效的 blocks 载
## Slack 中的执行审批
## Slack 中的 exec 审批
Slack 可以通过交互式按钮和交互作为原生审批客户端,而不是回退到 Web 界面或终端。
Slack 可以作为带有交互式按钮和交互的原生审批客户端,而不是回退到 Web UI 或终端。
- 执行审批使用 `channels.slack.execApprovals.*` 进行原生私信/渠道路由。
- 当请求已进入 Slack 且审批 ID 类型为 `plugin:` 时,插件审批仍可通过同一个 Slack 原生按钮界面完成。
- Exec 审批使用 `channels.slack.execApprovals.*` 进行原生私信/渠道路由。
- 当请求已进入 Slack 且审批 id 类型为 `plugin:` 时,插件审批仍可通过同一个 Slack 原生按钮界面完成。
- 审批者授权仍会强制执行:只有被识别为审批者的用户才能通过 Slack 批准或拒绝请求。
这使用与其他渠道相同的共享审批按钮界面。当你的 Slack 应用设置中启用 `interactivity` 时,审批提示会直接在对话中呈现为 Block Kit 按钮。
当这些按钮存在时,它们就是主要审批 UX只有当工具结果说明聊天
审批不可用或手动审批是唯一路径时OpenClaw
才应包含手动 `/approve` 命令。
这使用与其他渠道相同的共享审批按钮界面。当你的 Slack 应用设置中启用 `interactivity` 时,审批提示会直接在对话中渲染为 Block Kit 按钮。
当这些按钮存在时它们是主要审批用户体验OpenClaw 只有在工具结果表明聊天审批不可用或手动审批是唯一路径时,才应包含手动 `/approve` 命令。
配置路径:
- `channels.slack.execApprovals.enabled`
- `channels.slack.execApprovals.approvers`(可选;可行时回退到 `commands.ownerAllowFrom`
- `channels.slack.execApprovals.target``dm` | `channel` | `both`,默认:`dm`
- `channels.slack.execApprovals.target``dm` | `channel` | `both`,默认`dm`
- `agentFilter`、`sessionFilter`
`enabled` 未设置或为 `"auto"` 且至少解析出一个
审批者时Slack 会自动启用原生执行审批。设置 `enabled: false` 可明确禁用 Slack 作为原生审批客户端。
设置 `enabled: true` 可在解析出审批者时强制启用原生审批。
`enabled` 未设置或为 `"auto"`且至少能解析出一个审批者时Slack 会自动启用原生 exec 审批。设置 `enabled: false` 可明确禁用 Slack 作为原生审批客户端。
设置 `enabled: true` 可在审批者可解析时强制开启原生审批。
没有显式 Slack 执行审批配置时的默认行为:
没有显式 Slack exec 审批配置时的默认行为:
```json5
{
@ -780,8 +780,7 @@ Slack 可以通过交互式按钮和交互作为原生审批客户端,而不
}
```
只有当你要覆盖审批者、添加过滤器,或
选择启用来源聊天投递时,才需要显式 Slack 原生配置:
只有在你想覆盖审批者、添加过滤器,或选择启用来源聊天投递时,才需要显式 Slack 原生配置:
```json5
{
@ -797,24 +796,22 @@ Slack 可以通过交互式按钮和交互作为原生审批客户端,而不
}
```
共享 `approvals.exec` 转发是独立的。仅当执行审批提示还必须
路由到其他聊天或显式带外目标时才使用它。共享 `approvals.plugin` 转发也是
独立的;当这些请求已进入 Slack 时Slack 原生按钮仍可完成插件审批。
共享的 `approvals.exec` 转发是独立的。仅当 exec 审批提示还必须路由到其他聊天或显式的带外目标时才使用它。共享的 `approvals.plugin` 转发也是独立的;当这些请求已进入 Slack 时Slack 原生按钮仍可完成插件审批。
聊天 `/approve` 也可在已支持命令的 Slack 渠道和私信中使用。查看[执行审批](/zh-CN/tools/exec-approvals)了解完整审批转发模型
同一聊天中的 `/approve` 也适用于已支持命令的 Slack 渠道和私信。完整的审批转发模型请参阅 [Exec 审批](/zh-CN/tools/exec-approvals)。
## 事件运维行为
## 事件运维行为
- 消息编辑/删除会映射为系统事件。
- 线程广播(“同时发送到频道”的线程回复)会按普通用户消息处理。
- 添加/移除回应事件会映射为系统事件。
- 成员加入/离开、渠道创建/重命名,以及置顶添加/移除事件会映射为系统事件。
- 线程广播(“同时发送到渠道”的线程回复)会作为普通用户消息处理。
- 添加/移除表情回应事件会映射为系统事件。
- 成员加入/离开、渠道创建/重命名,以及图钉添加/移除事件会映射为系统事件。
- 启用 `configWrites` 时,`channel_id_changed` 可以迁移渠道配置键。
- 渠道主题/用途元数据会被视为不受信任的上下文,并可注入路由上下文
- 适用时,线程起消息和初始线程历史上下文种子会按配置的发送者允许列表过滤。
- 块操作和模态交互会发出结构化的 `Slack interaction: ...` 系统事件,并包含丰富的负载字段
- 块操作:选定值、标签、选择器值和 `workflow_*` 元数据
- 模态 `view_submission``view_closed` 事件,包含路由的渠道元数据和表单输入
- 渠道主题/用途元数据会被视为不可信上下文,并可注入到路由上下文中
- 适用时,线程起消息和初始线程历史上下文种子会按配置的发送者允许列表过滤。
- Block 操作和模态框交互会发出带有丰富载荷字段的结构化 `Slack interaction: ...` 系统事件
- block 操作:所选值、标签、选择器值,以及 `workflow_*` 元数据
- 模态 `view_submission``view_closed` 事件,包含路由的渠道元数据和表单输入
## 配置参考
@ -824,7 +821,7 @@ Slack 可以通过交互式按钮和交互作为原生审批客户端,而不
- 模式/认证:`mode`、`botToken`、`appToken`、`signingSecret`、`webhookPath`、`accounts.*`
- 私信访问:`dm.enabled`、`dmPolicy`、`allowFrom`(旧版:`dm.policy`、`dm.allowFrom`)、`dm.groupEnabled`、`dm.groupChannels`
- 兼容性开关:`dangerouslyAllowNameMatching`(应急;除非需要,否则保持关闭)
- 兼容性开关:`dangerouslyAllowNameMatching`(应急选项;除非需要,否则保持关闭)
- 渠道访问:`groupPolicy`、`channels.*`、`channels.*.users`、`channels.*.requireMention`
- 线程/历史:`replyToMode`、`replyToModeByChatType`、`thread.*`、`historyLimit`、`dmHistoryLimit`、`dms.*.historyLimit`
- 投递:`textChunkLimit`、`chunkMode`、`mediaMaxMb`、`streaming`、`streaming.nativeTransport`、`streaming.preview.toolProgress`
@ -841,9 +838,9 @@ Slack 可以通过交互式按钮和交互作为原生审批客户端,而不
- `groupPolicy`
- 渠道允许列表(`channels.slack.channels`
- `requireMention`
- 每渠道 `users` 允许列表
- 每渠道 `users` 允许列表
有用命令:
有用命令:
```bash
openclaw channels status --probe
@ -859,9 +856,7 @@ openclaw doctor
- `channels.slack.dm.enabled`
- `channels.slack.dmPolicy`(或旧版 `channels.slack.dm.policy`
- 配对审批 / 允许列表条目
- Slack Assistant 私信事件:提到 `drop message_changed` 的详细日志
通常意味着 Slack 发送了一个已编辑的 Assistant 线程事件,但消息元数据中
没有可恢复的人类发送者
- Slack Assistant 私信事件:提到 `drop message_changed` 的详细日志通常表示 Slack 发送了一个编辑过的 Assistant 线程事件,但消息元数据中没有可恢复的人类发送者
```bash
openclaw pairing list slack
@ -873,8 +868,7 @@ openclaw pairing list slack
在 Slack 应用设置中验证 bot + app 令牌以及 Socket Mode 启用状态。
如果 `openclaw channels status --probe --json` 显示 `botTokenStatus`
`appTokenStatus: "configured_unavailable"`,表示 Slack 账户已配置,
但当前运行时无法解析由 SecretRef 支持的值。
`appTokenStatus: "configured_unavailable"`,说明 Slack 账号已配置,但当前运行时无法解析由 SecretRef 支持的值。
</Accordion>
@ -883,110 +877,108 @@ openclaw pairing list slack
- 签名密钥
- webhook 路径
- Slack Request URLsEvents + Interactivity + Slash Commands
- 每个 HTTP 账唯一的 `webhookPath`
- Slack Request URLEvents + Interactivity + Slash Commands
- 每个 HTTP 账唯一的 `webhookPath`
如果账户快照中出现 `signingSecretStatus: "configured_unavailable"`
表示 HTTP 账户已配置,但当前运行时无法
解析由 SecretRef 支持的签名密钥。
如果账号快照中出现 `signingSecretStatus: "configured_unavailable"`,说明 HTTP 账号已配置,但当前运行时无法解析由 SecretRef 支持的签名密钥。
</Accordion>
<Accordion title="原生/斜杠命令未触发">
确认你想要的是:
<Accordion title="原生/slash 命令未触发">
确认你原本想使用的是:
- 原生命令模式(`channels.slack.commands.native: true`),并在 Slack 中注册了匹配的斜杠命令
- 或单一斜杠命令模式(`channels.slack.slashCommand.enabled: true`
- 原生命令模式(`channels.slack.commands.native: true`),并在 Slack 中注册了匹配的 slash 命令
- 或单一 slash 命令模式(`channels.slack.slashCommand.enabled: true`
还要检查 `commands.useAccessGroups`渠道/用户允许列表。
另请检查 `commands.useAccessGroups` 以及渠道/用户允许列表。
</Accordion>
</AccordionGroup>
## 附件视觉参考
当 Slack 文件下载成功且大小限制允许时Slack 可以把已下载的媒体附加到智能体轮次。图像文件可以通过媒体理解路径传递,或直接传给支持视觉的回复模型;其他文件会作为可下载文件上下文保留,而不是作为图像输入处理。
当 Slack 文件下载成功且大小限制允许时Slack 可以将下载的媒体附加到智能体回合。图像文件可以通过媒体理解路径传递,或直接传递给支持视觉的回复模型;其他文件会保留为可下载文件上下文,而不是作为图像输入处理。
### 支持的媒体类型
| 媒体类型 | 来源 | 当前行为 | 备注 |
| 媒体类型 | 来源 | 当前行为 | 备注 |
| ------------------------------ | -------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| JPEG / PNG / GIF / WebP 图像 | Slack 文件 URL | 下载并附加到轮次,以便进行支持视觉的处理 | 单文件上限:`channels.slack.mediaMaxMb`(默认 20 MB |
| PDF 文件 | Slack 文件 URL | 下载并作为文件上下文暴露给 `download-file``pdf` 等工具 | Slack 入站不会自动把 PDF 转换为图像视觉输入 |
| 其他文件 | Slack 文件 URL | 可行时下载并作为文件上下文暴露 | 二进制文件不会作为图像输入处理 |
| 线程回复 | 线程起消息文件 | 当回复没有直接媒体时,根消息文件可作为上下文补充 | 仅文件起始消息使用附件占位符 |
| 多图像消息 | 多个 Slack 文件 | 每个文件都会独立评估 | Slack 处理限制为每条消息最多八个文件 |
| JPEG / PNG / GIF / WebP 图像 | Slack 文件 URL | 下载并附加到该回合,以便支持视觉的处理 | 单文件上限:`channels.slack.mediaMaxMb`(默认 20 MB |
| PDF 文件 | Slack 文件 URL | 下载并作为文件上下文暴露给 `download-file``pdf` 等工具 | Slack 入站不会自动将 PDF 转换为图像视觉输入 |
| 其他文件 | Slack 文件 URL | 可行时下载并作为文件上下文暴露 | 二进制文件不会作为图像输入处理 |
| 线程回复 | 线程起消息文件 | 当回复没有直接媒体时,根消息文件可作为上下文水合 | 仅包含文件的发起消息使用附件占位符 |
| 多图像消息 | 多个 Slack 文件 | 每个文件都会独立评估 | Slack 处理限制为每条消息最多八个文件 |
### 入站线
### 入站流水线
当带有文件附件的 Slack 消息到达时:
1. OpenClaw 使用 bot 令牌(`xoxb-...`)从 Slack 的私有 URL 下载文件。
2. 成功后,文件会写入媒体存储。
3. 下载媒体路径和内容类型会添加到入站上下文。
2. 下载成功后,文件会写入媒体存储。
3. 下载媒体路径和内容类型会添加到入站上下文。
4. 支持图像的模型/工具路径可以使用该上下文中的图像附件。
5. 非图像文件仍可作为文件元数据或媒体引用供能处理它们的工具使用。
5. 非图像文件仍可作为文件元数据或媒体引用供能处理它们的工具使用。
### 线程根附件继承
当消息在线程中到达时(有 `thread_ts` 父级)
当消息进入线程(有 `thread_ts` 父级)时
- 如果回复本身没有直接媒体而包含的根消息有文件Slack 可以把根文件补充为线程起始上下文。
- 如果回复本身没有直接媒体而包含的根消息有文件Slack 可以将根文件水合为线程发起消息上下文。
- 直接回复附件优先于根消息附件。
- 只有文件而没有文本的根消息会用附件占位符表示,以便回退仍可包含其文件。
- 只有文件且没有文本的根消息会用附件占位符表示,因此回退仍可包含其文件。
### 多附件处理
当单条 Slack 消息包含多个文件附件时:
- 每个附件都会通过媒体线独立处理。
- 已下载媒体引用会聚合进消息上下文
- 处理顺序遵循事件载中的 Slack 文件顺序。
- 每个附件都会通过媒体流水线独立处理。
- 下载的媒体引用会聚合到消息上下文中
- 处理顺序遵循事件载中的 Slack 文件顺序。
- 一个附件下载失败不会阻塞其他附件。
### 大小、下载和模型限制
- **大小上限**:默认每个文件 20 MB。可通过 `channels.slack.mediaMaxMb` 配置。
- **下载失败**Slack 无法提供的文件、过期 URL、不可访问文件、超大文件以及 Slack 认证/登录 HTML 响应会被跳过,而不是报告为不支持的格式。
- **视觉模型**:图像分析会在活动回复模型支持视觉时使用该模型,或使用 `agents.defaults.imageModel` 配置的图像模型。
- **视觉模型**:图像分析会在活动回复模型支持视觉时使用它,否则使用在 `agents.defaults.imageModel` 配置的图像模型。
### 已知限制
| 场景 | 当前行为 | 解决方法 |
| 场景 | 当前行为 | 解决方法 |
| -------------------------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| 过期的 Slack 文件 URL | 文件被跳过;不显示错误 | 在 Slack 中重新上传文件 |
| 未配置视觉模型 | 图像附件会存储为媒体引用,但不会作为图像分析 | 配置 `agents.defaults.imageModel`,或使用支持视觉的回复模型 |
| 非常大的图像(默认 > 20 MB | 按大小上限跳过 | 如果 Slack 允许,增大 `channels.slack.mediaMaxMb` |
| 转发/共享附件 | 文本和 Slack 托管的图像/文件媒体按尽力而为处理 | 直接在 OpenClaw 线程中重新共享 |
| PDF 附件 | 存储为文件/媒体上下文,不会自动通过图像视觉路由 | 使用 `download-file` 获取文件元数据,或使用 `pdf` 工具进行 PDF 分析 |
| Slack 文件 URL 已过期 | 跳过文件;不显示错误 | 在 Slack 中重新上传文件 |
| 未配置视觉模型 | 图像附件会存储为媒体引用,但不会作为图像分析 | 配置 `agents.defaults.imageModel`,或使用具备视觉能力的回复模型 |
| 非常大的图像(默认 > 20 MB | 按大小上限跳过 | 如果 Slack 允许,增大 `channels.slack.mediaMaxMb` |
| 转发/共享的附件 | 文本以及 Slack 托管的图像/文件媒体会尽力处理 | 直接在 OpenClaw 线程中重新共享 |
| PDF 附件 | 存储为文件/媒体上下文,不会自动通过图像视觉处理 | 使用 `download-file` 获取文件元数据,或使用 `pdf` 工具进行 PDF 分析 |
### 相关文档
- [媒体理解流水线](/zh-CN/nodes/media-understanding)
- [PDF 工具](/zh-CN/tools/pdf)
- 史诗任务:[#51349](https://github.com/openclaw/openclaw/issues/51349) — Slack 附件视觉启用
- 回归测试[#51353](https://github.com/openclaw/openclaw/issues/51353)
- 实时验证[#51354](https://github.com/openclaw/openclaw/issues/51354)
- Epic: [#51349](https://github.com/openclaw/openclaw/issues/51349) — Slack 附件视觉能力启用
- 回归测试: [#51353](https://github.com/openclaw/openclaw/issues/51353)
- 实时验证: [#51354](https://github.com/openclaw/openclaw/issues/51354)
## 相关内容
## 相关
<CardGroup cols={2}>
<Card title="Pairing" icon="link" href="/zh-CN/channels/pairing">
<Card title="配对" icon="link" href="/zh-CN/channels/pairing">
将 Slack 用户与 Gateway 网关配对。
</Card>
<Card title="Groups" icon="users" href="/zh-CN/channels/groups">
<Card title="群组" icon="users" href="/zh-CN/channels/groups">
渠道和群组私信行为。
</Card>
<Card title="Channel routing" icon="route" href="/zh-CN/channels/channel-routing">
<Card title="渠道路由" icon="route" href="/zh-CN/channels/channel-routing">
将入站消息路由到智能体。
</Card>
<Card title="Security" icon="shield" href="/zh-CN/gateway/security">
<Card title="安全" icon="shield" href="/zh-CN/gateway/security">
威胁模型和加固。
</Card>
<Card title="Configuration" icon="sliders" href="/zh-CN/gateway/configuration">
<Card title="配置" icon="sliders" href="/zh-CN/gateway/configuration">
配置布局和优先级。
</Card>
<Card title="Slash commands" icon="terminal" href="/zh-CN/tools/slash-commands">
<Card title="斜杠命令" icon="terminal" href="/zh-CN/tools/slash-commands">
命令目录和行为。
</Card>
</CardGroup>

View File

@ -2,122 +2,95 @@
read_when:
- 你正在构建一个新的消息渠道插件
- 你想将 OpenClaw 连接到消息平台
- 你需要了解 ChannelPlugin 适配器接口
- 你需要了解 ChannelPlugin 适配器接口
sidebarTitle: Channel Plugins
summary: 构建 OpenClaw 消息渠道插件的分步指南
title: 构建渠道插件
x-i18n:
generated_at: "2026-04-28T11:59:09Z"
generated_at: "2026-04-29T15:39:39Z"
model: gpt-5.5
provider: openai
source_hash: 70a3f8fb671c7291a0566f71a56e45232ed51bb43a8fe470e651a03e994e4aa2
source_hash: 03384057a4316b87c6088d3859d16ed4546c803f7c64639cd12be293f4841258
source_path: plugins/sdk-channel-plugins.md
workflow: 16
---
本指南将介绍如何构建一个将 OpenClaw 连接到
消息平台的渠道插件。完成后,你将拥有一个可工作的渠道,具备私信安全、
配对、回复线程和出站消息功能。
本指南会带你构建一个将 OpenClaw 连接到消息平台的渠道插件。完成后,你将拥有一个可工作的渠道,具备私信安全、配对、回复线程和出站消息发送能力。
<Info>
如果你以前没有构建过任何 OpenClaw 插件,请先阅读
[入门指南](/zh-CN/plugins/building-plugins),了解基本包
结构和清单设置。
如果你之前没有构建过任何 OpenClaw 插件,请先阅读
[入门指南](/zh-CN/plugins/building-plugins),了解基本的包结构和清单设置。
</Info>
## 渠道插件如何工作
渠道插件不需要自己的发送/编辑/回应工具。OpenClaw 在核心中保留一个
共享的 `message` 工具。你的插件负责:
渠道插件不需要自己的发送、编辑或回应工具。OpenClaw 在核心中保留一个共享的 `message` 工具。你的插件负责:
- **配置** — 账号解析和设置向导
- **安全** — 私信策略和允许列表
- **配对** — 私信批准流程
- **会话语法** — 提供商特定的话 ID 如何映射到基础聊天、线程 ID 和父级回退
- **会话语法** — 提供商特定的话 ID 如何映射到基础聊天、线程 ID 和父级回退
- **出站** — 向平台发送文本、媒体和投票
- **线程** — 回复如何被线程化
- **心跳输入状态**面向心跳投递目标的可选输入中/忙碌信号
- **线程** — 回复如何进入线程
- **心跳输入状态**用于心跳投递目标的可选输入中/忙碌信号
核心负责共享消息工具、提示词接线、外层会话键形状、
通用 `:thread:` 记账和分发。
核心负责共享消息工具、提示词接线、外层会话键形状、通用 `:thread:` 记账以及分发。
如果你的渠道支持入站回复之外的输入指示器,请在渠道插件上公开
`heartbeat.sendTyping(...)`。核心会在心跳模型运行开始前,使用解析后的
心跳投递目标调用它,并使用共享的输入状态保活/清理生命周期。当平台需要显式停止信号时,
添加 `heartbeat.clearTyping(...)`
如果你的渠道支持入站回复之外的输入状态指示器,请在渠道插件上暴露 `heartbeat.sendTyping(...)`。核心会在心跳模型运行开始前,使用已解析的心跳投递目标调用它,并使用共享的输入状态 keepalive/cleanup 生命周期。当平台需要显式停止信号时,请添加 `heartbeat.clearTyping(...)`
如果你的渠道添加了承载媒体来源的消息工具参数,请通过
`describeMessageTool(...).mediaSourceParams` 公开这些参数名。核心会使用
该显式列表进行沙箱路径规范化和出站媒体访问策略,因此插件不需要为提供商特定的
头像、附件或封面图参数添加共享核心特例。
优先返回按操作键分组的映射,例如
`{ "set-profile": ["avatarUrl", "avatarPath"] }`,这样无关操作不会
继承另一个操作的媒体参数。对于有意在每个公开操作之间共享的参数,扁平数组仍然可用。
如果你的渠道添加了承载媒体来源的消息工具参数,请通过 `describeMessageTool(...).mediaSourceParams` 暴露这些参数名称。核心会使用该显式列表来进行沙箱路径规范化和出站媒体访问策略处理,因此插件不需要为提供商特定的头像、附件或封面图像参数在共享核心中添加特殊情况。
优先返回按动作键索引的映射,例如
`{ "set-profile": ["avatarUrl", "avatarPath"] }`,这样无关动作不会继承其他动作的媒体参数。对于有意在每个暴露动作之间共享的参数,扁平数组仍然可用。
如果你的平台在对话 ID 中存储额外作用域,请在插件内使用
`messaging.resolveSessionConversation(...)` 保持解析逻辑。这是将 `rawId`
映射到基础对话 ID、可选线程 ID、显式 `baseConversationId`
以及任何 `parentConversationCandidates` 的规范钩子。
返回 `parentConversationCandidates` 时,请按从最窄父级到最宽/基础对话的顺序排列。
如果你的平台在会话 ID 中存储额外作用域,请使用 `messaging.resolveSessionConversation(...)` 将解析逻辑保留在插件中。这是将 `rawId` 映射到基础会话 ID、可选线程 ID、显式 `baseConversationId` 以及任何 `parentConversationCandidates` 的规范钩子。
当你返回 `parentConversationCandidates` 时,请按从最窄父级到最宽泛/基础会话的顺序排列它们。
当插件代码需要规范化类似路由的字段、比较子线程与其父路由,
或从 `{ channel, to, accountId, threadId }` 构建稳定的去重键时,
使用 `openclaw/plugin-sdk/channel-route`。该辅助函数会以与核心相同的方式
规范化数字线程 ID因此插件应优先使用它而不是临时的 `String(threadId)` 比较。
具有提供商特定目标语法的插件可以将其解析器注入
`resolveChannelRouteTargetWithParser(...)`,并且仍然获得与核心相同的路由目标形状
和线程回退语义。
当插件代码需要规范化类似路由的字段、比较子线程与其父路由,或从 `{ channel, to, accountId, threadId }` 构建稳定的去重键时,请使用 `openclaw/plugin-sdk/channel-route`。该辅助函数会以与核心相同的方式规范化数字线程 ID因此插件应优先使用它而不是临时的 `String(threadId)` 比较。
具有提供商特定目标语法的插件可以将自己的解析器注入 `resolveChannelRouteTargetWithParser(...)`,并仍然获得与核心使用的相同路由目标形状和线程回退语义。
在渠道注册表启动前需要相同解析的内置插件,也可以公开一个顶层
`session-key-api.ts` 文件,并导出匹配的
`resolveSessionConversation(...)`。只有当运行时插件注册表尚不可用时,
核心才会使用这个启动安全的接口。
在渠道注册表启动之前就需要相同解析的内置插件,也可以暴露一个顶层 `session-key-api.ts` 文件,并导出匹配的 `resolveSessionConversation(...)`。核心仅在运行时插件注册表尚不可用时使用这个可安全用于引导阶段的接口。
当插件只需要在通用/原始 ID 之上添加父级回退时,
`messaging.resolveParentConversationCandidates(...)` 仍作为旧版兼容回退可用。
如果两个钩子都存在,核心会优先使用
`resolveSessionConversation(...).parentConversationCandidates`,并且只有当规范钩子
省略它们时,才回退到 `resolveParentConversationCandidates(...)`
当插件只需要在通用/原始 ID 之上提供父级回退项时,`messaging.resolveParentConversationCandidates(...)` 仍可作为旧版兼容回退使用。如果两个钩子都存在,核心会优先使用 `resolveSessionConversation(...).parentConversationCandidates`,并且仅当规范钩子省略它们时才回退到 `resolveParentConversationCandidates(...)`
## 批和渠道能力
## 审批和渠道能力
大多数渠道插件不需要批专用代码。
大多数渠道插件不需要审批专用代码。
- 核心负责同聊天 `/approve`、共享批准按钮载荷和通用回退投递。
- 当渠道需要批准专用行为时,优先在渠道插件上使用一个 `approvalCapability` 对象。
- `ChannelPlugin.approvals`移除。将批准投递/原生/渲染/认证事实放在 `approvalCapability` 上。
- `plugin.auth` 仅用于登录/登出;核心不再从该对象读取批准认证钩子。
- `approvalCapability.authorizeActorAction``approvalCapability.getActionAvailabilityState` 是规范的批准认证接缝。
- 使用 `approvalCapability.getActionAvailabilityState` 表示同聊天批准认证可用性。
- 如果你的渠道公开原生执行批准,请在发起界面/原生客户端状态不同于同聊天批准认证时,使用 `approvalCapability.getExecInitiatingSurfaceState`。核心使用这个执行专用钩子区分 `enabled``disabled`,判断发起渠道是否支持原生执行批准,并将该渠道纳入原生客户端回退指引。`createApproverRestrictedNativeApprovalCapability(...)` 会为常见情况填充这一点。
- 对渠道特定的载荷生命周期行为使用 `outbound.shouldSuppressLocalPayloadPrompt``outbound.beforeDeliverPayload`,例如隐藏重复的本地批提示,或在投递前发送输入指示器。
- 仅将 `approvalCapability.delivery` 用于原生批路由或回退抑制。
- `approvalCapability.nativeRuntime` 用于渠道自有的原生批准事实。用 `createLazyChannelApprovalNativeRuntimeAdapter(...)` 在热渠道入口点保持其惰性,它可以按需导入你的运行时模块,同时仍允许核心组装批生命周期。
- 仅当渠道确实需要自定义批准载荷而不是共享渲染器时,才使用 `approvalCapability.render`
- 当渠道希望禁用路径回复解释启用原生执行批准所需的确切配置开关时,使用 `approvalCapability.describeExecApprovalSetup`。该钩子接收 `{ channel, channelLabel, accountId }`;具名账号渠道应渲染账号作用域路径,例如 `channels.<channel>.accounts.<id>.execApprovals.*`,而不是顶层默认值。
- 如果渠道可以从现有配置推断稳定的类似所有者的私信身份,请使用来自 `openclaw/plugin-sdk/approval-runtime``createResolvedApproverActionAuthAdapter` 来限制同聊天 `/approve`,无需添加批准专用核心逻辑。
- 如果渠道需要原生批投递,请让渠道代码聚焦于目标规范化以及传输/呈现事实。使用来自 `openclaw/plugin-sdk/approval-runtime``createChannelExecApprovalProfile`、`createChannelNativeOriginTargetResolver`、`createChannelApproverDmTargetResolver` 和 `createApproverRestrictedNativeApprovalCapability`。将渠道特定事实放在 `approvalCapability.nativeRuntime` 后面,理想情况下通过 `createChannelApprovalNativeRuntimeAdapter(...)``createLazyChannelApprovalNativeRuntimeAdapter(...)`,这样核心可以组装处理并负责请求过滤、路由、去重、过期、Gateway 网关订阅和已路由到别处的通知。`nativeRuntime` 被拆分为几个更小的接缝:
- `createChannelNativeOriginTargetResolver` 默认`{ to, accountId, threadId }` 目标使用共享渠道路由匹配器。仅当渠道具有提供商特定的等价规则时才传入 `targetsMatch`,例如 Slack 时间戳前缀匹配。
- 当渠道需要在默认路由匹配器或自定义 `targetsMatch` 回调运行前规范化提供商 ID同时保留原始目标用于投递时`normalizeTargetForMatch` 传给 `createChannelNativeOriginTargetResolver`。仅当解析的投递目标本身应被规范化时,才使用 `normalizeTarget`
- 核心负责同一聊天中的 `/approve`、共享审批按钮载荷以及通用回退投递。
- 当渠道需要审批特定行为时,优先在渠道插件上使用一个 `approvalCapability` 对象。
- `ChannelPlugin.approvals`被移除。请将审批投递、原生、渲染和鉴权事实放在 `approvalCapability` 上。
- `plugin.auth` 仅用于登录/登出;核心不再从该对象读取审批鉴权钩子。
- `approvalCapability.authorizeActorAction``approvalCapability.getActionAvailabilityState` 是规范的审批鉴权接缝。
- 使用 `approvalCapability.getActionAvailabilityState` 处理同一聊天审批鉴权可用性。
- 如果你的渠道暴露原生 exec 审批,请在发起面/原生客户端状态不同于同一聊天审批鉴权时,使用 `approvalCapability.getExecInitiatingSurfaceState`。核心使用这个 exec 专用钩子区分 `enabled``disabled`,决定发起渠道是否支持原生 exec 审批,并将该渠道包含在原生客户端回退指引中。`createApproverRestrictedNativeApprovalCapability(...)` 会为常见情况填充这一点。
- 使用 `outbound.shouldSuppressLocalPayloadPrompt``outbound.beforeDeliverPayload` 处理渠道特定的载荷生命周期行为,例如隐藏重复的本地批提示,或在投递前发送输入状态指示器。
- 仅将 `approvalCapability.delivery` 用于原生批路由或回退抑制。
- 使用 `approvalCapability.nativeRuntime` 处理渠道拥有的原生审批事实。在热渠道入口点上通过 `createLazyChannelApprovalNativeRuntimeAdapter(...)` 保持懒加载,它可以按需导入你的运行时模块,同时仍允许核心组装批生命周期。
- 仅当渠道确实需要自定义审批载荷而非共享渲染器时,才使用 `approvalCapability.render`
- 当渠道希望禁用路径回复说明启用原生 exec 审批所需的确切配置旋钮时,请使用 `approvalCapability.describeExecApprovalSetup`。该钩子接收 `{ channel, channelLabel, accountId }`;具名账号渠道应渲染账号作用域路径,例如 `channels.<channel>.accounts.<id>.execApprovals.*`,而不是顶层默认值。
- 如果渠道可以从现有配置推断稳定的类似所有者的私信身份,请使用 `openclaw/plugin-sdk/approval-runtime` `createResolvedApproverActionAuthAdapter` 来限制同一聊天中的 `/approve`,无需添加审批特定的核心逻辑。
- 如果渠道需要原生批投递,请让渠道代码聚焦于目标规范化以及传输/呈现事实。使用 `openclaw/plugin-sdk/approval-runtime` `createChannelExecApprovalProfile`、`createChannelNativeOriginTargetResolver`、`createChannelApproverDmTargetResolver` 和 `createApproverRestrictedNativeApprovalCapability`。将渠道特定事实放在 `approvalCapability.nativeRuntime` 后面,理想情况下通过 `createChannelApprovalNativeRuntimeAdapter(...)``createLazyChannelApprovalNativeRuntimeAdapter(...)`,这样核心可以组装处理程序并负责请求过滤、路由、去重、过期、Gateway 网关订阅以及已路由到其他位置的通知。`nativeRuntime` 被拆分为几个更小的接缝:
- `createChannelNativeOriginTargetResolver` 默认使用共享渠道路由匹配器处理 `{ to, accountId, threadId }` 目标。仅当渠道具有提供商特定的等价规则时才传入 `targetsMatch`,例如 Slack 时间戳前缀匹配。
- 当渠道需要在默认路由匹配器或自定义 `targetsMatch` 回调运行前规范化提供商 ID同时保留原始目标用于投递时`normalizeTargetForMatch` 传给 `createChannelNativeOriginTargetResolver`。仅当解析的投递目标本身应被规范化时,才使用 `normalizeTarget`
- `availability` — 账号是否已配置,以及请求是否应被处理
- `presentation` — 将共享批视图模型映射为待处理/已解决/已过期的原生载荷或最终
- `transport` — 准备目标,并发送/更新/删除原生批消息
- `interactions` — 用于原生按钮或回应的可选绑定/解绑/清除作钩子
- `observe` — 可选投递诊断钩子
- 如果渠道需要运行时自有对象例如客户端、令牌、Bolt 应用或 webhook 接收器,请通过 `openclaw/plugin-sdk/channel-runtime-context` 注册它们。通用运行时上下文注册表让核心能够从渠道启动状态引导能力驱动的处理器,而无需添加批准专用包装胶水
- 仅当能力驱动接缝仍不够表达需求时,才使用更低层的 `createChannelApprovalHandler``createChannelNativeApprovalRuntime`
- 原生批渠道必须通过这些辅助函数同时路由 `accountId``approvalKind`。`accountId` 让多账号批策略限定在正确的机器人账号内,`approvalKind` 让执行与插件批准行为可供渠道使用,而不需要在核心中硬编码分支。
- 核心现在也负责批重路由通知。渠道插件不应从 `createChannelNativeApprovalRuntime` 发送自己的“批准已发送到私信 / 另一个渠道”后续消息;而应通过共享批准能力辅助函数公开准确的来源和批准者私信路由,并让核心在向发起聊天发布任何通知前聚合实际投递结果
- 端到端保留已投递批 ID 类型。原生客户端不应
从渠道本地状态猜测或重写执行与插件批准路由。
- 不同批准类型可以有意公开不同的原生界面。
- `presentation` — 将共享批视图模型映射为待处理/已解决/已过期的原生载荷或最终
- `transport` — 准备目标,并发送/更新/删除原生批消息
- `interactions` — 用于原生按钮或回应的可选绑定/解绑/清除作钩子
- `observe` — 可选投递诊断钩子
- 如果渠道需要由运行时拥有的对象例如客户端、令牌、Bolt 应用或 webhook 接收器,请通过 `openclaw/plugin-sdk/channel-runtime-context` 注册它们。通用运行时上下文注册表让核心可以从渠道启动状态引导由能力驱动的处理程序,而无需添加审批特定的包装胶水代码
- 仅当能力驱动接缝表达能力仍不够时,才使用更低层`createChannelApprovalHandler``createChannelNativeApprovalRuntime`
- 原生批渠道必须通过这些辅助函数路由 `accountId``approvalKind`。`accountId` 让多账号批策略限定在正确的机器人账号内,`approvalKind` 则让渠道可用 exec 与插件审批行为,而无需在核心中硬编码分支。
- 核心现在也负责批重路由通知。渠道插件不应从 `createChannelNativeApprovalRuntime` 发送自己的“审批已发送到私信/另一个渠道”后续消息;相反,应通过共享审批能力辅助函数暴露准确的来源和审批者私信路由,并让核心在发回任何通知到发起聊天之前汇总实际投递
- 端到端保留已投递批 ID 类型。原生客户端不应
从渠道本地状态猜测或重写 exec 与插件审批路由。
- 不同审批类型可以有意暴露不同的原生表面。
当前内置示例:
- Slack 对执行和插件 ID 都保持原生批准路由可用。
- Matrix 对执行和插件批准保持相同的原生私信/渠道路由和回应 UX
同时仍允许认证按批准类型不同。
- `createApproverRestrictedNativeApprovalAdapter` 仍作为兼容包装器存在,但新代码应优先使用能力构建器,并在插件上公开 `approvalCapability`
- Slack 让原生审批路由对 exec 和插件 ID 都可用。
- Matrix 为 exec 和插件审批保留相同的原生私信/渠道路由和回应 UX
同时仍允许鉴权按审批类型不同。
- `createApproverRestrictedNativeApprovalAdapter` 仍作为兼容包装器存在,但新代码应优先使用能力构建器,并在插件上暴露 `approvalCapability`
对于热渠道入口点,如果你只需要该系列的一部分,请优先使用更窄的运行时子路径:
对于热渠道入口点,当你只需要该系列的一部分时,优先使用更窄的运行时子路径:
- `openclaw/plugin-sdk/approval-auth-runtime`
- `openclaw/plugin-sdk/approval-client-runtime`
@ -136,47 +109,60 @@ x-i18n:
`openclaw/plugin-sdk/reply-reference`
`openclaw/plugin-sdk/reply-chunking`
特别是对于设置:
专门针对设置:
- `openclaw/plugin-sdk/setup-runtime` 盖运行时安全的设置辅助函数:
- `openclaw/plugin-sdk/setup-runtime` 盖运行时安全的设置辅助函数:
导入安全的设置补丁适配器(`createPatchedAccountSetupAdapter`、
`createEnvPatchedAccountSetupAdapter`
`createSetupInputPresenceValidator`)、查找说明输出、
`promptResolvedAllowFrom`、`splitSetupEntries`以及委托式
`createSetupInputPresenceValidator`)、查找注释输出、
`promptResolvedAllowFrom`、`splitSetupEntries` 以及委托式
设置代理构建器
- `openclaw/plugin-sdk/setup-adapter-runtime` 是用于 `createEnvPatchedAccountSetupAdapter`
的窄环境感知适配器接缝
- `openclaw/plugin-sdk/channel-setup` 覆盖可选安装设置
构建器,以及少量设置安全原语:
`createOptionalChannelSetupSurface`、`createOptionalChannelSetupAdapter`
- `openclaw/plugin-sdk/setup-adapter-runtime` 是面向 `createEnvPatchedAccountSetupAdapter` 的窄环境感知适配器接缝
- `openclaw/plugin-sdk/channel-setup` 涵盖可选安装设置
构建器以及一些设置安全的原语:
`createOptionalChannelSetupSurface`、`createOptionalChannelSetupAdapter`、
如果你的渠道支持由环境驱动的设置或认证,并且通用启动/配置
流程应在运行时加载前知道这些环境变量名,请在
插件清单中用 `channelEnvVars` 声明它们。渠道运行时 `envVars` 或本地
常量仅用于面向操作员的文案。
如果你的渠道支持由环境驱动的设置或鉴权,并且通用启动/配置流程应在运行时加载前知道这些环境名称,请在插件清单中使用 `channelEnvVars` 声明它们。将渠道运行时 `envVars` 或本地常量仅用于面向操作员的文案。
如果你的渠道会在插件运行时启动前出现在 `status`、`channels list`、`channels status` 或 SecretRef 扫描中,请在 `package.json` 中添加 `openclaw.setupEntry`。该入口点应能在只读命令路径中安全导入并应返回这些摘要所需的渠道元数据、可安全用于设置的配置适配器、Status 适配器和渠道密钥目标元数据。不要从设置入口启动客户端、监听器或传输运行时。
如果你的渠道会在插件运行时启动前出现在 `status`、`channels list`、`channels status` 或
SecretRef 扫描中,请在 `package.json` 中添加 `openclaw.setupEntry`。该入口点应该能够在只读命令
路径中安全导入并应返回这些摘要所需的渠道元数据、设置安全的配置适配器、Status
适配器,以及渠道密钥目标元数据。不要从设置入口启动客户端、监听器或传输运行时。
同时保持主渠道入口导入路径收窄。设备发现可以评估入口和渠道插件模块,以注册能力,而不会激活该渠道。像 `channel-plugin-api.ts` 这样的文件应导出渠道插件对象,而不应导入设置向导、传输客户端、套接字监听器、子进程启动器或服务启动模块。将这些运行时部分放在从 `registerFull(...)`、运行时 setter 或懒加载能力适配器加载的模块中。
主渠道入口导入路径也要保持精简。设备发现可以评估入口和渠道插件模块,以注册能力,而不会激活
渠道。`channel-plugin-api.ts` 等文件应导出渠道插件对象,而不应导入设置向导、传输客户端、套接字
监听器、子进程启动器或服务启动模块。将这些运行时部分放在从 `registerFull(...)`、运行时 setter
或惰性能力适配器加载的模块中。
`createOptionalChannelSetupWizard`、`DEFAULT_ACCOUNT_ID`、`createTopLevelChannelDmPolicy`、`setSetupChannelEnabled` 和 `splitSetupEntries`
`createOptionalChannelSetupWizard`、`DEFAULT_ACCOUNT_ID`、
`createTopLevelChannelDmPolicy`、`setSetupChannelEnabled` 和
`splitSetupEntries`
- 仅当你还需要更重的共享设置/配置辅助工具(例如 `moveSingleAccountChannelSectionToDefaultAccount(...)`)时,才使用更宽的 `openclaw/plugin-sdk/setup` seam
- 仅当你还需要更重的共享设置/配置辅助函数(如
`moveSingleAccountChannelSectionToDefaultAccount(...)`)时,才使用更宽泛的
`openclaw/plugin-sdk/setup` 接缝
如果你的渠道只想在设置界面中提示“先安装此插件”,请优先使用 `createOptionalChannelSetupSurface(...)`。生成的适配器/向导会在配置写入和最终完成时失败关闭,并在验证、最终完成和文档链接文案中复用同一条需要安装的消息。
如果你的渠道只想在设置界面中提示“先安装此插件”,请优先使用
`createOptionalChannelSetupSurface(...)`。生成的适配器/向导会在配置写入和最终确认时失败关闭,并且会在验证、最终确认和文档链接文案中复用相同的必需安装消息。
对于其他热路径渠道,请优先使用较窄的辅助工具,而不是更宽的旧版界面:
对于其他热路径渠道,优先使用精简辅助函数,而不是更宽泛的旧界面:
- `openclaw/plugin-sdk/account-core`、`openclaw/plugin-sdk/account-id`、`openclaw/plugin-sdk/account-resolution` 和 `openclaw/plugin-sdk/account-helpers` 用于多账户配置和默认账户回退
- `openclaw/plugin-sdk/inbound-envelope``openclaw/plugin-sdk/inbound-reply-dispatch` 用于入站路由/信封以及记录并分发接线
- `openclaw/plugin-sdk/messaging-targets` 用于目标解析/匹配
- `openclaw/plugin-sdk/outbound-media``openclaw/plugin-sdk/outbound-runtime` 用于媒体加载,以及出站身份/发送委托和载荷规划
- 当出站路由应保留显式 `replyToId`/`threadId`,或在基础会话键仍然匹配后恢复当前 `:thread:` 会话时,请使用来自 `openclaw/plugin-sdk/channel-core``buildThreadAwareOutboundSessionRoute(...)`。当平台具有原生线程投递语义时,提供商插件可以覆盖优先级、后缀行为和线程 ID 规范化。
- `openclaw/plugin-sdk/thread-bindings-runtime` 用于线程绑定生命周期和适配器注册
- `openclaw/plugin-sdk/account-core`
`openclaw/plugin-sdk/account-id`
`openclaw/plugin-sdk/account-resolution`
`openclaw/plugin-sdk/account-helpers`,用于多账号配置和默认账号回退
- `openclaw/plugin-sdk/inbound-envelope`
`openclaw/plugin-sdk/inbound-reply-dispatch`,用于入站路由/信封以及记录并分发接线
- `openclaw/plugin-sdk/messaging-targets`,用于目标解析/匹配
- `openclaw/plugin-sdk/outbound-media`
`openclaw/plugin-sdk/outbound-runtime`,用于媒体加载,以及出站身份/发送委托和载荷规划
- 当出站路由应保留显式 `replyToId`/`threadId`,或在基础会话键仍匹配后恢复当前 `:thread:` 会话时,使用
`openclaw/plugin-sdk/channel-core` 中的 `buildThreadAwareOutboundSessionRoute(...)`。当提供商插件的平台具有原生线程投递语义时,可以覆盖优先级、后缀行为和线程 ID 规范化。
- `openclaw/plugin-sdk/thread-bindings-runtime`,用于线程绑定生命周期和适配器注册
- 仅当仍需要旧版智能体/媒体载荷字段布局时,才使用 `openclaw/plugin-sdk/agent-media-payload`
- `openclaw/plugin-sdk/telegram-command-config` 用于 Telegram 自定义命令规范化、重复/冲突验证,以及回退稳定的命令配置契约
- `openclaw/plugin-sdk/telegram-command-config`用于 Telegram 自定义命令规范化、重复/冲突验证,以及回退稳定的命令配置契约
仅认证渠道通常可以停在默认路径:核心会处理审批,插件只需暴露出站/认证能力。Matrix、Slack、Telegram 以及自定义聊天传输等原生审批渠道应使用共享的原生辅助工具,而不是自行实现审批生命周期。
仅认证渠道通常可以停在默认路径:核心处理批,插件只暴露出站/认证能力。Matrix、Slack、Telegram 和自定义聊天传输等原生批准渠道应使用共享原生辅助函数,而不是自行实现批准生命周期。
## 入站提及策略
@ -185,17 +171,19 @@ x-i18n:
- 插件拥有的证据收集
- 共享策略评估
使用 `openclaw/plugin-sdk/channel-mention-gating` 进行提及策略决策。仅当你需要更宽的入站辅助 barrel 时,才使用 `openclaw/plugin-sdk/channel-inbound`
使用 `openclaw/plugin-sdk/channel-mention-gating` 进行提及策略决策。
仅当你需要更宽泛的入站辅助 barrel 时,才使用
`openclaw/plugin-sdk/channel-inbound`
适合放在插件本地逻辑中的内容:
适合插件本地逻辑的内容:
- 检测是否回复机器人
- 检测是否引用机器人
- 回复机器人的检测
- 引用机器人的检测
- 线程参与检查
- 服务/系统消息排除
- 证明机器人参与所需的平台原生缓存
适合放在共享辅助工具中的内容:
适合共享辅助函数的内容:
- `requireMention`
- 显式提及结果
@ -203,7 +191,7 @@ x-i18n:
- 命令绕过
- 最终跳过决策
推荐流程:
首选流程:
1. 计算本地提及事实。
2. 将这些事实传入 `resolveInboundMentionDecision({ facts, policy })`
@ -246,7 +234,7 @@ const decision = resolveInboundMentionDecision({
if (decision.shouldSkip) return;
```
`api.runtime.channel.mentions` 为已经依赖运行时注入的内置渠道插件暴露相同的共享提及辅助工具
`api.runtime.channel.mentions` 为已经依赖运行时注入的内置渠道插件暴露相同的共享提及辅助函数
- `buildMentionRegexes`
- `matchesMentionPatterns`
@ -254,16 +242,20 @@ if (decision.shouldSkip) return;
- `implicitMentionKindWhen`
- `resolveInboundMentionDecision`
如果你只需要 `implicitMentionKindWhen``resolveInboundMentionDecision`,请从 `openclaw/plugin-sdk/channel-mention-gating` 导入,以避免加载无关的入站运行时辅助工具。
如果你只需要 `implicitMentionKindWhen`
`resolveInboundMentionDecision`,请从
`openclaw/plugin-sdk/channel-mention-gating` 导入,以避免加载无关的入站运行时辅助函数。
较旧的 `resolveMentionGating*` 辅助工具仍保留在 `openclaw/plugin-sdk/channel-inbound` 上,仅作为兼容性导出。新代码应使用 `resolveInboundMentionDecision({ facts, policy })`
较旧的 `resolveMentionGating*` 辅助函数仍作为兼容导出保留在
`openclaw/plugin-sdk/channel-inbound` 上。新代码应使用
`resolveInboundMentionDecision({ facts, policy })`
## 演练
<Steps>
<a id="step-1-package-and-manifest"></a>
<Step title="包和清单">
创建标准插件文件。`package.json` 中的 `channel` 字段会使其成为渠道插件。有关完整的包元数据界面,请参阅 [插件设置和配置](/zh-CN/plugins/sdk-setup#openclaw-channel)
创建标准插件文件。`package.json` 中的 `channel` 字段会让它成为渠道插件。完整的软件包元数据界面请参阅 [插件设置和配置](/zh-CN/plugins/sdk-setup#openclaw-channel)
<CodeGroup>
```json package.json
@ -320,12 +312,13 @@ if (decision.shouldSkip) return;
```
</CodeGroup>
`configSchema` 会验证 `plugins.entries.acme-chat.config`。将它用于插件拥有的、不是渠道账户配置的设置。`channelConfigs` 会验证 `channels.acme-chat`,并且是在插件运行时加载前,配置 schema、设置和 UI 界面使用的冷路径来源。
`configSchema` 验证 `plugins.entries.acme-chat.config`。将它用于插件拥有的设置,而不是渠道账号配置。`channelConfigs`
验证 `channels.acme-chat`,并且是插件运行时加载前由配置架构、设置和 UI 界面使用的冷路径来源。
</Step>
<Step title="构建渠道插件对象">
`ChannelPlugin` 接口有许多可选的适配器界面。从最小集合开始,也就是 `id``setup`,然后按需添加适配器。
`ChannelPlugin` 接口包含许多可选的适配器界面。先从最小内容开始,即 `id``setup`,再按需添加适配器。
创建 `src/channel.ts`
@ -420,24 +413,31 @@ if (decision.shouldSkip) return;
});
```
对于同时接受规范顶层私信键和旧版嵌套键的渠道,使用 `plugin-sdk/channel-config-helpers` 中的辅助函数:`resolveChannelDmAccess`、`resolveChannelDmPolicy`、`resolveChannelDmAllowFrom` 和 `normalizeChannelDmPolicy` 会让账号本地值优先于继承的根值。通过 `normalizeLegacyDmAliases` 将同一个解析器与 Doctor 修复配对,这样运行时和迁移会读取相同的契约。
<Accordion title="createChatChannelPlugin 为你做什么">
你无需手动实现低层适配器接口,而是传入声明式选项,构建器会将它们组合起来:
不需要手动实现低级适配器接口,而是传入声明式选项,构建器会组合它们
| 选项 | 接线内容 |
| --- | --- |
| `security.dm` | 来自配置字段的作用域 DM 安全解析器 |
| `pairing.text` | 基于文本的 DM 配对流程,包含代码交换 |
| `threading` | 回复模式解析器(固定、账户作用域或自定义) |
| `security.dm` | 来自配置字段的作用域私信安全解析器 |
| `pairing.text` | 基于文本的私信配对流程,带代码交换 |
| `threading` | 回复到模式解析器(固定、账号作用域或自定义) |
| `outbound.attachedResults` | 返回结果元数据(消息 ID的发送函数 |
如果你需要完全控制,也可以传入原始适配器对象,而不是声明式选项。
原始出站适配器可以定义 `chunker(text, limit, ctx)` 函数。可选的 `ctx.formatting` 携带投递时的格式决策,例如 `maxLinesPerMessage`;请在发送前应用它,这样回复线程和分块边界只由共享出站投递解析一次。发送上下文也会在解析出原生回复目标时包含 `replyToIdSource``implicit` 或 `explicit`),这样载荷辅助工具可以保留显式回复标签,而不会消耗隐式的一次性回复槽位。
原始出站适配器可以定义一个 `chunker(text, limit, ctx)` 函数。
可选的 `ctx.formatting` 会携带发送时的格式决策,
例如 `maxLinesPerMessage`;请在发送前应用它,这样回复串联
和分块边界只会由共享出站发送流程解析一次。
当原生回复目标已解析时,发送上下文也会包含 `replyToIdSource``implicit` 或 `explicit`
因此载荷辅助函数可以保留显式回复标签,而不会消耗隐式的一次性回复槽。
</Accordion>
</Step>
<Step title="连接入口点">
<Step title="Wire the entry point">
创建 `index.ts`
```typescript index.ts
@ -474,21 +474,20 @@ if (decision.shouldSkip) return;
```
将渠道拥有的 CLI 描述符放在 `registerCliMetadata(...)` 中,这样 OpenClaw
就能在不激活完整渠道运行时的情况下,在根帮助中显示它们,
同时正常的完整加载仍会获取相同描述符,用于实际命令
无需激活完整渠道运行时,就能在根帮助中显示它们;
同时正常的完整加载仍会获取相同描述符,用于真正的命令
注册。将 `registerFull(...)` 保留给仅运行时的工作。
如果 `registerFull(...)` 注册 Gateway 网关 RPC 方法,请使用
插件专前缀。核心管理命名空间(`config.*`、
插件专前缀。核心管理命名空间(`config.*`、
`exec.approvals.*`、`wizard.*`、`update.*`)保持保留,并且始终
解析为 `operator.admin`
`defineChannelPluginEntry` 会自动处理注册模式拆分。请参阅
[入口点](/zh-CN/plugins/sdk-entrypoints#definechannelpluginentry) 了解所有
选项。
解析到 `operator.admin`
`defineChannelPluginEntry` 会自动处理注册模式拆分。所有
选项请参阅[入口点](/zh-CN/plugins/sdk-entrypoints#definechannelpluginentry)。
</Step>
<Step title="添加设置入口">
创建 `setup-entry.ts`,用于新手引导期间轻量加载:
<Step title="Add a setup entry">
创建 `setup-entry.ts`,用于新手引导期间轻量加载:
```typescript setup-entry.ts
import { defineSetupPluginEntry } from "openclaw/plugin-sdk/channel-core";
@ -497,21 +496,20 @@ if (decision.shouldSkip) return;
export default defineSetupPluginEntry(acmeChatPlugin);
```
当渠道被禁用或尚未配置时OpenClaw 会加载这个入口,而不是完整入口。
这样可以避免在设置流程期间引入沉重的运行时代码。
详情请参阅[设置配置](/zh-CN/plugins/sdk-setup#setup-entry)。
当渠道被禁用或未配置时OpenClaw 会加载它,而不是完整入口。
这样可以避免在设置流程引入沉重的运行时代码。
详情请参阅[设置配置](/zh-CN/plugins/sdk-setup#setup-entry)。
将设置安全导出拆分到侧车模块的内置工作区渠道,
将设置安全导出拆分到 sidecar 模块的内置工作区渠道,
如果还需要显式的设置时运行时 setter可以使用
`openclaw/plugin-sdk/channel-entry-contract` 中的
`defineBundledChannelSetupEntry(...)`
`openclaw/plugin-sdk/channel-entry-contract` 中的 `defineBundledChannelSetupEntry(...)`
</Step>
<Step title="处理入站消息">
你的插件需要从平台接收消息,并将它们转发给
OpenClaw。典型模式是使用一个 webhook 验证请求,并
通过你的渠道入站处理器分发请求
<Step title="Handle inbound messages">
你的插件需要从平台接收消息并将其转发给
OpenClaw。典型模式是使用 webhook 验证请求,并
通过你的渠道入站处理器分发
```typescript
registerFull(api) {
@ -535,15 +533,15 @@ if (decision.shouldSkip) return;
```
<Note>
入站消息处理是渠道特定的。每个渠道插件拥有
自己的入站流水线。查看内置渠道插件
(例如 Microsoft Teams 或 Google Chat 插件包)了解真实模式。
入站消息处理是渠道特定的。每个渠道插件拥有
自己的入站流水线。查看内置渠道插件
(例如 Microsoft Teams 或 Google Chat 插件包)中的真实模式。
</Note>
</Step>
<a id="step-6-test"></a>
<Step title="测试">
<Step title="Test">
`src/channel.test.ts` 中编写同目录测试:
```typescript src/channel.test.ts
@ -582,7 +580,7 @@ if (decision.shouldSkip) return;
pnpm test -- <bundled-plugin-root>/acme-chat/
```
如需共享测试辅助工具,请参阅[测试](/zh-CN/plugins/sdk-testing)。
如需共享测试辅助函数,请参阅[测试](/zh-CN/plugins/sdk-testing)。
</Step>
</Steps>
@ -607,35 +605,35 @@ if (decision.shouldSkip) return;
## 高级主题
<CardGroup cols={2}>
<Card title="会话串联选项" icon="git-branch" href="/zh-CN/plugins/sdk-entrypoints#registration-mode">
<Card title="Threading options" icon="git-branch" href="/zh-CN/plugins/sdk-entrypoints#registration-mode">
固定、账户作用域或自定义回复模式
</Card>
<Card title="消息工具集成" icon="puzzle" href="/zh-CN/plugins/architecture#channel-plugins-and-the-shared-message-tool">
describeMessageTool 和作发现
<Card title="Message tool integration" icon="puzzle" href="/zh-CN/plugins/architecture#channel-plugins-and-the-shared-message-tool">
describeMessageTool 和作发现
</Card>
<Card title="目标解析" icon="crosshair" href="/zh-CN/plugins/architecture-internals#channel-target-resolution">
<Card title="Target resolution" icon="crosshair" href="/zh-CN/plugins/architecture-internals#channel-target-resolution">
inferTargetChatType、looksLikeId、resolveTarget
</Card>
<Card title="运行时辅助工具" icon="settings" href="/zh-CN/plugins/sdk-runtime">
<Card title="Runtime helpers" icon="settings" href="/zh-CN/plugins/sdk-runtime">
TTS、STT、媒体、通过 api.runtime 使用的子智能体
</Card>
</CardGroup>
<Note>
一些内置辅助接缝仍然存在,用于内置插件维护和
一些内置辅助接缝仍然存在,用于维护内置插件以及
兼容性。它们不是新渠道插件的推荐模式;
除非你正在直接维护该内置插件系列,否则请优先使用通用 SDK
表面的通用渠道/设置/回复/运行时子路径。
除非你正在直接维护该内置插件家族,否则请优先使用通用 SDK
表面中的通用 channel/setup/reply/runtime 子路径。
</Note>
## 后续步骤
- [提供商插件](/zh-CN/plugins/sdk-provider-plugins) — 如果你的插件提供模型
- [提供商插件](/zh-CN/plugins/sdk-provider-plugins) — 如果你的插件提供模型
- [SDK 概览](/zh-CN/plugins/sdk-overview) — 完整子路径导入参考
- [SDK 测试](/zh-CN/plugins/sdk-testing) — 测试实用工具和契约测试
- [插件清单](/zh-CN/plugins/manifest) — 完整清单 schema
- [SDK 测试](/zh-CN/plugins/sdk-testing) — 测试工具和契约测试
- [插件 Manifest](/zh-CN/plugins/manifest) — 完整 manifest schema
## 相关内容
## 相关
- [插件 SDK 设置](/zh-CN/plugins/sdk-setup)
- [构建插件](/zh-CN/plugins/building-plugins)

View File

@ -2,73 +2,73 @@
read_when:
- 你看到 OPENCLAW_PLUGIN_SDK_COMPAT_DEPRECATED 警告
- 你看到 OPENCLAW_EXTENSION_API_DEPRECATED 警告
- 你在 OpenClaw 2026.4.25 之前使用 api.registerEmbeddedExtensionFactory
- 你正在将一个插件更新到现代插件架构
- 你在 OpenClaw 2026.4.25 之前使用 api.registerEmbeddedExtensionFactory
- 你正在将插件更新为现代插件架构
- 你维护一个外部 OpenClaw 插件
sidebarTitle: Migrate to SDK
summary: 从旧版向后兼容层迁移到现代插件 SDK
title: 插件 SDK 迁移
x-i18n:
generated_at: "2026-04-29T13:54:45Z"
generated_at: "2026-04-29T15:39:48Z"
model: gpt-5.5
provider: openai
source_hash: fbc2569e5116d168151c34b31392df87be2b30f67de7303552c9164205716f07
source_hash: 00a1f95a33c50d5c69d7b4768858289365bf29ed069abb3f29218e03c597b4c6
source_path: plugins/sdk-migration.md
workflow: 16
---
OpenClaw 已从宽泛的向后兼容层迁移到现代插件架构,使用聚焦且有文档说明的导入。如果你的插件是在新架构之前构建的,本指南帮助你迁移。
OpenClaw 已从宽泛的向后兼容层迁移到现代插件架构,使用聚焦且有文档说明的导入。如果你的插件是在新架构之前构建的,本指南帮助你迁移。
## 正在变化的内容
旧插件系统提供了两个开放范围很大的表面,让插件可以从单个入口点导入所需的任何内容:
旧插件系统提供了两个开放面很广的接口,让插件可以从单个入口点导入所需的任何内容:
- **`openclaw/plugin-sdk/compat`** — 一个单一导入,重新导出数十个辅助函数。它的引入是为了在新插件架构构建期间,让较旧的基于钩子的插件继续工作
- **`openclaw/plugin-sdk/compat`** — 一个单一导入,重新导出数十个辅助函数。它的引入是为了在新插件架构构建期间,保持旧版基于钩子的插件可用
- **`openclaw/plugin-sdk/infra-runtime`** — 一个宽泛的运行时辅助 barrel混合了系统事件、心跳状态、投递队列、fetch/proxy 辅助函数、文件辅助函数、审批类型和无关工具。
- **`openclaw/plugin-sdk/config-runtime`** — 一个宽泛的配置兼容 barrel在迁移窗口期间仍携带已弃用的直接加载/写入辅助函数。
- **`openclaw/extension-api`** — 一个桥接层,使插件可以直接访问主机端辅助函数,例如嵌入式智能体运行器。
- **`api.registerEmbeddedExtensionFactory(...)`** — 一个已移除的 Pi 专用内置插件钩子,可观察嵌入式运行器事件,例如 `tool_result`
- **`openclaw/extension-api`** — 一个桥接层,让插件可以直接访问宿主侧辅助函数,例如内嵌智能体运行器。
- **`api.registerEmbeddedExtensionFactory(...)`** — 一个已移除的 Pi 专用内置扩展钩子,可观察内嵌运行器事件,例如 `tool_result`
宽泛导入表面现在已**弃用**。它们在运行时仍然可用但新插件不得使用它们现有插件也应在下一次主版本发布移除它们之前完成迁移。Pi 专用的嵌入式插件工厂注册 API 已被移除;请改用工具结果中间件。
这些宽泛导入接口现在已**弃用**。它们在运行时仍可工作,但新插件不得使用它们,现有插件应在下一个 major release 移除它们之前完成迁移。Pi 专用内嵌扩展工厂注册 API 已移除;请改用工具结果中间件。
OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释有文档说明的插件行为。破坏性契约变更必须先经过兼容适配器、诊断、文档和弃用窗口。这适用于 SDK 导入、清单字段、设置 API、钩子和运行时注册行为。
OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释有文档说明的插件行为。破坏性契约变更必须先经过兼容适配器、诊断、文档和弃用窗口。这适用于 SDK 导入、manifest 字段、设置 API、钩子和运行时注册行为。
<Warning>
向后兼容层将在未来某个主版本发布中移除。届时仍从这些表面导入的插件将会中断。Pi 专用的嵌入式插件工厂注册已经不再加载。
向后兼容层将在未来某个 major release 中移除。届时仍从这些接口导入的插件将会中断。Pi 专用内嵌扩展工厂注册已经不再加载。
</Warning>
## 为什么要进行这项变更
## 为什么做出此变更
旧方法造成了一些问题:
旧方法会导致问题:
- **启动缓慢** — 导入一个辅助函数会加载数十个无关模块
- **循环依赖** — 宽泛的重新导出很容易造成导入环
- **API 表面不清晰** — 无法判断哪些导出是稳定的,哪些是内部的
- **循环依赖** — 宽泛的重新导出很容易造成导入
- **API 接口不清晰** — 无法判断哪些导出是稳定的,哪些是内部的
现代插件 SDK 修复了这一点:每个导入路径(`openclaw/plugin-sdk/\<subpath\>`)都是一个小型、自包含的模块,具有明确用途和文档化契约。
现代插件 SDK 修复了这一点:每个导入路径(`openclaw/plugin-sdk/\<subpath\>`)都是小型、自包含的模块,具有明确用途和有文档说明的契约。
针对内置渠道的旧版提供商便利 seam 也已移除。带渠道品牌的辅助 seam 是私有 monorepo 快捷方式,不是稳定的插件契约。请改用窄范围的通用 SDK 子路径。在内置插件工作区内,将提供商拥有的辅助函数保留在该插件自己的 `api.ts``runtime-api.ts` 中。
面向内置渠道的旧版提供商便利衔接也已移除。带渠道品牌的辅助衔接是私有 mono-repo 捷径,并非稳定插件契约。请改用窄范围的通用 SDK 子路径。在内置插件工作区内,将提供商拥有的辅助函数保留在该插件自己的 `api.ts``runtime-api.ts` 中。
当前内置提供商示例:
- Anthropic 将 Claude 专用流辅助函数保留在自己的 `api.ts` / `contract-api.ts` seam
- Anthropic 将 Claude 专用流辅助函数保留在自己的 `api.ts` / `contract-api.ts` 衔接
- OpenAI 将提供商构建器、默认模型辅助函数和实时提供商构建器保留在自己的 `api.ts`
- OpenRouter 将提供商构建器和新手引导/配置辅助函数保留在自己的 `api.ts`
## 兼容策略
## 兼容策略
对于外部插件,兼容工作按以下顺序进行:
对于外部插件,兼容工作按以下顺序进行:
1. 添加新契约
2. 通过兼容适配器保持旧行为接线
2. 保持旧行为通过兼容适配器接线
3. 发出诊断或警告,指明旧路径和替代项
4. 在测试中覆盖两条路径
5. 记录弃用和迁移路径
6. 仅在已宣布的迁移窗口结束后移除,通常是在主版本发布中
6. 仅在公告的迁移窗口之后移除,通常在 major release 中进行
维护者可以使用 `pnpm plugins:boundary-report` 审计当前迁移队列。使用 `pnpm plugins:boundary-report:summary` 查看精简计数,使用 `--owner <id>` 查看单个插件或兼容所有者,并在 CI gate 需要因到期兼容记录、跨所有者保留 SDK 导入或未使用的保留 SDK 子路径而失败时使用 `pnpm plugins:boundary-report:ci`该报告会按移除日期对已弃用的兼容记录分组,统计本地代码/文档引用,暴露跨所有者保留 SDK 导入,并汇总私有 memory-host SDK 桥接,让兼容清理保持显式,而不是依赖临时搜索。保留 SDK 子路径必须有跟踪的所有者用法;未使用的保留辅助导出应从公共 SDK 中移除。
维护者可以使用 `pnpm plugins:boundary-report` 审计当前迁移队列。使用 `pnpm plugins:boundary-report:summary` 获取紧凑计数,使用 `--owner <id>` 查看单个插件或兼容所有者,并在 CI gate 需要因到期兼容记录、跨所有者保留 SDK 导入或未使用的保留 SDK 子路径而失败时使用 `pnpm plugins:boundary-report:ci`报告会按移除日期对已弃用的兼容性记录分组,统计本地代码/文档引用,呈现跨所有者保留 SDK 导入,并汇总私有 memory-host SDK 桥接,让兼容清理保持显式,而不是依赖临时搜索。保留 SDK 子路径必须有跟踪的所有者用法;未使用的保留辅助导出应从公共 SDK 中移除。
如果某个清单字段仍被接受,插件作者可以继续使用,直到文档和诊断另有说明。新代码应优先使用有文档说明的替代项,但现有插件不应在普通次版本发布期间中断。
如果某个 manifest 字段仍被接受,插件作者可以继续使用,直到文档和诊断另有说明。新代码应优先使用有文档说明的替代项,但现有插件不应在普通 minor release 中中断。
## 如何迁移
@ -76,9 +76,9 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
<Step title="迁移运行时配置加载/写入辅助函数">
内置插件应停止直接调用
`api.runtime.config.loadConfig()`
`api.runtime.config.writeConfigFile(...)`。优先使用已经传入活动调用路径的配置。需要当前进程快照的长生命周期处理器可以使用 `api.runtime.config.current()`。长生命周期智能体工具应在 `execute` 内使用工具上下文的 `ctx.getRuntimeConfig()`,这样在配置写入前创建的工具仍能看到刷新的运行时配置。
`api.runtime.config.writeConfigFile(...)`。优先使用已经传入当前调用路径的配置。需要当前进程快照的长生命周期处理器可以使用 `api.runtime.config.current()`。长生命周期智能体工具应在 `execute` 内使用工具上下文的 `ctx.getRuntimeConfig()`,这样在配置写入前创建的工具仍能看到刷新的运行时配置。
配置写入必须通过事务辅助函数,并选择写入后策略:
配置写入必须通过事务辅助函数,并选择写入后策略:
```typescript
await api.runtime.config.mutateConfigFile({
@ -89,29 +89,28 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
});
```
当调用方知道变更需要干净重启 Gateway 网关时,使用 `afterWrite: { mode: "restart", reason: "..." }`只有当调用方拥有后续处理并且有意抑制重载规划器时,才使用 `afterWrite: { mode: "none", reason: "..." }`。变更结果包含用于测试和日志记录的类型化 `followUp` 摘要Gateway 网关仍负责应用或调度重启。`loadConfig` 和 `writeConfigFile` 在迁移窗口期间仍作为外部插件的已弃用兼容辅助函数保留,并使用 `runtime-config-load-write` 兼容代码警告一次。内置插件和仓库运行时代码受到 `pnpm check:deprecated-internal-config-api``pnpm check:no-runtime-action-load-config` 中扫描器护栏保护新的生产插件用法会直接失败直接配置写入会失败Gateway 网关服务器方法必须使用请求运行时快照,运行时渠道发送/action/client 辅助函数必须从其边界接收配置,长生命周期运行时模块允许的环境性 `loadConfig()` 调用数量为零。
当调用方知道变更需要干净重启 Gateway 网关时,使用 `afterWrite: { mode: "restart", reason: "..." }`仅当调用方拥有后续处理并有意抑制重载规划器时,才使用 `afterWrite: { mode: "none", reason: "..." }`。变更结果包含一个类型化的 `followUp` 摘要,用于测试和日志Gateway 网关仍负责应用或调度重启。`loadConfig` 和 `writeConfigFile` 在迁移窗口期间仍作为外部插件的已弃用兼容辅助函数保留,并使用 `runtime-config-load-write` 兼容代码发出一次警告。内置插件和仓库运行时代码受到 `pnpm check:deprecated-internal-config-api``pnpm check:no-runtime-action-load-config` 中扫描器防护规则的保护新的生产插件用法会直接失败直接配置写入会失败Gateway 网关服务器方法必须使用请求运行时快照,运行时渠道发送/动作/客户端辅助函数必须从其边界接收配置,并且长生命周期运行时模块允许的环境式 `loadConfig()` 调用数量为零。
新插件代码也应避免导入宽泛的
`openclaw/plugin-sdk/config-runtime` 兼容 barrel。请使用与任务匹配的窄范围 SDK 子路径:
新插件代码还应避免导入宽泛的 `openclaw/plugin-sdk/config-runtime` 兼容 barrel。请使用与任务匹配的窄范围 SDK 子路径:
| 需求 | 导入 |
| --- | --- |
| `OpenClawConfig` 等配置类型 | `openclaw/plugin-sdk/config-types` |
| 配置类型,例如 `OpenClawConfig` | `openclaw/plugin-sdk/config-types` |
| 已加载配置断言和插件入口配置查找 | `openclaw/plugin-sdk/plugin-config-runtime` |
| 当前运行时快照读取 | `openclaw/plugin-sdk/runtime-config-snapshot` |
| 配置写入 | `openclaw/plugin-sdk/config-mutation` |
| 会话存储辅助函数 | `openclaw/plugin-sdk/session-store-runtime` |
| Markdown 表格配置 | `openclaw/plugin-sdk/markdown-table-runtime` |
| 组策略运行时辅助函数 | `openclaw/plugin-sdk/runtime-group-policy` |
| Secret 输入解析 | `openclaw/plugin-sdk/secret-input-runtime` |
| 密钥输入解析 | `openclaw/plugin-sdk/secret-input-runtime` |
| 模型/会话覆盖 | `openclaw/plugin-sdk/model-session-runtime` |
内置插件及其测试受到扫描器保护,防止使用宽泛 barrel使导入和 mock 保持局部于其所需行为。宽泛 barrel 仍为外部兼容性而存在,但新代码不应依赖它。
内置插件及其测试有扫描器防护,防止使用宽泛 barrel因此导入和 mock 会保持局部化,只针对它们需要的行为。宽泛 barrel 仍为外部兼容性存在,但新代码不应依赖它。
</Step>
<Step title="将 Pi 工具结果插件迁移到中间件">
内置插件必须将 Pi 专用
<Step title="将 Pi 工具结果扩展迁移到中间件">
内置插件必须将 Pi 专用
`api.registerEmbeddedExtensionFactory(...)` 工具结果处理器替换为运行时中立的中间件。
```typescript
@ -123,7 +122,7 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
});
```
同时更新插件清单
同时更新插件 manifest
```json
{
@ -133,31 +132,29 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
}
```
外部插件不能注册工具结果中间件,因为它可以在模型看到高信任工具输出之前写它。
外部插件不能注册工具结果中间件,因为它可以在模型看到高信任工具输出之前写它。
</Step>
<Step title="将审批原生处理器迁移到能力事实">
支持审批的渠道插件现在通过 `approvalCapability.nativeRuntime` 加共享运行时上下文注册表暴露原生审批行为。
支持审批的渠道插件现在通过 `approvalCapability.nativeRuntime` 加共享运行时上下文注册表暴露原生审批行为。
关键变更:
- 将 `approvalCapability.handler.loadRuntime(...)` 替换为
`approvalCapability.nativeRuntime`
- 将审批专用 auth/投递从旧版 `plugin.auth` /
`plugin.approvals` 接线移到 `approvalCapability`
- `ChannelPlugin.approvals` 已从公共渠道插件契约中移除;将投递/native/render 字段移到 `approvalCapability`
- `plugin.auth` 仍仅用于渠道登录/登出流程core 不再读取其中的审批 auth 钩子
- 通过 `openclaw/plugin-sdk/channel-runtime-context` 注册渠道拥有的运行时对象例如客户端、token 或 Bolt app
- 不要从原生审批处理器发送插件拥有的重路由通知core 现在根据实际投递结果拥有已路由到其他位置通知
- 将 `channelRuntime` 传入 `createChannelManager(...)` 时,提供真实的 `createPluginRuntime().channel` 表面。部分 stub 会被拒绝。
- 将 `approvalCapability.handler.loadRuntime(...)` 替换为 `approvalCapability.nativeRuntime`
- 将审批专用身份验证/投递从旧版 `plugin.auth` / `plugin.approvals` 接线迁移到 `approvalCapability`
- `ChannelPlugin.approvals` 已从公共渠道插件契约中移除;请将投递/原生/渲染字段迁移到 `approvalCapability`
- `plugin.auth` 仅保留用于渠道登录/登出流程core 不再读取其中的审批身份验证钩子
- 通过 `openclaw/plugin-sdk/channel-runtime-context` 注册渠道拥有的运行时对象,例如客户端、令牌或 Bolt 应用
- 不要从原生审批处理器发送插件拥有的重路由通知core 现在根据实际投递结果负责路由到其他位置的通知
- 将 `channelRuntime` 传入 `createChannelManager(...)` 时,请提供真实的 `createPluginRuntime().channel` 接口。部分 stub 会被拒绝。
有关当前审批能力布局,请参阅 `/plugins/sdk-channel-plugins`
请参阅 `/plugins/sdk-channel-plugins` 了解当前审批能力布局。
</Step>
<Step title="审计 Windows 包装器回退行为">
如果你的插件使用 `openclaw/plugin-sdk/windows-spawn`除非你显式传入 `allowShellFallback: true`,否则未解析的 Windows `.cmd`/`.bat` 包装器现在会失败关闭。
如果你的插件使用 `openclaw/plugin-sdk/windows-spawn`,未解析的 Windows `.cmd`/`.bat` 包装器现在会默认失败关闭,除非你显式传入 `allowShellFallback: true`
```typescript
// Before
@ -172,12 +169,12 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
});
```
如果你的调用方并未有意依赖 shell 回退,不要设置 `allowShellFallback`,而是处理抛出的错误。
如果你的调用方并非有意依赖 shell 回退,请不要设置 `allowShellFallback`,而应处理抛出的错误。
</Step>
<Step title="查找已弃用导入">
在你的插件中搜索来自任一已弃用表面的导入:
<Step title="查找已弃用导入">
搜索你的插件中来自任一已弃用接口的导入:
```bash
grep -r "plugin-sdk/compat" my-plugin/
@ -189,7 +186,7 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
</Step>
<Step title="替换为聚焦导入">
表面的每个导出都映射到一个具体的现代导入路径:
接口中的每个导出都映射到一个特定的现代导入路径:
```typescript
// Before (deprecated backwards-compatibility layer)
@ -205,7 +202,7 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
import { resolveControlCommandGate } from "openclaw/plugin-sdk/command-auth";
```
对于主机端辅助函数,请使用注入的插件运行时,而不是直接导入:
对于宿主侧辅助函数,请使用注入的插件运行时,而不是直接导入:
```typescript
// Before (deprecated extension-api bridge)
@ -216,9 +213,9 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
const result = await api.runtime.agent.runEmbeddedPiAgent({ sessionId, prompt });
```
同样的模式也适用于其他旧版桥接辅助函数
同样的模式也适用于其他旧版桥接助手
| 旧导入 | 现代等项 |
| 旧导入 | 现代等项 |
| --- | --- |
| `resolveAgentDir` | `api.runtime.agent.resolveAgentDir` |
| `resolveAgentWorkspaceDir` | `api.runtime.agent.resolveAgentWorkspaceDir` |
@ -226,46 +223,42 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
| `resolveThinkingDefault` | `api.runtime.agent.resolveThinkingDefault` |
| `resolveAgentTimeoutMs` | `api.runtime.agent.resolveAgentTimeoutMs` |
| `ensureAgentWorkspace` | `api.runtime.agent.ensureAgentWorkspace` |
| 会话存储辅助函数 | `api.runtime.agent.session.*` |
| 会话存储助手 | `api.runtime.agent.session.*` |
</Step>
<Step title="替换宽泛的 infra-runtime 导入">
`openclaw/plugin-sdk/infra-runtime` 仍然存在,用于外部兼容性,
但新代码应导入它实际需要的聚焦辅助接口:
`openclaw/plugin-sdk/infra-runtime` 仍然保留以兼容外部代码,但新代码应该导入它实际需要的聚焦助手接口:
| 需求 | 导入 |
| --- | --- |
| 系统事件队列辅助函数 | `openclaw/plugin-sdk/system-event-runtime` |
| 心跳事件和可见性辅助函数 | `openclaw/plugin-sdk/heartbeat-runtime` |
| 待处理投递队列空 | `openclaw/plugin-sdk/delivery-queue-runtime` |
| 系统事件队列助手 | `openclaw/plugin-sdk/system-event-runtime` |
| 心跳事件和可见性助手 | `openclaw/plugin-sdk/heartbeat-runtime` |
| 待处理投递队列空 | `openclaw/plugin-sdk/delivery-queue-runtime` |
| 渠道活动遥测 | `openclaw/plugin-sdk/channel-activity-runtime` |
| 内存去重缓存 | `openclaw/plugin-sdk/dedupe-runtime` |
| 安全本地文件/媒体路径辅助函数 | `openclaw/plugin-sdk/file-access-runtime` |
| 内存去重缓存 | `openclaw/plugin-sdk/dedupe-runtime` |
| 安全的本地文件/媒体路径助手 | `openclaw/plugin-sdk/file-access-runtime` |
| 感知调度器的 fetch | `openclaw/plugin-sdk/runtime-fetch` |
| 代理和受保护的 fetch 辅助函数 | `openclaw/plugin-sdk/fetch-runtime` |
| 代理和受保护的 fetch 助手 | `openclaw/plugin-sdk/fetch-runtime` |
| SSRF 调度器策略类型 | `openclaw/plugin-sdk/ssrf-dispatcher` |
| 审批请求/解类型 | `openclaw/plugin-sdk/approval-runtime` |
| 审批回复负载和命令辅助函数 | `openclaw/plugin-sdk/approval-reply-runtime` |
| 错误格式化辅助函数 | `openclaw/plugin-sdk/error-runtime` |
| 审批请求/解类型 | `openclaw/plugin-sdk/approval-runtime` |
| 审批回复载荷和命令助手 | `openclaw/plugin-sdk/approval-reply-runtime` |
| 错误格式化助手 | `openclaw/plugin-sdk/error-runtime` |
| 传输就绪等待 | `openclaw/plugin-sdk/transport-ready-runtime` |
| 安全令牌辅助函数 | `openclaw/plugin-sdk/secure-random-runtime` |
| 安全令牌助手 | `openclaw/plugin-sdk/secure-random-runtime` |
| 有界异步任务并发 | `openclaw/plugin-sdk/concurrency-runtime` |
| 数值强制转换 | `openclaw/plugin-sdk/number-runtime` |
| 进程本地异步锁 | `openclaw/plugin-sdk/async-lock-runtime` |
| 文件锁 | `openclaw/plugin-sdk/file-lock` |
内置插件会通过扫描器防止使用 `infra-runtime`,因此仓库代码
无法回退到宽泛的 barrel。
内置插件会通过扫描器防止使用 `infra-runtime`,因此仓库代码不能回退到宽泛的桶文件。
</Step>
<Step title="迁移渠道路由辅助函数">
新的渠道路由代码应使用 `openclaw/plugin-sdk/channel-route`
较旧的 route-key 和 comparable-target 名称会在迁移窗口期间保留为兼容性别名,
但新插件应使用直接描述行为的路由名称:
<Step title="迁移渠道路由助手">
新的渠道路由代码应该使用 `openclaw/plugin-sdk/channel-route`。旧的 route-key 和 comparable-target 名称在迁移窗口期间仍作为兼容别名保留,但新插件应该使用能直接描述行为的路由名称:
| 旧辅助函数 | 现代辅助函数 |
| 旧助手 | 现代助手 |
| --- | --- |
| `channelRouteIdentityKey(...)` | `channelRouteDedupeKey(...)` |
| `channelRouteKey(...)` | `channelRouteCompactKey(...)` |
@ -275,10 +268,7 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
| `comparableChannelTargetsMatch(...)` | `channelRouteTargetsMatchExact(...)` |
| `comparableChannelTargetsShareRoute(...)` | `channelRouteTargetsShareConversation(...)` |
现代路由辅助函数会在原生审批、回复抑制、入站去重、
cron 投递和会话路由中一致规范化 `{ channel, to, accountId, threadId }`
如果你的插件拥有自定义目标语法,请使用 `resolveChannelRouteTargetWithParser(...)`
将该解析器适配到同一路由目标契约中。
现代路由助手会在原生审批、回复抑制、入站去重、cron 投递和会话路由之间一致地规范化 `{ channel, to, accountId, threadId }`。如果你的插件拥有自定义目标语法,请使用 `resolveChannelRouteTargetWithParser(...)` 将该解析器适配到相同的路由目标契约。
</Step>
@ -292,208 +282,206 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
## 导入路径参考
<Accordion title="Common import path table">
| 导入路径 | 用途 | 关键导出 |
<Accordion title="常见导入路径表">
| 导入路径 | 用途 | 主要导出 |
| --- | --- | --- |
| `plugin-sdk/plugin-entry` | 规范插件入口辅助工具 | `definePluginEntry` |
| `plugin-sdk/core` | 渠道入口定义/构建器的旧版总括重新导出 | `defineChannelPluginEntry`, `createChatChannelPlugin` |
| `plugin-sdk/config-schema` | 根配置 schema 导出 | `OpenClawSchema` |
| `plugin-sdk/provider-entry` | 单提供商入口辅助工具 | `defineSingleProviderPluginEntry` |
| `plugin-sdk/plugin-entry` | 标准插件入口助手 | `definePluginEntry` |
| `plugin-sdk/core` | 用于渠道入口定义/构建器的旧版总括重新导出 | `defineChannelPluginEntry`, `createChatChannelPlugin` |
| `plugin-sdk/config-schema` | 根配置架构导出 | `OpenClawSchema` |
| `plugin-sdk/provider-entry` | 单提供商入口助手 | `defineSingleProviderPluginEntry` |
| `plugin-sdk/channel-core` | 聚焦的渠道入口定义和构建器 | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` |
| `plugin-sdk/setup` | 共享设置向导辅助工具 | 允许列表提示、设置 Status 构建器 |
| `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` | 多账户辅助工具 | 账户列表/配置/操作门控辅助工具 |
| `plugin-sdk/account-id` | 账户 ID 辅助工具 | `DEFAULT_ACCOUNT_ID`、账户 ID 规范化 |
| `plugin-sdk/account-resolution` | 账户查找辅助工具 | 账户查找 + 默认回退辅助工具 |
| `plugin-sdk/account-helpers` | 窄范围账户辅助工具 | 账户列表/账户操作辅助工具 |
| `plugin-sdk/channel-setup` | 设置向导适配器 | `createOptionalChannelSetupSurface`、`createOptionalChannelSetupAdapter`、`createOptionalChannelSetupWizard`,以及 `DEFAULT_ACCOUNT_ID`、`createTopLevelChannelDmPolicy`、`setSetupChannelEnabled`、`splitSetupEntries` |
| `plugin-sdk/setup` | 共享设置向导助手 | 允许列表提示、设置 Status 构建器 |
| `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` | 多账号助手 | 账号列表/配置/操作门控助手 |
| `plugin-sdk/account-id` | 账号 ID 助手 | `DEFAULT_ACCOUNT_ID`、账号 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`, `resolveChannelSourceReplyDeliveryMode` |
| `plugin-sdk/channel-config-helpers` | 配置适配器工厂 | `createHybridChannelConfigAdapter` |
| `plugin-sdk/channel-config-schema` | 配置 schema 构建器 | 仅共享渠道配置 schema 原语和通用构建器 |
| `plugin-sdk/bundled-channel-config-schema` | 内置配置 schema | 仅限 OpenClaw 维护的内置插件;新插件必须定义插件本地 schema |
| `plugin-sdk/channel-config-schema-legacy` | 已弃用的内置配置 schema | 仅兼容性别名;对于维护中的内置插件,请使用 `plugin-sdk/bundled-channel-config-schema` |
| `plugin-sdk/telegram-command-config` | Telegram 命令配置辅助工具 | 命令名规范化、描述裁剪、重复/冲突验证 |
| `plugin-sdk/channel-reply-pipeline` | 回复前缀、输入状态和来源投递布线 | `createChannelReplyPipeline`, `resolveChannelSourceReplyDeliveryMode` |
| `plugin-sdk/channel-config-helpers` | 配置适配器工厂和私信访问助手 | `createHybridChannelConfigAdapter`, `resolveChannelDmAccess`, `resolveChannelDmAllowFrom`, `resolveChannelDmPolicy`, `normalizeChannelDmPolicy`, `normalizeLegacyDmAliases` |
| `plugin-sdk/channel-config-schema` | 配置架构构建器 | 共享渠道配置架构原语和仅通用构建器 |
| `plugin-sdk/bundled-channel-config-schema` | 内置配置架构 | 仅限 OpenClaw 维护的内置插件;新插件必须定义插件本地架构 |
| `plugin-sdk/channel-config-schema-legacy` | 已弃用的内置配置架构 | 仅兼容性别名;对维护中的内置插件请使用 `plugin-sdk/bundled-channel-config-schema` |
| `plugin-sdk/telegram-command-config` | Telegram 命令配置助手 | 命令名规范化、描述裁剪、重复/冲突验证 |
| `plugin-sdk/channel-policy` | 群组/私信策略解析 | `resolveChannelGroupRequireMention` |
| `plugin-sdk/channel-lifecycle` | 账户 Status 和草稿流生命周期辅助工具 | `createAccountStatusSink`、草稿预览最终化辅助工具 |
| `plugin-sdk/inbound-envelope` | 入站信封辅助工具 | 共享路由 + 信封构建器辅助工具 |
| `plugin-sdk/inbound-reply-dispatch` | 入站回复辅助工具 | 共享记录并分发辅助工具 |
| `plugin-sdk/messaging-targets` | 消息目标解析 | 目标解析/匹配辅助工具 |
| `plugin-sdk/outbound-media` | 出站媒体辅助工具 | 共享出站媒体加载 |
| `plugin-sdk/outbound-send-deps` | 出站发送依赖辅助工具 | 无需导入完整出站运行时的轻量 `resolveOutboundSendDep` 查找 |
| `plugin-sdk/outbound-runtime` | 出站运行时辅助工具 | 出站投递、身份/发送委托、会话、格式化和载荷规划辅助工具 |
| `plugin-sdk/thread-bindings-runtime` | 线程绑定辅助工具 | 线程绑定生命周期和适配器辅助工具 |
| `plugin-sdk/agent-media-payload` | 旧版媒体载荷辅助工具 | 用于旧版字段布局的 Agent 媒体载荷构建器 |
| `plugin-sdk/channel-lifecycle` | 账号 Status 和草稿流生命周期助手 | `createAccountStatusSink`、草稿预览最终化助手 |
| `plugin-sdk/inbound-envelope` | 入站信封助手 | 共享路由 + 信封构建器助手 |
| `plugin-sdk/inbound-reply-dispatch` | 入站回复助手 | 共享记录和分发助手 |
| `plugin-sdk/messaging-targets` | 消息目标解析 | 目标解析/匹配助手 |
| `plugin-sdk/outbound-media` | 出站媒体助手 | 共享出站媒体加载 |
| `plugin-sdk/outbound-send-deps` | 出站发送依赖助手 | 不导入完整出站运行时的轻量级 `resolveOutboundSendDep` 查找 |
| `plugin-sdk/outbound-runtime` | 出站运行时助手 | 出站投递、身份/发送委托、会话、格式化和载荷规划助手 |
| `plugin-sdk/thread-bindings-runtime` | 线程绑定助手 | 线程绑定生命周期和适配器助手 |
| `plugin-sdk/agent-media-payload` | 旧版媒体载荷助手 | 面向旧版字段布局的 Agent 媒体载荷构建器 |
| `plugin-sdk/channel-runtime` | 已弃用的兼容性垫片 | 仅旧版渠道运行时实用工具 |
| `plugin-sdk/channel-send-result` | 发送结果类型 | 回复结果类型 |
| `plugin-sdk/runtime-store` | 持久化插件存储 | `createPluginRuntimeStore` |
| `plugin-sdk/runtime` | 宽范围运行时辅助工具 | 运行时/日志/备份/插件安装辅助工具 |
| `plugin-sdk/runtime-env` | 窄范围运行时环境辅助工具 | 日志记录器/运行时环境、超时、重试和退避辅助工具 |
| `plugin-sdk/plugin-runtime` | 共享插件运行时辅助工具 | 插件命令/钩子/http/交互式辅助工具 |
| `plugin-sdk/hook-runtime` | 钩子管线辅助工具 | 共享 webhook/内部钩子管线辅助工具 |
| `plugin-sdk/lazy-runtime` | 懒加载运行时辅助工具 | `createLazyRuntimeModule`, `createLazyRuntimeMethod`, `createLazyRuntimeMethodBinder`, `createLazyRuntimeNamedExport`, `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | 进程辅助工具 | 共享 exec 辅助工具 |
| `plugin-sdk/cli-runtime` | CLI 运行时辅助工具 | 命令格式化、等待、版本辅助工具 |
| `plugin-sdk/gateway-runtime` | Gateway 网关辅助工具 | Gateway 网关客户端、事件循环就绪的启动辅助工具,以及渠道 Status 补丁辅助工具 |
| `plugin-sdk/runtime` | 广义运行时助手 | 运行时/日志/备份/插件安装助手 |
| `plugin-sdk/runtime-env` | 窄作用域运行时环境助手 | 日志记录器/运行时环境、超时、重试和退避助手 |
| `plugin-sdk/plugin-runtime` | 共享插件运行时助手 | 插件命令/钩子/http/交互式助手 |
| `plugin-sdk/hook-runtime` | 钩子管线助手 | 共享 webhook/内部钩子管线助手 |
| `plugin-sdk/lazy-runtime` | 懒加载运行时助手 | `createLazyRuntimeModule`, `createLazyRuntimeMethod`, `createLazyRuntimeMethodBinder`, `createLazyRuntimeNamedExport`, `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | 进程助手 | 共享 exec 助手 |
| `plugin-sdk/cli-runtime` | CLI 运行时助手 | 命令格式化、等待、版本助手 |
| `plugin-sdk/gateway-runtime` | Gateway 网关助手 | Gateway 网关客户端、事件循环就绪启动助手和渠道 Status 补丁助手 |
| `plugin-sdk/config-runtime` | 已弃用的配置兼容性垫片 | 优先使用 `config-types`、`plugin-config-runtime`、`runtime-config-snapshot` 和 `config-mutation` |
| `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` | 审批处理器辅助工具 | 更宽范围的审批处理器运行时辅助工具;足够时优先使用更窄的适配器/Gateway 网关接缝 |
| `plugin-sdk/approval-native-runtime` | 审批目标辅助工具 | 原生审批目标/账户绑定辅助工具 |
| `plugin-sdk/approval-reply-runtime` | 审批回复辅助工具 | Exec/插件审批回复载荷辅助工具 |
| `plugin-sdk/channel-runtime-context` | 渠道运行时上下文辅助工具 | 通用渠道运行时上下文注册/获取/监听辅助工具 |
| `plugin-sdk/security-runtime` | 安全辅助工具 | 共享信任、私信门控、外部内容和密钥收集辅助工具 |
| `plugin-sdk/ssrf-policy` | SSRF 策略辅助工具 | 主机允许列表和专用网络策略辅助工具 |
| `plugin-sdk/ssrf-runtime` | SSRF 运行时辅助工具 | 固定 dispatcher、受保护的 fetch、SSRF 策略辅助工具 |
| `plugin-sdk/system-event-runtime` | 系统事件辅助工具 | `enqueueSystemEvent`, `peekSystemEventEntries` |
| `plugin-sdk/heartbeat-runtime` | 心跳辅助工具 | 心跳事件和可见性辅助工具 |
| `plugin-sdk/delivery-queue-runtime` | 投递队列辅助工具 | `drainPendingDeliveries` |
| `plugin-sdk/channel-activity-runtime` | 渠道活动辅助工具 | `recordChannelActivity` |
| `plugin-sdk/dedupe-runtime` | 去重辅助工具 | 内存去重缓存 |
| `plugin-sdk/file-access-runtime` | 文件访问辅助工具 | 安全的本地文件/媒体路径辅助工具 |
| `plugin-sdk/transport-ready-runtime` | 传输就绪辅助工具 | `waitForTransportReady` |
| `plugin-sdk/collection-runtime` | 有界缓存辅助工具 | `pruneMapToMaxSize` |
| `plugin-sdk/diagnostic-runtime` | 诊断门控辅助工具 | `isDiagnosticFlagEnabled`, `isDiagnosticsEnabled` |
| `plugin-sdk/error-runtime` | 错误格式化辅助工具 | `formatUncaughtError`、`isApprovalNotFoundError`、错误图辅助工具 |
| `plugin-sdk/fetch-runtime` | 包装的 fetch/代理辅助工具 | `resolveFetch`、代理辅助工具、EnvHttpProxyAgent 选项辅助工具 |
| `plugin-sdk/host-runtime` | 主机规范化辅助工具 | `normalizeHostname`, `normalizeScpRemoteHost` |
| `plugin-sdk/retry-runtime` | 重试辅助工具 | `RetryConfig`、`retryAsync`、策略运行器 |
| `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` | 审批网关助手 | 共享审批网关解析助手 |
| `plugin-sdk/approval-handler-adapter-runtime` | 审批适配器助手 | 用于热渠道入口点的轻量级原生审批适配器加载助手 |
| `plugin-sdk/approval-handler-runtime` | 审批处理器助手 | 更广义的审批处理器运行时助手;当更窄的适配器/网关接缝足够时优先使用它们 |
| `plugin-sdk/approval-native-runtime` | 审批目标助手 | 原生审批目标/账号绑定助手 |
| `plugin-sdk/approval-reply-runtime` | 审批回复助手 | Exec/插件审批回复载荷助手 |
| `plugin-sdk/channel-runtime-context` | 渠道运行时上下文助手 | 通用渠道运行时上下文注册/获取/监听助手 |
| `plugin-sdk/security-runtime` | 安全助手 | 共享信任、私信门控、外部内容和密钥收集助手 |
| `plugin-sdk/ssrf-policy` | SSRF 策略助手 | 主机允许列表和私有网络策略助手 |
| `plugin-sdk/ssrf-runtime` | SSRF 运行时助手 | 固定调度器、受保护 fetch、SSRF 策略助手 |
| `plugin-sdk/system-event-runtime` | 系统事件助手 | `enqueueSystemEvent`, `peekSystemEventEntries` |
| `plugin-sdk/heartbeat-runtime` | 心跳助手 | 心跳事件和可见性助手 |
| `plugin-sdk/delivery-queue-runtime` | 投递队列助手 | `drainPendingDeliveries` |
| `plugin-sdk/channel-activity-runtime` | 渠道活动助手 | `recordChannelActivity` |
| `plugin-sdk/dedupe-runtime` | 去重助手 | 内存内去重缓存 |
| `plugin-sdk/file-access-runtime` | 文件访问助手 | 安全本地文件/媒体路径助手 |
| `plugin-sdk/transport-ready-runtime` | 传输就绪助手 | `waitForTransportReady` |
| `plugin-sdk/collection-runtime` | 有界缓存助手 | `pruneMapToMaxSize` |
| `plugin-sdk/diagnostic-runtime` | 诊断门控助手 | `isDiagnosticFlagEnabled`, `isDiagnosticsEnabled` |
| `plugin-sdk/error-runtime` | 错误格式化助手 | `formatUncaughtError`, `isApprovalNotFoundError`、错误图助手 |
| `plugin-sdk/fetch-runtime` | 包装的 fetch/代理助手 | `resolveFetch`、代理助手、EnvHttpProxyAgent 选项助手 |
| `plugin-sdk/host-runtime` | 主机规范化助手 | `normalizeHostname`, `normalizeScpRemoteHost` |
| `plugin-sdk/retry-runtime` | 重试助手 | `RetryConfig`, `retryAsync`、策略运行器 |
| `plugin-sdk/allow-from` | 允许列表格式化 | `formatAllowFromLowercase` |
| `plugin-sdk/allowlist-resolution` | 允许列表输入映射 | `mapAllowlistResolutionInputs` |
| `plugin-sdk/command-auth` | 命令门控和命令表面辅助工具 | `resolveControlCommandGate`、发送者授权辅助工具、命令注册表辅助工具,包括动态参数菜单格式化 |
| `plugin-sdk/command-auth` | 命令门控和命令表面助手 | `resolveControlCommandGate`、发送者授权助手、命令注册表助手,包括动态参数菜单格式化 |
| `plugin-sdk/command-status` | 命令 Status/帮助渲染器 | `buildCommandsMessage`, `buildCommandsMessagePaginated`, `buildHelpMessage` |
| `plugin-sdk/secret-input` | 密钥输入解析 | 密钥输入辅助工具 |
| `plugin-sdk/webhook-ingress` | Webhook 请求辅助工具 | Webhook 目标实用工具 |
| `plugin-sdk/webhook-request-guards` | Webhook 主体保护辅助工具 | 请求主体读取/限制辅助工具 |
| `plugin-sdk/secret-input` | 密钥输入解析 | 密钥输入助手 |
| `plugin-sdk/webhook-ingress` | Webhook 请求助手 | Webhook 目标实用工具 |
| `plugin-sdk/webhook-request-guards` | Webhook 正文保护助手 | 请求正文读取/限制助手 |
| `plugin-sdk/reply-runtime` | 共享回复运行时 | 入站分发、心跳、回复规划器、分块 |
| `plugin-sdk/reply-dispatch-runtime` | 窄范围回复分发辅助工具 | 最终化、提供商分发和对话标签辅助工具 |
| `plugin-sdk/reply-history` | 回复历史辅助工具 | `buildHistoryContext`, `buildPendingHistoryContextFromMap`, `recordPendingHistoryEntry`, `clearHistoryEntriesIfEnabled` |
| `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/session-store-runtime` | 会话存储辅助工具 | 存储路径 + updated-at 辅助工具 |
| `plugin-sdk/state-paths` | 状态路径辅助工具 | 状态和 OAuth 目录辅助工具 |
| `plugin-sdk/routing` | 路由/会话键辅助工具 | `resolveAgentRoute`、`buildAgentSessionKey`、`resolveDefaultAgentBoundAccountId`、会话键规范化辅助工具 |
| `plugin-sdk/status-helpers` | 渠道 Status 辅助工具 | 渠道/账户 Status 摘要构建器、运行时状态默认值、问题元数据辅助工具 |
| `plugin-sdk/target-resolver-runtime` | 目标解析器辅助工具 | 共享目标解析器辅助工具 |
| `plugin-sdk/string-normalization-runtime` | 字符串规范化辅助工具 | slug/字符串规范化辅助工具 |
| `plugin-sdk/request-url` | 请求 URL 辅助工具 | 从类请求输入中提取字符串 URL |
| `plugin-sdk/run-command` | 定时命令辅助工具 | 带规范化 stdout/stderr 的定时命令运行器 |
| `plugin-sdk/param-readers` | 参数读取器 | 用工具/CLI 参数读取器 |
| `plugin-sdk/tool-payload` | 工具载荷提取 | 从工具结果对象中提取规范化载荷 |
| `plugin-sdk/reply-chunking` | 回复分块助手 | 文本/Markdown 分块助手 |
| `plugin-sdk/session-store-runtime` | 会话存储助手 | 存储路径 + 更新时间助手 |
| `plugin-sdk/state-paths` | 状态路径助手 | 状态和 OAuth 目录助手 |
| `plugin-sdk/routing` | 路由/会话键助手 | `resolveAgentRoute`, `buildAgentSessionKey`, `resolveDefaultAgentBoundAccountId`、会话键规范化助手 |
| `plugin-sdk/status-helpers` | 渠道 Status 助手 | 渠道/账号 Status 摘要构建器、运行时状态默认值、问题元数据助手 |
| `plugin-sdk/target-resolver-runtime` | 目标解析器助手 | 共享目标解析器助手 |
| `plugin-sdk/string-normalization-runtime` | 字符串规范化助手 | Slug/字符串规范化助手 |
| `plugin-sdk/request-url` | 请求 URL 助手 | 从类似请求的输入中提取字符串 URL |
| `plugin-sdk/run-command` | 定时命令助手 | 带规范化 stdout/stderr 的定时命令运行器 |
| `plugin-sdk/param-readers` | 参数读取器 | 用工具/CLI 参数读取器 |
| `plugin-sdk/tool-payload` | 工具 payload 提取 | 从工具结果对象中提取规范化 payload |
| `plugin-sdk/tool-send` | 工具发送提取 | 从工具参数中提取规范发送目标字段 |
| `plugin-sdk/temp-path` | 临时路径帮助程序 | 共享的临时下载路径帮助程序 |
| `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/provider-auth-runtime` | 提供商运行时凭证帮助程序 | 运行时 API 密钥解析帮助程序 |
| `plugin-sdk/provider-auth-api-key` | 提供商 API 密钥设置帮助程序 | API 密钥新手引导/配置写入帮助程序 |
| `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`、共享重放策略构建器、提供商端点帮助程序和模型 ID 规范化帮助程序 |
| `plugin-sdk/provider-catalog-shared` | 共享提供商目录帮助程序 | `findCatalogTemplate`、`buildSingleProviderApiKeyCatalog`、`buildManifestModelProviderConfig`、`supportsNativeStreamingUsageCompat`、`applyProviderNativeStreamingUsageCompat` |
| `plugin-sdk/provider-onboard` | 提供商新手引导补丁 | 新手引导配置帮助程序 |
| `plugin-sdk/provider-http` | 提供商 HTTP 帮助程序 | 通用提供商 HTTP/端点能力帮助程序,包括音频转录 multipart 表单帮助程序 |
| `plugin-sdk/provider-web-fetch` | 提供商 Web 抓取帮助程序 | Web 抓取提供商注册/缓存帮助程序 |
| `plugin-sdk/provider-web-search-config-contract` | 提供商 Web 搜索配置帮助程序 | 面向不需要插件启用接线的提供商的窄 Web 搜索配置/凭证帮助程序 |
| `plugin-sdk/provider-web-search-contract` | 提供商 Web 搜索契约帮助程序 | 窄 Web 搜索配置/凭证契约帮助程序,例如 `createWebSearchProviderContractFields`、`enablePluginInConfig`、`resolveProviderWebSearchPluginConfig`作用域凭证 setter/getter |
| `plugin-sdk/provider-web-search` | 提供商 Web 搜索帮助程序 | Web 搜索提供商注册/缓存/运行时帮助程序 |
| `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/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot 包装器帮助程序 |
| `plugin-sdk/provider-transport-runtime` | 提供商传输帮助程序 | 原生提供商传输帮助程序,例如带保护的 fetch、传输消息转换和可写传输事件流 |
| `plugin-sdk/temp-path` | 临时路径助手 | 共享临时下载路径助手 |
| `plugin-sdk/logging-core` | 日志助手 | 子系统 logger 和脱敏助手 |
| `plugin-sdk/markdown-table-runtime` | Markdown 表格助手 | Markdown 表格模式助手 |
| `plugin-sdk/reply-payload` | 消息回复类型 | 回复 payload 类型 |
| `plugin-sdk/provider-setup` | 精选本地/自托管提供商设置助手 | 自托管提供商发现/配置助手 |
| `plugin-sdk/self-hosted-provider-setup` | 聚焦 OpenAI 兼容自托管提供商设置助手 | 相同的自托管提供商发现/配置助手 |
| `plugin-sdk/provider-auth-runtime` | 提供商运行时认证助手 | 运行时 API 密钥解析助手 |
| `plugin-sdk/provider-auth-api-key` | 提供商 API 密钥设置助手 | API 密钥新手引导/profile 写入助手 |
| `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` | 共享提供商模型/replay 助手 | `ProviderReplayFamily`、`buildProviderReplayFamilyHooks`、`normalizeModelCompat`、共享 replay-policy 构建器、提供商端点助手和模型 ID 规范化助手 |
| `plugin-sdk/provider-catalog-shared` | 共享提供商目录助手 | `findCatalogTemplate`、`buildSingleProviderApiKeyCatalog`、`buildManifestModelProviderConfig`、`supportsNativeStreamingUsageCompat`、`applyProviderNativeStreamingUsageCompat` |
| `plugin-sdk/provider-onboard` | 提供商新手引导补丁 | 新手引导配置助手 |
| `plugin-sdk/provider-http` | 提供商 HTTP 助手 | 通用提供商 HTTP/端点能力助手,包括音频转写 multipart 表单助手 |
| `plugin-sdk/provider-web-fetch` | 提供商 web-fetch 助手 | Web-fetch 提供商注册/缓存助手 |
| `plugin-sdk/provider-web-search-config-contract` | 提供商 Web 搜索配置助手 | 面向不需要插件启用接线的提供商的窄 Web 搜索配置/凭证助手 |
| `plugin-sdk/provider-web-search-contract` | 提供商 Web 搜索契约助手 | 窄 Web 搜索配置/凭证契约助手,例如 `createWebSearchProviderContractFields`、`enablePluginInConfig`、`resolveProviderWebSearchPluginConfig`,以及作用域凭证 setter/getter |
| `plugin-sdk/provider-web-search` | 提供商 Web 搜索助手 | Web 搜索提供商注册/缓存/运行时助手 |
| `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/DeepSeek V4/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` | 共享媒体帮助程序 | 媒体抓取/转换/存储帮助程序、基于 ffprobe 的视频尺寸探测,以及媒体载荷构建器 |
| `plugin-sdk/media-generation-runtime` | 共享媒体生成帮助程序 | 用于图像/视频/音乐生成的共享故障转移帮助程序、候选项选择和缺失模型消息 |
| `plugin-sdk/media-understanding` | 媒体理解帮助程序 | 媒体理解提供商类型,以及面向提供商的图像/音频帮助程序导出 |
| `plugin-sdk/text-runtime` | 共享文本帮助程序 | 对智能体可见文本进行剥离、Markdown 渲染/分块/表格帮助程序、脱敏帮助程序、指令标签帮助程序、安全文本实用工具,以及相关文本/日志帮助程序 |
| `plugin-sdk/text-chunking` | 文本分块帮助程序 | 出站文本分块帮助程序 |
| `plugin-sdk/speech` | 语音帮助程序 | 语音提供商类型,以及面向提供商的指令、注册表、验证帮助程序和 OpenAI 兼容 TTS 构建器 |
| `plugin-sdk/media-runtime` | 共享媒体助手 | 媒体获取/转换/存储助手、由 ffprobe 支持的视频尺寸探测,以及媒体 payload 构建器 |
| `plugin-sdk/media-generation-runtime` | 共享媒体生成助手 | 图像/视频/音乐生成的共享故障转移助手、候选选择和缺失模型提示 |
| `plugin-sdk/media-understanding` | 媒体理解助手 | 媒体理解提供商类型,以及面向提供商的图像/音频助手导出 |
| `plugin-sdk/text-runtime` | 共享文本助手 | Assistant 可见文本剥离、Markdown 渲染/分块/表格助手、脱敏助手、指令标签助手、安全文本工具,以及相关文本/日志助手 |
| `plugin-sdk/text-chunking` | 文本分块助手 | 出站文本分块助手 |
| `plugin-sdk/speech` | 语音助手 | 语音提供商类型,以及面向提供商的指令、注册表、验证助手和 OpenAI 兼容 TTS 构建器 |
| `plugin-sdk/speech-core` | 共享语音核心 | 语音提供商类型、注册表、指令、规范化 |
| `plugin-sdk/realtime-transcription` | 实时转录帮助程序 | 提供商类型、注册表帮助程序和共享 WebSocket 会话帮助程序 |
| `plugin-sdk/realtime-voice` | 实时语音帮助程序 | 提供商类型、注册表/解析帮助程序和桥接会话帮助程序 |
| `plugin-sdk/image-generation` | 图像生成帮助程序 | 图像生成提供商类型,以及图像资产/数据 URL 帮助程序和 OpenAI 兼容图像提供商构建器 |
| `plugin-sdk/image-generation-core` | 共享图像生成核心 | 图像生成类型、故障转移、凭证和注册表帮助程序 |
| `plugin-sdk/music-generation` | 音乐生成帮助程序 | 音乐生成提供商/请求/结果类型 |
| `plugin-sdk/music-generation-core` | 共享音乐生成核心 | 音乐生成类型、故障转移帮助程序、提供商查找和模型引用解析 |
| `plugin-sdk/video-generation` | 视频生成帮助程序 | 视频生成提供商/请求/结果类型 |
| `plugin-sdk/video-generation-core` | 共享视频生成核心 | 视频生成类型、故障转移帮助程序、提供商查找和模型引用解析 |
| `plugin-sdk/interactive-runtime` | 交互式回复帮助程序 | 交互式回复载荷规范化/化简 |
| `plugin-sdk/channel-config-primitives` | 渠道配置原语 | 窄渠道配置 schema 原语 |
| `plugin-sdk/channel-config-writes` | 渠道配置写入帮助程序 | 渠道配置写入授权帮助程序 |
| `plugin-sdk/realtime-transcription` | 实时转写助手 | 提供商类型、注册表助手和共享 WebSocket 会话助手 |
| `plugin-sdk/realtime-voice` | 实时语音助手 | 提供商类型、注册表/解析助手和桥接会话助手 |
| `plugin-sdk/image-generation` | 图像生成助手 | 图像生成提供商类型,以及图像资产/data URL 助手和 OpenAI 兼容图像提供商构建器 |
| `plugin-sdk/image-generation-core` | 共享图像生成核心 | 图像生成类型、故障转移、认证和注册表助手 |
| `plugin-sdk/music-generation` | 音乐生成助手 | 音乐生成提供商/请求/结果类型 |
| `plugin-sdk/music-generation-core` | 共享音乐生成核心 | 音乐生成类型、故障转移助手、提供商查找和模型引用解析 |
| `plugin-sdk/video-generation` | 视频生成助手 | 视频生成提供商/请求/结果类型 |
| `plugin-sdk/video-generation-core` | 共享视频生成核心 | 视频生成类型、故障转移助手、提供商查找和模型引用解析 |
| `plugin-sdk/interactive-runtime` | 交互式回复助手 | 交互式回复 payload 规范化/化简 |
| `plugin-sdk/channel-config-primitives` | 渠道配置基元 | 窄渠道配置 schema 基元 |
| `plugin-sdk/channel-config-writes` | 渠道配置写入助手 | 渠道配置写入授权助手 |
| `plugin-sdk/channel-plugin-common` | 共享渠道前导 | 共享渠道插件前导导出 |
| `plugin-sdk/channel-status` | 渠道 Status 帮助程序 | 共享渠道 Status 快照/摘要帮助程序 |
| `plugin-sdk/allowlist-config-edit` | 允许列表配置帮助程序 | 允许列表配置编辑/读取帮助程序 |
| `plugin-sdk/group-access` | 群组访问帮助程序 | 共享群组访问决策帮助程序 |
| `plugin-sdk/direct-dm` | 直接私信帮助程序 | 共享直接私信凭证/防护帮助程序 |
| `plugin-sdk/extension-shared` | 共享插件帮助程序 | 被动渠道/Status 和环境代理帮助程序原语 |
| `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 主机 foundation 引擎 | Memory 主机 foundation 引擎导出 |
| `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 主机多模态帮助程序 |
| `plugin-sdk/memory-core-host-query` | Memory 主机查询帮助程序 | Memory 主机查询帮助程序 |
| `plugin-sdk/memory-core-host-secret` | Memory 主机密钥帮助程序 | Memory 主机密钥帮助程序 |
| `plugin-sdk/memory-core-host-events` | Memory 主机事件日志帮助程序 | Memory 主机事件日志帮助程序 |
| `plugin-sdk/memory-core-host-status` | Memory 主机 Status 帮助程序 | Memory 主机 Status 帮助程序 |
| `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 搜索管理器运行时门面 |
| `plugin-sdk/memory-host-status` | Memory 主机 Status 别名 | 面向供应商中立的 Memory 主机 Status 帮助程序别名 |
| `plugin-sdk/testing` | 测试实用工具 | 旧版宽兼容 barrel优先使用聚焦测试子路径例如 `plugin-sdk/plugin-test-runtime`、`plugin-sdk/channel-test-helpers`、`plugin-sdk/channel-target-testing`、`plugin-sdk/test-env` 和 `plugin-sdk/test-fixtures` |
| `plugin-sdk/channel-status` | 渠道 Status 助手 | 共享渠道 Status 快照/摘要助手 |
| `plugin-sdk/allowlist-config-edit` | 允许列表配置助手 | 允许列表配置编辑/读取助手 |
| `plugin-sdk/group-access` | 群组访问助手 | 共享群组访问决策助手 |
| `plugin-sdk/direct-dm` | 直接私信助手 | 共享直接私信认证/保护助手 |
| `plugin-sdk/extension-shared` | 共享扩展助手 | 被动渠道/Status 和环境代理助手基元 |
| `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 引擎运行时 facade | Memory 索引/搜索运行时 facade |
| `plugin-sdk/memory-core-host-engine-foundation` | Memory host foundation 引擎 | Memory host foundation 引擎导出 |
| `plugin-sdk/memory-core-host-engine-embeddings` | Memory host embedding 引擎 | Memory embedding 契约、注册表访问、本地提供商,以及通用批处理/远程助手;具体远程提供商位于其所属插件中 |
| `plugin-sdk/memory-core-host-engine-qmd` | Memory host QMD 引擎 | Memory host QMD 引擎导出 |
| `plugin-sdk/memory-core-host-engine-storage` | Memory host storage 引擎 | Memory host storage 引擎导出 |
| `plugin-sdk/memory-core-host-multimodal` | Memory host multimodal 助手 | Memory host multimodal 助手 |
| `plugin-sdk/memory-core-host-query` | Memory host query 助手 | Memory host query 助手 |
| `plugin-sdk/memory-core-host-secret` | Memory host secret 助手 | Memory host secret 助手 |
| `plugin-sdk/memory-core-host-events` | Memory host event journal 助手 | Memory host event journal 助手 |
| `plugin-sdk/memory-core-host-status` | Memory host status 助手 | Memory host status 助手 |
| `plugin-sdk/memory-core-host-runtime-cli` | Memory host CLI 运行时 | Memory host CLI 运行时助手 |
| `plugin-sdk/memory-core-host-runtime-core` | Memory host core 运行时 | Memory host core 运行时助手 |
| `plugin-sdk/memory-core-host-runtime-files` | Memory host 文件/运行时助手 | Memory host 文件/运行时助手 |
| `plugin-sdk/memory-host-core` | Memory host core 运行时别名 | 面向 vendor 中立的 memory host core 运行时助手别名 |
| `plugin-sdk/memory-host-events` | Memory host event journal 别名 | 面向 vendor 中立的 memory host event journal 助手别名 |
| `plugin-sdk/memory-host-files` | Memory host 文件/运行时别名 | 面向 vendor 中立的 memory host 文件/运行时助手别名 |
| `plugin-sdk/memory-host-markdown` | 托管 Markdown 助手 | 面向 memory 相邻插件的共享托管 Markdown 助手 |
| `plugin-sdk/memory-host-search` | 活跃 Memory 搜索 facade | 惰性活跃 Memory 搜索管理器运行时 facade |
| `plugin-sdk/memory-host-status` | Memory host status 别名 | 面向 vendor 中立的 memory host status 助手别名 |
| `plugin-sdk/testing` | 测试工具 | 旧版宽兼容 barrel优先使用聚焦测试子路径例如 `plugin-sdk/plugin-test-runtime`、`plugin-sdk/channel-test-helpers`、`plugin-sdk/channel-target-testing`、`plugin-sdk/test-env` 和 `plugin-sdk/test-fixtures` |
</Accordion>
此表有意只列出常见迁移子集,而不是完整 SDK
表面。完整的 200+ 入口点列表位于
此表有意只列出常见迁移子集,而不是完整 SDK
表面。200+ 入口点的完整列表位于
`scripts/lib/plugin-sdk-entrypoints.json`
保留的内置插件辅助接缝已从公开 SDK
导出映射中移除,明确记录的兼容性门面除外,例如为已发布的
`@openclaw/discord@2026.3.13`保留的已弃用
`plugin-sdk/discord` 垫片。所有者专属辅助工具位于对应所有者的
插件包内;共享宿主行为应通过通用 SDK
契约传递,例如 `plugin-sdk/gateway-runtime`、`plugin-sdk/security-runtime`
预留的内置插件辅助接缝已从公共 SDK
导出映射中移除,只有明确记录的兼容性门面除外,例如保留给已发布
`@openclaw/discord@2026.3.13`使用的已弃用
`plugin-sdk/discord` 垫片。所有者特定的辅助函数位于其所属
插件包内;共享宿主行为应通过通用 SDK
契约迁移,例如 `plugin-sdk/gateway-runtime`、`plugin-sdk/security-runtime`
`plugin-sdk/plugin-config-runtime`
使用与任务匹配的最窄导入。如果找不到某个导出,
`src/plugin-sdk/` 中的源码,或询问维护者应由哪个通用契约
请查 `src/plugin-sdk/` 中的源码,或询问维护者应由哪个通用契约
拥有它。
## 当前弃用项
## 活跃弃用项
适用于插件 SDK、提供商契约、运行时表面和清单的更窄弃用项。
每一项目前仍可使用,但会在未来的主版本中移除。
每个条目下方都会把旧 API 映射到其规范替代项。
适用于插件 SDK、提供商契约、运行时表面和清单的更窄弃用项。每一项目前仍可使用但会在未来的主版本中移除。每个条目下方都会把旧 API 映射到其规范替代项。
<AccordionGroup>
<Accordion title="command-auth 帮助构建器 → command-status">
**旧 (`openclaw/plugin-sdk/command-auth`)**`buildCommandsMessage`,
**旧`openclaw/plugin-sdk/command-auth`**`buildCommandsMessage`,
`buildCommandsMessagePaginated`, `buildHelpMessage`
**新 (`openclaw/plugin-sdk/command-status`)**:相同签名、相同
**新`openclaw/plugin-sdk/command-status`**:相同签名、相同
导出,只是从更窄的子路径导入。`command-auth`
会将它们作为兼容存根重新导出
会将它们重新导出为兼容性存根
```typescript
// Before
@ -505,59 +493,64 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
</Accordion>
<Accordion title="提及门控辅助工具 → resolveInboundMentionDecision">
<Accordion title="提及门控辅助函数 → resolveInboundMentionDecision">
**旧**:来自
`openclaw/plugin-sdk/channel-inbound`
`openclaw/plugin-sdk/channel-mention-gating`
`resolveInboundMentionRequirement({ facts, policy })`
`shouldDropInboundForMention(...)`
**新**`resolveInboundMentionDecision({ facts, policy })`,返回
单一决策对象,而不是两次拆分调用。
**新**`resolveInboundMentionDecision({ facts, policy })`,返回
决策对象,而不是两个分离调用。
下游渠道插件Slack、Discord、Matrix、MS Teams已经完成切换。
下游渠道插件Slack、Discord、Matrix、MS Teams已经
切换。
</Accordion>
<Accordion title="渠道运行时垫片和渠道动作辅助工具">
<Accordion title="渠道运行时垫片和渠道动作辅助函数">
`openclaw/plugin-sdk/channel-runtime` 是面向旧版
渠道插件的兼容性垫片。不要在新代码中导入它;请使用
`openclaw/plugin-sdk/channel-runtime-context` 注册运行时
`openclaw/plugin-sdk/channel-runtime-context` 注册运行时
对象。
`openclaw/plugin-sdk/channel-actions` 中的 `channelActions*` 辅助工具
会与原始 “actions” 渠道导出一起弃用。请改为通过语义化的
`presentation` 表面暴露能力:渠道插件声明它们渲染什么
(卡片、按钮、选择器),而不是声明它们接受哪些原始动作名称。
`openclaw/plugin-sdk/channel-actions` 中的 `channelActions*` 辅助函数会
与原始 “actions” 渠道导出一起弃用。请改为通过语义化的
`presentation` 表面公开能力,渠道插件声明它们会渲染什么
(卡片、按钮、选择器),而不是声明它们接受哪些原始
动作名称。
</Accordion>
<Accordion title="Web 搜索提供商 tool() 辅助工具 → 插件上的 createTool()">
<Accordion title="Web 搜索提供商 tool() 辅助函数 → 插件上的 createTool()">
**旧**:来自 `openclaw/plugin-sdk/provider-web-search``tool()` 工厂。
**新**:直接在提供商插件上实现 `createTool(...)`
OpenClaw 不再需要 SDK 辅助工具来注册工具包装器。
OpenClaw 不再需要 SDK 辅助函数来注册工具包装器。
</Accordion>
<Accordion title="明文渠道信封 → BodyForAgent">
**旧**使用 `formatInboundEnvelope(...)`(以及
`ChannelMessageForAgent.channelEnvelope`从入站渠道消息构建一个扁平的明文提示词
<Accordion title="纯文本渠道信封 → BodyForAgent">
**旧**`formatInboundEnvelope(...)`(以及
`ChannelMessageForAgent.channelEnvelope`,用于从入站渠道消息构建扁平的纯文本提示词
信封。
**新**`BodyForAgent` 加结构化用户上下文块。渠道插件
将路由元数据(线程、主题、回复目标、回应)作为类型化字段附加,
而不是把它们拼接到提示词字符串中。`formatAgentEnvelope(...)`
辅助工具仍支持用于合成面向助手的信封,但入站明文信封正在
淘汰。
**新**`BodyForAgent` 加结构化用户上下文块。渠道
插件会把路由元数据(线程、主题、回复对象、反应)作为
类型化字段附加,而不是将它们拼接到提示词字符串中。
`formatAgentEnvelope(...)` 辅助函数仍支持用于合成的
面向助手的信封,但入站纯文本信封正在
退出。
受影响区域:`inbound_claim`、`message_received`,以及任何后处理
`channelEnvelope` 文本的自定义渠道插件。
`channelEnvelope` 文本的自定义
渠道插件。
</Accordion>
<Accordion title="提供商发现类型 → 提供商目录类型">
四个发现类型别名现在是目录时代类型之上的薄包装:
四个发现类型别名现在是
目录时代类型的薄包装:
| 旧别名 | 新类型 |
| ------------------------- | ------------------------- |
@ -566,7 +559,7 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
| `ProviderDiscoveryResult` | `ProviderCatalogResult` |
| `ProviderPluginDiscovery` | `ProviderPluginCatalog` |
另外还有旧版 `ProviderCapabilities` 静态包。提供商插件
另外还有旧版 `ProviderCapabilities` 静态集合,提供商插件
应使用显式提供商钩子,例如 `buildReplayPolicy`
`normalizeToolSchemas``wrapStreamFn`,而不是静态对象。
@ -577,22 +570,23 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
`isBinaryThinking(ctx)`、`supportsXHighThinking(ctx)` 和
`resolveDefaultThinkingLevel(ctx)`
**新**:单个 `resolveThinkingProfile(ctx)`,返回一个
`ProviderThinkingProfile`,其中包含规范 `id`、可选 `label`
排序后的级别列表。OpenClaw 会按配置文件排名自动降级陈旧的已存储值。
**新**:单个 `resolveThinkingProfile(ctx)`,返回包含规范 `id`、可选
`label` 和已排序级别列表的
`ProviderThinkingProfile`。OpenClaw 会按配置档
排名自动降级过期的已存储值。
实现一个钩子即可,而不是三个。旧版钩子在弃用窗口期间仍可工作,
但不会与配置文件结果组合。
实现一个钩子即可,而不是三个。旧版钩子在
弃用窗口期间仍会继续工作,但不会与配置档结果组合。
</Accordion>
<Accordion title="外部 OAuth 提供商回退 → contracts.externalAuthProviders">
**旧**:实现 `resolveExternalOAuthProfiles(...)`,但不在插件清单中
声明提供商。
**旧**:实现 `resolveExternalOAuthProfiles(...)`,但不在
插件清单中声明提供商。
**新**:在插件清单中声明 `contracts.externalAuthProviders`
**并且**实现 `resolveExternalAuthProfiles(...)`。旧的“认证
回退”路径会在运行时发出警告,并将被移除。
**并且**实现 `resolveExternalAuthProfiles(...)`。旧的 “auth
fallback” 路径会在运行时发出警告,并将被移除。
```json
{
@ -607,11 +601,13 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
<Accordion title="提供商环境变量查找 → setup.providers[].envVars">
**旧**清单字段:`providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }`。
**新**:在清单中将相同的环境变量查找镜像到 `setup.providers[].envVars`
这会把设置/Status 环境元数据整合到一个位置,并避免仅为回答
环境变量查找而启动插件运行时。
**新**:在清单中把相同的环境变量查找映射到 `setup.providers[].envVars`
这会将设置/Status 环境元数据集中到一个
位置,并避免仅为回答环境变量
查找而启动插件运行时。
`providerAuthEnvVars` 会通过兼容适配器继续支持,直到弃用窗口关闭。
`providerAuthEnvVars` 会通过兼容性适配器继续支持,
直到弃用窗口关闭。
</Accordion>
@ -621,10 +617,10 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
`api.registerMemoryFlushPlan(...)`
`api.registerMemoryRuntime(...)`
**新**:在内存状态 API 上调用一次
**新**:在 memory-state API 上进行一次调用
`registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime })`
相同槽位,单次注册调用。增量 Memory 辅助工具
相同槽位,单次注册调用。增量 Memory 辅助函数
`registerMemoryPromptSupplement`、`registerMemoryCorpusSupplement`、
`registerMemoryEmbeddingProvider`)不受影响。
@ -638,17 +634,19 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
| `SubagentReadSessionParams` | `SubagentGetSessionMessagesParams` |
| `SubagentReadSessionResult` | `SubagentGetSessionMessagesResult` |
运行时方法 `readSession` 已弃用,改用 `getSessionMessages`
签名相同;旧方法会调用新方法。
运行时方法 `readSession` 已弃用,推荐使用
`getSessionMessages`。签名相同;旧方法会转调用
新方法。
</Accordion>
<Accordion title="runtime.tasks.flow → runtime.tasks.managedFlows">
**旧**`runtime.tasks.flow`(单数)返回一个实时任务流访问器。
**旧**`runtime.tasks.flow`(单数)返回实时任务流访问器。
**新**`runtime.tasks.managedFlows` 为需要从流中创建、更新、取消或运行
子任务的插件保留托管 TaskFlow 变更运行时。当插件只需要基于 DTO 的读取时,
请使用 `runtime.tasks.flows`
**新**`runtime.tasks.managedFlows` 为创建、更新、取消或从
流运行子任务的插件保留托管 TaskFlow 变更
运行时。当插件只需要基于 DTO 的读取时,请使用
`runtime.tasks.flows`
```typescript
// Before
@ -659,17 +657,18 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
</Accordion>
<Accordion title="嵌入式扩展工厂 → 智能体工具结果中间件">
已在上文“如何迁移 → 将 Pi 工具结果扩展迁移到中间件”中介绍。
此处为完整性补充:已移除的 Pi 专用
`api.registerEmbeddedExtensionFactory(...)` 路径替换为
`api.registerAgentToolResultMiddleware(...)`,并在
`contracts.agentToolResultMiddleware` 中提供显式运行时列表。
<Accordion title="嵌入式插件工厂 → 智能体工具结果中间件">
已在上方“如何迁移 → 将 Pi 工具结果插件迁移到
中间件”中说明。这里为完整性再次列出:已移除的仅限 Pi 的
`api.registerEmbeddedExtensionFactory(...)` 路径由
`api.registerAgentToolResultMiddleware(...)` 替代,并在
`contracts.agentToolResultMiddleware` 中提供显式运行时
列表。
</Accordion>
<Accordion title="OpenClawSchemaType 别名 → OpenClawConfig">
`openclaw/plugin-sdk` 重新导出的 `OpenClawSchemaType` 现在是
`OpenClawConfig`行别名。请优先使用规范名称。
`OpenClawConfig`行别名。请优先使用规范名称。
```typescript
// Before
@ -682,20 +681,20 @@ OpenClaw 不会在引入替代方案的同一次变更中移除或重新解释
</AccordionGroup>
<Note>
扩展级弃用项(位于 `extensions/` 下的内置渠道/提供商插件中
会在各自的 `api.ts``runtime-api.ts` 桶文件内跟踪。
它们不影响第三方插件契约,因此未在此列出。如果你直接使用某个内置插件的本地桶文件
请在升级前阅读该桶文件中的弃用注释。
插件级弃用项(位于 `extensions/` 下的内置渠道/提供商插件内部
会在各自的 `api.ts``runtime-api.ts`
桶中跟踪。它们不影响第三方插件契约,因此不在此处列出。如果你直接使用某个内置插件的本地桶,请在升级前阅读该桶中的
弃用注释。
</Note>
## 移除时间线
| 时间 | 会发生什么 |
| 时间 | 会发生什么 |
| ---------------------- | ----------------------------------------------------------------------- |
| **现在** | 已弃用表面会发出运行时警告 |
| **下一个主版本** | 已弃用表面将被移除;仍在使用它们的插件会失败 |
| **现在** | 已弃用表面会发出运行时警告 |
| **下一个主版本** | 已弃用表面将被移除;仍在使用它们的插件将失败 |
所有核心插件都已经迁移。外部插件应在下一个主版本发布前完成迁移。
所有核心插件都已完成迁移。外部插件应在下一个主版本之前迁移。
## 临时抑制警告
@ -706,13 +705,13 @@ 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) — 完整子路径导入参考
- [渠道插件](/zh-CN/plugins/sdk-channel-plugins) — 构建渠道插件
- [提供商插件](/zh-CN/plugins/sdk-provider-plugins) — 构建提供商插件
- [插件内部机制](/zh-CN/plugins/architecture) — 架构深解析
- [插件内部机制](/zh-CN/plugins/architecture) — 架构深解析
- [插件清单](/zh-CN/plugins/manifest) — 清单架构参考

View File

@ -1,199 +1,201 @@
---
read_when:
- 为插件导入选择合适的 plugin-sdk 子路径
- 审内置插件子路径和辅助接口
- 为插件导入选择正确的 plugin-sdk 子路径
- 审内置插件子路径和辅助接口
summary: 插件 SDK 子路径目录:哪些导入位于何处,按领域分组
title: 插件 SDK 子路径
x-i18n:
generated_at: "2026-04-29T13:54:37Z"
generated_at: "2026-04-29T15:39:40Z"
model: gpt-5.5
provider: openai
source_hash: 02c86fd840e7f68ea86d7b7710278a942e4f0c69154c17393d449790e5474a4f
source_hash: a2b2cb0880317d4bd3fa7c1803afc119d500b3f8ae3c5d444839c9d4d7633b80
source_path: plugins/sdk-subpaths.md
workflow: 16
---
插件 SDK 以 `openclaw/plugin-sdk/` 下的一组窄子路径形式公开。
本页按用途分组列出常用子路径。生成的 200 多个子路径完整列表位于 `scripts/lib/plugin-sdk-entrypoints.json`
保留的内置插件辅助子路径也会出现在其中,但除非某个文档页面明确推广,否则它们属于实现细节。
维护者可以使用 `pnpm plugins:boundary-report:summary` 审计活跃的保留辅助子路径;
未使用的保留辅助导出会让 CI 报告失败,而不是作为休眠兼容性债务留在公共 SDK 中。
插件 SDK 以 `openclaw/plugin-sdk/` 下的一组窄子路径形式暴露。
本页按用途对常用子路径进行分组编目。生成的
200+ 个子路径完整列表位于 `scripts/lib/plugin-sdk-entrypoints.json`
保留的内置插件帮助器子路径会出现在其中,但除非某个文档页面明确推荐,
否则它们属于实现细节。维护者可以使用 `pnpm plugins:boundary-report:summary`
审计当前活跃的保留帮助器子路径;未使用的保留帮助器导出会使 CI 报告失败,
而不是作为休眠的兼容性债务留在公共 SDK 中。
插件编写指南见 [插件 SDK 概览](/zh-CN/plugins/sdk-overview)。
## 插件入口
| 子路径 | 主要导出 |
| 子路径 | 关键导出 |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `plugin-sdk/plugin-entry` | `definePluginEntry` |
| `plugin-sdk/core` | `defineChannelPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `defineSetupPluginEntry`, `buildChannelConfigSchema` |
| `plugin-sdk/config-schema` | `OpenClawSchema` |
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
| `plugin-sdk/testing` | 用于旧版插件测试的宽兼容性桶;新的插件测试应优先使用聚焦的测试子路径 |
| `plugin-sdk/plugin-test-api` | 用于直接插件注册单元测试的最小 `OpenClawPluginApi` mock 构建器 |
| `plugin-sdk/agent-runtime-test-contracts` | 用于认证配置文件、投递抑制、回退分类、工具钩子、提示词覆盖层、schema 和转录修复的原生 agent-runtime 适配器契约夹具 |
| `plugin-sdk/channel-test-helpers` | 渠道账号生命周期、目录、发送配置、运行时 mock、钩子、内置渠道入口、信封时间戳、配对回复,以及通用渠道契约测试辅助工具 |
| `plugin-sdk/channel-target-testing` | 共享的渠道目标解析错误用例测试套件 |
| `plugin-sdk/plugin-test-contracts` | 插件注册、包清单、公共产物、运行时 API、导入副作用和直接导入契约辅助工具 |
| `plugin-sdk/plugin-test-runtime` | 用于测试的插件运行时、注册表、提供商注册、设置向导和运行时任务流夹具 |
| `plugin-sdk/provider-test-contracts` | 提供商运行时、认证、设备发现、新手引导、目录、媒体能力、重放策略、实时 STT 现场音频、Web 搜索/抓取,以及向导契约辅助工具 |
| `plugin-sdk/provider-http-test-mocks` | 用于测试 `plugin-sdk/provider-http` 的提供商测试的可选 Vitest HTTP/认证 mock |
| `plugin-sdk/test-env` | 测试环境、fetch/网络、一次性 HTTP 服务器、传入请求、现场测试、临时文件系统和时间控制夹具 |
| `plugin-sdk/test-fixtures` | 通用 CLI、沙箱、skill、智能体消息、系统事件、模块重载、内置插件路径、终端、分块、认证令牌和类型化用例测试夹具 |
| `plugin-sdk/test-node-mocks` | 用于 Vitest `vi.mock("node:*")` 工厂内部的聚焦 Node 内置 mock 辅助工具 |
| `plugin-sdk/migration` | 迁移提供商条目辅助工具,例如 `createMigrationItem`、原因常量、条目 Status 标记、脱敏辅助工具和 `summarizeMigrationItems` |
| `plugin-sdk/migration-runtime` | 运行时迁移辅助工具,例如 `copyMigrationFileItem``writeMigrationReport` |
| `plugin-sdk/testing` | 面向旧版插件测试的宽兼容性 barrel新的扩展测试应优先使用聚焦的测试子路径 |
| `plugin-sdk/plugin-test-api` | 用于直接插件注册单元测试的最小 `OpenClawPluginApi` mock 构建器 |
| `plugin-sdk/agent-runtime-test-contracts` | 用于鉴权配置、递送抑制、回退分类、工具钩子、提示词覆盖层、schema 和转录修复的原生智能体运行时适配器契约夹具 |
| `plugin-sdk/channel-test-helpers` | 渠道账号生命周期、目录、发送配置、运行时 mock、钩子、内置渠道入口、信封时间戳、配对回复和通用渠道契约测试帮助器 |
| `plugin-sdk/channel-target-testing` | 共享的渠道目标解析错误用例测试套件 |
| `plugin-sdk/plugin-test-contracts` | 插件注册、包清单、公共产物、运行时 API、导入副作用和直接导入契约帮助器 |
| `plugin-sdk/plugin-test-runtime` | 用于测试的插件运行时、注册表、提供商注册、设置向导和运行时任务流夹具 |
| `plugin-sdk/provider-test-contracts` | 提供商运行时、鉴权、设备发现、新手引导、目录、媒体能力、重放策略、实时 STT 实时音频、Web 搜索/抓取和向导契约帮助器 |
| `plugin-sdk/provider-http-test-mocks` | 面向会执行 `plugin-sdk/provider-http` 的提供商测试的可选 Vitest HTTP/鉴权 mock |
| `plugin-sdk/test-env` | 测试环境、fetch/网络、一次性 HTTP 服务器、传入请求、实时测试、临时文件系统和时间控制夹具 |
| `plugin-sdk/test-fixtures` | 通用 CLI、沙箱、skill、智能体消息、系统事件、模块重载、内置插件路径、终端、分块、鉴权令牌和类型化用例测试夹具 |
| `plugin-sdk/test-node-mocks` | 用于 Vitest `vi.mock("node:*")` 工厂内部的聚焦 Node 内置 mock 帮助器 |
| `plugin-sdk/migration` | 迁移提供商条目帮助器,例如 `createMigrationItem`、原因常量、条目状态标记、脱敏帮助器和 `summarizeMigrationItems` |
| `plugin-sdk/migration-runtime` | 运行时迁移帮助器,例如 `copyMigrationFileItem``writeMigrationReport` |
<AccordionGroup>
<Accordion title="Channel subpaths">
| 子路径 | 主要导出 |
| 子路径 | 关键导出 |
| --- | --- |
| `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 提示、设置 Status 构建器 |
| `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` | 多账号配置/操作门控辅助工具、默认账号回退辅助工具 |
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`、账号 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`, `resolveChannelSourceReplyDeliveryMode` |
| `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter` |
| `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter`, `resolveChannelDmAccess`, `resolveChannelDmAllowFrom`, `resolveChannelDmPolicy`, `normalizeChannelDmPolicy`, `normalizeLegacyDmAliases` |
| `plugin-sdk/channel-config-schema` | 共享渠道配置 schema 原语和通用构建器 |
| `plugin-sdk/bundled-channel-config-schema` | 仅供维护的内置插件使用的内置 OpenClaw 渠道配置 schema |
| `plugin-sdk/bundled-channel-config-schema` | 仅面向受维护内置插件的内置 OpenClaw 渠道配置 schema |
| `plugin-sdk/channel-config-schema-legacy` | 内置渠道配置 schema 的已弃用兼容性别名 |
| `plugin-sdk/telegram-command-config` | Telegram 自定义命令规范化/验证辅助工具,带有内置契约回退 |
| `plugin-sdk/command-gating` | 窄命令授权门控辅助工具 |
| `plugin-sdk/telegram-command-config` | 带内置契约回退的 Telegram 自定义命令规范化/验证帮助器 |
| `plugin-sdk/command-gating` | 窄命令授权门控帮助器 |
| `plugin-sdk/channel-policy` | `resolveChannelGroupRequireMention` |
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`, `createChannelRunQueue`,草稿流生命周期/终结辅助工具 |
| `plugin-sdk/inbound-envelope` | 共享入站路由 + 信封构建器辅助工具 |
| `plugin-sdk/inbound-reply-dispatch` | 共享入站记录与分发辅助工具 |
| `plugin-sdk/messaging-targets` | 目标解析/匹配辅助工具 |
| `plugin-sdk/outbound-media` | 共享出站媒体加载辅助工具 |
| `plugin-sdk/outbound-send-deps` | 面向渠道适配器的轻量出站发送依赖查找 |
| `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` | 共享渠道 Status 快照/摘要辅助工具 |
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`, `createChannelRunQueue`,草稿流生命周期/完成帮助器 |
| `plugin-sdk/inbound-envelope` | 共享的入站路由 + 信封构建器帮助器 |
| `plugin-sdk/inbound-reply-dispatch` | 共享的入站记录并分发帮助器 |
| `plugin-sdk/messaging-targets` | 目标解析/匹配帮助器 |
| `plugin-sdk/outbound-media` | 共享的出站媒体加载帮助器 |
| `plugin-sdk/outbound-send-deps` | 渠道适配器的轻量出站发送依赖查找 |
| `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` | 共享渠道 Status 快照/摘要帮助器 |
| `plugin-sdk/channel-config-primitives` | 窄渠道配置 schema 原语 |
| `plugin-sdk/channel-config-writes` | 渠道配置写入授权辅助工具 |
| `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/discord` | 已弃用的 Discord 兼容性门面,用于已发布的 `@openclaw/discord@2026.3.13`跟踪所有者兼容性;新插件应使用通用渠道 SDK 子路径 |
| `plugin-sdk/telegram-account` | 已弃用的 Telegram 账号解析兼容性门面,用于受跟踪的所有者兼容性;新插件应使用注入的运行时辅助工具或通用渠道 SDK 子路径 |
| `plugin-sdk/interactive-runtime` | 语义消息呈现、投递和旧版交互式回复辅助工具。见 [Message Presentation](/zh-CN/plugins/message-presentation) |
| `plugin-sdk/channel-inbound` | 用于入站防抖、提及匹配、提及策略辅助工具和信封辅助工具的兼容性桶 |
| `plugin-sdk/channel-inbound-debounce` | 窄入站防抖辅助工具 |
| `plugin-sdk/channel-mention-gating` | 窄提及策略、提及标记和提及文本辅助工具,不包含更宽的入站运行时表面 |
| `plugin-sdk/channel-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/discord` | 面向已发布的 `@openclaw/discord@2026.3.13` 和跟踪所有者兼容性的已弃用 Discord 兼容性 facade;新插件应使用通用渠道 SDK 子路径 |
| `plugin-sdk/telegram-account` | 面向跟踪所有者兼容性的已弃用 Telegram 账号解析兼容性 facade新插件应使用注入的运行时帮助器或通用渠道 SDK 子路径 |
| `plugin-sdk/interactive-runtime` | 语义消息呈现、递送和旧版交互式回复帮助器。见 [Message Presentation](/zh-CN/plugins/message-presentation) |
| `plugin-sdk/channel-inbound` | 入站防抖、提及匹配、提及策略帮助器和信封帮助器的兼容性 barrel |
| `plugin-sdk/channel-inbound-debounce` | 窄入站防抖帮助器 |
| `plugin-sdk/channel-mention-gating` | 不包含更宽入站运行时表面的窄提及策略、提及标记和提及文本帮助器 |
| `plugin-sdk/channel-envelope` | 窄入站信封格式化帮助器 |
| `plugin-sdk/channel-location` | 渠道位置上下文和格式化帮助器 |
| `plugin-sdk/channel-logging` | 入站丢弃和 typing/ack 失败的渠道日志帮助器 |
| `plugin-sdk/channel-send-result` | 回复结果类型 |
| `plugin-sdk/channel-actions` | 渠道消息操作辅助工具,以及为插件兼容性保留的已弃用原生 schema 辅助工具 |
| `plugin-sdk/channel-route` | 共享路由规范化、解析器驱动的目标解析、线程 ID 字符串化、去重/紧凑路由键、已解析目标类型,以及路由/目标比较辅助工具 |
| `plugin-sdk/channel-targets` | 目标解析辅助工具;路由比较调用方应使用 `plugin-sdk/channel-route` |
| `plugin-sdk/channel-actions` | 渠道消息操作帮助器,以及为插件兼容性保留的已弃用原生 schema 帮助器 |
| `plugin-sdk/channel-route` | 共享路由规范化、解析器驱动的目标解析、线程 ID 字符串化、去重/紧凑路由键、已解析目标类型和路由/目标比较帮助器 |
| `plugin-sdk/channel-targets` | 目标解析帮助器;路由比较调用方应使用 `plugin-sdk/channel-route` |
| `plugin-sdk/channel-contract` | 渠道契约类型 |
| `plugin-sdk/channel-feedback` | 反馈/reaction 接线 |
| `plugin-sdk/channel-secret-runtime` | 窄 secret 契约辅助工具,例如 `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`,以及 secret 目标类型 |
| `plugin-sdk/channel-secret-runtime` | 窄密钥契约帮助器,例如 `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment` 和密钥目标类型 |
</Accordion>
<Accordion title="提供商子路径">
| 子路径 | 主要导出 |
| --- | --- |
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
| `plugin-sdk/lmstudio` | 支持的 LM Studio 提供商门面,用于设置、目录发现和运行时模型准备 |
| `plugin-sdk/lmstudio-runtime` | 支持的 LM Studio 运行时门面,用于本地服务器默认值、模型发现、请求标头和已加载模型辅助工具 |
| `plugin-sdk/provider-setup` | 精选的本地/自托管提供商设置辅助工具 |
| `plugin-sdk/self-hosted-provider-setup` | 专注于 OpenAI 兼容自托管提供商的设置辅助工具 |
| `plugin-sdk/cli-backend` | CLI 后端默认值 + watchdog 常量 |
| `plugin-sdk/provider-auth-runtime` | 提供商插件的运行时 API 密钥解析辅助工具 |
| `plugin-sdk/provider-auth-api-key` | API 密钥新手引导/配置文件写入辅助工具,例如 `upsertApiKeyProfile` |
| `plugin-sdk/lmstudio` | 支持的 LM Studio 提供商门面,用于设置、目录发现和运行时模型准备 |
| `plugin-sdk/lmstudio-runtime` | 支持的 LM Studio 运行时门面,用于本地服务器默认值、模型发现、请求标头和已加载模型助手 |
| `plugin-sdk/provider-setup` | 精选的本地/自托管提供商设置助手 |
| `plugin-sdk/self-hosted-provider-setup` | 聚焦于兼容 OpenAI 的自托管提供商设置助手 |
| `plugin-sdk/cli-backend` | CLI 后端默认值 + 看门狗常量 |
| `plugin-sdk/provider-auth-runtime` | 提供商插件的运行时 API 密钥解析助手 |
| `plugin-sdk/provider-auth-api-key` | API 密钥新手引导/配置文件写入助手,例如 `upsertApiKeyProfile` |
| `plugin-sdk/provider-auth-result` | 标准 OAuth 认证结果构建器 |
| `plugin-sdk/provider-auth-login` | 提供商插件的共享交互式登录辅助工具 |
| `plugin-sdk/provider-env-vars` | 提供商认证环境变量查找辅助工具 |
| `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`、共享重放策略构建器、提供商端点辅助工具,以及模型 ID 规范化辅助工具,例如 `normalizeNativeXaiModelId` |
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, 共享重放策略构建器、提供商端点助手,以及模型 ID 规范化助手,例如 `normalizeNativeXaiModelId` |
| `plugin-sdk/provider-catalog-runtime` | 提供商目录增强运行时钩子,以及用于契约测试的插件提供商注册表接缝 |
| `plugin-sdk/provider-catalog-shared` | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `buildManifestModelProviderConfig`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
| `plugin-sdk/provider-http` | 通用提供商 HTTP/端点能力辅助工具、提供商 HTTP 错误,以及音频转录 multipart 表单辅助工具 |
| `plugin-sdk/provider-web-fetch-contract` | 精简的 Web 抓取配置/选择契约辅助工具,例如 `enablePluginInConfig``WebFetchProviderPlugin` |
| `plugin-sdk/provider-web-fetch` | Web 抓取提供商注册/缓存辅助工具 |
| `plugin-sdk/provider-web-search-config-contract` | 面向不需要插件启用接线的提供商的精简 Web 搜索配置/凭证辅助工具 |
| `plugin-sdk/provider-web-search-contract` | 精简的 Web 搜索配置/凭证契约辅助工具,例如 `createWebSearchProviderContractFields`、`enablePluginInConfig`、`resolveProviderWebSearchPluginConfig`,以及作用域凭证设置器/获取器 |
| `plugin-sdk/provider-web-search` | Web 搜索提供商注册/缓存/运行时辅助工具 |
| `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/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot 包装器辅助工具 |
| `plugin-sdk/provider-transport-runtime` | 原生提供商传输辅助工具,例如受保护的抓取、传输消息转换和可写传输事件流 |
| `plugin-sdk/provider-onboard` | 新手引导配置补丁辅助工具 |
| `plugin-sdk/global-singleton` | 进程本地 singleton/map/cache 辅助工具 |
| `plugin-sdk/group-activation` | 精简的群组激活模式和命令解析辅助工具 |
| `plugin-sdk/provider-http` | 通用提供商 HTTP/端点能力助手、提供商 HTTP 错误,以及音频转录 multipart 表单助手 |
| `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 搜索配置/凭证助手 |
| `plugin-sdk/provider-web-search-contract` | 窄作用域的 Web 搜索配置/凭证契约助手,例如 `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig`,以及限定作用域的凭证设置器/获取器 |
| `plugin-sdk/provider-web-search` | Web 搜索提供商注册/缓存/运行时助手 |
| `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/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot 包装器助手 |
| `plugin-sdk/provider-transport-runtime` | 原生提供商传输助手,例如受保护的 fetch、传输消息转换和可写传输事件流 |
| `plugin-sdk/provider-onboard` | 新手引导配置补丁助手 |
| `plugin-sdk/global-singleton` | 进程本地单例/map/缓存助手 |
| `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` | 审批者解析和同聊天操作认证辅助工具 |
| `plugin-sdk/approval-client-runtime` | 原生 exec 审批配置文件/过滤器辅助工具 |
| `plugin-sdk/approval-auth-runtime` | 审批人解析和同一聊天操作认证助手 |
| `plugin-sdk/approval-client-runtime` | 原生 exec 审批配置文件/过滤器助手 |
| `plugin-sdk/approval-delivery-runtime` | 原生审批能力/投递适配器 |
| `plugin-sdk/approval-gateway-runtime` | 共享审批 Gateway 网关解析辅助工具 |
| `plugin-sdk/approval-handler-adapter-runtime` | 面向热渠道入口点的轻量级原生审批适配器加载辅助工具 |
| `plugin-sdk/approval-handler-runtime` | 更广泛的审批处理器运行时辅助工具;当更精简的适配器/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` | 不包含宽泛测试 barrel 的精简渠道契约测试辅助工具 |
| `plugin-sdk/command-auth-native` | 原生命令认证、动态参数菜单格式化,以及原生会话目标辅助工具 |
| `plugin-sdk/command-detection` | 共享命令检测辅助工具 |
| `plugin-sdk/command-primitives-runtime` | 用于热渠道路径的轻量级命令文本谓词 |
| `plugin-sdk/command-surface` | 命令正文规范化和命令表面辅助工具 |
| `plugin-sdk/approval-gateway-runtime` | 共享审批 Gateway 网关解析助手 |
| `plugin-sdk/approval-handler-adapter-runtime` | 面向热渠道入口点的轻量级原生审批适配器加载助手 |
| `plugin-sdk/approval-handler-runtime` | 更广泛的审批处理器运行时助手;当更窄的适配器/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` | 不含宽泛测试 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` | 渠道/插件密钥表面的精简密钥契约收集辅助工具 |
| `plugin-sdk/secret-ref-runtime` | 用于密钥契约/配置解析的精简 `coerceSecretRef` 和 SecretRef 类型辅助工具 |
| `plugin-sdk/security-runtime` | 共享信任、私信门控、外部内容、敏感文本脱敏、常量时间密钥比较,以及密钥收集辅助工具 |
| `plugin-sdk/ssrf-policy` | 主机允许列表和私有网络 SSRF 策略辅助工具 |
| `plugin-sdk/ssrf-dispatcher` | 不包含宽泛基础设施运行时表面的精简固定 dispatcher 辅助工具 |
| `plugin-sdk/ssrf-runtime` | 固定 dispatcher、SSRF 保护的抓取、SSRF 错误,以及 SSRF 策略辅助工具 |
| `plugin-sdk/secret-input` | 密钥输入解析辅助工具 |
| `plugin-sdk/webhook-ingress` | Webhook 请求/目标辅助工具,以及原始 websocket/body 强制转换 |
| `plugin-sdk/webhook-request-guards` | 请求正文大小/超时辅助工具 |
| `plugin-sdk/channel-secret-runtime` | 面向渠道/插件密钥表面的窄作用域密钥契约收集助手 |
| `plugin-sdk/secret-ref-runtime` | 面向密钥契约/配置解析的窄作用域 `coerceSecretRef` 和 SecretRef 类型助手 |
| `plugin-sdk/security-runtime` | 共享信任、私信门控、外部内容、敏感文本遮蔽、常量时间密钥比较和密钥收集助手 |
| `plugin-sdk/ssrf-policy` | 主机允许列表和专用网络 SSRF 策略助手 |
| `plugin-sdk/ssrf-dispatcher` | 不含宽泛基础设施运行时表面的窄作用域固定 dispatcher 助手 |
| `plugin-sdk/ssrf-runtime` | 固定 dispatcher、受 SSRF 保护的 fetch、SSRF 错误和 SSRF 策略助手 |
| `plugin-sdk/secret-input` | 密钥输入解析助手 |
| `plugin-sdk/webhook-ingress` | Webhook 请求/目标助手,以及原始 websocket/body 强制转换 |
| `plugin-sdk/webhook-request-guards` | 请求正文大小/超时助手 |
</Accordion>
<Accordion title="运行时和存储子路径">
| 子路径 | 主要导出 |
| 子路径 | 关键导出 |
| --- | --- |
| `plugin-sdk/runtime` | 广泛的运行时/日志/备份/插件安装辅助函数 |
| `plugin-sdk/runtime-env` | 精简的运行时环境、日志记录器、超时、重试和退避辅助函数 |
| `plugin-sdk/browser-config` | 支持的浏览器配置门面,用于规范化配置文件/默认值、CDP URL 解析和浏览器控制身份验证辅助函数 |
| `plugin-sdk/runtime` | 宽泛的运行时/日志记录/备份/插件安装辅助函数 |
| `plugin-sdk/runtime-env` | 精简的运行时环境、日志器、超时、重试和退避辅助函数 |
| `plugin-sdk/browser-config` | 支持的浏览器配置门面,用于规范化配置文件/默认值、CDP URL 解析和浏览器控制鉴权辅助函数 |
| `plugin-sdk/channel-runtime-context` | 通用渠道运行时上下文注册和查找辅助函数 |
| `plugin-sdk/runtime-store` | `createPluginRuntimeStore` |
| `plugin-sdk/plugin-runtime` | 共享的插件命令/钩子/http/交互式辅助函数 |
| `plugin-sdk/hook-runtime` | 共享的 Webhook/内部钩子管线辅助函数 |
| `plugin-sdk/hook-runtime` | 共享的 webhook/内部钩子流水线辅助函数 |
| `plugin-sdk/lazy-runtime` | 惰性运行时导入/绑定辅助函数,例如 `createLazyRuntimeModule`、`createLazyRuntimeMethod` 和 `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | 进程执行辅助函数 |
| `plugin-sdk/cli-runtime` | CLI 格式化、等待、版本、参数调用和惰性命令组辅助函数 |
| `plugin-sdk/gateway-runtime` | Gateway 网关客户端、事件循环就绪客户端启动辅助函数、Gateway 网关 CLI RPC、Gateway 网关协议错误和渠道 Status 补丁辅助函数 |
| `plugin-sdk/config-types` | 仅类型的配置接口,用于插件配置形状,例如 `OpenClawConfig`渠道/提供商配置类型 |
| `plugin-sdk/gateway-runtime` | Gateway 网关客户端、事件循环就绪客户端启动辅助函数、Gateway 网关 CLI RPC、Gateway 网关协议错误和渠道状态补丁辅助函数 |
| `plugin-sdk/config-types` | 插件配置形状的仅类型配置表面,例如 `OpenClawConfig` 以及渠道/提供商配置类型 |
| `plugin-sdk/plugin-config-runtime` | 运行时插件配置查找辅助函数,例如 `requireRuntimeConfig`、`resolvePluginConfigObject` 和 `resolveLivePluginConfigObject` |
| `plugin-sdk/config-mutation` | 事务性配置变更辅助函数,例如 `mutateConfigFile`、`replaceConfigFile` 和 `logConfigUpdated` |
| `plugin-sdk/runtime-config-snapshot` | 当前进程配置快照辅助函数,例如 `getRuntimeConfig`、`getRuntimeConfigSnapshot` 和测试快照设置器 |
| `plugin-sdk/telegram-command-config` | Telegram 命令名称/描述规范化与重复/冲突检查,即使内置的 Telegram 契约接口不可用也可使用 |
| `plugin-sdk/text-autolink-runtime` | 文件引用自动链接检测,无需广泛的文本运行时桶形导出 |
| `plugin-sdk/approval-runtime` | 执行/插件审批辅助函数、审批能力构建器、身份验证/配置文件辅助函数、原生路由/运行时辅助函数,以及结构化审批显示路径格式化 |
| `plugin-sdk/telegram-command-config` | Telegram 命令名称/描述规范化以及重复/冲突检查,即使内置 Telegram 合约表面不可用也可使用 |
| `plugin-sdk/text-autolink-runtime` | 无需宽泛 text-runtime 桶即可进行文件引用自动链接检测 |
| `plugin-sdk/approval-runtime` | 执行/插件审批辅助函数、审批能力构建器、鉴权/配置文件辅助函数、原生路由/运行时辅助函数,以及结构化审批显示路径格式化 |
| `plugin-sdk/reply-runtime` | 共享的入站/回复运行时辅助函数、分块、分发、心跳、回复规划器 |
| `plugin-sdk/reply-dispatch-runtime` | 精简的回复分发/完成和话标签辅助函数 |
| `plugin-sdk/reply-dispatch-runtime` | 精简的回复分发/完成和话标签辅助函数 |
| `plugin-sdk/reply-history` | 共享的短窗口回复历史辅助函数和标记,例如 `buildHistoryContext`、`HISTORY_CONTEXT_MARKER`、`recordPendingHistoryEntry` 和 `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/reply-reference` | `createReplyReferencePlanner` |
| `plugin-sdk/reply-chunking` | 精简的文本/Markdown 分块辅助函数 |
@ -201,16 +203,16 @@ x-i18n:
| `plugin-sdk/cron-store-runtime` | Cron 存储路径/加载/保存辅助函数 |
| `plugin-sdk/state-paths` | 状态/OAuth 目录路径辅助函数 |
| `plugin-sdk/routing` | 路由/会话键/账号绑定辅助函数,例如 `resolveAgentRoute`、`buildAgentSessionKey` 和 `resolveDefaultAgentBoundAccountId` |
| `plugin-sdk/status-helpers` | 共享的渠道/账号 Status 摘要辅助函数、运行时状态默认值和问题元数据辅助函数 |
| `plugin-sdk/target-resolver-runtime` | 共享目标解析器辅助函数 |
| `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/param-readers` | 用工具/CLI 参数读取器 |
| `plugin-sdk/tool-payload` | 从工具结果对象中提取规范化载 |
| `plugin-sdk/request-url` | 从 fetch/request 类输入中提取字符串 URL |
| `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` | 子系统日志记录器和脱敏辅助函数 |
| `plugin-sdk/logging-core` | 子系统日志器和脱敏辅助函数 |
| `plugin-sdk/markdown-table-runtime` | Markdown 表格模式和转换辅助函数 |
| `plugin-sdk/model-session-runtime` | 模型/会话覆盖辅助函数,例如 `applyModelOverrideToSessionEntry``resolveAgentMaxConcurrent` |
| `plugin-sdk/talk-config-runtime` | Talk 提供商配置解析辅助函数 |
@ -219,115 +221,115 @@ x-i18n:
| `plugin-sdk/persistent-dedupe` | 磁盘支持的去重缓存辅助函数 |
| `plugin-sdk/acp-runtime` | ACP 运行时/会话和回复分发辅助函数 |
| `plugin-sdk/acp-runtime-backend` | 面向启动时加载插件的轻量级 ACP 后端注册和回复分发辅助函数 |
| `plugin-sdk/acp-binding-resolve-runtime` | 只读 ACP 绑定解析,无需生命周期启动导入 |
| `plugin-sdk/acp-binding-resolve-runtime` | 无生命周期启动导入的只读 ACP 绑定解析 |
| `plugin-sdk/agent-config-primitives` | 精简的智能体运行时配置架构原语 |
| `plugin-sdk/boolean-param` | 宽松布尔参数读取器 |
| `plugin-sdk/dangerous-name-runtime` | 危险名称匹配解析辅助函数 |
| `plugin-sdk/device-bootstrap` | 设备引导和配对令牌辅助函数 |
| `plugin-sdk/extension-shared` | 共享的被动渠道、Status 和环境代理辅助原语 |
| `plugin-sdk/models-provider-runtime` | `/models` 命令/提供商回复辅助函数 |
| `plugin-sdk/skill-commands-runtime` | Skill 命令列辅助函数 |
| `plugin-sdk/skill-commands-runtime` | Skill 命令列辅助函数 |
| `plugin-sdk/native-command-registry` | 原生命令注册表/构建/序列化辅助函数 |
| `plugin-sdk/agent-harness` | 面向低层智能体 harness 的实验性受信任插件接口harness 类型、活动运行 steer/abort 辅助函数、OpenClaw 工具桥接辅助函数、运行时计划工具策略辅助函数、终端结果分类、工具进度格式化/详情辅助函数,以及尝试结果实用工具 |
| `plugin-sdk/agent-harness` | 面向底层智能体 harness 的实验性受信插件表面harness 类型、活动运行引导/中止辅助函数、OpenClaw 工具桥接辅助函数、运行时计划工具策略辅助函数、终端结果分类、工具进度格式化/详情辅助函数和尝试结果工具函数 |
| `plugin-sdk/provider-zai-endpoint` | Z.AI 端点检测辅助函数 |
| `plugin-sdk/async-lock-runtime` | 用于小型运行时状态文件的进程本地异步锁辅助函数 |
| `plugin-sdk/channel-activity-runtime` | 渠道活动遥测辅助函数 |
| `plugin-sdk/concurrency-runtime` | 有界异步任务并发辅助函数 |
| `plugin-sdk/dedupe-runtime` | 内存去重缓存辅助函数 |
| `plugin-sdk/delivery-queue-runtime` | 出站待交付队列排空辅助函数 |
| `plugin-sdk/dedupe-runtime` | 内存去重缓存辅助函数 |
| `plugin-sdk/delivery-queue-runtime` | 出站待处理投递排空辅助函数 |
| `plugin-sdk/file-access-runtime` | 安全本地文件和媒体源路径辅助函数 |
| `plugin-sdk/heartbeat-runtime` | 心跳事件和可见性辅助函数 |
| `plugin-sdk/number-runtime` | 数值强制转换辅助函数 |
| `plugin-sdk/secure-random-runtime` | 安全令牌/UUID 辅助函数 |
| `plugin-sdk/system-event-runtime` | 系统事件队列辅助函数 |
| `plugin-sdk/transport-ready-runtime` | 传输就绪等待辅助函数 |
| `plugin-sdk/infra-runtime` | 已弃用的兼容性 shim请使用上方更聚焦的运行时子路径 |
| `plugin-sdk/infra-runtime` | 已弃用的兼容性垫片;请使用上面的聚焦运行时子路径 |
| `plugin-sdk/collection-runtime` | 小型有界缓存辅助函数 |
| `plugin-sdk/diagnostic-runtime` | 诊断标志、事件和跟踪上下文辅助函数 |
| `plugin-sdk/error-runtime` | 错误图、格式化、共享错误分类辅助函数、`isApprovalNotFoundError` |
| `plugin-sdk/fetch-runtime` | 包装 fetch、代理、EnvHttpProxyAgent 选项和固定查找辅助函数 |
| `plugin-sdk/runtime-fetch` | 支持 dispatcher 的运行时 fetch无需代理/受保护 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/fetch-runtime` | 包装后的 fetch、代理、EnvHttpProxyAgent 选项和固定查找辅助函数 |
| `plugin-sdk/runtime-fetch` | 支持 Dispatcher 的运行时 fetch代理/受保护 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/directory-runtime` | 配置支持的目录查询/去重 |
| `plugin-sdk/keyed-async-queue` | `KeyedAsyncQueue` |
</Accordion>
<Accordion title="能力测试子路径">
| 子路径 | 关键导出 |
<Accordion title="能力测试子路径">
| 子路径 | 主要导出 |
| --- | --- |
| `plugin-sdk/media-runtime` | 共享媒体获取/转换/存储辅助工具、由 ffprobe 支持的视频尺寸探测,以及媒体载荷构建器 |
| `plugin-sdk/media-store` | 精简媒体存储辅助工具,例如 `saveMediaBuffer` |
| `plugin-sdk/media-generation-runtime` | 共享媒体生成故障转移辅助工具、候选项选择,以及缺失模型消息 |
| `plugin-sdk/media-store` | 窄范围媒体存储辅助工具,例如 `saveMediaBuffer` |
| `plugin-sdk/media-generation-runtime` | 共享媒体生成故障转移辅助工具、候选项选择,以及缺失模型提示消息 |
| `plugin-sdk/media-understanding` | 媒体理解提供商类型,以及面向提供商的图像/音频辅助导出 |
| `plugin-sdk/text-runtime` | 共享文本/Markdown/日志辅助工具,例如去除智能体可见文本、Markdown 渲染/分块/表格辅助工具、脱敏辅助工具、指令标签辅助工具,以及安全文本实用工具 |
| `plugin-sdk/text-runtime` | 共享文本/Markdown/日志辅助工具,例如剥离智能体可见文本、Markdown 渲染/分块/表格辅助工具、脱敏辅助工具、指令标签辅助工具,以及安全文本工具 |
| `plugin-sdk/text-chunking` | 出站文本分块辅助工具 |
| `plugin-sdk/speech` | 语音提供商类型以及面向提供商的指令、注册表、验证、OpenAI 兼容 TTS 构建器和语音辅助导出 |
| `plugin-sdk/speech-core` | 共享语音提供商类型、注册表、指令、规范化和语音辅助导出 |
| `plugin-sdk/realtime-transcription` | 实时转录提供商类型、注册表辅助工具,以及共享 WebSocket 会话辅助工具 |
| `plugin-sdk/realtime-voice` | 实时语音提供商类型和注册表辅助工具 |
| `plugin-sdk/image-generation` | 图像生成提供商类型,以及图像资产/data URL 辅助工具和 OpenAI 兼容图像提供商构建器 |
| `plugin-sdk/image-generation-core` | 共享图像生成类型、故障转移、证和注册表辅助工具 |
| `plugin-sdk/image-generation-core` | 共享图像生成类型、故障转移、身份验证和注册表辅助工具 |
| `plugin-sdk/music-generation` | 音乐生成提供商/请求/结果类型 |
| `plugin-sdk/music-generation-core` | 共享音乐生成类型、故障转移辅助工具、提供商查找模型引用解析 |
| `plugin-sdk/music-generation-core` | 共享音乐生成类型、故障转移辅助工具、提供商查找,以及模型引用解析 |
| `plugin-sdk/video-generation` | 视频生成提供商/请求/结果类型 |
| `plugin-sdk/video-generation-core` | 共享视频生成类型、故障转移辅助工具、提供商查找模型引用解析 |
| `plugin-sdk/video-generation-core` | 共享视频生成类型、故障转移辅助工具、提供商查找,以及模型引用解析 |
| `plugin-sdk/webhook-targets` | Webhook 目标注册表和路由安装辅助工具 |
| `plugin-sdk/webhook-path` | Webhook 路径规范化辅助工具 |
| `plugin-sdk/web-media` | 共享远程/本地媒体加载辅助工具 |
| `plugin-sdk/zod` | 为插件 SDK 使用者重新导出的 `zod` |
| `plugin-sdk/testing` | 用于旧版插件测试的宽泛兼容性桶形导出。新的插件测试应改为导入聚焦的 SDK 子路径,例如 `plugin-sdk/agent-runtime-test-contracts`、`plugin-sdk/plugin-test-runtime`、`plugin-sdk/channel-test-helpers`、`plugin-sdk/test-env` 或 `plugin-sdk/test-fixtures` |
| `plugin-sdk/plugin-test-api` | 最小化的 `createTestPluginApi` 辅助工具,用于直接插件注册单元测试,无需导入仓库测试辅助桥接 |
| `plugin-sdk/agent-runtime-test-contracts` | 用于认证、投递、回退、工具钩子、提示词叠加、schema 和 transcript 投影测试的原生智能体运行时适配器契约夹具 |
| `plugin-sdk/channel-test-helpers` | 面向渠道的测试辅助工具,适用于通用动作/设置/Status 契约、目录断言、账号启动生命周期、send-config 线程处理、运行时 mock、Status 问题、出站投递和钩子注册 |
| `plugin-sdk/channel-target-testing` | 用于渠道测试的共享目标解析错误例套件 |
| `plugin-sdk/plugin-test-contracts` | 插件包、注册、公共制品、直接导入、运行时 API 和导入副作用契约辅助工具 |
| `plugin-sdk/provider-test-contracts` | 提供商运行时、认证、设备发现、新手引导、目录、向导、媒体能力、重放策略、实时 STT 实况音频、Web 搜索/获取和流式传输契约辅助工具 |
| `plugin-sdk/provider-http-test-mocks` | 可选择启用的 Vitest HTTP/认证 mock适用于测试 `plugin-sdk/provider-http` 的提供商测试 |
| `plugin-sdk/test-fixtures` | 通用 CLI 运行时捕获、沙箱上下文、Skills 写入器、智能体消息、系统事件、模块重载、内置插件路径、终端文本、分块、认证令牌和类型化用例夹具 |
| `plugin-sdk/testing` | 面向旧版插件测试的宽兼容性汇总入口。新的插件测试应改为导入聚焦的 SDK 子路径,例如 `plugin-sdk/agent-runtime-test-contracts`、`plugin-sdk/plugin-test-runtime`、`plugin-sdk/channel-test-helpers`、`plugin-sdk/test-env` 或 `plugin-sdk/test-fixtures` |
| `plugin-sdk/plugin-test-api` | 最小化的 `createTestPluginApi` 辅助工具,用于不导入仓库测试辅助桥接的直接插件注册单元测试 |
| `plugin-sdk/agent-runtime-test-contracts` | 用于身份验证、投递、回退、工具钩子、提示词覆盖、schema 和转录投影测试的原生智能体运行时适配器契约固件 |
| `plugin-sdk/channel-test-helpers` | 面向渠道的测试辅助工具,用于通用操作/设置/Status 契约、目录断言、账号启动生命周期、发送配置线程化、运行时 mock、Status 问题、出站投递和钩子注册 |
| `plugin-sdk/channel-target-testing` | 用于渠道测试的共享目标解析错误例套件 |
| `plugin-sdk/plugin-test-contracts` | 插件包、注册、公开构件、直接导入、运行时 API 和导入副作用契约辅助工具 |
| `plugin-sdk/provider-test-contracts` | 提供商运行时、身份验证、设备发现、新手引导、目录、向导、媒体能力、重放策略、实时 STT 现场音频、Web 搜索/获取和流契约辅助工具 |
| `plugin-sdk/provider-http-test-mocks` | 面向测试 `plugin-sdk/provider-http` 的提供商测试的可选 Vitest HTTP/身份验证 mock |
| `plugin-sdk/test-fixtures` | 通用 CLI 运行时捕获、沙箱上下文、skill 写入器、智能体消息、系统事件、模块重新加载、内置插件路径、终端文本、分块、身份验证令牌和类型化用例固件 |
| `plugin-sdk/test-node-mocks` | 聚焦的 Node 内置 mock 辅助工具,用于 Vitest `vi.mock("node:*")` 工厂内部 |
</Accordion>
<Accordion title="Memory 子路径">
| 子路径 | 关键导出 |
<Accordion title="内存子路径">
| 子路径 | 主要导出 |
| --- | --- |
| `plugin-sdk/memory-core` | 用于管理器/配置/文件/CLI 辅助工具的内置 memory-core 辅助表面 |
| `plugin-sdk/memory-core-engine-runtime` | Memory 索引/搜索运行时门面 |
| `plugin-sdk/memory-core-host-engine-foundation` | Memory host foundation engine 导出 |
| `plugin-sdk/memory-core-host-engine-embeddings` | Memory host 嵌入契约、注册表访问、本地提供商和通用批处理/远程辅助工具 |
| `plugin-sdk/memory-core-host-engine-qmd` | Memory host QMD engine 导出 |
| `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 密钥辅助工具 |
| `plugin-sdk/memory-core-host-events` | Memory host 事件日志辅助工具 |
| `plugin-sdk/memory-core-host-status` | Memory host Status 辅助工具 |
| `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 Status 辅助工具的厂商中立别名 |
| `plugin-sdk/memory-core` | 面向管理器/配置/文件/CLI 辅助工具的内置 memory-core 辅助表面 |
| `plugin-sdk/memory-core-engine-runtime` | 内存索引/搜索运行时门面 |
| `plugin-sdk/memory-core-host-engine-foundation` | 内存宿主 foundation 引擎导出 |
| `plugin-sdk/memory-core-host-engine-embeddings` | 内存宿主嵌入契约、注册表访问、本地提供商,以及通用批处理/远程辅助工具 |
| `plugin-sdk/memory-core-host-engine-qmd` | 内存宿主 QMD 引擎导出 |
| `plugin-sdk/memory-core-host-engine-storage` | 内存宿主存储引擎导出 |
| `plugin-sdk/memory-core-host-multimodal` | 内存宿主多模态辅助工具 |
| `plugin-sdk/memory-core-host-query` | 内存宿主查询辅助工具 |
| `plugin-sdk/memory-core-host-secret` | 内存宿主密钥辅助工具 |
| `plugin-sdk/memory-core-host-events` | 内存宿主事件日志辅助工具 |
| `plugin-sdk/memory-core-host-status` | 内存宿主 Status 辅助工具 |
| `plugin-sdk/memory-core-host-runtime-cli` | 内存宿主 CLI 运行时辅助工具 |
| `plugin-sdk/memory-core-host-runtime-core` | 内存宿主核心运行时辅助工具 |
| `plugin-sdk/memory-core-host-runtime-files` | 内存宿主文件/运行时辅助工具 |
| `plugin-sdk/memory-host-core` | 内存宿主核心运行时辅助工具的供应商中立别名 |
| `plugin-sdk/memory-host-events` | 内存宿主事件日志辅助工具的供应商中立别名 |
| `plugin-sdk/memory-host-files` | 内存宿主文件/运行时辅助工具的供应商中立别名 |
| `plugin-sdk/memory-host-markdown` | 面向内存相邻插件的共享托管 Markdown 辅助工具 |
| `plugin-sdk/memory-host-search` | 用于 search-manager 访问的活动内存运行时门面 |
| `plugin-sdk/memory-host-status` | 内存宿主 Status 辅助工具的供应商中立别名 |
</Accordion>
<Accordion title="留的内置辅助工具子路径">
目前没有保留的内置辅助工具 SDK 子路径。所有者专用
辅助工具位于所属插件包内,而可复用的 host 契约
<Accordion title="留的内置辅助工具子路径">
目前没有预留的内置辅助工具 SDK 子路径。所有者特定的
辅助工具位于所属插件包内,而可复用的宿主契约
使用通用 SDK 子路径,例如 `plugin-sdk/gateway-runtime`
`plugin-sdk/security-runtime``plugin-sdk/plugin-config-runtime`
</Accordion>
</AccordionGroup>
## 相关
## 相关内容
- [插件 SDK 概览](/zh-CN/plugins/sdk-overview)
- [插件 SDK 设置](/zh-CN/plugins/sdk-setup)