หน้านี้มีไว้สำหรับ native OpenClaw plugin manifest เท่านั้น สำหรับรูปแบบ bundle ที่เข้ากันได้ โปรดดู Plugin bundles รูปแบบ bundle ที่เข้ากันได้ใช้ไฟล์ manifest คนละแบบ:Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- Codex bundle:
.codex-plugin/plugin.json - Claude bundle:
.claude-plugin/plugin.jsonหรือรูปแบบองค์ประกอบ Claude เริ่มต้น ที่ไม่มี manifest - Cursor bundle:
.cursor-plugin/plugin.json
openclaw.plugin.json ที่อธิบายไว้ที่นี่
สำหรับ bundle ที่เข้ากันได้ ปัจจุบัน OpenClaw อ่าน metadata ของ bundle พร้อมกับ
skill roots ที่ประกาศไว้, Claude command roots, ค่าเริ่มต้น settings.json ของ Claude bundle,
ค่าเริ่มต้น LSP ของ Claude bundle และ hook packs ที่รองรับ เมื่อรูปแบบตรงกับ
ความคาดหวังของ runtime ของ OpenClaw
Plugin แบบ native ของ OpenClaw ทุกตัว ต้อง จัดส่งไฟล์ openclaw.plugin.json ไว้ใน
plugin root OpenClaw ใช้ manifest นี้เพื่อตรวจสอบ configuration
โดยไม่ต้องเรียกใช้โค้ด plugin manifest ที่หายไปหรือไม่ถูกต้องจะถูกถือเป็น
ข้อผิดพลาดของ plugin และบล็อกการตรวจสอบ config
ดูคู่มือระบบ plugin ฉบับเต็ม: Plugins
สำหรับ capability model แบบ native และแนวทางความเข้ากันได้ภายนอกในปัจจุบัน:
Capability model
ไฟล์นี้ทำอะไร
openclaw.plugin.json คือ metadata ที่ OpenClaw อ่าน ก่อนที่จะโหลด
โค้ด plugin ของคุณ ทุกอย่างด้านล่างต้องมีต้นทุนต่ำพอที่จะตรวจสอบได้โดยไม่ต้องบูต
plugin runtime
ใช้สำหรับ:
- ตัวตนของ plugin, การตรวจสอบ config และคำใบ้ UI ของ config
- metadata สำหรับ auth, onboarding และ setup (alias, auto-enable, provider env vars, ตัวเลือก auth)
- คำใบ้ activation สำหรับพื้นผิว control-plane
- ความเป็นเจ้าของ model-family แบบย่อ
- snapshots ความเป็นเจ้าของ capability แบบ static (
contracts) - metadata ของ QA runner ที่โฮสต์
openclaw qaร่วมกันสามารถตรวจสอบได้ - metadata config เฉพาะ channel ที่ถูกรวมเข้าใน catalog และพื้นผิว validation
package.json ของคุณ
ตัวอย่างขั้นต่ำ
ตัวอย่างแบบครบถ้วน
อ้างอิง field ระดับบนสุด
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
id | ใช่ | string | รหัส Plugin แบบ canonical นี่คือรหัสที่ใช้ใน plugins.entries.<id> |
configSchema | ใช่ | object | JSON Schema แบบอินไลน์สำหรับการกำหนดค่าของ Plugin นี้ |
enabledByDefault | ไม่ | true | ทำเครื่องหมาย Plugin ที่รวมมาให้เปิดใช้งานโดยค่าเริ่มต้น ละไว้ หรือตั้งค่าเป็นค่าใดก็ตามที่ไม่ใช่ true เพื่อให้ Plugin ปิดใช้งานโดยค่าเริ่มต้น |
enabledByDefaultOnPlatforms | ไม่ | string[] | ทำเครื่องหมาย Plugin ที่รวมมาให้เปิดใช้งานโดยค่าเริ่มต้นเฉพาะบนแพลตฟอร์ม Node.js ที่ระบุไว้ เช่น ["darwin"] การกำหนดค่าแบบชัดเจนยังคงมีสิทธิ์เหนือกว่า |
legacyPluginIds | ไม่ | string[] | รหัสดั้งเดิมที่ normalize เป็นรหัส Plugin แบบ canonical นี้ |
autoEnableWhenConfiguredProviders | ไม่ | string[] | รหัสผู้ให้บริการที่ควรเปิดใช้งาน Plugin นี้โดยอัตโนมัติเมื่อ auth, config หรือ model refs กล่าวถึงรหัสเหล่านั้น |
kind | ไม่ | "memory" | "context-engine" | ประกาศชนิด Plugin แบบ exclusive ที่ใช้โดย plugins.slots.* |
channels | ไม่ | string[] | รหัสช่องทางที่ Plugin นี้เป็นเจ้าของ ใช้สำหรับการค้นพบและการตรวจสอบความถูกต้องของการกำหนดค่า |
providers | ไม่ | string[] | รหัสผู้ให้บริการที่ Plugin นี้เป็นเจ้าของ |
providerCatalogEntry | ไม่ | string | พาธโมดูลแค็ตตาล็อกผู้ให้บริการแบบเบา ซึ่งสัมพันธ์กับรากของ Plugin สำหรับเมตาดาต้าแค็ตตาล็อกผู้ให้บริการในขอบเขตแมนิเฟสต์ที่โหลดได้โดยไม่ต้องเปิดใช้งานรันไทม์ Plugin แบบเต็ม |
modelSupport | ไม่ | object | เมตาดาต้า family ของโมเดลแบบย่อที่แมนิเฟสต์เป็นเจ้าของ ใช้เพื่อโหลด Plugin โดยอัตโนมัติก่อนรันไทม์ |
modelCatalog | ไม่ | object | เมตาดาต้าแค็ตตาล็อกโมเดลแบบ declarative สำหรับผู้ให้บริการที่ Plugin นี้เป็นเจ้าของ นี่คือสัญญา control-plane สำหรับการแสดงรายการแบบอ่านอย่างเดียวในอนาคต, onboarding, ตัวเลือกโมเดล, alias และการ suppress โดยไม่โหลดรันไทม์ Plugin |
modelPricing | ไม่ | object | นโยบายค้นหาราคาภายนอกที่ผู้ให้บริการเป็นเจ้าของ ใช้เพื่อยกเว้นผู้ให้บริการแบบ local/self-hosted ออกจากแค็ตตาล็อกราคาจากระยะไกล หรือ map provider refs ไปยังรหัสแค็ตตาล็อก OpenRouter/LiteLLM โดยไม่ hardcode รหัสผู้ให้บริการใน core |
modelIdNormalization | ไม่ | object | การล้าง alias/prefix ของรหัสโมเดลที่ผู้ให้บริการเป็นเจ้าของ ซึ่งต้องทำงานก่อนโหลดรันไทม์ผู้ให้บริการ |
providerEndpoints | ไม่ | object[] | เมตาดาต้า host/baseUrl ของ endpoint ที่แมนิเฟสต์เป็นเจ้าของสำหรับ route ของผู้ให้บริการ ซึ่ง core ต้องจัดประเภทก่อนโหลดรันไทม์ผู้ให้บริการ |
providerRequest | ไม่ | object | เมตาดาต้า family ของผู้ให้บริการและความเข้ากันได้ของคำขอแบบประหยัด ซึ่งใช้โดยนโยบายคำขอทั่วไปก่อนโหลดรันไทม์ผู้ให้บริการ |
cliBackends | ไม่ | string[] | รหัส backend สำหรับการอนุมานของ CLI ที่ Plugin นี้เป็นเจ้าของ ใช้สำหรับการเปิดใช้งานอัตโนมัติเมื่อเริ่มต้นจาก config refs แบบชัดเจน |
syntheticAuthRefs | ไม่ | string[] | refs ของผู้ให้บริการหรือ backend ของ CLI ที่ควรตรวจสอบ hook auth สังเคราะห์ซึ่ง Plugin เป็นเจ้าของ ระหว่างการค้นพบโมเดลแบบ cold ก่อนโหลดรันไทม์ |
nonSecretAuthMarkers | ไม่ | string[] | ค่า placeholder ของ API key ที่ Plugin ซึ่งรวมมาเป็นเจ้าของ และแสดงสถานะ credential แบบ local, OAuth หรือ ambient ที่ไม่เป็นความลับ |
commandAliases | ไม่ | object[] | ชื่อคำสั่งที่ Plugin นี้เป็นเจ้าของ ซึ่งควรสร้าง diagnostic ของการกำหนดค่าและ CLI ที่รับรู้ Plugin ก่อนโหลดรันไทม์ |
providerAuthEnvVars | ไม่ | Record<string, string[]> | เมตาดาต้า env สำหรับความเข้ากันได้ที่เลิกใช้แล้ว สำหรับการค้นหา auth/status ของผู้ให้บริการ แนะนำให้ใช้ setup.providers[].envVars สำหรับ Plugin ใหม่; OpenClaw ยังอ่านค่านี้ระหว่างช่วง deprecation |
providerAuthAliases | ไม่ | Record<string, string> | รหัสผู้ให้บริการที่ควรใช้รหัสผู้ให้บริการอื่นซ้ำสำหรับการค้นหา auth เช่น ผู้ให้บริการด้าน coding ที่ใช้ API key และ auth profiles ของผู้ให้บริการฐานร่วมกัน |
channelEnvVars | ไม่ | Record<string, string[]> | เมตาดาต้า env ของช่องทางแบบเบาที่ OpenClaw ตรวจสอบได้โดยไม่ต้องโหลดโค้ด Plugin ใช้สำหรับการตั้งค่าช่องทางหรือพื้นผิว auth ที่ขับเคลื่อนด้วย env ซึ่งตัวช่วย startup/config ทั่วไปควรมองเห็น |
providerAuthChoices | ไม่ | object[] | เมตาดาต้า auth-choice แบบเบาสำหรับตัวเลือก onboarding, การ resolve preferred-provider และการเชื่อมต่อ flag ของ CLI แบบง่าย |
activation | ไม่ | object | เมตาดาต้าตัววางแผนการเปิดใช้งานแบบเบาสำหรับ startup, ผู้ให้บริการ, คำสั่ง, ช่องทาง, route และการโหลดที่ trigger ด้วย capability เป็นเมตาดาต้าเท่านั้น; รันไทม์ Plugin ยังเป็นเจ้าของพฤติกรรมจริง |
setup | ไม่ | object | ตัวอธิบาย setup/onboarding แบบเบาที่พื้นผิว discovery และ setup ตรวจสอบได้โดยไม่ต้องโหลดรันไทม์ Plugin |
qaRunners | ไม่ | object[] | ตัวอธิบายตัวรัน QA แบบเบาที่โฮสต์ openclaw qa ร่วมใช้ก่อนโหลดรันไทม์ Plugin |
contracts | ไม่ | object | snapshot ความเป็นเจ้าของ capability แบบ static สำหรับ hook auth ภายนอก, speech, realtime transcription, realtime voice, media-understanding, image-generation, music-generation, video-generation, web-fetch, web search และความเป็นเจ้าของ tool |
mediaUnderstandingProviderMetadata | ไม่ | Record<string, object> | ค่าเริ่มต้น media-understanding แบบเบาสำหรับรหัสผู้ให้บริการที่ประกาศใน contracts.mediaUnderstandingProviders |
imageGenerationProviderMetadata | ไม่ | Record<string, object> | เมตาดาต้า auth ของ image-generation แบบเบาสำหรับรหัสผู้ให้บริการที่ประกาศใน contracts.imageGenerationProviders รวมถึง alias ของ auth และ guard ของ base-url ที่ผู้ให้บริการเป็นเจ้าของ |
videoGenerationProviderMetadata | ไม่ | Record<string, object> | เมตาดาต้า auth ของ video-generation แบบเบาสำหรับรหัสผู้ให้บริการที่ประกาศใน contracts.videoGenerationProviders รวมถึง alias ของ auth และ guard ของ base-url ที่ผู้ให้บริการเป็นเจ้าของ |
musicGenerationProviderMetadata | ไม่ | Record<string, object> | เมตาดาต้า auth ของ music-generation แบบเบาสำหรับรหัสผู้ให้บริการที่ประกาศใน contracts.musicGenerationProviders รวมถึง alias ของ auth และ guard ของ base-url ที่ผู้ให้บริการเป็นเจ้าของ |
toolMetadata | ไม่ | Record<string, object> | เมตาดาต้าความพร้อมใช้งานแบบเบาสำหรับเครื่องมือที่ Plugin เป็นเจ้าของซึ่งประกาศใน contracts.tools ใช้เมื่อต้องการให้เครื่องมือไม่โหลดรันไทม์เว้นแต่จะมีหลักฐานจาก config, env หรือ auth |
channelConfigs | ไม่ | Record<string, object> | เมตาดาต้าการกำหนดค่าช่องทางที่แมนิเฟสต์เป็นเจ้าของ ซึ่ง merge เข้ากับพื้นผิว discovery และ validation ก่อนโหลดรันไทม์ |
skills | ไม่ | string[] | ไดเรกทอรี Skills ที่จะโหลด โดยสัมพันธ์กับรากของ Plugin |
name | ไม่ | string | ชื่อ Plugin ที่อ่านเข้าใจได้สำหรับมนุษย์ |
description | ไม่ | string | สรุปสั้น ๆ ที่แสดงในพื้นผิวการใช้งานของ Plugin |
version | ไม่ | string | เวอร์ชัน Plugin สำหรับเป็นข้อมูล |
uiHints | ไม่ | Record<string, object> | ป้ายกำกับ UI, placeholder และคำใบ้เกี่ยวกับความละเอียดอ่อนสำหรับฟิลด์ config |
อ้างอิงเมทาดาทาของผู้ให้บริการการสร้าง
ฟิลด์เมทาดาทาของผู้ให้บริการการสร้างอธิบายสัญญาณการยืนยันตัวตนแบบคงที่สำหรับ ผู้ให้บริการที่ประกาศไว้ในรายการcontracts.*GenerationProviders ที่ตรงกัน
OpenClaw อ่านฟิลด์เหล่านี้ก่อนที่รันไทม์ของ Plugin ผู้ให้บริการจะโหลด เพื่อให้เครื่องมือแกนหลักสามารถ
ตัดสินใจได้ว่าผู้ให้บริการการสร้างพร้อมใช้งานหรือไม่โดยไม่ต้องนำเข้า
Plugin ผู้ให้บริการทุกตัว
ใช้ฟิลด์เหล่านี้เฉพาะกับข้อเท็จจริงเชิงประกาศที่มีต้นทุนต่ำเท่านั้น การขนส่ง การแปลงคำขอ
การรีเฟรชโทเค็น การตรวจสอบข้อมูลประจำตัว และพฤติกรรมการสร้างจริง
ยังคงอยู่ในรันไทม์ของ Plugin
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
aliases | ไม่ | string[] | รหัสผู้ให้บริการเพิ่มเติมที่ควรนับเป็นนามแฝงการยืนยันตัวตนแบบคงที่สำหรับผู้ให้บริการการสร้าง |
authProviders | ไม่ | string[] | รหัสผู้ให้บริการที่โปรไฟล์การยืนยันตัวตนซึ่งกำหนดค่าไว้ควรนับเป็นการยืนยันตัวตนสำหรับผู้ให้บริการการสร้างนี้ |
configSignals | ไม่ | object[] | สัญญาณความพร้อมใช้งานที่ใช้เฉพาะการกำหนดค่าและมีต้นทุนต่ำ สำหรับผู้ให้บริการภายในเครื่องหรือโฮสต์เองที่กำหนดค่าได้โดยไม่ต้องใช้โปรไฟล์การยืนยันตัวตนหรือตัวแปรสภาพแวดล้อม |
authSignals | ไม่ | object[] | สัญญาณการยืนยันตัวตนแบบระบุชัดเจน เมื่อมีอยู่ สัญญาณเหล่านี้จะแทนที่ชุดสัญญาณเริ่มต้นจากรหัสผู้ให้บริการ, aliases และ authProviders |
configSignals รองรับ:
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
rootPath | ใช่ | string | พาธแบบจุดไปยังออบเจ็กต์การกำหนดค่าที่ Plugin เป็นเจ้าของเพื่อตรวจสอบ เช่น plugins.entries.example.config |
overlayPath | ไม่ | string | พาธแบบจุดภายในการกำหนดค่าราก ซึ่งออบเจ็กต์ของพาธนั้นควรวางทับออบเจ็กต์รากก่อนประเมินสัญญาณ ใช้สำหรับการกำหนดค่าเฉพาะความสามารถ เช่น image, video หรือ music |
required | ไม่ | string[] | พาธแบบจุดภายในการกำหนดค่าที่มีผล ซึ่งต้องมีค่าที่กำหนดค่าไว้ สตริงต้องไม่ว่างเปล่า ส่วนออบเจ็กต์และอาร์เรย์ต้องไม่ว่างเปล่า |
requiredAny | ไม่ | string[] | พาธแบบจุดภายในการกำหนดค่าที่มีผล โดยต้องมีอย่างน้อยหนึ่งพาธที่มีค่าที่กำหนดค่าไว้ |
mode | ไม่ | object | ตัวคุมโหมดแบบสตริงที่ไม่บังคับภายในการกำหนดค่าที่มีผล ใช้เมื่อความพร้อมใช้งานจากการกำหนดค่าเท่านั้นใช้ได้กับโหมดเดียวเท่านั้น |
mode รองรับ:
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
path | ไม่ | string | พาธแบบจุดภายในการกำหนดค่าที่มีผล ค่าเริ่มต้นคือ mode |
default | ไม่ | string | ค่าโหมดที่จะใช้เมื่อการกำหนดค่าละเว้นพาธ |
allowed | ไม่ | string[] | หากมีอยู่ สัญญาณจะผ่านเฉพาะเมื่อโหมดที่มีผลเป็นหนึ่งในค่าเหล่านี้ |
disallowed | ไม่ | string[] | หากมีอยู่ สัญญาณจะล้มเหลวเมื่อโหมดที่มีผลเป็นหนึ่งในค่าเหล่านี้ |
authSignals รองรับ:
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
provider | ใช่ | string | รหัสผู้ให้บริการที่จะตรวจสอบในโปรไฟล์การยืนยันตัวตนที่กำหนดค่าไว้ |
providerBaseUrl | ไม่ | object | ตัวคุมที่ไม่บังคับซึ่งทำให้สัญญาณนับเฉพาะเมื่อผู้ให้บริการที่กำหนดค่าไว้ซึ่งอ้างอิงใช้ URL ฐานที่อนุญาต ใช้เมื่อชื่อนามแฝงการยืนยันตัวตนใช้ได้เฉพาะกับ API บางรายการ |
providerBaseUrl รองรับ:
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
provider | ใช่ | string | รหัสการกำหนดค่าผู้ให้บริการที่ควรตรวจสอบ baseUrl |
defaultBaseUrl | ไม่ | string | URL ฐานที่จะสมมติใช้เมื่อการกำหนดค่าผู้ให้บริการละเว้น baseUrl |
allowedBaseUrls | ใช่ | string[] | URL ฐานที่อนุญาตสำหรับสัญญาณการยืนยันตัวตนนี้ สัญญาณจะถูกละเว้นเมื่อ URL ฐานที่กำหนดค่าไว้หรือค่าเริ่มต้นไม่ตรงกับหนึ่งในค่าที่ปรับให้อยู่ในรูปแบบมาตรฐานเหล่านี้ |
อ้างอิงเมทาดาทาของเครื่องมือ
toolMetadata ใช้รูปแบบ configSignals และ authSignals เดียวกับ
เมทาดาทาของผู้ให้บริการการสร้าง โดยจัดคีย์ตามชื่อเครื่องมือ contracts.tools ประกาศ
ความเป็นเจ้าของ toolMetadata ประกาศหลักฐานความพร้อมใช้งานที่มีต้นทุนต่ำ เพื่อให้ OpenClaw สามารถ
หลีกเลี่ยงการนำเข้ารันไทม์ของ Plugin เพียงเพื่อให้แฟกทอรีของเครื่องมือนั้นส่งคืน null
toolMetadata OpenClaw จะรักษาพฤติกรรมเดิมและ
โหลด Plugin เจ้าของเมื่อสัญญาเครื่องมือตรงกับนโยบาย สำหรับเครื่องมือบนเส้นทางร้อน
ที่แฟกทอรีขึ้นกับการยืนยันตัวตน/การกำหนดค่า ผู้เขียน Plugin ควรประกาศ
toolMetadata แทนการทำให้แกนหลักนำเข้ารันไทม์เพื่อถาม
อ้างอิง providerAuthChoices
แต่ละรายการproviderAuthChoices อธิบายตัวเลือกการเริ่มต้นใช้งานหรือการยืนยันตัวตนหนึ่งรายการ
OpenClaw อ่านสิ่งนี้ก่อนที่รันไทม์ของผู้ให้บริการจะโหลด
รายการตั้งค่าผู้ให้บริการใช้ตัวเลือกใน manifest เหล่านี้ ตัวเลือกการตั้งค่าที่ได้จาก descriptor
และเมทาดาทาแค็ตตาล็อกการติดตั้งโดยไม่โหลดรันไทม์ของผู้ให้บริการ
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
provider | ใช่ | string | รหัสผู้ให้บริการที่ตัวเลือกนี้เป็นของ |
method | ใช่ | string | รหัสวิธีการยืนยันตัวตนที่จะส่งต่อไป |
choiceId | ใช่ | string | รหัสตัวเลือกการยืนยันตัวตนที่คงที่ ซึ่งใช้โดยโฟลว์การเริ่มต้นใช้งานและ CLI |
choiceLabel | ไม่ | string | ป้ายกำกับที่แสดงต่อผู้ใช้ หากละเว้น OpenClaw จะย้อนกลับไปใช้ choiceId |
choiceHint | ไม่ | string | ข้อความช่วยเหลือสั้นสำหรับตัวเลือก |
assistantPriority | ไม่ | number | ค่าที่ต่ำกว่าจะเรียงก่อนในตัวเลือกแบบโต้ตอบที่ขับเคลื่อนโดยผู้ช่วย |
assistantVisibility | ไม่ | "visible" | "manual-only" | ซ่อนตัวเลือกจากตัวเลือกของผู้ช่วย แต่ยังคงอนุญาตให้เลือกด้วย CLI แบบแมนนวล |
deprecatedChoiceIds | ไม่ | string[] | รหัสตัวเลือกเดิมที่ควรเปลี่ยนเส้นทางผู้ใช้ไปยังตัวเลือกทดแทนนี้ |
groupId | ไม่ | string | รหัสกลุ่มที่ไม่บังคับสำหรับจัดกลุ่มตัวเลือกที่เกี่ยวข้อง |
groupLabel | ไม่ | string | ป้ายกำกับที่แสดงต่อผู้ใช้สำหรับกลุ่มนั้น |
groupHint | ไม่ | string | ข้อความช่วยเหลือสั้นสำหรับกลุ่ม |
optionKey | ไม่ | string | คีย์ตัวเลือกภายในสำหรับโฟลว์การยืนยันตัวตนแบบแฟล็กเดียวอย่างง่าย |
cliFlag | ไม่ | string | ชื่อแฟล็ก CLI เช่น --openrouter-api-key |
cliOption | ไม่ | string | รูปแบบตัวเลือก CLI แบบเต็ม เช่น --openrouter-api-key <key> |
cliDescription | ไม่ | string | คำอธิบายที่ใช้ในวิธีใช้ CLI |
onboardingScopes | ไม่ | Array<"text-inference" | "image-generation"> | พื้นผิวการเริ่มต้นใช้งานที่ตัวเลือกนี้ควรปรากฏ หากละเว้น ค่าเริ่มต้นคือ ["text-inference"] |
อ้างอิง commandAliases
ใช้commandAliases เมื่อ Plugin เป็นเจ้าของชื่อคำสั่งรันไทม์ที่ผู้ใช้อาจ
ใส่ผิดใน plugins.allow หรือพยายามเรียกใช้เป็นคำสั่ง CLI ระดับราก OpenClaw
ใช้ metadata นี้สำหรับการวินิจฉัยโดยไม่ต้อง import โค้ดรันไทม์ของ Plugin
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
name | ใช่ | string | ชื่อคำสั่งที่เป็นของ Plugin นี้ |
kind | ไม่ | "runtime-slash" | ระบุ alias ว่าเป็นคำสั่ง slash ในแชต แทนที่จะเป็นคำสั่ง CLI ระดับราก |
cliCommand | ไม่ | string | คำสั่ง CLI ระดับรากที่เกี่ยวข้องสำหรับแนะนำให้ใช้กับการดำเนินการ CLI หากมี |
ข้อมูลอ้างอิง activation
ใช้activation เมื่อ Plugin สามารถประกาศได้อย่างประหยัดว่าเหตุการณ์ control-plane ใด
ควรรวม Plugin นี้ไว้ในแผน activation/load
บล็อกนี้เป็น metadata สำหรับ planner ไม่ใช่ lifecycle API บล็อกนี้ไม่ลงทะเบียน
พฤติกรรมรันไทม์ ไม่แทนที่ register(...) และไม่รับประกันว่า
โค้ด Plugin ได้รันไปแล้ว activation planner ใช้ฟิลด์เหล่านี้เพื่อ
จำกัด Plugin ผู้สมัครก่อนจะ fallback ไปยัง metadata ความเป็นเจ้าของใน manifest ที่มีอยู่
เช่น providers, channels, commandAliases, setup.providers,
contracts.tools และ hooks
ให้เลือก metadata ที่แคบที่สุดซึ่งอธิบายความเป็นเจ้าของอยู่แล้ว ใช้
providers, channels, commandAliases, setup descriptors หรือ contracts
เมื่อฟิลด์เหล่านั้นแสดงความสัมพันธ์นั้นได้ ใช้ activation สำหรับคำใบ้ planner
เพิ่มเติมที่ไม่สามารถแทนด้วยฟิลด์ความเป็นเจ้าของเหล่านั้นได้
ใช้ cliBackends ระดับบนสุดสำหรับ CLI runtime aliases เช่น claude-cli,
codex-cli หรือ google-gemini-cli; activation.onAgentHarnesses ใช้เฉพาะสำหรับ
id ของ agent harness แบบฝังที่ยังไม่มีฟิลด์ความเป็นเจ้าของอยู่แล้ว
บล็อกนี้เป็น metadata เท่านั้น บล็อกนี้ไม่ลงทะเบียนพฤติกรรมรันไทม์ และไม่
แทนที่ register(...), setupEntry หรือ entrypoint รันไทม์/Plugin อื่น ๆ
consumer ปัจจุบันใช้บล็อกนี้เป็นคำใบ้สำหรับจำกัดขอบเขตก่อนโหลด Plugin แบบกว้างกว่า ดังนั้น
metadata activation ที่ไม่ใช่ช่วง startup ที่ขาดหายไปมักมีผลแค่ด้านประสิทธิภาพเท่านั้น
และไม่ควรเปลี่ยนความถูกต้องตราบใดที่ fallback ความเป็นเจ้าของใน manifest ยังมีอยู่
ทุก Plugin ควรตั้งค่า activation.onStartup อย่างตั้งใจ ตั้งเป็น true
เฉพาะเมื่อ Plugin ต้องรันระหว่างการ startup ของ Gateway ตั้งเป็น false เมื่อ
Plugin ไม่ทำงานตอน startup และควรโหลดจาก trigger ที่แคบกว่าเท่านั้น
การละ onStartup จะไม่ทำให้ Plugin ถูกโหลดตอน startup โดยนัยอีกต่อไป ใช้
metadata activation แบบชัดเจนสำหรับ trigger activation ที่เป็น startup, channel, config, agent-harness, memory หรือ
trigger activation อื่นที่แคบกว่า
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
onStartup | ไม่ | boolean | การ activation ตอน startup ของ Gateway แบบชัดเจน ทุก Plugin ควรตั้งค่านี้ true จะ import Plugin ระหว่าง startup; false จะทำให้ Plugin lazy ตอน startup เว้นแต่ trigger อื่นที่ตรงกันต้องโหลด |
onProviders | ไม่ | string[] | id ของ Provider ที่ควรรวม Plugin นี้ไว้ในแผน activation/load |
onAgentHarnesses | ไม่ | string[] | id รันไทม์ของ agent harness แบบฝังที่ควรรวม Plugin นี้ไว้ในแผน activation/load ใช้ cliBackends ระดับบนสุดสำหรับ CLI backend aliases |
onCommands | ไม่ | string[] | id ของคำสั่งที่ควรรวม Plugin นี้ไว้ในแผน activation/load |
onChannels | ไม่ | string[] | id ของ channel ที่ควรรวม Plugin นี้ไว้ในแผน activation/load |
onRoutes | ไม่ | string[] | ชนิดของ route ที่ควรรวม Plugin นี้ไว้ในแผน activation/load |
onConfigPaths | ไม่ | string[] | path config แบบอิงจากรากที่ควรรวม Plugin นี้ไว้ในแผน startup/load เมื่อมี path นั้นอยู่และไม่ได้ถูกปิดใช้งานอย่างชัดเจน |
onCapabilities | ไม่ | Array<"provider" | "channel" | "tool" | "hook"> | คำใบ้ capability แบบกว้างที่ใช้โดยการวางแผน activation ของ control-plane ให้เลือกใช้ฟิลด์ที่แคบกว่าเมื่อเป็นไปได้ |
- การวางแผน startup ของ Gateway ใช้
activation.onStartupสำหรับการ import ตอน startup แบบชัดเจน - การวางแผน CLI ที่ถูก trigger ด้วยคำสั่งจะ fallback ไปยัง
commandAliases[].cliCommandหรือcommandAliases[].nameแบบเดิม - การวางแผน startup ของ agent-runtime ใช้
activation.onAgentHarnessesสำหรับ harness แบบฝัง และใช้cliBackends[]ระดับบนสุดสำหรับ CLI runtime aliases - การวางแผน setup/channel ที่ถูก trigger ด้วย channel จะ fallback ไปยังความเป็นเจ้าของ
channels[]แบบเดิมเมื่อ metadata activation ของ channel แบบชัดเจนขาดหายไป - การวางแผน Plugin ตอน startup ใช้
activation.onConfigPathsสำหรับพื้นผิว config ระดับราก ที่ไม่ใช่ channel เช่นบล็อกbrowserของ Plugin browser ที่ bundled มา - การวางแผน setup/runtime ที่ถูก trigger ด้วย provider จะ fallback ไปยังความเป็นเจ้าของ
providers[]และcliBackends[]ระดับบนสุดแบบเดิม เมื่อ metadata activation ของ provider แบบชัดเจนขาดหายไป
activation-command-hint หมายถึง
activation.onCommands ตรงกัน ขณะที่ manifest-command-alias หมายถึง
planner ใช้ความเป็นเจ้าของ commandAliases แทน ป้ายเหตุผลเหล่านี้มีไว้สำหรับ
การวินิจฉัยของ host และการทดสอบ ผู้เขียน Plugin ควรประกาศ metadata
ที่อธิบายความเป็นเจ้าของได้ดีที่สุดต่อไป
ข้อมูลอ้างอิง qaRunners
ใช้qaRunners เมื่อ Plugin เพิ่ม transport runner หนึ่งรายการหรือมากกว่าไว้ใต้
ราก openclaw qa ที่ใช้ร่วมกัน ให้ metadata นี้ประหยัดและเป็น static; รันไทม์ของ Plugin
ยังคงเป็นเจ้าของการลงทะเบียน CLI จริงผ่านพื้นผิว runtime-api.ts
แบบ lightweight ที่ export qaRunnerCliRegistrations
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
commandName | ใช่ | string | Subcommand ที่ mount อยู่ใต้ openclaw qa เช่น matrix |
description | ไม่ | string | ข้อความช่วยเหลือ fallback ที่ใช้เมื่อ host ที่ใช้ร่วมกันต้องการคำสั่ง stub |
ข้อมูลอ้างอิง setup
ใช้setup เมื่อพื้นผิว setup และ onboarding ต้องการ metadata ราคาถูกที่ Plugin เป็นเจ้าของ
ก่อนโหลดรันไทม์
cliBackends ระดับบนสุดยังคงถูกต้องและยังอธิบาย CLI inference
backend ต่อไป setup.cliBackends คือพื้นผิว descriptor เฉพาะ setup สำหรับ
โฟลว์ control-plane/setup ที่ควรคงเป็น metadata-only
เมื่อมี setup.providers และ setup.cliBackends อยู่ ทั้งสองจะเป็น
พื้นผิว lookup แบบ descriptor-first ที่ต้องการสำหรับการค้นพบ setup หาก descriptor เพียงแค่
จำกัด Plugin ผู้สมัครและ setup ยังต้องการ hook รันไทม์ช่วง setup ที่สมบูรณ์กว่า
ให้ตั้ง requiresRuntime: true และคง setup-api ไว้เป็น
เส้นทางดำเนินการ fallback
OpenClaw ยังรวม setup.providers[].envVars ไว้ในการค้นหา provider auth และ
env-var ทั่วไปด้วย providerAuthEnvVars ยังรองรับผ่าน compatibility
adapter ระหว่างช่วง deprecation แต่ Plugin ที่ไม่ bundled ซึ่งยังใช้ฟิลด์นี้
จะได้รับการวินิจฉัย manifest Plugin ใหม่ควรใส่ metadata env ของ setup/status
ไว้ที่ setup.providers[].envVars
OpenClaw ยังสามารถอนุมานตัวเลือก setup แบบเรียบง่ายจาก setup.providers[].authMethods
เมื่อไม่มี setup entry หรือเมื่อ setup.requiresRuntime: false
ประกาศว่าไม่จำเป็นต้องใช้รันไทม์ setup รายการ providerAuthChoices แบบชัดเจนยังคง
เป็นตัวเลือกที่ต้องการสำหรับ label แบบกำหนดเอง, CLI flags, scope ของ onboarding และ metadata ของ assistant
ตั้ง requiresRuntime: false เฉพาะเมื่อ descriptor เหล่านั้นเพียงพอสำหรับ
พื้นผิว setup OpenClaw ถือว่า false แบบชัดเจนเป็นสัญญา descriptor-only
และจะไม่เรียกใช้ setup-api หรือ openclaw.setupEntry สำหรับการ lookup setup หาก
Plugin แบบ descriptor-only ยังส่งหนึ่งใน entry รันไทม์ setup เหล่านั้นมาด้วย
OpenClaw จะรายงานการวินิจฉัยแบบ additive และยังคงเพิกเฉยต่อมันต่อไป การละ
requiresRuntime จะคงพฤติกรรม fallback แบบเดิมไว้ เพื่อไม่ให้ Plugin ที่มีอยู่ซึ่งเพิ่ม
descriptor โดยไม่มี flag นั้นเสียหาย
เนื่องจากการ lookup setup สามารถรันโค้ด setup-api ที่ Plugin เป็นเจ้าของได้ ค่า
setup.providers[].id และ setup.cliBackends[] ที่ normalize แล้วต้องไม่ซ้ำกันทั่วทั้ง
Plugin ที่ค้นพบ ความเป็นเจ้าของที่คลุมเครือจะ fail closed แทนการเลือก
ผู้ชนะจากลำดับการค้นพบ
เมื่อรันไทม์ setup ถูกเรียกใช้จริง การวินิจฉัยของ setup registry จะรายงาน descriptor
drift หาก setup-api ลงทะเบียน provider หรือ CLI backend ที่ manifest
descriptor ไม่ได้ประกาศไว้ หรือหาก descriptor ไม่มี runtime
registration ที่ตรงกัน การวินิจฉัยเหล่านี้เป็นแบบ additive และไม่ปฏิเสธ Plugin แบบเดิม
ข้อมูลอ้างอิง setup.providers
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
id | ใช่ | string | id ของ Provider ที่แสดงระหว่าง setup หรือ onboarding รักษา id ที่ normalize แล้วให้ไม่ซ้ำกันทั่วระบบ |
authMethods | ไม่ | string[] | id ของวิธี setup/auth ที่ provider นี้รองรับโดยไม่ต้องโหลดรันไทม์เต็ม |
envVars | ไม่ | string[] | Env vars ที่พื้นผิว setup/status ทั่วไปสามารถตรวจสอบได้ก่อนโหลดรันไทม์ของ Plugin |
authEvidence | ไม่ | object[] | การตรวจสอบหลักฐาน auth ในเครื่องราคาถูกสำหรับ provider ที่สามารถ authenticate ผ่าน marker ที่ไม่ใช่ secret |
authEvidence ใช้สำหรับมาร์กเกอร์ข้อมูลประจำตัวแบบโลคัลที่ผู้ให้บริการเป็นเจ้าของ ซึ่งสามารถ
ตรวจสอบได้โดยไม่ต้องโหลดโค้ดรันไทม์ การตรวจสอบเหล่านี้ต้องยังคงประหยัดและเป็นโลคัล:
ไม่มีการเรียกเครือข่าย ไม่มีการอ่าน keychain หรือ secret-manager ไม่มีคำสั่ง shell และไม่มี
การ probe API ของผู้ให้บริการ
รายการหลักฐานที่รองรับ:
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
type | ใช่ | string | ปัจจุบันคือ local-file-with-env |
fileEnvVar | ไม่ | string | ตัวแปรสภาพแวดล้อมที่มีพาธไฟล์ข้อมูลประจำตัวอย่างชัดเจน |
fallbackPaths | ไม่ | string[] | พาธไฟล์ข้อมูลประจำตัวแบบโลคัลที่ตรวจสอบเมื่อ fileEnvVar ไม่มีหรือว่าง รองรับ ${HOME} และ ${APPDATA} |
requiresAnyEnv | ไม่ | string[] | ต้องมีตัวแปรสภาพแวดล้อมอย่างน้อยหนึ่งรายการในลิสต์ที่ไม่ว่าง ก่อนที่หลักฐานจะถือว่า valid |
requiresAllEnv | ไม่ | string[] | ตัวแปรสภาพแวดล้อมทุกรายการในลิสต์ต้องไม่ว่าง ก่อนที่หลักฐานจะถือว่า valid |
credentialMarker | ใช่ | string | มาร์กเกอร์ที่ไม่ใช่ความลับซึ่งส่งคืนเมื่อมีหลักฐานอยู่ |
source | ไม่ | string | ป้ายแหล่งที่มาที่แสดงต่อผู้ใช้สำหรับเอาต์พุต auth/status |
ฟิลด์ setup
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
providers | ไม่ | object[] | descriptor การตั้งค่าผู้ให้บริการที่เปิดเผยระหว่างการตั้งค่าและการเริ่มต้นใช้งาน |
cliBackends | ไม่ | string[] | id แบ็กเอนด์ช่วงตั้งค่าที่ใช้สำหรับการค้นหาการตั้งค่าแบบ descriptor-first ให้ id ที่ normalized ไม่ซ้ำกันทั่วระบบ |
configMigrations | ไม่ | string[] | id การย้าย config ที่เป็นของ surface การตั้งค่าของ Plugin นี้ |
requiresRuntime | ไม่ | boolean | การตั้งค่ายังต้องรัน setup-api หลังการค้นหา descriptor หรือไม่ |
อ้างอิง uiHints
uiHints คือ map จากชื่อฟิลด์ config ไปยังคำใบ้การเรนเดอร์ขนาดเล็ก
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
label | string | ป้ายฟิลด์ที่แสดงต่อผู้ใช้ |
help | string | ข้อความช่วยเหลือแบบสั้น |
tags | string[] | แท็ก UI แบบไม่บังคับ |
advanced | boolean | ทำเครื่องหมายฟิลด์ว่าเป็นขั้นสูง |
sensitive | boolean | ทำเครื่องหมายฟิลด์ว่าเป็นความลับหรือละเอียดอ่อน |
placeholder | string | ข้อความ placeholder สำหรับอินพุตฟอร์ม |
อ้างอิง contracts
ใช้ contracts เฉพาะสำหรับเมทาดาทาความเป็นเจ้าของ capability แบบ static ที่ OpenClaw สามารถ
อ่านได้โดยไม่ต้องนำเข้า runtime ของ Plugin
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
embeddedExtensionFactories | string[] | id factory ส่วนขยายของ app-server ของ Codex ปัจจุบันคือ codex-app-server |
agentToolResultMiddleware | string[] | id runtime ที่ Plugin แบบ bundled อาจลงทะเบียน middleware ผลลัพธ์เครื่องมือให้ได้ |
externalAuthProviders | string[] | id ผู้ให้บริการที่ hook โปรไฟล์ auth ภายนอกเป็นของ Plugin นี้ |
speechProviders | string[] | id ผู้ให้บริการเสียงพูดที่เป็นของ Plugin นี้ |
realtimeTranscriptionProviders | string[] | id ผู้ให้บริการถอดเสียงแบบเรียลไทม์ที่เป็นของ Plugin นี้ |
realtimeVoiceProviders | string[] | id ผู้ให้บริการเสียงแบบเรียลไทม์ที่เป็นของ Plugin นี้ |
memoryEmbeddingProviders | string[] | id ผู้ให้บริการ memory embedding ที่เป็นของ Plugin นี้ |
mediaUnderstandingProviders | string[] | id ผู้ให้บริการ media-understanding ที่เป็นของ Plugin นี้ |
imageGenerationProviders | string[] | id ผู้ให้บริการ image-generation ที่เป็นของ Plugin นี้ |
videoGenerationProviders | string[] | id ผู้ให้บริการ video-generation ที่เป็นของ Plugin นี้ |
webFetchProviders | string[] | id ผู้ให้บริการ web-fetch ที่เป็นของ Plugin นี้ |
webSearchProviders | string[] | id ผู้ให้บริการ web-search ที่เป็นของ Plugin นี้ |
migrationProviders | string[] | id ผู้ให้บริการนำเข้าที่เป็นของ Plugin นี้สำหรับ openclaw migrate |
tools | string[] | ชื่อเครื่องมือ agent ที่เป็นของ Plugin นี้ |
contracts.embeddedExtensionFactories ยังคงไว้สำหรับ factory ส่วนขยายเฉพาะ
app-server ของ Codex แบบ bundled การแปลงผลลัพธ์เครื่องมือแบบ bundled ควร
ประกาศ contracts.agentToolResultMiddleware และลงทะเบียนด้วย
api.registerAgentToolResultMiddleware(...) แทน Plugin ภายนอกไม่สามารถ
ลงทะเบียน middleware ผลลัพธ์เครื่องมือได้ เพราะ seam นี้สามารถเขียนเอาต์พุตเครื่องมือที่มีความน่าเชื่อถือสูงใหม่
ก่อนที่โมเดลจะเห็น
การลงทะเบียน runtime api.registerTool(...) ต้องตรงกับ contracts.tools
การค้นพบเครื่องมือใช้ลิสต์นี้เพื่อโหลดเฉพาะ runtime ของ Plugin ที่สามารถเป็นเจ้าของ
เครื่องมือที่ร้องขอได้
Provider Plugin ที่ implement resolveExternalAuthProfiles ควรประกาศ
contracts.externalAuthProviders Plugin ที่ไม่มีการประกาศยังคงรัน
ผ่าน fallback ความเข้ากันได้ที่เลิกใช้แล้ว แต่ fallback นั้นช้ากว่าและ
จะถูกนำออกหลังช่วง migration
ผู้ให้บริการ memory embedding แบบ bundled ควรประกาศ
contracts.memoryEmbeddingProviders สำหรับทุก id adapter ที่เปิดเผย รวมถึง
adapter ในตัว เช่น local พาธ CLI แบบ standalone ใช้ contract ใน manifest นี้
เพื่อโหลดเฉพาะ Plugin เจ้าของ ก่อนที่ runtime ของ Gateway แบบเต็มจะ
ลงทะเบียนผู้ให้บริการ
อ้างอิง mediaUnderstandingProviderMetadata
ใช้ mediaUnderstandingProviderMetadata เมื่อผู้ให้บริการ media-understanding มี
โมเดล default, ลำดับความสำคัญของ auto-auth fallback หรือการรองรับเอกสาร native ที่
helper ของ core แบบทั่วไปต้องใช้ก่อน runtime โหลด คีย์ต้องถูกประกาศใน
contracts.mediaUnderstandingProviders ด้วย
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
capabilities | ("image" | "audio" | "video")[] | capability สื่อที่ผู้ให้บริการนี้เปิดเผย |
defaultModels | Record<string, string> | default จาก capability ไปยังโมเดลที่ใช้เมื่อ config ไม่ได้ระบุโมเดล |
autoPriority | Record<string, number> | ตัวเลขที่ต่ำกว่าจะถูกจัดเรียงก่อนสำหรับ fallback ผู้ให้บริการอัตโนมัติตามข้อมูลประจำตัว |
nativeDocumentInputs | "pdf"[] | อินพุตเอกสาร native ที่ผู้ให้บริการรองรับ |
อ้างอิง channelConfigs
ใช้ channelConfigs เมื่อ Plugin ช่องทางต้องการเมทาดาทา config ที่ประหยัดก่อนที่
runtime จะโหลด การค้นพบการตั้งค่า/status ของช่องทางแบบอ่านอย่างเดียวสามารถใช้เมทาดาทานี้
โดยตรงสำหรับช่องทางภายนอกที่กำหนดค่าไว้เมื่อไม่มีรายการ setup ให้ใช้ หรือ
เมื่อ setup.requiresRuntime: false ประกาศว่าไม่จำเป็นต้องใช้ runtime ของ setup
channelConfigs คือเมทาดาทา manifest ของ Plugin ไม่ใช่ section config ระดับบนสุดใหม่
สำหรับผู้ใช้ ผู้ใช้ยังคงกำหนดค่าอินสแตนซ์ช่องทางใต้ channels.<channel-id>
OpenClaw อ่านเมทาดาทา manifest เพื่อตัดสินว่า Plugin ใดเป็นเจ้าของช่องทางที่กำหนดค่าไว้
ก่อนที่โค้ด runtime ของ Plugin จะทำงาน
สำหรับ Plugin ช่องทาง configSchema และ channelConfigs อธิบายพาธที่ต่างกัน:
configSchemaตรวจสอบplugins.entries.<plugin-id>.configchannelConfigs.<channel-id>.schemaตรวจสอบchannels.<channel-id>
channels[] ควรประกาศรายการ
channelConfigs ที่ตรงกันด้วย หากไม่มี OpenClaw ยังสามารถโหลด Plugin ได้ แต่
surface ของ schema config ใน cold-path, setup และ Control UI จะไม่รู้
รูปแบบตัวเลือกที่ช่องทางเป็นเจ้าของจนกว่า runtime ของ Plugin จะทำงาน
channelConfigs.<channel-id>.commands.nativeCommandsAutoEnabled และ
nativeSkillsAutoEnabled สามารถประกาศ default แบบ static ของ auto สำหรับการตรวจสอบ config คำสั่ง
ที่รันก่อน runtime ของช่องทางจะโหลด ช่องทางแบบ bundled ยังสามารถเผยแพร่
default เดียวกันผ่าน package.json#openclaw.channel.commands ควบคู่กับ
เมทาดาทา catalog ช่องทางอื่นที่ package เป็นเจ้าของ
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
schema | object | สคีมา JSON สำหรับ channels.<id> จำเป็นสำหรับรายการการกำหนดค่าแชนเนลที่ประกาศแต่ละรายการ |
uiHints | Record<string, object> | ป้ายกำกับ UI/ข้อความตัวอย่าง/คำใบ้ข้อมูลอ่อนไหวที่ไม่บังคับสำหรับส่วนการกำหนดค่าแชนเนลนั้น |
label | string | ป้ายกำกับแชนเนลที่ผสานเข้ากับตัวเลือกและพื้นผิวการตรวจสอบเมื่อเมตาดาตารันไทม์ยังไม่พร้อม |
description | string | คำอธิบายแชนเนลแบบสั้นสำหรับพื้นผิวการตรวจสอบและแค็ตตาล็อก |
commands | object | ค่าเริ่มต้นอัตโนมัติของคำสั่งเนทีฟแบบคงที่และ Skills เนทีฟสำหรับการตรวจสอบการกำหนดค่าก่อนรันไทม์ |
preferOver | string[] | id ของ Plugin แบบเดิมหรือที่มีลำดับความสำคัญต่ำกว่าซึ่งแชนเนลนี้ควรอยู่เหนือกว่าในพื้นผิวการเลือก |
การแทนที่ Plugin แชนเนลอื่น
ใช้preferOver เมื่อ Plugin ของคุณเป็นเจ้าของที่ต้องการสำหรับ id แชนเนลที่
Plugin อื่นก็สามารถจัดหาได้เช่นกัน กรณีที่พบบ่อยคือ id ของ Plugin ที่เปลี่ยนชื่อ,
Plugin แบบสแตนด์อโลนที่แทนที่ Plugin ที่รวมมาในชุด, หรือฟอร์กที่ดูแลต่อซึ่ง
คง id แชนเนลเดิมไว้เพื่อความเข้ากันได้ของการกำหนดค่า
channels.chat แล้ว OpenClaw จะพิจารณาทั้ง id แชนเนลและ
id ของ Plugin ที่ต้องการ หาก Plugin ที่มีลำดับความสำคัญต่ำกว่าถูกเลือกเพียงเพราะ
รวมมาในชุดหรือเปิดใช้ตามค่าเริ่มต้น OpenClaw จะปิดใช้งาน Plugin นั้นในการกำหนดค่า
รันไทม์ที่มีผล เพื่อให้ Plugin เดียวเป็นเจ้าของแชนเนลและเครื่องมือของแชนเนลนั้น การเลือกของผู้ใช้
แบบชัดเจนยังคงมีสิทธิ์เหนือกว่า: หากผู้ใช้เปิดใช้ Plugin ทั้งสองอย่างชัดเจน OpenClaw
จะคงตัวเลือกนั้นไว้และรายงานการวินิจฉัยแชนเนล/เครื่องมือซ้ำ แทนที่จะ
เปลี่ยนชุด Plugin ที่ร้องขออย่างเงียบ ๆ
จำกัดขอบเขต preferOver ไว้เฉพาะ id ของ Plugin ที่สามารถจัดหาแชนเนลเดียวกันได้จริง
นี่ไม่ใช่ฟิลด์ลำดับความสำคัญทั่วไป และไม่ได้เปลี่ยนชื่อคีย์การกำหนดค่าของผู้ใช้
ข้อมูลอ้างอิง modelSupport
ใช้ modelSupport เมื่อ OpenClaw ควรอนุมาน Plugin ผู้ให้บริการของคุณจาก
id โมเดลแบบย่อ เช่น gpt-5.5 หรือ claude-sonnet-4.6 ก่อนโหลดรันไทม์
ของ Plugin
- การอ้างอิง
provider/modelแบบชัดเจนใช้เมตาดาตาแมนิเฟสต์providersของเจ้าของ modelPatternsมีสิทธิ์เหนือกว่าmodelPrefixes- หาก Plugin ที่ไม่ได้รวมมาในชุดหนึ่งรายการและ Plugin ที่รวมมาในชุดหนึ่งรายการตรงกันทั้งคู่ Plugin ที่ไม่ได้รวมมาในชุดจะมีสิทธิ์เหนือกว่า
- ความกำกวมที่เหลือจะถูกละเว้นจนกว่าผู้ใช้หรือการกำหนดค่าจะระบุผู้ให้บริการ
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
modelPrefixes | string[] | คำนำหน้าที่จับคู่ด้วย startsWith กับ id โมเดลแบบย่อ |
modelPatterns | string[] | แหล่งที่มาของนิพจน์ปกติที่จับคู่กับ id โมเดลแบบย่อหลังจากนำส่วนต่อท้ายของโปรไฟล์ออก |
ข้อมูลอ้างอิง modelCatalog
ใช้ modelCatalog เมื่อ OpenClaw ควรรู้เมตาดาตาโมเดลของผู้ให้บริการก่อน
โหลดรันไทม์ของ Plugin นี่คือแหล่งที่แมนิเฟสต์เป็นเจ้าของสำหรับแถวแค็ตตาล็อกแบบคงที่,
นามแฝงของผู้ให้บริการ, กฎการระงับ, และโหมดการค้นพบ การรีเฟรชรันไทม์
ยังคงอยู่ในโค้ดรันไทม์ของผู้ให้บริการ แต่แมนิเฟสต์จะบอกแกนหลักเมื่อจำเป็นต้องใช้รันไทม์
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
providers | Record<string, object> | แถวแค็ตตาล็อกสำหรับ id ผู้ให้บริการที่ Plugin นี้เป็นเจ้าของ คีย์ควรปรากฏใน providers ระดับบนสุดด้วย |
aliases | Record<string, object> | นามแฝงของผู้ให้บริการที่ควรแก้ไขไปยังผู้ให้บริการที่เป็นเจ้าของสำหรับการวางแผนแค็ตตาล็อกหรือการระงับ |
suppressions | object[] | แถวโมเดลจากแหล่งอื่นที่ Plugin นี้ระงับด้วยเหตุผลเฉพาะของผู้ให้บริการ |
discovery | Record<string, "static" | "refreshable" | "runtime"> | แค็ตตาล็อกผู้ให้บริการสามารถอ่านจากเมตาดาตาแมนิเฟสต์ รีเฟรชเข้าแคช หรือต้องใช้รันไทม์หรือไม่ |
aliases มีส่วนร่วมในการค้นหาความเป็นเจ้าของผู้ให้บริการสำหรับการวางแผนแค็ตตาล็อกโมเดล
เป้าหมายของนามแฝงต้องเป็นผู้ให้บริการระดับบนสุดที่ Plugin เดียวกันเป็นเจ้าของ เมื่อรายการ
ที่กรองตามผู้ให้บริการใช้นามแฝง OpenClaw สามารถอ่านแมนิเฟสต์ของเจ้าของและ
ใช้การแทนที่ API/URL ฐานของนามแฝงได้โดยไม่ต้องโหลดรันไทม์ของผู้ให้บริการ
นามแฝงจะไม่ขยายรายการแค็ตตาล็อกที่ไม่กรอง; รายการแบบกว้างจะแสดงเฉพาะ
แถวของผู้ให้บริการตามรูปแบบมาตรฐานที่เป็นเจ้าของเท่านั้น
suppressions แทนที่ฮุก suppressBuiltInModel ของรันไทม์ผู้ให้บริการเดิม
รายการการระงับจะมีผลเฉพาะเมื่อผู้ให้บริการเป็นของ Plugin หรือ
ประกาศเป็นคีย์ modelCatalog.aliases ที่ชี้ไปยังผู้ให้บริการที่เป็นเจ้าของ ฮุกการระงับ
ของรันไทม์จะไม่ถูกเรียกระหว่างการแก้ไขโมเดลอีกต่อไป
ฟิลด์ผู้ให้บริการ:
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
baseUrl | string | URL ฐานเริ่มต้นที่ไม่บังคับสำหรับโมเดลในแค็ตตาล็อกผู้ให้บริการนี้ |
api | ModelApi | อะแดปเตอร์ API เริ่มต้นที่ไม่บังคับสำหรับโมเดลในแค็ตตาล็อกผู้ให้บริการนี้ |
headers | Record<string, string> | ส่วนหัวแบบคงที่ที่ไม่บังคับซึ่งใช้กับแค็ตตาล็อกผู้ให้บริการนี้ |
models | object[] | แถวโมเดลที่จำเป็น แถวที่ไม่มี id จะถูกละเว้น |
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
id | string | id โมเดลภายในผู้ให้บริการ โดยไม่มีคำนำหน้า provider/ |
name | string | ชื่อที่ใช้แสดงผลที่ไม่บังคับ |
api | ModelApi | การแทนที่ API ต่อโมเดลที่ไม่บังคับ |
baseUrl | string | การแทนที่ URL ฐานต่อโมเดลที่ไม่บังคับ |
headers | Record<string, string> | ส่วนหัวแบบคงที่ต่อโมเดลที่ไม่บังคับ |
input | Array<"text" | "image" | "document" | "audio" | "video"> | รูปแบบข้อมูลที่โมเดลยอมรับ |
reasoning | boolean | โมเดลเปิดเผยพฤติกรรมการใช้เหตุผลหรือไม่ |
contextWindow | number | หน้าต่างบริบทดั้งเดิมของผู้ให้บริการ |
contextTokens | number | ขีดจำกัดบริบทรันไทม์ที่มีผลซึ่งไม่บังคับ เมื่อแตกต่างจาก contextWindow |
maxTokens | number | จำนวนโทเค็นเอาต์พุตสูงสุดเมื่อทราบ |
cost | object | ราคาต่อหนึ่งล้านโทเค็นเป็นดอลลาร์สหรัฐที่ไม่บังคับ รวมถึง tieredPricing ที่ไม่บังคับ |
compat | object | แฟล็กความเข้ากันได้ที่ไม่บังคับ ซึ่งตรงกับความเข้ากันได้ของการกำหนดค่าโมเดล OpenClaw |
status | "available" | "preview" | "deprecated" | "disabled" | สถานะรายการ ระงับเฉพาะเมื่อแถวนั้นต้องไม่ปรากฏเลย |
statusReason | string | เหตุผลที่ไม่บังคับซึ่งแสดงกับสถานะที่ไม่พร้อมใช้งาน |
replaces | string[] | id โมเดลภายในผู้ให้บริการรุ่นเก่าที่โมเดลนี้แทนที่ |
replacedBy | string | id โมเดลภายในผู้ให้บริการที่ใช้แทนสำหรับแถวที่เลิกใช้แล้ว |
tags | string[] | แท็กที่เสถียรซึ่งใช้โดยตัวเลือกและตัวกรอง |
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
provider | string | id ผู้ให้บริการสำหรับแถวต้นทางที่จะระงับ ต้องเป็นของ Plugin นี้หรือประกาศเป็นนามแฝงที่เป็นเจ้าของ |
model | string | id โมเดลภายในผู้ให้บริการที่จะระงับ |
reason | string | ข้อความที่ไม่บังคับซึ่งแสดงเมื่อมีการร้องขอแถวที่ถูกระงับโดยตรง |
when.baseUrlHosts | string[] | รายการโฮสต์ URL ฐานของผู้ให้บริการที่มีผลซึ่งไม่บังคับ และต้องมีอยู่ก่อนที่การระงับจะมีผล |
when.providerConfigApiIn | string[] | รายการค่า api ของการกำหนดค่าผู้ให้บริการแบบตรงกันทุกประการที่ไม่บังคับ และต้องมีอยู่ก่อนที่การระงับจะมีผล |
modelCatalog ใช้ static เฉพาะเมื่อแถวใน manifest สมบูรณ์พอให้พื้นผิวรายการและตัวเลือกที่กรองตาม provider ข้ามการค้นหา registry/runtime ได้ ใช้ refreshable เมื่อแถวใน manifest มีประโยชน์ในฐานะ seed หรือข้อมูลเสริมที่แสดงเป็นรายการได้ แต่การ refresh/cache สามารถเพิ่มแถวเพิ่มเติมในภายหลังได้ แถวแบบ refreshable ไม่ถือเป็นแหล่งอ้างอิงที่มีอำนาจโดยตัวเอง ใช้ runtime เมื่อ OpenClaw ต้องโหลด runtime ของ provider เพื่อให้รู้รายการ
ข้อมูลอ้างอิง modelIdNormalization
ใช้modelIdNormalization สำหรับการล้าง model-id ราคาถูกที่ provider เป็นเจ้าของ ซึ่งต้องเกิดขึ้นก่อน runtime ของ provider โหลด วิธีนี้ทำให้นามแฝง เช่น ชื่อโมเดลแบบสั้น, id เดิมเฉพาะ provider และกฎ prefix ของ proxy อยู่ใน manifest ของ Plugin ที่เป็นเจ้าของ แทนที่จะอยู่ในตารางเลือกโมเดลของ core
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
aliases | Record<string,string> | นามแฝง model-id แบบตรงตัวที่ไม่สนตัวพิมพ์เล็กใหญ่ ค่าจะถูกส่งคืนตามที่เขียนไว้ |
stripPrefixes | string[] | Prefix ที่จะลบออกก่อนค้นหานามแฝง มีประโยชน์สำหรับการซ้ำซ้อนแบบ provider/model รุ่นเก่า |
prefixWhenBare | string | Prefix ที่จะเพิ่มเมื่อ model id ที่ normalize แล้ว ยังไม่มี / อยู่ |
prefixWhenBareAfterAliasStartsWith | object[] | กฎ prefix ของ bare-id แบบมีเงื่อนไขหลังค้นหานามแฝง โดยอิงจาก modelPrefix และ prefix |
ข้อมูลอ้างอิง providerEndpoints
ใช้providerEndpoints สำหรับการจัดประเภท endpoint ที่นโยบายคำขอทั่วไปต้องรู้ก่อน runtime ของ provider โหลด Core ยังคงเป็นเจ้าของความหมายของแต่ละ endpointClass; manifest ของ Plugin เป็นเจ้าของ metadata ของ host และ base URL
ฟิลด์ของ endpoint:
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
endpointClass | string | คลาส endpoint ที่ core รู้จัก เช่น openrouter, moonshot-native หรือ google-vertex |
hosts | string[] | ชื่อ host แบบตรงตัวที่ map ไปยังคลาส endpoint |
hostSuffixes | string[] | Suffix ของ host ที่ map ไปยังคลาส endpoint ใส่ . นำหน้าเพื่อให้ตรงเฉพาะ domain suffix เท่านั้น |
baseUrls | string[] | HTTP(S) base URL ที่ normalize แล้วแบบตรงตัว ซึ่ง map ไปยังคลาส endpoint |
googleVertexRegion | string | Region ของ Google Vertex แบบ static สำหรับ global host แบบตรงตัว |
googleVertexRegionHostSuffix | string | Suffix ที่จะตัดออกจาก host ที่ตรงกัน เพื่อเปิดเผย prefix ของ region Google Vertex |
ข้อมูลอ้างอิง providerRequest
ใช้providerRequest สำหรับ metadata ความเข้ากันได้ของคำขอแบบราคาถูกที่นโยบายคำขอทั่วไปต้องใช้โดยไม่ต้องโหลด runtime ของ provider เก็บการเขียน payload ใหม่ที่เฉพาะต่อพฤติกรรมไว้ใน hook ของ runtime provider หรือตัวช่วยตระกูล provider ที่ใช้ร่วมกัน
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
family | string | ป้ายกำกับตระกูล provider ที่ใช้ในการตัดสินใจความเข้ากันได้ของคำขอทั่วไปและการวินิจฉัย |
compatibilityFamily | "moonshot" | กลุ่มความเข้ากันได้ของตระกูล provider แบบไม่บังคับ สำหรับตัวช่วยคำขอที่ใช้ร่วมกัน |
openAICompletions | object | flag ของคำขอ completions ที่เข้ากันได้กับ OpenAI ปัจจุบันคือ supportsStreamingUsage |
ข้อมูลอ้างอิง modelPricing
ใช้modelPricing เมื่อ provider ต้องควบคุมพฤติกรรม pricing ฝั่ง control-plane ก่อน runtime โหลด pricing cache ของ Gateway อ่าน metadata นี้โดยไม่ import โค้ด runtime ของ provider
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
external | boolean | ตั้งเป็น false สำหรับ provider แบบ local/self-hosted ที่ไม่ควรดึงราคา OpenRouter หรือ LiteLLM เลย |
openRouter | false | object | mapping การค้นหาราคา OpenRouter ค่า false จะปิดการค้นหา OpenRouter สำหรับ provider นี้ |
liteLLM | false | object | mapping การค้นหาราคา LiteLLM ค่า false จะปิดการค้นหา LiteLLM สำหรับ provider นี้ |
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
provider | string | id ของ provider ใน catalog ภายนอกเมื่อแตกต่างจาก id provider ของ OpenClaw เช่น z-ai สำหรับ provider zai |
passthroughProviderModel | boolean | ปฏิบัติต่อ model id ที่มี slash เป็น ref provider/model ซ้อนกัน มีประโยชน์สำหรับ proxy provider เช่น OpenRouter |
modelIdTransforms | "version-dots"[] | variant ของ model-id ใน catalog ภายนอกเพิ่มเติม version-dots จะลอง id เวอร์ชันแบบมีจุด เช่น claude-opus-4.6 |
ดัชนี Provider ของ OpenClaw
ดัชนี Provider ของ OpenClaw คือ metadata แบบ preview ที่ OpenClaw เป็นเจ้าของสำหรับ provider ที่ Plugin อาจยังไม่ได้ติดตั้ง ยังไม่ถือเป็นส่วนหนึ่งของ manifest ของ Plugin manifest ของ Plugin ยังคงเป็นแหล่งอ้างอิงที่มีอำนาจของ Plugin ที่ติดตั้งแล้ว ดัชนี Provider คือ contract สำรองภายในที่พื้นผิวตัวเลือก provider ที่ติดตั้งได้ในอนาคตและตัวเลือกโมเดลก่อนติดตั้งจะใช้เมื่อยังไม่ได้ติดตั้ง Plugin ของ provider ลำดับอำนาจของ catalog:- config ของผู้ใช้
- manifest ของ Plugin ที่ติดตั้งแล้ว
modelCatalog - cache ของ catalog โมเดลจากการ refresh อย่างชัดเจน
- แถว preview ของดัชนี Provider ของ OpenClaw
modelCatalog แบบเดียวกับ manifest ของ Plugin แต่ควรจำกัดอยู่ที่ metadata การแสดงผลที่เสถียร เว้นแต่ฟิลด์ adapter runtime เช่น api, baseUrl, pricing หรือ flag ความเข้ากันได้ จะถูกตั้งใจให้สอดคล้องกับ manifest ของ Plugin ที่ติดตั้งแล้ว provider ที่มีการค้นหา /models แบบสดควรเขียนแถวที่ refresh แล้วผ่านเส้นทาง cache ของ catalog โมเดลแบบชัดเจน แทนที่จะให้การแสดงรายการปกติหรือ onboarding เรียก API ของ provider
รายการในดัชนี Provider อาจมี metadata ของ Plugin ที่ติดตั้งได้สำหรับ provider ที่ Plugin ถูกย้ายออกจาก core หรือยังไม่ได้ติดตั้งอยู่ด้วย metadata นี้สะท้อนรูปแบบ catalog ของช่องทาง: ชื่อ package, spec การติดตั้ง npm, integrity ที่คาดหวัง และป้ายกำกับตัวเลือก auth แบบราคาถูก เพียงพอสำหรับแสดงตัวเลือกการตั้งค่าที่ติดตั้งได้ เมื่อติดตั้ง Plugin แล้ว manifest ของ Plugin จะชนะ และรายการในดัชนี Provider จะถูกละเว้นสำหรับ provider นั้น
คีย์ capability ระดับบนสุดแบบ legacy ถูกเลิกใช้แล้ว ใช้ openclaw doctor --fix เพื่อย้าย speechProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, mediaUnderstandingProviders, imageGenerationProviders, videoGenerationProviders, webFetchProviders และ webSearchProviders ไปไว้ใต้ contracts; การโหลด manifest ตามปกติจะไม่ถือว่าฟิลด์ระดับบนสุดเหล่านั้นเป็นเจ้าของ capability อีกต่อไป
Manifest เทียบกับ package.json
ไฟล์ทั้งสองทำหน้าที่ต่างกัน:| ไฟล์ | ใช้สำหรับ |
|---|---|
openclaw.plugin.json | การค้นพบ, การตรวจสอบ config, metadata ตัวเลือก auth และ hint ของ UI ที่ต้องมีอยู่ก่อนโค้ด Plugin รัน |
package.json | metadata ของ npm, การติดตั้ง dependency และบล็อก openclaw ที่ใช้สำหรับ entrypoint, install gating, setup หรือ catalog metadata |
- ถ้า OpenClaw ต้องรู้ก่อนโหลดโค้ด Plugin ให้ใส่ไว้ใน
openclaw.plugin.json - ถ้าเกี่ยวกับ packaging, entry file หรือพฤติกรรมการติดตั้ง npm ให้ใส่ไว้ใน
package.json
ฟิลด์ package.json ที่มีผลต่อการค้นพบ
metadata ของ Plugin บางส่วนที่อยู่ก่อน runtime ตั้งใจให้อยู่ในpackage.json ภายใต้บล็อก openclaw แทนที่จะอยู่ใน openclaw.plugin.json
openclaw.bundle และ openclaw.bundle.json ไม่ใช่ contract ของ Plugin OpenClaw; Plugin แบบ native ต้องใช้ openclaw.plugin.json ร่วมกับฟิลด์ package.json#openclaw ที่รองรับด้านล่าง
ตัวอย่างสำคัญ:
| ฟิลด์ | ความหมาย |
|---|---|
openclaw.extensions | ประกาศ entrypoint ของ Plugin แบบเนทีฟ ต้องอยู่ภายในไดเรกทอรีแพ็กเกจ Plugin เท่านั้น |
openclaw.runtimeExtensions | ประกาศ entrypoint runtime ของ JavaScript ที่ build แล้วสำหรับแพ็กเกจที่ติดตั้ง ต้องอยู่ภายในไดเรกทอรีแพ็กเกจ Plugin เท่านั้น |
openclaw.setupEntry | entrypoint สำหรับ setup เท่านั้นแบบเบา ใช้ระหว่าง onboarding, การเริ่ม channel แบบหน่วงเวลา, และการค้นหาสถานะ channel/SecretRef แบบอ่านอย่างเดียว ต้องอยู่ภายในไดเรกทอรีแพ็กเกจ Plugin เท่านั้น |
openclaw.runtimeSetupEntry | ประกาศ entrypoint setup ของ JavaScript ที่ build แล้วสำหรับแพ็กเกจที่ติดตั้ง ต้องมี setupEntry, ต้องมีอยู่จริง, และต้องอยู่ภายในไดเรกทอรีแพ็กเกจ Plugin |
openclaw.channel | metadata catalog ของ channel แบบเบา เช่น ป้ายกำกับ, เส้นทาง docs, alias, และข้อความสำหรับการเลือก |
openclaw.channel.commands | metadata แบบคงที่ของคำสั่งเนทีฟและค่าเริ่มต้นอัตโนมัติของ native skill ที่ใช้โดยพื้นผิว config, audit, และรายการคำสั่งก่อน runtime ของ channel จะโหลด |
openclaw.channel.configuredState | metadata ตัวตรวจสอบ configured-state แบบเบาที่สามารถตอบว่า “setup แบบ env-only มีอยู่แล้วหรือไม่?” โดยไม่ต้องโหลด runtime ของ channel ทั้งหมด |
openclaw.channel.persistedAuthState | metadata ตัวตรวจสอบ persisted-auth แบบเบาที่สามารถตอบว่า “มีอะไรที่ลงชื่อเข้าใช้อยู่แล้วหรือไม่?” โดยไม่ต้องโหลด runtime ของ channel ทั้งหมด |
openclaw.install.clawhubSpec / openclaw.install.npmSpec / openclaw.install.localPath | คำใบ้สำหรับติดตั้ง/อัปเดต Plugin ที่ bundled และ Plugin ที่เผยแพร่ภายนอก |
openclaw.install.defaultChoice | เส้นทางติดตั้งที่ต้องการเมื่อมีแหล่งติดตั้งหลายแหล่งให้ใช้ |
openclaw.install.minHostVersion | เวอร์ชันโฮสต์ OpenClaw ขั้นต่ำที่รองรับ โดยใช้ semver floor เช่น >=2026.3.22 หรือ >=2026.5.1-beta.1 |
openclaw.install.expectedIntegrity | สตริง npm dist integrity ที่คาดไว้ เช่น sha512-...; โฟลว์ install และ update จะตรวจสอบ artifact ที่ดึงมากับค่านี้ |
openclaw.install.allowInvalidConfigRecovery | อนุญาตเส้นทางกู้คืนการติดตั้ง Plugin ที่ bundled แบบจำกัดเมื่อ config ไม่ถูกต้อง |
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen | อนุญาตให้พื้นผิว channel แบบ setup-only โหลดก่อน Plugin channel แบบเต็มระหว่าง startup |
package.json#openclaw.install บอก
onboarding ว่าจะดึงหรือเปิดใช้ Plugin นั้นอย่างไรเมื่อผู้ใช้เลือกหนึ่งใน
ตัวเลือกเหล่านั้น อย่าย้ายคำใบ้การติดตั้งไปไว้ใน openclaw.plugin.json
openclaw.install.minHostVersion จะถูกบังคับใช้ระหว่าง install และการโหลด
registry ของ manifest สำหรับแหล่ง Plugin ที่ไม่ใช่ bundled ค่าที่ไม่ถูกต้องจะถูกปฏิเสธ;
ค่าที่ใหม่กว่าแต่ถูกต้องจะข้าม Plugin ภายนอกบนโฮสต์เก่า แหล่ง Plugin แบบ bundled
จะถือว่า co-versioned กับ checkout ของโฮสต์
metadata install-on-demand อย่างเป็นทางการควรใช้ clawhubSpec เมื่อ Plugin
เผยแพร่บน ClawHub; onboarding จะถือว่านี่เป็นแหล่งรีโมตที่ต้องการและ
บันทึกข้อเท็จจริงของ artifact ClawHub หลัง install npmSpec ยังคงเป็น fallback
เพื่อความเข้ากันได้สำหรับแพ็กเกจที่ยังไม่ได้ย้ายไป ClawHub
การ pin เวอร์ชัน npm แบบ exact อยู่ใน npmSpec อยู่แล้ว ตัวอย่างเช่น
"npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3" รายการ catalog ภายนอก
อย่างเป็นทางการควรจับคู่ spec แบบ exact กับ expectedIntegrity เพื่อให้โฟลว์ update ล้มเหลวแบบปิด
หาก artifact npm ที่ดึงมาไม่ตรงกับ release ที่ pin ไว้อีกต่อไป
onboarding แบบ interactive ยังคงเสนอ npm spec จาก registry ที่เชื่อถือได้ รวมถึงชื่อ
แพ็กเกจเปล่าและ dist-tag เพื่อความเข้ากันได้ การวินิจฉัย catalog สามารถ
แยกแยะแหล่งที่เป็น exact, floating, integrity-pinned, missing-integrity, package-name
mismatch, และ invalid default-choice ได้ นอกจากนี้ยังเตือนเมื่อ
expectedIntegrity มีอยู่แต่ไม่มีแหล่ง npm ที่ถูกต้องให้ pin ได้
เมื่อมี expectedIntegrity
โฟลว์ install/update จะบังคับใช้ค่านี้; เมื่อไม่มีค่านี้ การ resolve registry จะถูก
บันทึกโดยไม่มี integrity pin
Plugin channel ควรให้ openclaw.setupEntry เมื่อ status, รายการ channel,
หรือการสแกน SecretRef จำเป็นต้องระบุบัญชีที่ configured โดยไม่โหลด runtime
ทั้งหมด entry setup ควรเปิดเผย metadata ของ channel รวมถึง adapter สำหรับ config,
status, และ secrets ที่ปลอดภัยต่อ setup; ให้เก็บ network clients, gateway listeners, และ
transport runtimes ไว้ใน entrypoint หลักของ extension
ฟิลด์ entrypoint ของ runtime ไม่ได้ override การตรวจสอบขอบเขตแพ็กเกจสำหรับฟิลด์
entrypoint ของ source ตัวอย่างเช่น openclaw.runtimeExtensions ไม่สามารถทำให้
path openclaw.extensions ที่หลุดออกนอกขอบเขตโหลดได้
openclaw.install.allowInvalidConfigRecovery ถูกตั้งใจให้แคบโดยเฉพาะ มันไม่ได้
ทำให้ config ที่เสียหายตามอำเภอใจติดตั้งได้ ปัจจุบันมันอนุญาตเฉพาะโฟลว์ install
ให้กู้คืนจากความล้มเหลวเฉพาะของการอัปเกรด Plugin bundled ที่ค้างอยู่ เช่น
path ของ Plugin bundled ที่หายไป หรือ entry channels.<id> ที่ค้างอยู่สำหรับ
Plugin bundled เดียวกันนั้น ข้อผิดพลาด config ที่ไม่เกี่ยวข้องยังคงบล็อก install และส่ง operator
ไปที่ openclaw doctor --fix
openclaw.channel.persistedAuthState คือ metadata ของแพ็กเกจสำหรับโมดูลตัวตรวจสอบ
ขนาดเล็ก:
openclaw.channel.configuredState ใช้รูปร่างเดียวกันสำหรับการตรวจสอบ configured
แบบ env-only ที่เบา:
config.hasConfiguredState
ของ Plugin แทน
ลำดับความสำคัญในการค้นพบ (id ของ Plugin ซ้ำกัน)
OpenClaw ค้นพบ Plugin จาก root หลายแหล่ง (bundled, global install, workspace, path ที่เลือกอย่างชัดเจนด้วย config) หากการค้นพบสองรายการใช้id เดียวกัน จะเก็บเฉพาะ manifest ที่มี ลำดับความสำคัญสูงสุด เท่านั้น; duplicate ที่มีลำดับความสำคัญต่ำกว่าจะถูกทิ้งแทนที่จะโหลดเคียงข้างกัน
ลำดับความสำคัญ จากสูงสุดไปต่ำสุด:
- เลือกด้วย config — path ที่ pin ไว้อย่างชัดเจนใน
plugins.entries.<id> - Bundled — Plugin ที่มาพร้อมกับ OpenClaw
- Global install — Plugin ที่ติดตั้งลงใน root ของ Plugin OpenClaw แบบ global
- Workspace — Plugin ที่ค้นพบโดยสัมพันธ์กับ workspace ปัจจุบัน
- สำเนา fork หรือสำเนาเก่าของ Plugin bundled ที่อยู่ใน workspace จะไม่ shadow build ที่ bundled
- หากต้องการ override Plugin bundled ด้วย Plugin local จริงๆ ให้ pin ผ่าน
plugins.entries.<id>เพื่อให้ชนะด้วยลำดับความสำคัญแทนการพึ่งพาการค้นพบใน workspace - การทิ้ง duplicate จะถูก log เพื่อให้ Doctor และการวินิจฉัย startup ชี้ไปยังสำเนาที่ถูกทิ้งได้
- duplicate override ที่เลือกด้วย config จะถูกเขียนใน diagnostics ว่าเป็น override อย่างชัดเจน แต่ยังคงเตือนเพื่อให้ fork เก่าและ shadow โดยไม่ตั้งใจยังมองเห็นได้
ข้อกำหนดของ JSON Schema
- Plugin ทุกตัวต้องมาพร้อม JSON Schema แม้ว่าจะไม่รับ config ก็ตาม
- schema ว่างเป็นที่ยอมรับได้ (ตัวอย่างเช่น
{ "type": "object", "additionalProperties": false }) - schema จะถูก validate ตอนอ่าน/เขียน config ไม่ใช่ตอน runtime
- เมื่อขยายหรือ fork Plugin bundled ด้วยคีย์ config ใหม่ ให้ update
configSchemaในopenclaw.plugin.jsonของ Plugin นั้นพร้อมกัน schema ของ Plugin bundled เป็นแบบ strict ดังนั้นการเพิ่มplugins.entries.<id>.config.myNewKeyใน user config โดยไม่เพิ่มmyNewKeyไปยังconfigSchema.propertiesจะถูกปฏิเสธก่อน runtime ของ Plugin จะโหลด
พฤติกรรมการตรวจสอบ
- คีย์
channels.*ที่ไม่รู้จักเป็น ข้อผิดพลาด เว้นแต่ว่า id ของ channel จะถูกประกาศโดย manifest ของ Plugin plugins.entries.<id>,plugins.allow,plugins.deny, และplugins.slots.*ต้องอ้างอิง id ของ Plugin ที่ ค้นพบได้ id ที่ไม่รู้จักเป็น ข้อผิดพลาด- หาก Plugin ถูกติดตั้งแล้วแต่ manifest หรือ schema เสียหรือหายไป การ validation จะล้มเหลวและ Doctor จะรายงานข้อผิดพลาดของ Plugin
- หากมี config ของ Plugin อยู่แต่ Plugin ถูก ปิดใช้งาน config จะถูกเก็บไว้และ คำเตือน จะแสดงใน Doctor + logs
plugins.* ทั้งหมด
หมายเหตุ
- แมนิเฟสต์เป็นสิ่งที่จำเป็นสำหรับ Plugin OpenClaw แบบเนทีฟ รวมถึงการโหลดจากระบบไฟล์ภายในเครื่องด้วย Runtime ยังคงโหลดโมดูล Plugin แยกต่างหาก; แมนิเฟสต์ใช้สำหรับการค้นพบ + การตรวจสอบความถูกต้องเท่านั้น
- แมนิเฟสต์แบบเนทีฟถูกแยกวิเคราะห์ด้วย JSON5 ดังนั้นคอมเมนต์ คอมมาต่อท้าย และคีย์ที่ไม่ใส่เครื่องหมายคำพูดจึงใช้ได้ ตราบใดที่ค่าสุดท้ายยังเป็นออบเจ็กต์
- ตัวโหลดแมนิเฟสต์จะอ่านเฉพาะฟิลด์ของแมนิเฟสต์ที่มีเอกสารระบุไว้เท่านั้น หลีกเลี่ยงคีย์ระดับบนสุดที่กำหนดเอง
channels,providers,cliBackendsและskillsสามารถละไว้ทั้งหมดได้เมื่อ Plugin ไม่ต้องใช้providerCatalogEntryต้องมีน้ำหนักเบาและไม่ควรนำเข้าโค้ด Runtime แบบกว้าง; ใช้สำหรับเมตาดาต้าแค็ตตาล็อก provider แบบสแตติกหรือตัวอธิบายการค้นพบแบบแคบ ไม่ใช่การดำเนินการระหว่างคำขอproviderDiscoveryEntryเป็นการสะกดแบบเก่าและยังคงใช้งานได้กับ Plugin ที่มีอยู่- ชนิด Plugin แบบเอกสิทธิ์ถูกเลือกผ่าน
plugins.slots.*:kind: "memory"ผ่านplugins.slots.memory,kind: "context-engine"ผ่านplugins.slots.contextEngine(ค่าเริ่มต้นlegacy) - ประกาศชนิด Plugin แบบเอกสิทธิ์ในแมนิเฟสต์นี้
OpenClawPluginDefinition.kindใน runtime entry เลิกใช้แล้วและคงอยู่เพียงเป็นทางถอยกลับเพื่อความเข้ากันได้สำหรับ Plugin รุ่นเก่า - เมตาดาต้า env var (
setup.providers[].envVars,providerAuthEnvVarsที่เลิกใช้แล้ว และchannelEnvVars) เป็นแบบประกาศเท่านั้น สถานะ การตรวจสอบ การตรวจสอบความถูกต้องของการส่ง Cron และพื้นผิวแบบอ่านอย่างเดียวอื่นๆ ยังคงใช้นโยบายความน่าเชื่อถือของ Plugin และการเปิดใช้งานที่มีผลจริงก่อนถือว่า env var ถูกกำหนดค่าแล้ว - สำหรับเมตาดาต้า wizard ของ Runtime ที่ต้องใช้โค้ด provider โปรดดู ฮุก Runtime ของ provider
- หาก Plugin ของคุณขึ้นกับโมดูลเนทีฟ ให้จัดทำเอกสารขั้นตอนการ build และข้อกำหนด allowlist ของตัวจัดการแพ็กเกจใดๆ (เช่น pnpm
allow-build-scripts+pnpm rebuild <package>)
ที่เกี่ยวข้อง
การสร้าง Plugin
เริ่มต้นใช้งาน Plugin
สถาปัตยกรรม Plugin
สถาปัตยกรรมภายในและโมเดลความสามารถ
ภาพรวม SDK
เอกสารอ้างอิง SDK ของ Plugin และการนำเข้าผ่าน subpath