Plugin SDK reference
การตั้งค่าและการกำหนดค่า Plugin
ข้อมูลอ้างอิงสำหรับการแพ็กเกจ Plugin (เมตาดาต้า package.json), manifest (openclaw.plugin.json), รายการตั้งค่า และสคีมา config.
เมตาดาต้าแพ็กเกจ
package.json ของคุณต้องมีฟิลด์ openclaw ที่บอกระบบ Plugin ว่า Plugin ของคุณมีอะไรให้ใช้:
Channel plugin
{ "name": "@myorg/openclaw-my-channel", "version": "1.0.0", "type": "module", "openclaw": { "extensions": ["./index.ts"], "setupEntry": "./setup-entry.ts", "channel": { "id": "my-channel", "label": "My Channel", "blurb": "Short description of the channel." } }}Provider plugin / ClawHub baseline
{ "name": "@myorg/openclaw-my-plugin", "version": "1.0.0", "type": "module", "openclaw": { "extensions": ["./index.ts"], "compat": { "pluginApi": ">=2026.3.24-beta.2", "minGatewayVersion": "2026.3.24-beta.2" }, "build": { "openclawVersion": "2026.3.24-beta.2", "pluginSdkVersion": "2026.3.24-beta.2" } }}ฟิลด์ openclaw
extensionsstring[]ไฟล์ entry point (สัมพันธ์กับรากแพ็กเกจ).
setupEntrystringรายการสำหรับการตั้งค่าเท่านั้นแบบ lightweight (ไม่บังคับ).
channelobjectเมตาดาต้าแค็ตตาล็อกช่องทางสำหรับพื้นผิวการตั้งค่า ตัวเลือก quickstart และสถานะ.
providersstring[]id ผู้ให้บริการที่ Plugin นี้ลงทะเบียน.
installobjectคำใบ้การติดตั้ง: npmSpec, localPath, defaultChoice, minHostVersion, expectedIntegrity, allowInvalidConfigRecovery.
startupobjectแฟล็กลักษณะการทำงานเมื่อเริ่มต้น.
openclaw.channel
openclaw.channel เป็นเมตาดาต้าแพ็กเกจที่ใช้งานเบาสำหรับการค้นพบช่องทางและพื้นผิวการตั้งค่าก่อนโหลด runtime.
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
id |
string |
id ช่องทาง canonical. |
label |
string |
ป้ายกำกับช่องทางหลัก. |
selectionLabel |
string |
ป้ายกำกับตัวเลือก/การตั้งค่าเมื่อควรต่างจาก label. |
detailLabel |
string |
ป้ายกำกับรายละเอียดรองสำหรับแค็ตตาล็อกช่องทางและพื้นผิวสถานะที่สมบูรณ์ขึ้น. |
docsPath |
string |
path เอกสารสำหรับลิงก์การตั้งค่าและการเลือก. |
docsLabel |
string |
แทนที่ป้ายกำกับที่ใช้สำหรับลิงก์เอกสารเมื่อควรต่างจาก id ช่องทาง. |
blurb |
string |
คำอธิบายสั้นสำหรับ onboarding/แค็ตตาล็อก. |
order |
number |
ลำดับการเรียงในแค็ตตาล็อกช่องทาง. |
aliases |
string[] |
alias เพิ่มเติมสำหรับการค้นหาในการเลือกช่องทาง. |
preferOver |
string[] |
id Plugin/ช่องทางที่มีลำดับความสำคัญต่ำกว่าซึ่งช่องทางนี้ควรอยู่เหนือกว่า. |
systemImage |
string |
ชื่อไอคอน/system-image ที่ไม่บังคับสำหรับแค็ตตาล็อก UI ช่องทาง. |
selectionDocsPrefix |
string |
ข้อความนำหน้าก่อนลิงก์เอกสารในพื้นผิวการเลือก. |
selectionDocsOmitLabel |
boolean |
แสดง path เอกสารโดยตรงแทนลิงก์เอกสารที่มีป้ายกำกับในข้อความการเลือก. |
selectionExtras |
string[] |
สตริงสั้นเพิ่มเติมที่ต่อท้ายในข้อความการเลือก. |
markdownCapable |
boolean |
ทำเครื่องหมายช่องทางว่าสามารถใช้ markdown ได้สำหรับการตัดสินใจจัดรูปแบบขาออก. |
exposure |
object |
ตัวควบคุมการมองเห็นช่องทางสำหรับการตั้งค่า รายการที่กำหนดค่าแล้ว และพื้นผิวเอกสาร. |
quickstartAllowFrom |
boolean |
เลือกให้ช่องทางนี้เข้าร่วมโฟลว์การตั้งค่า quickstart allowFrom มาตรฐาน. |
forceAccountBinding |
boolean |
บังคับให้ผูกบัญชีอย่างชัดเจนแม้จะมีเพียงบัญชีเดียว. |
preferSessionLookupForAnnounceTarget |
boolean |
ต้องการใช้การค้นหาเซสชันเมื่อ resolve เป้าหมายประกาศสำหรับช่องทางนี้. |
ตัวอย่าง:
{ "openclaw": { "channel": { "id": "my-channel", "label": "My Channel", "selectionLabel": "My Channel (self-hosted)", "detailLabel": "My Channel Bot", "docsPath": "/channels/my-channel", "docsLabel": "my-channel", "blurb": "Webhook-based self-hosted chat integration.", "order": 80, "aliases": ["mc"], "preferOver": ["my-channel-legacy"], "selectionDocsPrefix": "Guide:", "selectionExtras": ["Markdown"], "markdownCapable": true, "exposure": { "configured": true, "setup": true, "docs": true }, "quickstartAllowFrom": true } }}exposure รองรับ:
configured: รวมช่องทางในพื้นผิวรายการแบบ configured/status-stylesetup: รวมช่องทางในตัวเลือก setup/configure แบบโต้ตอบdocs: ทำเครื่องหมายช่องทางเป็นแบบ public-facing ในพื้นผิวเอกสาร/การนำทาง
openclaw.install
openclaw.install เป็นเมตาดาต้าแพ็กเกจ ไม่ใช่เมตาดาต้า manifest.
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
clawhubSpec |
string |
spec ClawHub canonical สำหรับโฟลว์ install/update และ onboarding install-on-demand. |
npmSpec |
string |
spec npm canonical สำหรับโฟลว์ fallback ของ install/update. |
localPath |
string |
path การพัฒนาในเครื่องหรือ path ติดตั้งแบบ bundled. |
defaultChoice |
"clawhub" | "npm" | "local" |
แหล่งติดตั้งที่ต้องการเมื่อมีหลายแหล่งให้ใช้. |
minHostVersion |
string |
เวอร์ชัน OpenClaw ขั้นต่ำที่รองรับในรูปแบบ >=x.y.z หรือ >=x.y.z-prerelease. |
expectedIntegrity |
string |
สตริง integrity ของ npm dist ที่คาดไว้ โดยปกติคือ sha512-... สำหรับการติดตั้งแบบ pinned. |
allowInvalidConfigRecovery |
boolean |
อนุญาตให้โฟลว์ติดตั้ง Plugin bundled ซ้ำกู้คืนจากความล้มเหลว stale-config บางกรณี. |
requiredPlatformPackages |
string[] |
alias npm เฉพาะแพลตฟอร์มที่จำเป็นและตรวจสอบระหว่างการติดตั้ง npm. |
Onboarding behavior
onboarding แบบโต้ตอบยังใช้ openclaw.install สำหรับพื้นผิว install-on-demand ด้วย หาก Plugin ของคุณเปิดเผยตัวเลือก auth ของผู้ให้บริการหรือเมตาดาต้า setup/catalog ของช่องทางก่อนโหลด runtime onboarding สามารถแสดงตัวเลือกนั้น ถามสำหรับการติดตั้งผ่าน ClawHub, npm หรือ local ติดตั้งหรือเปิดใช้ Plugin แล้วดำเนินโฟลว์ที่เลือกต่อ ตัวเลือก onboarding ของ ClawHub ใช้ clawhubSpec และจะถูกเลือกก่อนเมื่อมีอยู่ ตัวเลือก npm ต้องใช้เมตาดาต้าแค็ตตาล็อกที่เชื่อถือได้พร้อม registry npmSpec; เวอร์ชันที่แน่นอนและ expectedIntegrity เป็น pin ของ npm ที่ไม่บังคับ หากมี expectedIntegrity โฟลว์ install/update จะบังคับใช้สำหรับ npm เก็บเมตาดาต้า "สิ่งที่จะแสดง" ไว้ใน openclaw.plugin.json และเมตาดาต้า "วิธีติดตั้ง" ไว้ใน package.json.
minHostVersion enforcement
หากตั้งค่า minHostVersion ทั้งการติดตั้งและการโหลด manifest-registry ที่ไม่ใช่ bundled จะบังคับใช้ โฮสต์รุ่นเก่าจะข้าม Plugin ภายนอก สตริงเวอร์ชันที่ไม่ถูกต้องจะถูกปฏิเสธ Plugin ซอร์สแบบ bundled ถือว่า co-versioned กับ host checkout.
Pinned npm installs
สำหรับการติดตั้ง npm แบบ pinned ให้เก็บเวอร์ชันที่แน่นอนไว้ใน npmSpec และเพิ่ม integrity ของ artifact ที่คาดไว้:
{ "openclaw": { "install": { "npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3", "expectedIntegrity": "sha512-REPLACE_WITH_NPM_DIST_INTEGRITY", "defaultChoice": "npm" } }}allowInvalidConfigRecovery scope
allowInvalidConfigRecovery ไม่ใช่ bypass ทั่วไปสำหรับ config ที่เสีย ใช้เฉพาะการกู้คืน Plugin bundled แบบแคบเท่านั้น เพื่อให้ reinstall/setup สามารถซ่อมแซมสิ่งตกค้างจากการอัปเกรดที่ทราบ เช่น path ของ Plugin bundled ที่หายไปหรือรายการ channels.<id> ที่ stale สำหรับ Plugin เดียวกันนั้น หาก config เสียด้วยเหตุผลที่ไม่เกี่ยวข้อง การติดตั้งยังคง fail closed และบอก operator ให้รัน openclaw doctor --fix.
การโหลดเต็มแบบเลื่อนออกไป
Plugin ช่องทางสามารถเลือกใช้การโหลดแบบเลื่อนออกไปด้วย:
{ "openclaw": { "extensions": ["./index.ts"], "setupEntry": "./setup-entry.ts", "startup": { "deferConfiguredChannelFullLoadUntilAfterListen": true } }}เมื่อเปิดใช้ OpenClaw จะโหลดเฉพาะ setupEntry ระหว่างเฟสเริ่มต้นก่อน listen แม้สำหรับช่องทางที่กำหนดค่าไว้แล้ว รายการเต็มจะโหลดหลังจาก gateway เริ่ม listen.
หาก setup/full entry ของคุณลงทะเบียน gateway RPC methods ให้เก็บไว้บน prefix เฉพาะ Plugin namespace admin หลักที่สงวนไว้ (config.*, exec.approvals.*, wizard.*, update.*) ยังคงเป็นของ core และ resolve เป็น operator.admin เสมอ.
manifest ของ Plugin
Plugin native ทุกตัวต้องจัดส่ง openclaw.plugin.json ในรากแพ็กเกจ OpenClaw ใช้สิ่งนี้เพื่อตรวจสอบ config โดยไม่รันโค้ด Plugin.
{ "id": "my-plugin", "name": "My Plugin", "description": "Adds My Plugin capabilities to OpenClaw", "configSchema": { "type": "object", "additionalProperties": false, "properties": { "webhookSecret": { "type": "string", "description": "Webhook verification secret" } } }}สำหรับ Plugin ช่องทาง ให้เพิ่ม kind และ channels:
{ "id": "my-channel", "kind": "channel", "channels": ["my-channel"], "configSchema": { "type": "object", "additionalProperties": false, "properties": {} }}แม้ Plugin ที่ไม่มี config ก็ต้องจัดส่งสคีมา สคีมาว่างถือว่าถูกต้อง:
{ "id": "my-plugin", "configSchema": { "type": "object", "additionalProperties": false }}ดู Plugin manifest สำหรับข้อมูลอ้างอิง schema ฉบับเต็ม
การเผยแพร่ผ่าน ClawHub
สำหรับแพ็กเกจ Plugin ให้ใช้คำสั่ง ClawHub เฉพาะแพ็กเกจ:
clawhub package publish your-org/your-plugin --dry-runclawhub package publish your-org/your-pluginจุดเข้า setup
ไฟล์ setup-entry.ts เป็นทางเลือกที่เบากว่า index.ts ซึ่ง OpenClaw จะโหลดเมื่อจำเป็นต้องใช้เฉพาะพื้นผิว setup เท่านั้น (onboarding, การซ่อมแซม config, การตรวจสอบช่องทางที่ปิดใช้งาน)
// setup-entry.ts export default defineSetupPluginEntry(myChannelPlugin);วิธีนี้หลีกเลี่ยงการโหลดโค้ด runtime ที่หนัก (ไลบรารี crypto, การลงทะเบียน CLI, บริการเบื้องหลัง) ระหว่าง flow การ setup
ช่องทาง workspace ที่ bundled ซึ่งเก็บ export ที่ปลอดภัยสำหรับ setup ไว้ในโมดูล sidecar สามารถใช้ defineBundledChannelSetupEntry(...) จาก openclaw/plugin-sdk/channel-entry-contract แทน defineSetupPluginEntry(...) ได้ contract แบบ bundled นี้ยังรองรับ export runtime แบบไม่บังคับด้วย เพื่อให้การ wiring runtime ในช่วง setup ยังคงเบาและชัดเจน
เมื่อ OpenClaw ใช้ setupEntry แทน entry แบบเต็ม
- ช่องทางถูกปิดใช้งานแต่ต้องใช้พื้นผิว setup/onboarding
- ช่องทางเปิดใช้งานอยู่แต่ยังไม่ได้ config
- เปิดใช้งานการโหลดแบบเลื่อนเวลา (
deferConfiguredChannelFullLoadUntilAfterListen)
สิ่งที่ setupEntry ต้องลงทะเบียน
- ออบเจ็กต์ Plugin ของช่องทาง (ผ่าน
defineSetupPluginEntry) - HTTP routes ใด ๆ ที่จำเป็นก่อน gateway listen
- gateway methods ใด ๆ ที่ต้องใช้ระหว่าง startup
gateway methods ในช่วง startup เหล่านั้นยังควรหลีกเลี่ยง namespace admin หลักที่สงวนไว้ เช่น config.* หรือ update.*
สิ่งที่ setupEntry ไม่ควรรวมไว้
- การลงทะเบียน CLI
- บริการเบื้องหลัง
- import runtime ที่หนัก (crypto, SDKs)
- Gateway methods ที่จำเป็นหลัง startup เท่านั้น
import ตัวช่วย setup แบบแคบ
สำหรับ path ที่เป็น hot setup-only ให้เลือกใช้ seam ตัวช่วย setup แบบแคบแทน umbrella plugin-sdk/setup ที่กว้างกว่า เมื่อคุณต้องใช้เพียงบางส่วนของพื้นผิว setup:
| path สำหรับ import | ใช้สำหรับ | export สำคัญ |
|---|---|---|
plugin-sdk/setup-runtime |
ตัวช่วย runtime ในช่วง setup ที่ยังพร้อมใช้งานใน setupEntry / startup ช่องทางแบบ deferred |
createSetupTranslator, createPatchedAccountSetupAdapter, createEnvPatchedAccountSetupAdapter, createSetupInputPresenceValidator, noteChannelLookupFailure, noteChannelLookupSummary, promptResolvedAllowFrom, splitSetupEntries, createAllowlistSetupWizardProxy, createDelegatedSetupWizardProxy |
plugin-sdk/setup-adapter-runtime |
alias ความเข้ากันได้ที่เลิกใช้แล้ว; ใช้ plugin-sdk/setup-runtime |
createEnvPatchedAccountSetupAdapter |
plugin-sdk/setup-tools |
ตัวช่วย setup/install CLI/archive/docs | formatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR |
ใช้ seam plugin-sdk/setup ที่กว้างกว่าเมื่อคุณต้องการชุดเครื่องมือ setup ร่วมแบบเต็ม รวมถึงตัวช่วย config-patch เช่น moveSingleAccountChannelSectionToDefaultAccount(...)
ใช้ createSetupTranslator(...) สำหรับข้อความคงที่ของ setup wizard โดยจะทำตาม locale ของ
CLI wizard (OPENCLAW_LOCALE แล้วจึงเป็นตัวแปร locale ของระบบ) และ fallback
กลับเป็นภาษาอังกฤษ เก็บข้อความ setup เฉพาะ Plugin ไว้ในโค้ดที่ Plugin เป็นเจ้าของ และใช้
keys ของ catalog ที่ใช้ร่วมกันเฉพาะสำหรับ label setup ทั่วไป, ข้อความ status, และข้อความ setup ของ
Plugin bundled อย่างเป็นทางการ
patch adapters สำหรับ setup ยังคงปลอดภัยต่อ hot-path เมื่อ import การ lookup contract-surface สำหรับการ promote single-account แบบ bundled เป็นแบบ lazy ดังนั้นการ import plugin-sdk/setup-runtime จะไม่โหลดการ discovery contract-surface แบบ bundled ล่วงหน้า ก่อนที่ adapter จะถูกใช้งานจริง
การ promote single-account ที่ช่องทางเป็นเจ้าของ
เมื่อช่องทางอัปเกรดจาก config ระดับบนสุดแบบ single-account ไปเป็น channels.<id>.accounts.* พฤติกรรมร่วมเริ่มต้นคือย้ายค่าที่มีขอบเขตตาม account ซึ่งถูก promote เข้าไปใน accounts.default
ช่องทาง bundled สามารถจำกัดหรือ override การ promote นั้นผ่านพื้นผิว contract ของ setup ได้:
singleAccountKeysToMove: key ระดับบนสุดเพิ่มเติมที่ควรย้ายเข้าไปใน account ที่ถูก promotenamedAccountPromotionKeys: เมื่อมี named accounts อยู่แล้ว เฉพาะ key เหล่านี้เท่านั้นที่จะย้ายเข้าไปใน account ที่ถูก promote; key สำหรับ shared policy/delivery จะยังอยู่ที่ root ของช่องทางresolveSingleAccountPromotionTarget(...): เลือก account ที่มีอยู่ซึ่งจะรับค่าที่ถูก promote
Config schema
config ของ Plugin จะถูก validate กับ JSON Schema ใน manifest ของคุณ ผู้ใช้ config Plugin ผ่าน:
{ plugins: { entries: { "my-plugin": { config: { webhookSecret: "abc123", }, }, }, },}Plugin ของคุณจะได้รับ config นี้เป็น api.pluginConfig ระหว่างการลงทะเบียน
สำหรับ config เฉพาะช่องทาง ให้ใช้ส่วน config ของช่องทางแทน:
{ channels: { "my-channel": { token: "bot-token", allowFrom: ["user1", "user2"], }, },}การสร้าง schema สำหรับ config ของช่องทาง
ใช้ buildChannelConfigSchema เพื่อแปลง Zod schema ให้เป็น wrapper ChannelConfigSchema ที่ใช้โดย artifact ของ config ที่ Plugin เป็นเจ้าของ:
const accountSchema = z.object({ token: z.string().optional(), allowFrom: z.array(z.string()).optional(), accounts: z.object({}).catchall(z.any()).optional(), defaultAccount: z.string().optional(),}); const configSchema = buildChannelConfigSchema(accountSchema);ถ้าคุณเขียน contract เป็น JSON Schema หรือ TypeBox อยู่แล้ว ให้ใช้ตัวช่วยโดยตรงเพื่อให้ OpenClaw ข้ามการแปลง Zod-to-JSON-Schema บน path metadata ได้:
const configSchema = buildJsonChannelConfigSchema( Type.Object({ token: Type.Optional(Type.String()), allowFrom: Type.Optional(Type.Array(Type.String())), }),);สำหรับ Plugin จากภายนอก contract บน cold-path ยังคงเป็น manifest ของ Plugin: mirror JSON Schema ที่สร้างแล้วเข้าไปใน openclaw.plugin.json#channelConfigs เพื่อให้ config schema, setup, และพื้นผิว UI สามารถตรวจสอบ channels.<id> ได้โดยไม่ต้องโหลดโค้ด runtime
Setup wizards
Plugin ช่องทางสามารถจัดเตรียม setup wizards แบบโต้ตอบสำหรับ openclaw onboard ได้ wizard คือออบเจ็กต์ ChannelSetupWizard บน ChannelPlugin:
const setupWizard: ChannelSetupWizard = { channel: "my-channel", status: { configuredLabel: "Connected", unconfiguredLabel: "Not configured", resolveConfigured: ({ cfg }) => Boolean((cfg.channels as any)?.["my-channel"]?.token), }, credentials: [ { inputKey: "token", providerHint: "my-channel", credentialLabel: "Bot token", preferredEnvVar: "MY_CHANNEL_BOT_TOKEN", envPrompt: "Use MY_CHANNEL_BOT_TOKEN from environment?", keepPrompt: "Keep current token?", inputPrompt: "Enter your bot token:", inspect: ({ cfg, accountId }) => { const token = (cfg.channels as any)?.["my-channel"]?.token; return { accountConfigured: Boolean(token), hasConfiguredValue: Boolean(token), }; }, }, ],};ชนิด ChannelSetupWizard รองรับ credentials, textInputs, dmPolicy, allowFrom, groupAccess, prepare, finalize และอื่น ๆ ดูแพ็กเกจ Plugin แบบ bundled (เช่น Plugin Discord src/channel.setup.ts) สำหรับตัวอย่างฉบับเต็ม
prompt allowFrom ที่ใช้ร่วมกัน
สำหรับ prompt allowlist ของ DM ที่ต้องใช้เฉพาะ flow มาตรฐาน note -> prompt -> parse -> merge -> patch ให้เลือกใช้ตัวช่วย setup ที่ใช้ร่วมกันจาก openclaw/plugin-sdk/setup: createPromptParsedAllowFromForAccount(...), createTopLevelChannelParsedAllowFromPrompt(...), และ createNestedChannelParsedAllowFromPrompt(...)
status setup ช่องทางมาตรฐาน
สำหรับบล็อก status setup ของช่องทางที่แตกต่างกันเพียง label, score, และบรรทัดเพิ่มเติมแบบไม่บังคับ ให้เลือกใช้ createStandardChannelSetupStatus(...) จาก openclaw/plugin-sdk/setup แทนการเขียนออบเจ็กต์ status เดิมซ้ำในแต่ละ Plugin เอง
พื้นผิว setup ช่องทางแบบไม่บังคับ
สำหรับพื้นผิว setup แบบไม่บังคับที่ควรปรากฏในบาง context เท่านั้น ให้ใช้ createOptionalChannelSetupSurface จาก openclaw/plugin-sdk/channel-setup:
import { createOptionalChannelSetupSurface } from "openclaw/plugin-sdk/channel-setup"; const setupSurface = createOptionalChannelSetupSurface({ channel: "my-channel", label: "My Channel", npmSpec: "@myorg/openclaw-my-channel", docsPath: "/channels/my-channel",});// Returns { setupAdapter, setupWizard }plugin-sdk/channel-setup ยังเปิดเผย builder ระดับล่าง createOptionalChannelSetupAdapter(...) และ createOptionalChannelSetupWizard(...) ด้วย เมื่อคุณต้องการเพียงครึ่งเดียวของพื้นผิว optional-install นั้น
adapter/wizard แบบไม่บังคับที่สร้างขึ้นจะ fail closed เมื่อมีการเขียน config จริง โดย reuse ข้อความ install-required เดียวกันใน validateInput, applyAccountConfig, และ finalize และเพิ่มลิงก์ docs ต่อท้ายเมื่อมีการตั้งค่า docsPath
ตัวช่วย setup ที่รองรับด้วย binary
สำหรับ UI setup ที่รองรับด้วย binary ให้เลือกใช้ตัวช่วย delegated ที่ใช้ร่วมกันแทนการคัดลอก glue สำหรับ binary/status เดิมเข้าไปในทุกช่องทาง:
createDetectedBinaryStatus(...)สำหรับบล็อก status ที่แตกต่างกันเฉพาะ label, hint, score, และการตรวจจับ binarycreateCliPathTextInput(...)สำหรับ text input ที่อิง pathcreateDelegatedSetupWizardStatusResolvers(...),createDelegatedPrepare(...),createDelegatedFinalize(...), และcreateDelegatedResolveConfigured(...)เมื่อsetupEntryต้อง forward ไปยัง wizard แบบเต็มที่หนักกว่าแบบ lazycreateDelegatedTextInputShouldPrompt(...)เมื่อsetupEntryต้อง delegate เฉพาะการตัดสินใจtextInputs[*].shouldPrompt
การเผยแพร่และการติดตั้ง
Plugin ภายนอก: เผยแพร่ไปยัง ClawHub จากนั้นติดตั้ง:
npm
openclaw plugins install @myorg/openclaw-my-pluginข้อกำหนดแพ็กเกจแบบไม่มีคำนำหน้าจะติดตั้งจาก npm ระหว่างช่วงเปลี่ยนผ่านการเปิดตัว
ClawHub only
openclaw plugins install clawhub:@myorg/openclaw-my-pluginnpm package spec
ใช้ npm เมื่อแพ็กเกจยังไม่ได้ย้ายไปยัง ClawHub หรือเมื่อคุณต้องการเส้นทาง การติดตั้ง npm โดยตรงระหว่างการย้าย:
openclaw plugins install npm:@myorg/openclaw-my-pluginPlugin ใน repo: วางไว้ใต้ทรี workspace ของ Plugin ที่ bundled แล้วระบบจะค้นพบโดยอัตโนมัติระหว่างการ build
ผู้ใช้สามารถติดตั้งได้:
openclaw plugins install <package-name>metadata ของแพ็กเกจ bundled เป็นแบบระบุชัดเจน ไม่ได้อนุมานจาก JavaScript ที่ build แล้วตอนเริ่มต้น gateway dependency ขณะ runtime ควรอยู่ในแพ็กเกจ Plugin ที่เป็นเจ้าของ dependency เหล่านั้น; การเริ่มต้น OpenClaw แบบแพ็กเกจจะไม่ซ่อมแซมหรือ mirror dependency ของ Plugin
ที่เกี่ยวข้อง
- การสร้าง Plugin — คู่มือเริ่มต้นทีละขั้นตอน
- manifest ของ Plugin — เอกสารอ้างอิง schema ของ manifest ฉบับเต็ม
- entry point ของ SDK —
definePluginEntryและdefineChannelPluginEntry