跳轉到主要內容
OpenClaw 會透過具名相容性轉接器保留較舊的外掛合約接線,之後才移除它們。這能在 SDK、manifest、設定、組態與代理執行階段合約演進時,保護既有的內建與外部外掛。

相容性註冊表

外掛相容性合約會在核心註冊表 src/plugins/compat/registry.ts 中追蹤。每筆記錄都有:
  • 穩定的相容性代碼
  • 狀態:activedeprecatedremoval-pendingremoved
  • 擁有者:sdkconfigsetupchannelproviderplugin-executionagent-runtimecore
  • 適用時的引入與棄用日期
  • 替代方案指引
  • 涵蓋舊行為與新行為的文件、診斷與測試
此註冊表是維護者規劃與未來外掛檢查器檢查的來源。如果面向外掛的行為變更,請在新增轉接器的同一項變更中新增或更新相容性記錄。 Doctor 修復與遷移相容性會在 src/commands/doctor/shared/deprecation-compat.ts 另外追蹤。這些記錄涵蓋舊設定形狀、安裝帳本配置,以及在執行階段相容性路徑移除後可能仍需保留的修復 shim。 發行清掃應同時檢查兩個註冊表。不要只因為相符的執行階段或設定相容性記錄過期,就刪除 doctor 遷移;請先確認沒有仍需要該修復的受支援升級路徑。也要在發行規劃期間重新驗證每個替代方案註解,因為外掛所有權與設定足跡會隨著提供者和通道移出核心而改變。

棄用政策

OpenClaw 不應在引入替代方案的同一個發行版本中移除已記載的外掛合約。遷移順序:
  1. 新增新合約。
  2. 透過具名相容性轉接器保留舊行為接線。
  3. 在外掛作者可以採取行動時發出診斷或警告。
  4. 記載替代方案與時程。
  5. 測試舊路徑與新路徑。
  6. 等待已公告的遷移窗口期結束。
  7. 只有在明確核准破壞性發行時才移除。
已棄用記錄必須包含警告開始日期、替代方案、文件連結,以及不超過警告開始後三個月的最終移除日期。除非維護者明確決定它是永久相容性並改標為 active,否則不要新增具有開放式移除窗口的已棄用相容性路徑。

目前的相容性區域

此註冊表目前追蹤約 70 個相容性代碼,涵蓋以下區域。新的外掛程式碼應使用每個區域及特定遷移指南中的替代方案;既有外掛可以繼續使用相容性路徑,直到文件、診斷與發行說明公告移除窗口為止。
  • 舊版廣泛 SDK 匯入,例如 openclaw/plugin-sdk/compat
  • 舊版僅 hook 外掛形狀與 before_agent_start
  • 舊版 api.on("deactivate", ...) 清理 hook 名稱,供外掛遷移到 gateway_stop
  • 舊版 activate(api) 外掛進入點,供外掛遷移到 register(api)
  • 舊版 SDK 別名,例如 openclaw/extension-apiopenclaw/plugin-sdk/channel-runtimeopenclaw/plugin-sdk/command-auth 狀態建構器、openclaw/plugin-sdk/test-utils(由聚焦的 openclaw/plugin-sdk/* 測試子路徑取代),以及 ClawdbotConfig / OpenClawSchemaType 型別別名
  • 內建外掛允許清單與啟用行為
  • 舊版提供者/通道環境變數 manifest 中繼資料
  • 舊版提供者外掛 hook 與型別別名,供提供者移至明確的目錄、驗證、思考、重播與傳輸 hook
  • 舊版執行階段別名,例如 api.runtime.taskFlowapi.runtime.subagent.getSessionapi.runtime.stt,以及已棄用的 api.runtime.config.loadConfig() / api.runtime.config.writeConfigFile(...)
  • WhatsApp WebInboundMessage 扁平回呼欄位(見下方)
  • WhatsApp WebInboundMessage 頂層准入欄位(見下方)
  • 舊版記憶體外掛分離註冊,供記憶體外掛移至 registerMemoryCapability
  • 舊版記憶體專用 embedding 提供者註冊,供 embedding 提供者移至 api.registerEmbeddingProvider(...)contracts.embeddingProviders
  • 舊版通道 SDK 輔助工具,用於原生訊息 schema、提及門控、傳入 envelope 格式化,以及核准能力巢狀結構
  • 舊版通道路由鍵與可比較目標輔助別名,供外掛移至 openclaw/plugin-sdk/channel-route
  • 由 manifest 貢獻所有權取代的啟用提示
  • setup-api 執行階段後援,供設定描述子移至冷路徑 setup.requiresRuntime: false 中繼資料
  • 提供者 discovery hook,供提供者目錄 hook 移至 catalog.run(...)
  • 通道 showConfigured / showInSetup 中繼資料,供通道套件移至 openclaw.channel.exposure
  • 舊版 runtime-policy 設定鍵,doctor 會將操作者遷移到 agentRuntime
  • 產生的內建通道設定中繼資料後援,直到 registry-first channelConfigs 中繼資料落地
  • 持久化外掛註冊表停用與安裝遷移環境旗標,修復流程會將操作者遷移到 openclaw plugins registry --refreshopenclaw doctor --fix
  • 舊版外掛所擁有的網頁搜尋、網頁擷取與 x_search 設定路徑,doctor 會將它們遷移到 plugins.entries.<plugin>.config
  • 舊版 plugins.installs 作者設定與內建外掛載入路徑別名,安裝中繼資料會移入狀態管理的外掛帳本

WhatsApp 傳入回呼扁平別名

WhatsApp 執行階段回呼會傳遞 WebInboundMessage:標準的巢狀 eventpayloadquotegroupplatform 情境,加上已棄用的扁平別名,用於已出貨的回呼欄位。新的回呼程式碼應讀取巢狀情境。建構乾淨巢狀回呼訊息的程式碼可以使用 WebInboundCallbackMessage;仍注入舊版扁平測試或外掛訊息的相容性監聽器應使用 LegacyFlatWebInboundMessageWebInboundMessageInput 扁平別名會保留到 2026-08-30;該窗口只適用於扁平別名存取,不適用於巢狀形狀,後者是標準執行階段合約。每個扁平別名的 TypeScript @deprecated 註解都會標明其確切的巢狀替代項。常見範例:
  • idtimestampisBatched 移到 event 之下。
  • bodymediaPathmediaTypemediaFileNamemediaUrllocationuntrustedStructuredContext 移到 payload 之下。
  • tochatId、寄件者/自身欄位、sendComposingreply(...)sendMedia(...) 移到 platform 之下。
  • replyTo* 欄位移到 quote 之下;群組主旨/參與者/提及欄位移到 group 之下。
payload.untrustedStructuredContext 是從傳入提供者 payload 擷取而來。外掛在將其 payload 視為權威之前,應檢查 labelsourcetype

WhatsApp 傳入准入欄位

已接受的 WhatsApp 回呼訊息會攜帶 admission,這是公開安全的 envelope,用於說明准入該訊息的存取控制決策。新的回呼程式碼應從 msg.admission 讀取准入事實,而不是使用較舊的頂層准入欄位。 頂層欄位會保留到 2026-08-30。每個欄位的 TypeScript @deprecated 註解都會標明其替代項:
  • fromconversationId 移到 admission.conversation.id
  • accountId 移到 admission.accountId
  • accessControlPassedadmission.ingress.decision === "allow" 的衍生相容性檢視;在已攜帶 admission 的訊息上,寫入舊版布林值不會重寫 ingress graph。
  • chatType 移到 admission.conversation.kind

外掛檢查器套件

外掛檢查器應位於核心 OpenClaw repo 之外,作為由版本化相容性與 manifest 合約支援的獨立套件/repository。第一天的命令列介面應為:
openclaw-plugin-inspector ./my-plugin
它應發出 manifest/schema 驗證、正在檢查的合約相容性版本、安裝/來源中繼資料檢查、冷路徑匯入檢查,以及棄用/相容性警告。使用 --json 以在 CI 註解中取得穩定的機器可讀輸出。OpenClaw 核心應公開檢查器可取用的合約與 fixture,但不應從主要 openclaw 套件發布檢查器二進位檔。

維護者驗收通道

在針對 OpenClaw 外掛套件驗證外部檢查器時,請使用 Crabbox 支援的 Blacksmith Testbox 作為可安裝套件驗收通道。套件建置完成後,從乾淨的 OpenClaw checkout 執行:
pnpm crabbox:run -- --provider blacksmith-testbox --timing-json --shell -- "pnpm install && pnpm build && npm exec --yes @openclaw/plugin-inspector@0.1.0 -- ./extensions/telegram --json"
pnpm crabbox:run -- --provider blacksmith-testbox --timing-json --shell -- "npm exec --yes @openclaw/plugin-inspector@0.1.0 -- ./extensions/discord --json"
pnpm crabbox:run -- --provider blacksmith-testbox --timing-json --shell -- "npm exec --yes @openclaw/plugin-inspector@0.1.0 -- <clawhub-plugin-dir> --json"
此通道應讓維護者選擇性啟用,因為它會安裝外部 npm 套件,並且可能檢查在 repo 外部 clone 的外掛套件。本機 repo 防護涵蓋 SDK 匯出對應、相容性註冊表中繼資料、已棄用 SDK 匯入消減,以及內建 extension 匯入邊界;Testbox 檢查器證明則涵蓋外部外掛作者取用該套件的方式。

發行說明

發行說明應包含即將到來的外掛棄用事項、目標日期,以及遷移文件連結,並且要在相容性路徑移至 removal-pendingremoved 之前納入。