Skip to content

外掛程式進入點

每個外掛程式都會匯出一個預設的進入物件。SDK 提供了三個輔助函式來建立它們。

匯入: openclaw/plugin-sdk/plugin-entry

適用於提供者外掛程式、工具外掛程式、Hook 外掛程式,以及任何訊息頻道的項目。

import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
export default definePluginEntry({
id: "my-plugin",
name: "My Plugin",
description: "Short summary",
register(api) {
api.registerProvider({
/* ... */
});
api.registerTool({
/* ... */
});
},
});
欄位類型必填預設值
idstring
namestring
descriptionstring
kindstring
configSchemaOpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema空物件結構描述
register(api: OpenClawPluginApi) => void
  • id 必須符合您的 openclaw.plugin.json 清單。
  • kind 適用於獨佔插槽:"memory""context-engine"
  • configSchema 可以是一個用於延遲求值的函式。

匯入: openclaw/plugin-sdk/core

使用頻道專用的接線包裝 definePluginEntry。自動呼叫 api.registerChannel({ plugin }),公開可選的根目錄説明 (root-help) CLI 中繼資料 接縫,並根據註冊模式對 registerFull 進行閘控。

import { defineChannelPluginEntry } from "openclaw/plugin-sdk/core";
export default defineChannelPluginEntry({
id: "my-channel",
name: "My Channel",
description: "Short summary",
plugin: myChannelPlugin,
setRuntime: setMyRuntime,
registerCliMetadata(api) {
api.registerCli(/* ... */);
},
registerFull(api) {
api.registerGatewayMethod(/* ... */);
},
});
欄位類型必填預設值
idstring
namestring
descriptionstring
pluginChannelPlugin
configSchemaOpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema空物件結構描述
setRuntime(runtime: PluginRuntime) => void
registerCliMetadata(api: OpenClawPluginApi) => void
registerFull(api: OpenClawPluginApi) => void
  • setRuntime 在註冊期間被呼叫,以便您可以儲存執行時期參考 (通常透過 createPluginRuntimeStore)。它會在 CLI 中繼資料 擷取期間被跳過。
  • registerCliMetadataapi.registrationMode === "cli-metadata"api.registrationMode === "full" 期間都會執行。 請將其用作頻道擁有的 CLI 描述元的規範位置,以便根目錄説明 保持非啟用狀態,同時正常的 CLI 命令註冊與完整外掛載入 保持相容。
  • registerFull 僅在 api.registrationMode === "full" 時執行。它會在 僅設定 (setup-only) 載入期間被跳過。
  • 對於外掛擁有的根 CLI 命令,當您希望命令保持延遲載入 而不從根 CLI 解析樹中消失時,請優先使用 api.registerCli(..., { descriptors: [...] })。 對於頻道外掛,請優先從 registerCliMetadata(...) 註冊這些描述元, 並讓 registerFull(...) 專注於僅執行時期的工作。

匯入: openclaw/plugin-sdk/core

用於輕量級的 setup-entry.ts 檔案。僅回傳 { plugin } 而沒有 執行時期或 CLI 接線。

import { defineSetupPluginEntry } from "openclaw/plugin-sdk/core";
export default defineSetupPluginEntry(myChannelPlugin);

當頻道被停用、未設定,或啟用延遲載入時,OpenClaw 會載入此項而非完整項目。請參閱 設定與配置 以了解其重要性時機。

api.registrationMode 告訴您的外掛它是如何被載入的:

模式何時要註冊什麼
"full"正常閘道啟動所有內容
"setup-only"已停用/未設定的頻道僅頻道註冊
"setup-runtime"具備執行時期可用的設定流程通道 + 輕量級執行時期
"cli-metadata"根說明 / CLI 中繼資料擷取僅限 CLI 描述符

defineChannelPluginEntry 會自動處理此種分割。如果您直接對通道使用 definePluginEntry,請自行檢查模式:

register(api) {
if (api.registrationMode === "cli-metadata" || api.registrationMode === "full") {
api.registerCli(/* ... */);
if (api.registrationMode === "cli-metadata") return;
}
api.registerChannel({ plugin: myPlugin });
if (api.registrationMode !== "full") return;
// Heavy runtime-only registrations
api.registerService(/* ... */);
}

特別針對 CLI 註冊器:

  • 當註冊器擁有一或多個根指令,且您希望 OpenClaw 在首次 叫用時延遲載入實際的 CLI 模組時,請使用 descriptors
  • 請確保這些描述符涵蓋註冊器公開的每個頂層指令根
  • 僅對急切相容性路徑單獨使用 commands

OpenClaw 會根據載入的外掛程式註冊行為將其分類:

形狀描述
plain-capability單一功能類型 (例如僅提供者)
hybrid-capability多種功能類型 (例如提供者 + 語音)
hook-only只有 Hooks,沒有功能
non-capability工具/指令/服務但沒有功能

使用 openclaw plugins inspect <id> 來查看外掛程式的形狀。