diff --git a/docs/zh-CN/plugins/hooks.md b/docs/zh-CN/plugins/hooks.md index 7425d34d2..7fd356621 100644 --- a/docs/zh-CN/plugins/hooks.md +++ b/docs/zh-CN/plugins/hooks.md @@ -1,26 +1,26 @@ --- read_when: - 你正在构建一个需要 before_tool_call、before_agent_reply、消息钩子或生命周期钩子的插件 - - 你需要阻止、重写或要求批准来自插件的工具调用 - - 你正在内部钩子和插件钩子之间做选择 -summary: 插件钩子:拦截智能体、工具、消息、会话和 Gateway 网关的生命周期事件 + - 你需要阻止、重写来自插件的工具调用,或要求对其进行批准 + - 你正在在内部钩子和插件钩子之间做选择 +summary: 插件钩子:拦截智能体、工具、消息、会话和 Gateway 网关生命周期事件 title: 插件钩子 x-i18n: - generated_at: "2026-04-28T11:58:43Z" + generated_at: "2026-04-28T17:17:03Z" model: gpt-5.5 provider: openai - source_hash: 7aa6284ea4033fd0da624a794bf7b8b62c0d93d1a4a5a1f7146c8aa55a1dd1c3 + source_hash: f600df47c67eb07d85b7b063f1189baf78a49efad727d8cadbd37f66745c4401 source_path: plugins/hooks.md workflow: 16 --- -Plugin 钩子是 OpenClaw 插件的进程内扩展点。当插件需要检查或更改智能体运行、工具调用、消息流、会话生命周期、子智能体路由、安装或 Gateway 网关启动时使用它们。 +插件钩子是 OpenClaw 插件的进程内扩展点。当插件需要检查或更改智能体运行、工具调用、消息流、会话生命周期、子智能体路由、安装或 Gateway 网关启动时使用它们。 -如果你想为 `/new`、`/reset`、`/stop`、`agent:bootstrap` 或 `gateway:startup` 等命令和 Gateway 网关事件使用一个小型、由操作员安装的 `HOOK.md` 脚本,请改用 [内部钩子](/zh-CN/automation/hooks)。 +当你需要一个由操作员安装的小型 `HOOK.md` 脚本来处理命令和 Gateway 网关事件时,例如 `/new`、`/reset`、`/stop`、`agent:bootstrap` 或 `gateway:startup`,请改用[内部钩子](/zh-CN/automation/hooks)。 ## 快速开始 -从你的插件入口使用 `api.on(...)` 注册带类型的插件钩子: +在你的插件入口中使用 `api.on(...)` 注册带类型的插件钩子: ```typescript import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry"; @@ -52,7 +52,12 @@ export default definePluginEntry({ }); ``` -钩子处理程序按 `priority` 降序依次运行。相同优先级的钩子保持注册顺序。 +钩子处理程序会按 `priority` 降序依次运行。相同优先级的钩子保留注册顺序。 + +`api.on(name, handler, opts?)` 接受: + +- `priority` — 处理程序顺序(数值越高越先运行)。 +- `timeoutMs` — 可选的单钩子预算。设置后,钩子运行器会在预算耗尽后中止该处理程序并继续下一个处理程序,而不是让缓慢的设置或召回工作消耗调用方配置的模型超时。省略它则使用钩子运行器通用应用的默认观察/决策超时。 每个钩子都会收到 `event.context.pluginConfig`,即注册该处理程序的插件的已解析配置。将它用于需要当前插件选项的钩子决策;OpenClaw 会按处理程序注入它,而不会改变其他插件看到的共享事件对象。 @@ -62,18 +67,18 @@ export default definePluginEntry({ **智能体轮次** -- `before_model_resolve` — 在加载会话消息之前覆盖提供商或模型 -- `agent_turn_prepare` — 消费排队的插件轮次注入,并在提示钩子之前添加同轮次上下文 -- `before_prompt_build` — 在模型调用之前添加动态上下文或系统提示文本 -- `before_agent_start` — 仅兼容的组合阶段;优先使用上面的两个钩子 -- **`before_agent_reply`** — 使用合成回复或静默短路模型轮次 -- **`before_agent_finalize`** — 检查自然最终答案并请求再执行一次模型传递 +- `before_model_resolve` — 在会话消息加载前覆盖提供商或模型 +- `agent_turn_prepare` — 消耗排队的插件轮次注入,并在提示钩子之前添加同一轮次上下文 +- `before_prompt_build` — 在模型调用前添加动态上下文或系统提示文本 +- `before_agent_start` — 仅兼容性的组合阶段;优先使用上面两个钩子 +- **`before_agent_reply`** — 使用合成回复或静默来短路模型轮次 +- **`before_agent_finalize`** — 检查自然最终答案并请求再进行一次模型传递 - `agent_end` — 观察最终消息、成功状态和运行时长 -- `heartbeat_prompt_contribution` — 为后台监控和生命周期插件添加仅限心跳的上下文 +- `heartbeat_prompt_contribution` — 为后台监控器和生命周期插件添加仅心跳上下文 **对话观察** -- `model_call_started` / `model_call_ended` — 观察已清理的提供商/模型调用元数据、计时、结果和有界请求 ID 哈希,不包含提示或响应内容 +- `model_call_started` / `model_call_ended` — 观察经过清理的提供商/模型调用元数据、计时、结果和有界请求 ID 哈希,不包含提示或响应内容 - `llm_input` — 观察提供商输入(系统提示、提示、历史记录) - `llm_output` — 观察提供商输出 @@ -86,12 +91,12 @@ export default definePluginEntry({ **消息和投递** -- **`inbound_claim`** — 在智能体路由之前认领入站消息(合成回复) +- **`inbound_claim`** — 在智能体路由前声明入站消息(合成回复) - `message_received` — 观察入站内容、发送者、线程和元数据 - **`message_sending`** — 重写出站内容或取消投递 - `message_sent` — 观察出站投递成功或失败 -- **`before_dispatch`** — 在渠道交接前检查或重写出站分派 -- **`reply_dispatch`** — 参与最终回复分派管线 +- **`before_dispatch`** — 在渠道交接前检查或重写出站分发 +- **`reply_dispatch`** — 参与最终回复分发管线 **会话和压缩** @@ -106,8 +111,8 @@ export default definePluginEntry({ **生命周期** - `gateway_start` / `gateway_stop` — 随 Gateway 网关启动或停止插件拥有的服务 -- `cron_changed` — 观察 Gateway 网关拥有的 cron 生命周期变化(已添加、已更新、已移除、已启动、已完成、已计划) -- **`before_install`** — 检查技能或插件安装扫描,并可选择阻止 +- `cron_changed` — 观察 Gateway 网关拥有的 cron 生命周期变更(已添加、已更新、已移除、已启动、已完成、已计划) +- **`before_install`** — 检查技能或插件安装扫描并可选择阻止 ## 工具调用策略 @@ -115,9 +120,9 @@ export default definePluginEntry({ - `event.toolName` - `event.params` -- 可选 `event.runId` -- 可选 `event.toolCallId` -- 上下文字段,例如 `ctx.agentId`、`ctx.sessionKey`、`ctx.sessionId`、`ctx.runId`、`ctx.jobId`(在 cron 驱动的运行中设置)以及诊断用 `ctx.trace` +- 可选的 `event.runId` +- 可选的 `event.toolCallId` +- 上下文字段,例如 `ctx.agentId`、`ctx.sessionKey`、`ctx.sessionId`、`ctx.runId`、`ctx.jobId`(在 cron 驱动的运行中设置)以及诊断用的 `ctx.trace` 它可以返回: @@ -142,41 +147,42 @@ type BeforeToolCallResult = { 规则: -- `block: true` 是终止性决策,会跳过更低优先级的处理程序。 -- `block: false` 会被视为无决策。 +- `block: true` 是终止性的,并跳过较低优先级的处理程序。 +- `block: false` 会被视为没有决策。 - `params` 会重写用于执行的工具参数。 -- `requireApproval` 会暂停智能体运行,并通过插件批准向用户询问。`/approve` 命令可以同时批准 exec 和插件批准。 -- 较低优先级的 `block: true` 仍然可以在较高优先级钩子请求批准之后阻止执行。 -- `onResolution` 接收已解析的批准决策,即 `allow-once`、`allow-always`、`deny`、`timeout` 或 `cancelled`。 +- `requireApproval` 会暂停智能体运行,并通过插件批准询问用户。`/approve` 命令可以同时批准 exec 和插件批准。 +- 较低优先级的 `block: true` 仍然可以在较高优先级钩子请求批准后阻止。 +- `onResolution` 会收到已解析的批准决策 — `allow-once`、`allow-always`、`deny`、`timeout` 或 `cancelled`。 -需要主机级策略的内置插件可以使用 `api.registerTrustedToolPolicy(...)` 注册受信任的工具策略。这些策略会在普通 `before_tool_call` 钩子和外部插件决策之前运行。仅将它们用于主机信任的门控,例如工作区策略、预算执行或保留工作流安全。外部插件应使用常规 `before_tool_call` 钩子。 +需要主机级策略的内置插件可以使用 `api.registerTrustedToolPolicy(...)` 注册受信任的工具策略。这些策略会在普通 `before_tool_call` 钩子之前以及外部插件决策之前运行。仅将它们用于主机信任的门控,例如工作区策略、预算执行或保留工作流安全。外部插件应使用普通 `before_tool_call` 钩子。 ### 工具结果持久化 -工具结果可以包含结构化 `details`,用于 UI 渲染、诊断、媒体路由或插件拥有的元数据。将 `details` 视为运行时元数据,而不是提示内容: +工具结果可以包含结构化的 `details`,用于 UI 渲染、诊断、媒体路由或插件拥有的元数据。将 `details` 视为运行时元数据,而不是提示内容: -- OpenClaw 会在提供商重放和压缩输入之前剥离 `toolResult.details`,因此元数据不会变成模型上下文。 -- 持久化的会话条目只保留有界 `details`。过大的 details 会被替换为紧凑摘要和 `persistedDetailsTruncated: true`。 -- `tool_result_persist` 和 `before_message_write` 会在最终持久化上限之前运行。钩子仍应保持返回的 `details` 小巧,并避免只在 `details` 中放置与提示相关的文本;将模型可见的工具输出放在 `content` 中。 +- OpenClaw 会在提供商重放和压缩输入前移除 `toolResult.details`,因此元数据不会成为模型上下文。 +- 持久化的会话条目仅保留有界的 `details`。过大的 details 会被紧凑摘要和 `persistedDetailsTruncated: true` 替换。 +- `tool_result_persist` 和 `before_message_write` 会在最终持久化上限之前运行。钩子仍应保持返回的 `details` 较小,并避免只把与提示相关的文本放在 `details` 中;将模型可见的工具输出放在 `content` 中。 ## 提示和模型钩子 新插件请使用特定阶段的钩子: -- `before_model_resolve`:只接收当前提示和附件元数据。返回 `providerOverride` 或 `modelOverride`。 -- `agent_turn_prepare`:接收当前提示、已准备的会话消息,以及为此会话抽取的任何严格一次性排队注入。返回 `prependContext` 或 `appendContext`。 +- `before_model_resolve`:仅接收当前提示和附件元数据。返回 `providerOverride` 或 `modelOverride`。 +- `agent_turn_prepare`:接收当前提示、已准备的会话消息,以及为此会话排空的任何恰好一次的排队注入。返回 `prependContext` 或 `appendContext`。 - `before_prompt_build`:接收当前提示和会话消息。返回 `prependContext`、`appendContext`、`systemPrompt`、`prependSystemContext` 或 `appendSystemContext`。 -- `heartbeat_prompt_contribution`:仅在心跳轮次运行,并返回 `prependContext` 或 `appendContext`。它面向需要在不更改用户发起轮次的情况下总结当前状态的后台监控。 +- `heartbeat_prompt_contribution`:仅在心跳轮次运行,并返回 `prependContext` 或 `appendContext`。它适用于需要汇总当前状态且不改变用户发起轮次的后台监控器。 -`before_agent_start` 会保留用于兼容。优先使用上面的显式钩子,这样你的插件就不会依赖旧版组合阶段。 +`before_agent_start` 保留用于兼容。优先使用上面的显式钩子,这样你的插件就不会依赖旧版组合阶段。 -当 OpenClaw 可以识别活动运行时,`before_agent_start` 和 `agent_end` 会包含 `event.runId`。相同值也可在 `ctx.runId` 上获得。Cron 驱动的运行还会暴露 `ctx.jobId`(发起 cron 作业的 ID),以便插件钩子可以将指标、副作用或状态限定到特定的计划作业。 +当 OpenClaw 可以识别活动运行时,`before_agent_start` 和 `agent_end` 会包含 `event.runId`。同一个值也可在 `ctx.runId` 上获得。Cron 驱动的运行还会暴露 `ctx.jobId`(发起的 cron 作业 ID),以便插件钩子可以将指标、副作用或状态限定到特定的计划作业。 -`agent_end` 是观察钩子,会在轮次结束后即发即忘地运行。钩子运行器会应用 30 秒超时,因此卡住的插件或嵌入端点不会让钩子 promise 永远挂起。超时会被记录,OpenClaw 会继续运行;除非插件也使用自己的 abort signal,否则它不会取消插件拥有的网络工作。 +`agent_end` 是观察钩子,并在轮次结束后以即发即弃方式运行。钩子运行器会应用 30 秒超时,因此卡住的插件或嵌入端点不能让钩子 promise 永久挂起。超时会被记录,OpenClaw 会继续;它不会取消插件拥有的网络工作,除非插件也使用自己的中止信号。 -使用 `model_call_started` 和 `model_call_ended` 处理不应接收原始提示、历史记录、响应、标头、请求正文或提供商请求 ID 的提供商调用遥测。这些钩子包含稳定元数据,例如 `runId`、`callId`、`provider`、`model`、可选 `api`/`transport`、终止态 `durationMs`/`outcome`,以及当 OpenClaw 可以派生有界提供商请求 ID 哈希时的 `upstreamRequestIdHash`。 +将 `model_call_started` 和 `model_call_ended` 用于不应接收原始提示、历史记录、响应、标头、请求正文或提供商请求 ID 的提供商调用遥测。这些钩子包含稳定的元数据,例如 `runId`、`callId`、`provider`、`model`、可选的 `api`/`transport`、终止性的 `durationMs`/`outcome`,以及 OpenClaw 可以推导出有界提供商请求 ID 哈希时的 `upstreamRequestIdHash`。 -`before_agent_finalize` 只在 harness 即将接受自然最终助手答案时运行。它不是 `/stop` 取消路径,也不会在用户中止轮次时运行。返回 `{ action: "revise", reason }` 可要求 harness 在最终确定前再执行一次模型传递,返回 `{ action: "finalize", reason? }` 可强制最终确定,或省略结果以继续。Codex 原生 `Stop` 钩子会作为 OpenClaw `before_agent_finalize` 决策中继到此钩子。 +`before_agent_finalize` 仅在 harness 即将接受自然最终助手答案时运行。它不是 `/stop` 取消路径,并且在用户中止轮次时不会运行。返回 `{ action: "revise", reason }` 以请求 harness 在最终化前再进行一次模型传递,返回 `{ action: +"finalize", reason? }` 以强制最终化,或省略结果以继续。Codex 原生 `Stop` 钩子会作为 OpenClaw `before_agent_finalize` 决策转发到此钩子中。 需要 `llm_input`、`llm_output`、`before_agent_finalize` 或 `agent_end` 的非内置插件必须设置: @@ -194,74 +200,94 @@ type BeforeToolCallResult = { } ``` -可按插件通过 `plugins.entries..hooks.allowPromptInjection=false` 禁用提示变更钩子和持久的下一轮注入。 +提示变更钩子和持久的下一轮次注入可以按插件通过 `plugins.entries..hooks.allowPromptInjection=false` 禁用。 -### 会话扩展和下一轮注入 +### 会话扩展和下一轮次注入 -工作流插件可以使用 `api.registerSessionExtension(...)` 持久化小型 JSON 兼容会话状态,并通过 Gateway 网关 `sessions.pluginPatch` 方法更新它。会话行会通过 `pluginExtensions` 投射已注册的扩展状态,让 Control UI 和其他客户端在不了解插件内部机制的情况下渲染插件拥有的 Status。 +工作流插件可以使用 `api.registerSessionExtension(...)` 持久化小型 JSON 兼容会话状态,并通过 Gateway 网关 `sessions.pluginPatch` 方法更新它。会话行会通过 `pluginExtensions` 投射已注册的扩展状态,使 Control UI 和其他客户端能够渲染插件拥有的状态,而不需要了解插件内部机制。 -当插件需要让持久上下文严格一次性到达下一次模型轮次时,使用 `api.enqueueNextTurnInjection(...)`。OpenClaw 会在提示钩子之前抽取排队注入,丢弃过期注入,并按插件通过 `idempotencyKey` 去重。这是批准恢复、策略摘要、后台监控增量和命令延续的正确扩展点;这些内容应在下一轮对模型可见,但不应成为永久系统提示文本。 +当插件需要让持久上下文恰好一次到达下一个模型轮次时,使用 `api.enqueueNextTurnInjection(...)`。OpenClaw 会在提示钩子之前排空排队的注入,丢弃过期注入,并按插件使用 `idempotencyKey` 去重。这是批准恢复、策略摘要、后台监控器增量,以及应在下一轮次对模型可见但不应成为永久系统提示文本的命令延续的正确扩展点。 -清理语义是契约的一部分。会话扩展清理和运行时生命周期清理回调会收到 `reset`、`delete`、`disable` 或 `restart`。主机会在 reset/delete/disable 时移除拥有插件的持久会话扩展状态和待处理下一轮注入;restart 会保留持久会话状态,同时清理回调让插件释放旧运行时世代的调度器作业、运行上下文和其他带外资源。 +清理语义是契约的一部分。会话扩展清理和运行时生命周期清理回调会收到 `reset`、`delete`、`disable` 或 `restart`。对于 reset/delete/disable,主机会移除所属插件的持久会话扩展状态和待处理的下一轮次注入;restart 会保留持久会话状态,同时清理回调允许插件释放旧运行时生成的调度器作业、运行上下文和其他带外资源。 ## 消息钩子 -将消息钩子用于渠道级路由和投递策略: +使用消息钩子处理渠道级路由和投递策略: -- `message_received`:观察入站内容、发送者、`threadId`、`messageId`、`senderId`、可选运行/会话关联和元数据。 +- `message_received`:观察入站内容、发送者、`threadId`、`messageId`、`senderId`、可选的运行/会话关联以及元数据。 - `message_sending`:重写 `content` 或返回 `{ cancel: true }`。 - `message_sent`:观察最终成功或失败。 -对于仅音频的 TTS 回复,即使渠道载荷没有可见文本/字幕,`content` 也可能包含隐藏的朗读转录文本。重写该 `content` 只会更新钩子可见的转录文本;它不会渲染为媒体字幕。 +对于仅音频 TTS 回复,即使渠道载荷没有可见文本/说明文字,`content` 也可能包含隐藏的口播转录。 +重写该 `content` 只会更新钩子可见的转录;它不会渲染为媒体说明文字。 -消息钩子上下文会在可用时暴露稳定的关联字段: +消息钩子上下文在可用时会暴露稳定的关联字段: `ctx.sessionKey`、`ctx.runId`、`ctx.messageId`、`ctx.senderId`、`ctx.trace`、 -`ctx.traceId`、`ctx.spanId`、`ctx.parentSpanId` 和 `ctx.callDepth`。在读取旧版元数据之前,优先使用这些一等字段。 +`ctx.traceId`、`ctx.spanId`、`ctx.parentSpanId` 和 `ctx.callDepth`。读取旧版元数据之前,优先使用 +这些一等字段。 -在使用渠道特定元数据之前,优先使用有类型的 `threadId` 和 `replyToId` 字段。 +在使用渠道特定元数据之前,优先使用类型化的 `threadId` 和 `replyToId` 字段。 决策规则: -- 带有 `cancel: true` 的 `message_sending` 是终止决策。 -- 带有 `cancel: false` 的 `message_sending` 会被视为未作决策。 -- 重写后的 `content` 会继续传递给较低优先级的钩子,除非后续钩子取消投递。 +- 带有 `cancel: true` 的 `message_sending` 是终止性决策。 +- 带有 `cancel: false` 的 `message_sending` 会被视为无决策。 +- 重写后的 `content` 会继续传递给较低优先级的钩子,除非后续钩子 + 取消投递。 ## 安装钩子 -`before_install` 会在内置的 Skills 和插件安装扫描之后运行。 -返回额外发现,或返回 `{ block: true, blockReason }` 以停止安装。 +`before_install` 会在内置扫描 Skills 和插件安装之后运行。 +返回额外发现,或返回 `{ block: true, blockReason }` 来停止 +安装。 -`block: true` 是终止决策。`block: false` 会被视为未作决策。 +`block: true` 是终止性决策。`block: false` 会被视为无决策。 ## Gateway 网关生命周期 -对于需要 Gateway 网关所管理状态的插件服务,使用 `gateway_start`。 +对于需要 Gateway 网关拥有的状态的插件服务,使用 `gateway_start`。 上下文会暴露 `ctx.config`、`ctx.workspaceDir` 和 `ctx.getCron?.()`,用于 -cron 检查和更新。使用 `gateway_stop` 清理长时间运行的资源。 +cron 检查和更新。使用 `gateway_stop` 清理长时间运行的 +资源。 -不要依赖内部 `gateway:startup` 钩子来处理插件拥有的运行时服务。 +不要依赖内部 `gateway:startup` 钩子来承载插件拥有的运行时 +服务。 -`cron_changed` 会在 Gateway 网关拥有的 cron 生命周期事件中触发,并带有类型化的事件载荷,覆盖 `added`、`updated`、`removed`、`started`、`finished` 和 `scheduled` 原因。该事件携带一个 `PluginHookGatewayCronJob` 快照(包括存在时的 `state.nextRunAtMs`、`state.lastRunStatus` 和 `state.lastError`),以及一个 `PluginHookGatewayCronDeliveryStatus`,其值为 `not-requested` | `delivered` | `not-delivered` | `unknown`。移除事件仍会携带已删除作业的快照,以便外部调度器协调状态。同步外部唤醒调度器时,使用运行时上下文中的 `ctx.getCron?.()` 和 `ctx.config`,并保持 OpenClaw 作为到期检查和执行的事实来源。 +`cron_changed` 会针对 Gateway 网关拥有的 cron 生命周期事件触发,并带有类型化的 +事件载荷,覆盖 `added`、`updated`、`removed`、`started`、`finished` +和 `scheduled` 原因。该事件携带一个 `PluginHookGatewayCronJob` +快照(存在时包含 `state.nextRunAtMs`、`state.lastRunStatus` 和 +`state.lastError`),以及一个 `PluginHookGatewayCronDeliveryStatus` +值:`not-requested` | `delivered` | `not-delivered` | `unknown`。已移除 +事件仍会携带已删除的作业快照,以便外部调度器能够 +协调状态。同步外部唤醒调度器时,使用运行时 +上下文中的 `ctx.getCron?.()` 和 `ctx.config`,并让 OpenClaw 作为 +到期检查和执行的事实来源。 -## 即将弃用 +## 即将废弃 -少数与钩子相邻的表面已弃用但仍受支持。请在下一个主版本发布前迁移: +少数与钩子相邻的表面已废弃但仍受支持。请在下一个主版本发布前 +迁移: -- **明文渠道信封**,位于 `inbound_claim` 和 `message_received` - 处理器中。请读取 `BodyForAgent` 和结构化用户上下文块,而不是解析扁平信封文本。参见 - [明文渠道信封 → BodyForAgent](/zh-CN/plugins/sdk-migration#active-deprecations)。 -- **`before_agent_start`** 为兼容性而保留。新插件应使用 - `before_model_resolve` 和 `before_prompt_build`,而不是组合阶段。 -- **`before_tool_call` 中的 `onResolution`** 现在使用有类型的 - `PluginApprovalResolution` 联合类型(`allow-once` / `allow-always` / `deny` / - `timeout` / `cancelled`),而不是自由形式的 `string`。 +- **纯文本渠道信封**,位于 `inbound_claim` 和 `message_received` + 处理程序中。请读取 `BodyForAgent` 和结构化用户上下文块, + 而不是解析扁平信封文本。参见 + [纯文本渠道信封 → BodyForAgent](/zh-CN/plugins/sdk-migration#active-deprecations)。 +- **`before_agent_start`** 仍保留用于兼容性。新插件应改用 + `before_model_resolve` 和 `before_prompt_build`,而不是组合 + 阶段。 +- **`before_tool_call` 中的 `onResolution`** 现在使用类型化的 + `PluginApprovalResolution` 联合(`allow-once` / `allow-always` / `deny` / + `timeout` / `cancelled`),而不是自由格式的 `string`。 -完整列表包括内存能力注册、提供商思考配置文件、外部身份验证提供商、提供商发现类型、任务运行时访问器,以及 `command-auth` → `command-status` 重命名,请参见 -[插件 SDK 迁移 → 当前弃用项](/zh-CN/plugins/sdk-migration#active-deprecations)。 +完整列表包括内存能力注册、提供商思考 +配置文件、外部认证提供商、提供商设备发现类型、任务运行时 +访问器,以及 `command-auth` → `command-status` 重命名;请参见 +[插件 SDK 迁移 → 活跃废弃项](/zh-CN/plugins/sdk-migration#active-deprecations)。 -## 相关内容 +## 相关 -- [插件 SDK 迁移](/zh-CN/plugins/sdk-migration) — 当前弃用项和移除时间线 +- [插件 SDK 迁移](/zh-CN/plugins/sdk-migration) — 活跃废弃项和移除时间线 - [构建插件](/zh-CN/plugins/building-plugins) - [插件 SDK 概览](/zh-CN/plugins/sdk-overview) - [插件入口点](/zh-CN/plugins/sdk-entrypoints)