正在发生的变化
旧的插件系统提供了两个开放面,让插件可以从单一入口导入所需的任何内容:openclaw/plugin-sdk/compat- 单个导入,重新导出数十个 辅助工具。它的引入是为了在新插件架构构建期间让旧的基于 hook 的插件继续工作。openclaw/plugin-sdk/infra-runtime- 一个宽泛的运行时辅助工具桶, 混合了系统事件、心跳状态、投递队列、fetch/proxy 辅助工具、 文件辅助工具、审批类型以及不相关的实用工具。openclaw/plugin-sdk/config-runtime- 一个宽泛的配置兼容桶, 在迁移窗口期间仍保留已弃用的直接加载/写入辅助工具。openclaw/extension-api- 一个桥接层,让插件可以直接访问 主机侧辅助工具,例如嵌入式代理运行器。api.registerEmbeddedExtensionFactory(...)- 一个已移除的仅适用于 embedded-runner 的捆绑 扩展 hook,可以观察诸如tool_result之类的 embedded-runner 事件。
为什么会这样改
旧方案带来了这些问题:- 启动缓慢 - 导入一个辅助工具会加载数十个无关模块
- 循环依赖 - 宽泛的重新导出很容易创建导入环
- API 面不清晰 - 无法判断哪些导出是稳定的,哪些是内部的
openclaw/plugin-sdk/\<subpath\>)都是一个小型、自包含的模块,具有明确用途和文档化契约。
捆绑通道的旧 provider 便利接缝也已经移除。带通道品牌的辅助接缝是私有的单仓库快捷方式,不是稳定的插件契约。请改用更窄的通用 SDK 子路径。在捆绑插件工作区内部,将 provider 自有的辅助工具保留在该插件自己的 api.ts 或 runtime-api.ts 中。
当前的捆绑 provider 示例:
- Anthropic 将 Claude 专用流式辅助工具保留在自己的
api.ts/contract-api.ts接缝中 - OpenAI 将 provider 构建器、默认模型辅助工具以及实时 provider 构建器保留在自己的
api.ts中 - OpenRouter 将 provider 构建器以及 onboarding/config 辅助工具保留在自己的
api.ts中
Talk 和实时语音迁移计划
实时语音、电话、会议和浏览器 Talk 代码正在从 表面局部的轮次记账迁移到由openclaw/plugin-sdk/realtime-voice 导出的共享 Talk 会话控制器。新的控制器负责通用 Talk 事件封装、当前轮次状态、捕获状态、输出音频状态、最近事件历史以及过期轮次拒绝。provider 插件应继续负责各自供应商的实时会话;表面插件应继续负责捕获、播放、电话和会议的特定差异。
这次 Talk 迁移是有意进行的“干净破坏”:
- 将共享控制器/运行时原语保留在
plugin-sdk/realtime-voice中。 - 将捆绑表面迁移到共享控制器上:浏览器中继、 托管房间交接、语音通话实时、语音通话流式 STT、Google Meet 实时,以及原生按住说话。
- 将旧的 Talk RPC 家族替换为最终的
talk.session.*和talk.client.*API。 - 在 Gateway 的
hello-ok.features.events中宣布一个在线 Talk 事件通道:talk.event。 - 删除旧的实时 HTTP 端点以及任何请求时指令 覆盖路径。
createTalkEventSequencer(...),除非它正在实现低层适配器或测试夹具。请优先使用共享控制器,这样就不能在没有轮次 id 的情况下发出轮次范围内的事件,过期的 turnEnd /
turnCancel 调用也不能清除更新的当前轮次,并且输出音频生命周期事件能在电话、会议、浏览器中继、托管房间交接和原生 Talk 客户端之间保持一致。
目标公共 API 形态如下:
talk.client.create,
因为浏览器负责 provider 协商和媒体传输,而 Gateway 负责凭据、指令和工具策略。talk.session.* 是用于 gateway-relay 实时、gateway-relay 转写以及 managed-room 原生 STT/TTS 会话的通用 Gateway 托管表面。
把实时选择器放在 talk.provider /
talk.providers 旁边的旧配置应使用 openclaw doctor --fix 修复;运行时 Talk 不会把语音/TTS provider 配置重新解释为实时 provider 配置。
支持的 talk.session.create 组合有意保持很小:
| 模式 | 传输 | 大脑 | 所有者 | 说明 |
|---|---|---|---|---|
realtime | gateway-relay | agent-consult | Gateway | 通过 Gateway 桥接的全双工 provider 音频;工具调用通过 agent-consult 工具路由。 |
transcription | gateway-relay | none | Gateway | 仅流式 STT;调用方发送输入音频并接收转写事件。 |
stt-tts | managed-room | agent-consult | 原生/客户端房间 | 按住说话和对讲机风格的房间,由客户端负责捕获/播放,Gateway 负责轮次状态。 |
stt-tts | managed-room | direct-tools | 原生/客户端房间 | 仅管理员可用的房间模式,供可信的一方表面直接执行 Gateway 工具操作。 |
| 旧接口 | 新接口 |
|---|---|
talk.realtime.session | talk.client.create |
talk.realtime.toolCall | talk.client.toolCall |
talk.realtime.relayAudio | talk.session.appendAudio |
talk.realtime.relayCancel | talk.session.cancelOutput or talk.session.cancelTurn |
talk.realtime.relayToolResult | talk.session.submitToolResult |
talk.realtime.relayStop | talk.session.close |
talk.transcription.session | talk.session.create({ mode: "transcription" }) |
talk.transcription.relayAudio | talk.session.appendAudio |
talk.transcription.relayCancel | talk.session.cancelTurn |
talk.transcription.relayStop | talk.session.close |
talk.handoff.create | talk.session.create({ transport: "managed-room" }) |
talk.handoff.join | talk.session.join |
talk.handoff.revoke | talk.session.close |
| 方法 | 适用范围 | 契约 |
|---|---|---|
talk.session.appendAudio | realtime/gateway-relay, transcription/gateway-relay | 向同一 Gateway 连接所拥有的 provider 会话追加一个 base64 PCM 音频块。 |
talk.session.startTurn | stt-tts/managed-room | 开始一个 managed-room 用户轮次。 |
talk.session.endTurn | stt-tts/managed-room | 在过期轮次验证之后结束当前活动轮次。 |
talk.session.cancelTurn | all Gateway-owned sessions | 取消某个轮次正在进行的捕获/provider/agent/TTS 工作。 |
talk.session.cancelOutput | realtime/gateway-relay | 停止助手音频输出,不一定结束用户轮次。 |
talk.session.submitToolResult | realtime/gateway-relay | 完成由中继发出的 provider 工具调用;若要临时输出,请传入 options.willContinue,或传入 options.suppressResponse 以在不需要另一条助手回复的情况下满足该调用。 |
talk.session.steer | agent-backed Talk sessions | 向从 Talk 会话解析得到的当前嵌入式运行发送口头的 status、steer、cancel 或 followup 控制。 |
talk.session.close | all unified sessions | 停止中继会话或撤销 managed-room 状态,然后忘记统一会话 id。 |
兼容性政策
对于外部插件,兼容性工作遵循以下顺序:- 添加新的契约
- 通过兼容适配器继续保持旧行为
- 发出诊断或警告,说明旧路径和替代路径
- 在测试中覆盖两条路径
- 记录弃用和迁移路径
- 仅在公布的迁移窗口之后才移除,通常是在某个大版本中
pnpm plugins:boundary-report 审核当前迁移队列。使用 pnpm plugins:boundary-report:summary 获取简要计数,使用 --owner <id> 查看单个插件或兼容性负责人,使用 pnpm plugins:boundary-report:ci 让 CI 在存在待处理兼容记录、跨负责人保留的 SDK 导入或未使用的保留 SDK 子路径时失败。该报告会按移除日期分组已弃用的兼容记录,统计本地代码/文档引用,展示跨负责人保留的 SDK 导入,并汇总私有内存主机 SDK 桥接,以便兼容性清理保持明确,而不是依赖临时搜索。保留的 SDK 子路径必须具有已追踪的负责人使用情况;未使用的保留辅助导出应从公共 SDK 中移除。
如果某个清单字段仍被接受,插件作者可以继续使用它,直到文档和诊断另有说明。新代码应优先使用文档化的替代方案,但现有插件在常规次版本发布期间不应被破坏。
如何迁移
迁移运行时配置的加载/写入辅助工具
api.runtime.config.loadConfig() 和
api.runtime.config.writeConfigFile(...)。优先使用已经传入当前调用路径的配置。
需要当前进程快照的长生命周期处理器可以使用 api.runtime.config.current()。
长生命周期 agent 工具应在 execute 中使用工具上下文的 ctx.getRuntimeConfig(),
这样即使某个工具是在配置写入之前创建的,也仍然能够看到刷新后的运行时配置。配置写入必须通过事务型辅助工具,并选择写后策略:afterWrite: { mode: "restart", reason: "..." },
只有当调用方负责后续流程并且有意抑制重载规划器时,才使用
afterWrite: { mode: "none", reason: "..." }。
变更结果会包含一个用于测试和日志记录的类型化 followUp 摘要;
gateway 仍然负责应用或调度重启。
在迁移窗口期间,loadConfig 和 writeConfigFile 仍作为已弃用的兼容
辅助工具供外部插件使用,并会通过
runtime-config-load-write 兼容代码只警告一次。捆绑插件和仓库
运行时代码受到 pnpm check:deprecated-api-usage 和
pnpm check:no-runtime-action-load-config 的扫描防护:新的生产插件
用法会直接失败,直接配置写入会失败,gateway 服务端方法必须使用请求时运行时快照,
运行时 channel send/action/client 辅助工具必须从其边界接收配置,
且长生命周期运行时模块不允许存在任何环境中的 loadConfig() 调用。新的插件代码还应避免导入宽泛的 openclaw/plugin-sdk/config-runtime 兼容总入口。请使用与任务匹配的窄 SDK 子路径:| 需求 | 导入 |
|---|---|
配置类型,例如 OpenClawConfig | openclaw/plugin-sdk/config-contracts |
| 已加载配置断言和插件入口配置查找 | 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 |
| 密钥输入解析 | openclaw/plugin-sdk/secret-input-runtime |
| 模型/会话覆盖 | openclaw/plugin-sdk/model-session-runtime |
Migrate embedded tool-result extensions to middleware
api.registerEmbeddedExtensionFactory(...) tool-result handlers with
runtime-neutral middleware.将基于审批的处理器迁移到能力事实
approvalCapability.nativeRuntime 以及共享的运行时上下文注册表暴露原生审批行为。关键变化:- 将
approvalCapability.handler.loadRuntime(...)替换为approvalCapability.nativeRuntime - 将审批特定的认证/投递逻辑从旧的
plugin.auth/plugin.approvals绑定中移出,并迁移到approvalCapability ChannelPlugin.approvals已从公共 channel-plugin 契约中移除;请将 delivery/native/render 字段迁移到approvalCapability上plugin.auth仍仅用于通道登录/登出流程;其中的审批认证 hook 不再被核心读取- 通过
openclaw/plugin-sdk/channel-runtime-context注册通道拥有的运行时对象,例如客户端、token 或 Bolt 应用 - 不要从原生审批处理器发送插件拥有的 reroute 通知;核心现在从实际投递结果中负责“转到其他位置”的通知
- 在将
channelRuntime传入createChannelManager(...)时,请提供真实的createPluginRuntime().channel面。部分 stub 会被拒绝
/plugins/sdk-channel-plugins 获取当前审批能力布局。审计 Windows wrapper 回退行为
openclaw/plugin-sdk/windows-spawn,那么未解析的 Windows
.cmd/.bat wrapper 现在会默认失败关闭,除非你显式传入 allowShellFallback: true。allowShellFallback,而应改为处理抛出的错误。替换为聚焦导入
| 旧导入 | 现代等价项 |
|---|---|
resolveAgentDir | api.runtime.agent.resolveAgentDir |
resolveAgentWorkspaceDir | api.runtime.agent.resolveAgentWorkspaceDir |
resolveAgentIdentity | api.runtime.agent.resolveAgentIdentity |
resolveThinkingDefault | api.runtime.agent.resolveThinkingDefault |
resolveAgentTimeoutMs | api.runtime.agent.resolveAgentTimeoutMs |
ensureAgentWorkspace | api.runtime.agent.ensureAgentWorkspace |
| 会话存储辅助工具 | api.runtime.agent.session.* |
替换宽泛的 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/channel-activity-runtime |
| 内存去重缓存 | openclaw/plugin-sdk/dedupe-runtime |
| 安全的本地文件/媒体路径辅助工具 | openclaw/plugin-sdk/file-access-runtime |
| 具备调度器感知的 fetch | openclaw/plugin-sdk/runtime-fetch |
| 代理和受保护的 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/transport-ready-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 扫描防护限制,因此仓库代码不能退回到这个宽泛总入口。迁移通道 route 辅助工具
openclaw/plugin-sdk/channel-route。
较旧的 route-key 和可比较目标名称在迁移窗口期间仍保留为兼容别名,但新插件应使用能直接描述行为的 route 名称:| 旧辅助工具 | 现代辅助工具 |
|---|---|
channelRouteIdentityKey(...) | channelRouteDedupeKey(...) |
channelRouteKey(...) | channelRouteCompactKey(...) |
ComparableChannelTarget | ChannelRouteParsedTarget |
comparableChannelTargetsMatch(...) | channelRouteTargetsMatchExact(...) |
comparableChannelTargetsShareRoute(...) | channelRouteTargetsShareConversation(...) |
{ channel, to, accountId, threadId }。不要新增对 ChannelMessagingAdapter.parseExplicitTarget 的使用,也不要新增对
基于解析器的已加载路由辅助工具(parseExplicitTargetForLoadedChannel
或 resolveRouteTargetForLoadedChannel)或
resolveChannelRouteTargetWithParser(...)(来自 plugin-sdk/channel-route)的使用。
这些 hook 已弃用,仅在迁移窗口期间为旧插件保留。新的通道插件应使用
messaging.targetResolver.resolveTarget(...) 进行目标 ID 规范化
和目录缺失回退,使用 messaging.inferTargetChatType(...) 来在核心
需要尽早判断对端类型时使用,并使用 messaging.resolveOutboundSessionRoute(...)
获取 provider 原生的会话和线程标识。导入路径参考
常见导入路径表
常见导入路径表
scripts/lib/plugin-sdk-entrypoints.json;包导出由
公共子集生成。
已保留的捆绑插件辅助接缝已从公共 SDK 导出映射中移除,除了明确文档化的兼容外观,例如为已发布的 @openclaw/[email protected] 包保留的已弃用 plugin-sdk/discord shim。特定 owner 的辅助工具保留在所属插件包内部;共享宿主行为应通过通用 SDK 契约迁移,例如 plugin-sdk/gateway-runtime、plugin-sdk/security-runtime 和 plugin-sdk/plugin-config-runtime。
请使用最符合任务的最窄导入。如果找不到某个导出,请检查 src/plugin-sdk/ 下的源代码,或者询问维护者它应该归属哪个通用契约。
当前弃用项
下面这些更窄的弃用项适用于整个 plugin SDK、provider 契约、运行时面和清单。它们现在仍然可用,但会在未来的大版本中移除。每一项下面的条目都会把旧 API 映射到其标准替代项。command-auth 帮助构建器 → command-status
command-auth 帮助构建器 → command-status
openclaw/plugin-sdk/command-auth):buildCommandsMessage、
buildCommandsMessagePaginated、buildHelpMessage。新(openclaw/plugin-sdk/command-status):相同签名、相同导出——只是从更窄的子路径导入。command-auth
仍以兼容 stub 的形式重新导出它们。提及门控辅助工具 → resolveInboundMentionDecision
提及门控辅助工具 → resolveInboundMentionDecision
openclaw/plugin-sdk/channel-inbound 或
openclaw/plugin-sdk/channel-mention-gating 的
resolveInboundMentionRequirement({ facts, policy }) 和
shouldDropInboundForMention(...)。新:resolveInboundMentionDecision({ facts, policy }) - 返回一个
单一决策对象,而不是两个拆分调用。下游通道插件(Slack、Discord、Matrix、MS Teams)已经切换完成。Channel runtime shim 和 channel actions 辅助工具
Channel runtime shim 和 channel actions 辅助工具
openclaw/plugin-sdk/channel-runtime 是为旧通道插件提供的兼容 shim。不要在新代码中导入它;请使用
openclaw/plugin-sdk/channel-runtime-context 来注册运行时对象。openclaw/plugin-sdk/channel-actions 中的 channelActions* 辅助工具
已与原始 “actions” 通道导出一并弃用。请通过语义化的 presentation
面暴露能力——通道插件声明它们渲染什么(卡片、按钮、下拉选择),而不是它们接受哪些原始动作名称。Web search provider tool() 辅助工具 → 插件上的 createTool()
Web search provider tool() 辅助工具 → 插件上的 createTool()
openclaw/plugin-sdk/provider-web-search 的 tool() 工厂。新:直接在 provider 插件上实现 createTool(...)。
OpenClaw 不再需要 SDK 辅助工具来注册工具包装器。纯文本通道信封 → BodyForAgent
纯文本通道信封 → BodyForAgent
formatInboundEnvelope(...)(以及
ChannelMessageForAgent.channelEnvelope),用于从入站通道消息构建扁平的纯文本 prompt 信封。新:BodyForAgent 加上结构化的用户上下文块。通道插件将路由元数据(线程、主题、回复对象、反应)作为带类型的字段附加,而不是把它们拼接进 prompt 字符串。formatAgentEnvelope(...) 辅助工具仍支持为生成的面向 assistant 的信封使用,但入站纯文本信封正在退出。受影响的区域:inbound_claim、message_received,以及任何对 channelEnvelope 文本进行后处理的自定义通道插件。deactivate hook → gateway_stop
deactivate hook → gateway_stop
api.on("deactivate", handler)。新:api.on("gateway_stop", handler)。事件和上下文是相同的
关闭清理契约;只更改 hook 名称。deactivate 仍会作为已弃用的兼容别名接线,直到 2026-08-16 之后。subagent_spawning hook → core thread binding
subagent_spawning hook → core thread binding
api.on("subagent_spawning", handler) returning
threadBindingReady or deliveryOrigin.New: let core prepare thread: true subagent bindings through the
channel session-binding adapter. Use api.on("subagent_spawned", handler)
only for post-launch observation.subagent_spawning, PluginHookSubagentSpawningEvent,
PluginHookSubagentSpawningResult, and
SubagentLifecycleHookRunner.runSubagentSpawning(...) remain only as
deprecated compatibility surfaces while external plugins migrate.Provider discovery types → provider catalog types
Provider discovery types → provider catalog types
| 旧别名 | 新类型 |
|---|---|
ProviderDiscoveryOrder | ProviderCatalogOrder |
ProviderDiscoveryContext | ProviderCatalogContext |
ProviderDiscoveryResult | ProviderCatalogResult |
ProviderPluginDiscovery | ProviderPluginCatalog |
ProviderCapabilities 静态集合——provider 插件应使用显式的 provider hook,例如 buildReplayPolicy、
normalizeToolSchemas 和 wrapStreamFn,而不是静态对象。Thinking policy hooks → resolveThinkingProfile
Thinking policy hooks → resolveThinkingProfile
ProviderThinkingPolicy 上的三个独立 hook):
isBinaryThinking(ctx)、supportsXHighThinking(ctx) 和
resolveDefaultThinkingLevel(ctx)。新:单个 resolveThinkingProfile(ctx),返回一个带有标准 id、可选 label 和分级 level 列表的 ProviderThinkingProfile。OpenClaw 会根据 profile 等级自动降级陈旧的存储值。The context includes provider, modelId, optional merged reasoning,
and optional merged model compat facts. Provider plugins can use those
catalog facts to expose a model-specific profile only when the configured
request contract supports it.Implement one hook instead of three. The legacy hooks keep working during
the deprecation window but are not composed with the profile result.External auth providers → contracts.externalAuthProviders
External auth providers → contracts.externalAuthProviders
contracts.externalAuthProviders in the plugin manifest
and implement resolveExternalAuthProfiles(...).Provider 环境变量查找 → setup.providers[].envVars
Provider 环境变量查找 → setup.providers[].envVars
providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }。新:将同样的环境变量查找映射到清单中的 setup.providers[].envVars。
这样可以将 setup/status 的环境元数据集中在一个地方,并避免仅为回答环境变量查找而启动插件运行时。在弃用窗口结束之前,providerAuthEnvVars 仍通过兼容适配器受支持。Memory plugin registration → registerMemoryCapability
Memory plugin registration → registerMemoryCapability
api.registerMemoryPromptSection(...)、
api.registerMemoryFlushPlan(...)、
api.registerMemoryRuntime(...)。新:在 memory-state API 上一次调用:
registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime })。Same slots, single registration call. Additive prompt and corpus helpers
(registerMemoryPromptSupplement, registerMemoryCorpusSupplement) are
not affected.Memory embedding provider API
Memory embedding provider API
api.registerMemoryEmbeddingProvider(...) plus
contracts.memoryEmbeddingProviders.New: api.registerEmbeddingProvider(...) plus
contracts.embeddingProviders.The generic embedding provider contract is reusable outside memory and is
the supported path for new providers. The memory-specific registration API
remains wired as deprecated compatibility while existing providers migrate.
Plugin inspection reports non-bundled usage as compatibility debt.子 agent 会话消息类型重命名
子 agent 会话消息类型重命名
src/plugins/runtime/types.ts 仍导出两个旧类型别名:| 旧 | 新 |
|---|---|
SubagentReadSessionParams | SubagentGetSessionMessagesParams |
SubagentReadSessionResult | SubagentGetSessionMessagesResult |
readSession 已弃用,建议改用 getSessionMessages。签名相同;旧方法会转调新方法。runtime.tasks.flow → runtime.tasks.managedFlows
runtime.tasks.flow → runtime.tasks.managedFlows
runtime.tasks.flow(单数)返回一个活动 task-flow 访问器。新:runtime.tasks.managedFlows 为创建、更新、取消或运行子任务的插件保留受管理的 TaskFlow 变更运行时。仅当插件只需要基于 DTO 的读取时,请使用 runtime.tasks.flows。Embedded extension factories → agent tool-result middleware
Embedded extension factories → agent tool-result middleware
api.registerEmbeddedExtensionFactory(...) 路径,已替换为
api.registerAgentToolResultMiddleware(...),并在 contracts.agentToolResultMiddleware 中显式声明运行时列表。OpenClawSchemaType 别名 → OpenClawConfig
OpenClawSchemaType 别名 → OpenClawConfig
openclaw/plugin-sdk 重导出的 OpenClawSchemaType 现在只是 OpenClawConfig 的一行别名。请优先使用标准名称。extensions/ 下捆绑通道/provider 插件内部)会在它们自己的 api.ts 和 runtime-api.ts
总入口中跟踪。它们不影响第三方插件契约,也不会在这里列出。如果你直接消费某个捆绑插件的本地总入口,请先阅读该总入口中的弃用注释再升级。移除时间线
| 时间 | 会发生什么 |
|---|---|
| 现在 | 已弃用的面会发出运行时警告 |
| 下一个大版本 | 已弃用的面将被移除;仍在使用它们的插件会失败 |