Plugin SDK reference
ไฟล์กำกับ Plugin
หน้านี้ครอบคลุม ไฟล์ manifest ของ Plugin OpenClaw แบบเนทีฟ ซึ่งคือ openclaw.plugin.json สำหรับโครงสร้างบันเดิลที่เข้ากันได้ (Codex, Claude, Cursor) โปรดดู บันเดิล Plugin
รูปแบบบันเดิลที่เข้ากันได้จะใช้ไฟล์ manifest ของตนเองแทน:
- บันเดิล Codex:
.codex-plugin/plugin.json - บันเดิล Claude:
.claude-plugin/plugin.jsonหรือโครงสร้างคอมโพเนนต์ Claude เริ่มต้นที่ไม่มีไฟล์ manifest - บันเดิล Cursor:
.cursor-plugin/plugin.json
OpenClaw ตรวจหาโครงสร้างเหล่านั้นโดยอัตโนมัติ แต่จะไม่ตรวจสอบความถูกต้องเทียบกับสคีมา openclaw.plugin.json ด้านล่าง สำหรับบันเดิลที่เข้ากันได้ OpenClaw จะอ่านเมทาดาทาของบันเดิล ราก Skills ที่ประกาศไว้ รากคำสั่ง Claude ค่าเริ่มต้น settings.json ของ Claude ค่าเริ่มต้น LSP ของ Claude และชุด hook ที่รองรับ เมื่อโครงสร้างตรงตามข้อกำหนดรันไทม์ของ OpenClaw
Plugin OpenClaw แบบเนทีฟทุกตัว ต้อง มาพร้อมกับ openclaw.plugin.json ใน รากของ Plugin OpenClaw จะอ่านไฟล์นี้เพื่อตรวจสอบความถูกต้องของการกำหนดค่า โดยไม่เรียกใช้โค้ด Plugin หากไฟล์ manifest ขาดหายหรือไม่ถูกต้อง การตรวจสอบความถูกต้องของการกำหนดค่าจะถูกระงับและถือเป็นข้อผิดพลาดของ Plugin
โปรดดู Plugin สำหรับคู่มือระบบ Plugin ฉบับเต็ม และ โมเดลความสามารถ สำหรับโมเดลความสามารถแบบเนทีฟและคำแนะนำปัจจุบันด้านความเข้ากันได้ภายนอก
ไฟล์นี้ทำหน้าที่อะไร
openclaw.plugin.json คือเมทาดาทาที่ OpenClaw อ่าน ก่อนโหลดโค้ด Plugin ของคุณ ทุกอย่างในไฟล์นี้ต้องตรวจสอบได้โดยใช้ทรัพยากรน้อย โดยไม่ต้องเริ่มรันไทม์ของ Plugin
ใช้ไฟล์นี้สำหรับ:
- ข้อมูลประจำตัวของ Plugin การตรวจสอบความถูกต้องของการกำหนดค่า และคำแนะนำสำหรับ UI การกำหนดค่า
- เมทาดาทาสำหรับการยืนยันตัวตน การเริ่มต้นใช้งาน และการตั้งค่า (นามแฝง การเปิดใช้งานอัตโนมัติ ตัวแปรสภาพแวดล้อมของผู้ให้บริการ ตัวเลือกการยืนยันตัวตน)
- คำแนะนำการเปิดใช้งานสำหรับพื้นผิวของระนาบควบคุม
- ความเป็นเจ้าของตระกูลโมเดลแบบย่อ
- สแนปช็อตแบบคงที่ของความเป็นเจ้าของความสามารถ (
contracts) - เมทาดาทาของตัวรัน QA ที่โฮสต์
openclaw qaที่ใช้ร่วมกันสามารถตรวจสอบได้ - เมทาดาทาการกำหนดค่าเฉพาะช่องทางที่รวมเข้ากับแค็ตตาล็อกและพื้นผิวการตรวจสอบความถูกต้อง
อย่าใช้ไฟล์นี้สำหรับ: การลงทะเบียนพฤติกรรมรันไทม์ การประกาศจุดเริ่มต้นของโค้ด หรือเมทาดาทาการติดตั้ง npm สิ่งเหล่านี้ควรอยู่ในโค้ด Plugin และ package.json
ตัวอย่างขั้นต่ำ
{ "id": "voice-call", "configSchema": { "type": "object", "additionalProperties": false, "properties": {} }}ตัวอย่างแบบละเอียด
{ "id": "openrouter", "name": "OpenRouter", "description": "Plugin ผู้ให้บริการ OpenRouter", "version": "1.0.0", "providers": ["openrouter"], "modelSupport": { "modelPrefixes": ["router-"] }, "modelIdNormalization": { "providers": { "openrouter": { "prefixWhenBare": "openrouter" } } }, "providerEndpoints": [ { "endpointClass": "openrouter", "hostSuffixes": ["openrouter.ai"] } ], "providerRequest": { "providers": { "openrouter": { "family": "openrouter" } } }, "cliBackends": ["openrouter-cli"], "syntheticAuthRefs": ["openrouter-cli"], "setup": { "providers": [ { "id": "openrouter", "envVars": ["OPENROUTER_API_KEY"] } ] }, "providerAuthAliases": { "openrouter-coding": "openrouter" }, "providerAuthChoices": [ { "provider": "openrouter", "method": "api-key", "choiceId": "openrouter-api-key", "choiceLabel": "คีย์ API ของ OpenRouter", "groupId": "openrouter", "groupLabel": "OpenRouter", "optionKey": "openrouterApiKey", "cliFlag": "--openrouter-api-key", "cliOption": "--openrouter-api-key <key>", "cliDescription": "คีย์ API ของ OpenRouter", "onboardingScopes": ["text-inference"] } ], "uiHints": { "apiKey": { "label": "คีย์ API", "placeholder": "sk-or-v1-...", "sensitive": true } }, "configSchema": { "type": "object", "additionalProperties": false, "properties": { "apiKey": { "type": "string" } } }}ข้อมูลอ้างอิงฟิลด์ระดับบนสุด
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
id |
ใช่ | string |
รหัส Plugin มาตรฐาน ซึ่งเป็นรหัสที่ใช้ใน plugins.entries.<id> |
configSchema |
ใช่ | object |
JSON Schema แบบอินไลน์สำหรับการกำหนดค่าของ Plugin นี้ |
requiresPlugins |
ไม่ | string[] |
รหัส Plugin ที่ต้องติดตั้งร่วมด้วยเพื่อให้ Plugin นี้มีผล การค้นหาจะยังคงทำให้โหลด Plugin ได้ แต่จะแจ้งเตือนเมื่อไม่มี Plugin ที่จำเป็นรายการใดรายการหนึ่ง |
enabledByDefault |
ไม่ | true |
ระบุให้ Plugin ที่รวมมากับระบบเปิดใช้งานเป็นค่าเริ่มต้น หากละเว้นหรือกำหนดเป็นค่าใดก็ตามที่ไม่ใช่ true Plugin จะยังคงปิดใช้งานเป็นค่าเริ่มต้น |
enabledByDefaultOnPlatforms |
ไม่ | string[] |
ระบุให้ Plugin ที่รวมมากับระบบเปิดใช้งานเป็นค่าเริ่มต้นเฉพาะบนแพลตฟอร์ม Node.js ที่ระบุไว้ เช่น ["darwin"] การกำหนดค่าอย่างชัดเจนยังคงมีลำดับความสำคัญสูงกว่า |
legacyPluginIds |
ไม่ | string[] |
รหัสแบบเดิมที่จะถูกปรับให้เป็นรหัส Plugin มาตรฐานนี้ |
autoEnableWhenConfiguredProviders |
ไม่ | string[] |
รหัสผู้ให้บริการที่ควรเปิดใช้งาน Plugin นี้โดยอัตโนมัติเมื่อการยืนยันตัวตน การกำหนดค่า หรือการอ้างอิงโมเดลกล่าวถึงรหัสเหล่านั้น |
kind |
ไม่ | PluginKind | PluginKind[] |
ประกาศชนิด Plugin แบบเอกสิทธิ์หนึ่งชนิดขึ้นไป ("memory", "context-engine") ที่ใช้โดย plugins.slots.* Plugin ที่เป็นเจ้าของทั้งสองสล็อตจะประกาศทั้งสองชนิดไว้ในอาร์เรย์เดียว |
channels |
ไม่ | string[] |
รหัสช่องทางที่ Plugin นี้เป็นเจ้าของ ใช้สำหรับการค้นหาและการตรวจสอบความถูกต้องของการกำหนดค่า |
providers |
ไม่ | string[] |
รหัสผู้ให้บริการที่ Plugin นี้เป็นเจ้าของ |
providerCatalogEntry |
ไม่ | string |
พาธโมดูลแค็ตตาล็อกผู้ให้บริการแบบน้ำหนักเบาที่สัมพันธ์กับรากของ Plugin สำหรับเมทาดาทาแค็ตตาล็อกผู้ให้บริการที่อยู่ในขอบเขตของแมนิเฟสต์ ซึ่งโหลดได้โดยไม่ต้องเปิดใช้งานรันไทม์ทั้งหมดของ Plugin |
modelSupport |
ไม่ | object |
เมทาดาทาแบบย่อของตระกูลโมเดลที่แมนิเฟสต์เป็นเจ้าของ ซึ่งใช้โหลด Plugin โดยอัตโนมัติก่อนรันไทม์ |
modelCatalog |
ไม่ | object |
เมทาดาทาแค็ตตาล็อกโมเดลแบบประกาศสำหรับผู้ให้บริการที่ Plugin นี้เป็นเจ้าของ นี่คือสัญญาระดับส่วนควบคุมสำหรับการแสดงรายการแบบอ่านอย่างเดียว การเริ่มต้นใช้งาน ตัวเลือกโมเดล นามแฝง และการระงับในอนาคต โดยไม่ต้องโหลดรันไทม์ของ Plugin |
modelPricing |
ไม่ | object |
นโยบายค้นหาราคาภายนอกที่ผู้ให้บริการเป็นเจ้าของ ใช้เพื่อยกเว้นผู้ให้บริการภายในเครื่อง/โฮสต์เองออกจากแค็ตตาล็อกราคาระยะไกล หรือแมปการอ้างอิงผู้ให้บริการกับรหัสแค็ตตาล็อก OpenRouter/LiteLLM โดยไม่ฮาร์ดโค้ดรหัสผู้ให้บริการในแกนกลาง |
modelIdNormalization |
ไม่ | object |
การล้างนามแฝง/คำนำหน้ารหัสโมเดลที่ผู้ให้บริการเป็นเจ้าของ ซึ่งต้องทำงานก่อนโหลดรันไทม์ของผู้ให้บริการ |
providerEndpoints |
ไม่ | object[] |
เมทาดาทาโฮสต์ปลายทาง/baseUrl ที่แมนิเฟสต์เป็นเจ้าของสำหรับเส้นทางผู้ให้บริการ ซึ่งแกนกลางต้องจัดประเภทก่อนโหลดรันไทม์ของผู้ให้บริการ |
providerRequest |
ไม่ | object |
เมทาดาทาตระกูลผู้ให้บริการและความเข้ากันได้ของคำขอที่ประมวลผลได้รวดเร็ว ซึ่งนโยบายคำขอทั่วไปใช้ก่อนโหลดรันไทม์ของผู้ให้บริการ |
secretProviderIntegrations |
ไม่ | Record<string, object> |
ค่าที่ตั้งไว้ล่วงหน้าของผู้ให้บริการการเรียกใช้ SecretRef แบบประกาศ ซึ่งพื้นผิวการตั้งค่าหรือการติดตั้งสามารถนำเสนอได้โดยไม่ต้องฮาร์ดโค้ดการผสานรวมเฉพาะผู้ให้บริการในแกนกลาง |
cliBackends |
ไม่ | string[] |
รหัสแบ็กเอนด์การอนุมานของ CLI ที่ Plugin นี้เป็นเจ้าของ ใช้สำหรับเปิดใช้งานโดยอัตโนมัติเมื่อเริ่มต้นระบบจากการอ้างอิงการกำหนดค่าที่ระบุไว้อย่างชัดเจน |
syntheticAuthRefs |
ไม่ | string[] |
การอ้างอิงผู้ให้บริการหรือแบ็กเอนด์ CLI ที่ควรตรวจสอบฮุกการยืนยันตัวตนสังเคราะห์ซึ่ง Plugin เป็นเจ้าของ ระหว่างการค้นหาโมเดลแบบเย็นก่อนโหลดรันไทม์ |
nonSecretAuthMarkers |
ไม่ | string[] |
ค่าคีย์ API ตัวแทนที่ Plugin ซึ่งรวมมากับระบบเป็นเจ้าของ โดยแสดงถึงสถานะข้อมูลประจำตัวภายในเครื่อง OAuth หรือข้อมูลประจำตัวแวดล้อมที่ไม่ใช่ความลับ |
commandAliases |
ไม่ | object[] |
ชื่อคำสั่งที่ Plugin นี้เป็นเจ้าของ ซึ่งควรสร้างการวินิจฉัยการกำหนดค่าและ CLI ที่รับรู้ถึง Plugin ก่อนโหลดรันไทม์ |
providerUsageAuthEnvVars |
ไม่ | Record<string, string[]> |
ข้อมูลประจำตัวผู้ให้บริการสำหรับการใช้งาน/การเรียกเก็บเงินเท่านั้น OpenClaw ใช้ชื่อเหล่านี้สำหรับการค้นหาการใช้งานและการลบข้อมูลลับ แต่ไม่ใช้สำหรับการยืนยันตัวตนในการอนุมาน |
providerAuthAliases |
ไม่ | Record<string, string> |
รหัสผู้ให้บริการที่ควรนำรหัสผู้ให้บริการอื่นมาใช้ซ้ำสำหรับการค้นหาการยืนยันตัวตน เช่น ผู้ให้บริการด้านการเขียนโค้ดที่ใช้คีย์ API และโปรไฟล์การยืนยันตัวตนร่วมกับผู้ให้บริการพื้นฐาน |
providerAuthChoices |
ไม่ | object[] |
เมทาดาทาตัวเลือกการยืนยันตัวตนที่ประมวลผลได้รวดเร็วสำหรับตัวเลือกการเริ่มต้นใช้งาน การแก้ไขผู้ให้บริการที่ต้องการ และการเชื่อมต่อแฟล็ก CLI อย่างง่าย |
activation |
ไม่ | object |
เมทาดาทาตัววางแผนการเปิดใช้งานที่ประมวลผลได้รวดเร็วสำหรับการโหลดที่ทริกเกอร์โดยการเริ่มต้นระบบ ผู้ให้บริการ คำสั่ง ช่องทาง เส้นทาง และความสามารถ เป็นเพียงเมทาดาทาเท่านั้น รันไทม์ของ Plugin ยังคงเป็นเจ้าของพฤติกรรมจริง |
setup |
ไม่ | object |
ตัวอธิบายการตั้งค่า/การเริ่มต้นใช้งานที่ประมวลผลได้รวดเร็ว ซึ่งพื้นผิวการค้นหาและการตั้งค่าสามารถตรวจสอบได้โดยไม่ต้องโหลดรันไทม์ของ Plugin |
qaRunners |
ไม่ | object[] |
ตัวอธิบายตัวรัน QA ที่ประมวลผลได้รวดเร็ว ซึ่งโฮสต์ openclaw qa ที่ใช้ร่วมกันจะใช้ก่อนโหลดรันไทม์ของ Plugin |
contracts |
ไม่ | object |
สแนปช็อตแบบคงที่ของการเป็นเจ้าของความสามารถสำหรับฮุกการยืนยันตัวตนภายนอก การฝัง การพูด การถอดเสียงแบบเรียลไทม์ เสียงแบบเรียลไทม์ การทำความเข้าใจสื่อ การสร้างภาพ/วิดีโอ/เพลง การดึงข้อมูลเว็บ การค้นหาเว็บ ผู้ให้บริการเวิร์กเกอร์ การแยกเนื้อหาเอกสาร/เว็บ และการเป็นเจ้าของเครื่องมือ |
configContracts |
ไม่ | object |
พฤติกรรมการกำหนดค่าที่แมนิเฟสต์เป็นเจ้าของ ซึ่งตัวช่วยทั่วไปของแกนกลางใช้ ได้แก่ การตรวจหาแฟล็กอันตราย เป้าหมายการย้าย SecretRef และการจำกัดพาธการกำหนดค่าแบบเดิม ดูข้อมูลอ้างอิง configContracts |
mediaUnderstandingProviderMetadata |
ไม่ | Record<string, object> |
ค่าเริ่มต้นสำหรับการทำความเข้าใจสื่อที่ประมวลผลได้รวดเร็วสำหรับรหัสผู้ให้บริการที่ประกาศไว้ใน contracts.mediaUnderstandingProviders |
imageGenerationProviderMetadata |
ไม่ | Record<string, object> |
เมทาดาทาการยืนยันตัวตนสำหรับการสร้างรูปภาพที่ตรวจสอบได้อย่างรวดเร็วสำหรับ ID ผู้ให้บริการที่ประกาศใน contracts.imageGenerationProviders รวมถึงชื่อแทนการยืนยันตัวตนที่ผู้ให้บริการเป็นเจ้าของและข้อกำหนดป้องกันสำหรับ URL ฐาน |
videoGenerationProviderMetadata |
ไม่ | Record<string, object> |
เมทาดาทาการยืนยันตัวตนสำหรับการสร้างวิดีโอที่ตรวจสอบได้อย่างรวดเร็วสำหรับ ID ผู้ให้บริการที่ประกาศใน contracts.videoGenerationProviders รวมถึงชื่อแทนการยืนยันตัวตนที่ผู้ให้บริการเป็นเจ้าของและข้อกำหนดป้องกันสำหรับ URL ฐาน |
musicGenerationProviderMetadata |
ไม่ | Record<string, object> |
เมทาดาทาการยืนยันตัวตนสำหรับการสร้างเพลงที่ตรวจสอบได้อย่างรวดเร็วสำหรับ ID ผู้ให้บริการที่ประกาศใน contracts.musicGenerationProviders รวมถึงชื่อแทนการยืนยันตัวตนที่ผู้ให้บริการเป็นเจ้าของและข้อกำหนดป้องกันสำหรับ URL ฐาน |
toolMetadata |
ไม่ | Record<string, object> |
เมทาดาทาความพร้อมใช้งานที่ตรวจสอบได้อย่างรวดเร็วสำหรับเครื่องมือที่ Plugin เป็นเจ้าของซึ่งประกาศใน contracts.tools ใช้เมื่อเครื่องมือไม่ควรโหลดรันไทม์ เว้นแต่จะมีหลักฐานจากการกำหนดค่า ตัวแปรสภาพแวดล้อม หรือการยืนยันตัวตน |
channelConfigs |
ไม่ | Record<string, object> |
เมทาดาทาการกำหนดค่าช่องทางที่ไฟล์แมนิเฟสต์เป็นเจ้าของ ซึ่งผสานเข้ากับส่วนการค้นพบและการตรวจสอบความถูกต้องก่อนโหลดรันไทม์ |
skills |
ไม่ | string[] |
ไดเรกทอรี Skills ที่จะโหลด โดยระบุแบบสัมพัทธ์กับรากของ Plugin |
name |
ไม่ | string |
ชื่อ Plugin ที่มนุษย์อ่านเข้าใจได้ |
description |
ไม่ | string |
สรุปสั้นๆ ที่แสดงในส่วนต่างๆ ของ Plugin |
catalog |
ไม่ | object |
คำแนะนำด้านการนำเสนอที่เป็นทางเลือกสำหรับส่วนแค็ตตาล็อก Plugin เมทาดาทานี้ไม่ได้ติดตั้ง เปิดใช้งาน หรือให้ความไว้วางใจแก่ Plugin |
icon |
ไม่ | string |
URL รูปภาพแบบ HTTPS สำหรับการ์ดในมาร์เก็ตเพลส/แค็ตตาล็อก ClawHub ยอมรับ URL https:// ใดๆ ที่ถูกต้อง และจะใช้ไอคอน Plugin เริ่มต้นแทนเมื่อไม่ได้ระบุค่านี้หรือค่าไม่ถูกต้อง |
version |
ไม่ | string |
เวอร์ชัน Plugin สำหรับให้ข้อมูล |
uiHints |
ไม่ | Record<string, object> |
ป้ายกำกับ UI ข้อความตัวอย่าง และคำแนะนำระดับความอ่อนไหวสำหรับฟิลด์การกำหนดค่า |
ข้อมูลอ้างอิง catalog
catalog ให้คำแนะนำการแสดงผลเพิ่มเติมแก่เบราว์เซอร์ Plugin โฮสต์อาจไม่ใช้คำแนะนำเหล่านี้ คำแนะนำเหล่านี้จะไม่ติดตั้งหรือเปิดใช้งาน Plugin และไม่เปลี่ยนพฤติกรรมขณะรันไทม์หรือระดับความน่าเชื่อถือของ Plugin
{ "catalog": { "featured": true, "order": 10 }}| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
featured |
boolean |
พื้นที่แสดง catalog ควรแนะนำ Plugin นี้หรือไม่ |
order |
number |
คำแนะนำลำดับการแสดงแบบเรียงจากน้อยไปมากในบรรดา Plugin ที่ผ่านการคัดสรร โดยค่าที่ต่ำกว่าจะแสดงก่อน |
ข้อมูลอ้างอิงเมทาดาทาของผู้ให้บริการการสร้าง
ฟิลด์เมทาดาทาของผู้ให้บริการการสร้างอธิบายสัญญาณการยืนยันตัวตนแบบคงที่สำหรับผู้ให้บริการที่ประกาศในรายการ contracts.*GenerationProviders ที่ตรงกัน OpenClaw อ่านฟิลด์เหล่านี้ก่อนโหลดรันไทม์ของผู้ให้บริการ เพื่อให้เครื่องมือหลักตัดสินได้ว่าผู้ให้บริการการสร้างพร้อมใช้งานหรือไม่โดยไม่ต้องนำเข้า Plugin ของผู้ให้บริการทุกรายการ
ใช้ฟิลด์เหล่านี้เฉพาะกับข้อเท็จจริงเชิงประกาศที่ตรวจสอบได้โดยใช้ทรัพยากรน้อยเท่านั้น การรับส่งข้อมูล การแปลงคำขอ การรีเฟรชโทเค็น การตรวจสอบข้อมูลประจำตัว และพฤติกรรมการสร้างจริงยังคงอยู่ในรันไทม์ของ Plugin
{ "contracts": { "imageGenerationProviders": ["example-image"] }, "imageGenerationProviderMetadata": { "example-image": { "aliases": ["example-image-oauth"], "authProviders": ["example-image"], "configSignals": [ { "rootPath": "plugins.entries.example-image.config", "overlayPath": "image", "mode": { "path": "mode", "default": "local", "allowed": ["local"] }, "requiredAny": ["workflow", "workflowPath"], "required": ["promptNodeId"] } ], "authSignals": [ { "provider": "example-image" }, { "provider": "example-image-oauth", "providerBaseUrl": { "provider": "example-image", "defaultBaseUrl": "https://api.example.com/v1", "allowedBaseUrls": ["https://api.example.com/v1"] } } ] } }}รายการเมทาดาทาแต่ละรายการรองรับ:
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
aliases |
ไม่ | string[] |
ID ผู้ให้บริการเพิ่มเติมที่ควรนับเป็นนามแฝงการยืนยันตัวตนแบบคงที่สำหรับผู้ให้บริการการสร้าง |
authProviders |
ไม่ | string[] |
ID ผู้ให้บริการซึ่งโปรไฟล์การยืนยันตัวตนที่กำหนดค่าไว้ควรนับเป็นการยืนยันตัวตนสำหรับผู้ให้บริการการสร้างนี้ |
configSignals |
ไม่ | object[] |
สัญญาณความพร้อมใช้งานที่ตรวจสอบเฉพาะการกำหนดค่าโดยใช้ทรัพยากรน้อย สำหรับผู้ให้บริการภายในเครื่องหรือแบบโฮสต์เองที่กำหนดค่าได้โดยไม่ต้องใช้โปรไฟล์การยืนยันตัวตนหรือตัวแปรสภาพแวดล้อม |
authSignals |
ไม่ | object[] |
สัญญาณการยืนยันตัวตนที่ระบุอย่างชัดเจน เมื่อมีฟิลด์นี้ สัญญาณเหล่านี้จะแทนที่ชุดสัญญาณเริ่มต้นจาก ID ผู้ให้บริการ, aliases และ authProviders |
referenceAudioInputs |
ไม่ | boolean |
สำหรับการสร้างวิดีโอเท่านั้น ตั้งค่าเป็น true เมื่อผู้ให้บริการยอมรับแอสเซ็ตเสียงอ้างอิง มิฉะนั้น video_generate จะซ่อนพารามิเตอร์การอ้างอิงเสียง |
รายการ configSignals แต่ละรายการรองรับ:
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
rootPath |
ใช่ | string |
พาธแบบจุดไปยังออบเจ็กต์การกำหนดค่าที่ Plugin เป็นเจ้าของซึ่งต้องตรวจสอบ เช่น plugins.entries.example.config |
overlayPath |
ไม่ | string |
พาธแบบจุดภายในการกำหนดค่าราก ซึ่งออบเจ็กต์ที่ตำแหน่งนั้นควรวางซ้อนทับออบเจ็กต์รากก่อนประเมินสัญญาณ ใช้สำหรับการกำหนดค่าเฉพาะความสามารถ เช่น image, video หรือ music |
overlayMapPath |
ไม่ | string |
พาธแบบจุดภายในการกำหนดค่าราก ซึ่งค่าออบเจ็กต์แต่ละค่าที่ตำแหน่งนั้นควรวางซ้อนทับออบเจ็กต์ราก ใช้สำหรับแมปบัญชีแบบมีชื่อ เช่น accounts ซึ่งบัญชีใดก็ตามที่กำหนดค่าไว้ควรถือว่าผ่านเกณฑ์ |
required |
ไม่ | string[] |
พาธแบบจุดภายในการกำหนดค่าที่มีผล ซึ่งต้องมีค่าที่กำหนดไว้ สตริงต้องไม่ว่าง และออบเจ็กต์กับอาร์เรย์ต้องไม่ว่าง |
requiredAny |
ไม่ | string[] |
พาธแบบจุดภายในการกำหนดค่าที่มีผล ซึ่งอย่างน้อยหนึ่งพาธต้องมีค่าที่กำหนดไว้ |
mode |
ไม่ | object |
เงื่อนไขโหมดสตริงเพิ่มเติมภายในการกำหนดค่าที่มีผล ใช้เมื่อความพร้อมใช้งานที่ตรวจสอบเฉพาะการกำหนดค่าใช้ได้กับโหมดเดียวเท่านั้น |
เงื่อนไข mode แต่ละรายการรองรับ:
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
path |
ไม่ | string |
พาธแบบจุดภายในการกำหนดค่าที่มีผล ค่าเริ่มต้นคือ mode |
default |
ไม่ | string |
ค่าโหมดที่จะใช้เมื่อการกำหนดค่าไม่มีพาธดังกล่าว |
allowed |
ไม่ | string[] |
หากมีฟิลด์นี้ สัญญาณจะผ่านเฉพาะเมื่อโหมดที่มีผลเป็นหนึ่งในค่าเหล่านี้ |
disallowed |
ไม่ | string[] |
หากมีฟิลด์นี้ สัญญาณจะไม่ผ่านเมื่อโหมดที่มีผลเป็นหนึ่งในค่าเหล่านี้ |
รายการ authSignals แต่ละรายการรองรับ:
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
provider |
ใช่ | string |
ID ผู้ให้บริการที่จะตรวจสอบในโปรไฟล์การยืนยันตัวตนที่กำหนดค่าไว้ |
providerBaseUrl |
ไม่ | object |
เงื่อนไขเพิ่มเติมที่ทำให้สัญญาณมีผลเฉพาะเมื่อผู้ให้บริการที่กำหนดค่าไว้ซึ่งอ้างอิงถึงใช้ URL ฐานที่อนุญาต ใช้เมื่อใช้นามแฝงการยืนยันตัวตนได้เฉพาะกับ API บางรายการ |
เงื่อนไข providerBaseUrl แต่ละรายการรองรับ:
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
provider |
ใช่ | string |
ID การกำหนดค่าผู้ให้บริการซึ่งควรตรวจสอบ baseUrl |
defaultBaseUrl |
ไม่ | string |
URL ฐานที่จะใช้เมื่อการกำหนดค่าผู้ให้บริการไม่มี baseUrl |
allowedBaseUrls |
ใช่ | string[] |
URL ฐานที่อนุญาตสำหรับสัญญาณการยืนยันตัวตนนี้ ระบบจะไม่ใช้สัญญาณเมื่อ URL ฐานที่กำหนดค่าหรือค่าเริ่มต้นไม่ตรงกับค่าที่ปรับเป็นรูปแบบมาตรฐานแล้วค่าใดค่าหนึ่งเหล่านี้ |
ข้อมูลอ้างอิงเมทาดาทาของเครื่องมือ
toolMetadata ใช้โครงสร้าง configSignals และ authSignals แบบเดียวกับเมทาดาทาของผู้ให้บริการการสร้าง โดยใช้ชื่อเครื่องมือเป็นคีย์ contracts.tools ประกาศความเป็นเจ้าของ toolMetadata ประกาศหลักฐานความพร้อมใช้งานที่ตรวจสอบได้โดยใช้ทรัพยากรน้อย เพื่อให้ OpenClaw หลีกเลี่ยงการนำเข้ารันไทม์ของ Plugin เพียงเพื่อให้แฟกทอรีเครื่องมือส่งคืน null
{ "setup": { "providers": [ { "id": "example", "envVars": ["EXAMPLE_API_KEY"] } ] }, "contracts": { "tools": ["example_search"] }, "toolMetadata": { "example_search": { "authSignals": [ { "provider": "example" } ], "configSignals": [ { "rootPath": "plugins.entries.example.config", "overlayPath": "search", "required": ["apiKey"] } ] } }}รายการ toolMetadata ยังรองรับ optional (ระบุว่าเครื่องมือนี้ไม่จำเป็นต่อการเปิดใช้งาน Plugin) และ replaySafe (ระบุว่าสามารถเรียกใช้เครื่องมือซ้ำได้อย่างปลอดภัยหลังจากรอบการทำงานของโมเดลที่ไม่สมบูรณ์) นอกเหนือจากฟิลด์ configSignals/authSignals ที่ใช้ร่วมกันข้างต้น
หากเครื่องมือไม่มี toolMetadata OpenClaw จะคงพฤติกรรมเดิมไว้และโหลด Plugin เจ้าของเมื่อสัญญาเครื่องมือตรงกับนโยบาย สำหรับเครื่องมือในเส้นทางที่ใช้งานบ่อยซึ่งแฟกทอรีขึ้นอยู่กับการยืนยันตัวตนหรือการกำหนดค่า ผู้เขียน Plugin ควรประกาศ toolMetadata แทนการให้ส่วนหลักนำเข้ารันไทม์เพื่อสอบถาม
ข้อมูลอ้างอิง providerAuthChoices
รายการ providerAuthChoices แต่ละรายการอธิบายตัวเลือกการเริ่มต้นใช้งานหรือการยืนยันตัวตนหนึ่งตัวเลือก OpenClaw อ่านข้อมูลนี้ก่อนโหลดรันไทม์ของผู้ให้บริการ รายการการตั้งค่าผู้ให้บริการใช้ตัวเลือกในไฟล์ manifest เหล่านี้ ตัวเลือกการตั้งค่าที่ได้จาก descriptor และเมทาดาทา catalog สำหรับการติดตั้ง โดยไม่ต้องโหลดรันไทม์ของผู้ให้บริการ
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
provider |
ใช่ | string |
รหัสผู้ให้บริการที่ตัวเลือกนี้สังกัด |
method |
ใช่ | string |
รหัสวิธีการยืนยันตัวตนที่จะส่งต่อไป |
choiceId |
ใช่ | string |
รหัสตัวเลือกการยืนยันตัวตนแบบคงที่ที่ใช้ในขั้นตอนการเริ่มต้นใช้งานและขั้นตอน CLI |
choiceLabel |
ไม่ | string |
ป้ายกำกับที่แสดงต่อผู้ใช้ หากละไว้ OpenClaw จะใช้ choiceId แทน |
choiceHint |
ไม่ | string |
ข้อความช่วยเหลือสั้นๆ สำหรับตัวเลือก |
icon |
ไม่ | URL แบบ HTTPS | ภาพประกอบที่แสดงข้างตัวเลือกนี้ในไคลเอนต์เริ่มต้นใช้งานที่รองรับ |
website |
ไม่ | URL แบบ HTTPS | หน้าผลิตภัณฑ์ หน้าเข้าสู่ระบบ หรือหน้าติดตั้งที่แสดงโดยไคลเอนต์เริ่มต้นใช้งานที่รองรับ |
assistantPriority |
ไม่ | number |
ค่าที่ต่ำกว่าจะถูกจัดเรียงไว้ก่อนในตัวเลือกแบบโต้ตอบที่ขับเคลื่อนโดยผู้ช่วย |
assistantVisibility |
ไม่ | "visible" | "manual-only" |
ซ่อนตัวเลือกจากตัวเลือกของผู้ช่วย แต่ยังคงอนุญาตให้เลือกด้วยตนเองผ่าน CLI |
deprecatedChoiceIds |
ไม่ | string[] |
รหัสตัวเลือกเดิมที่ควรเปลี่ยนเส้นทางผู้ใช้มายังตัวเลือกทดแทนนี้ |
groupId |
ไม่ | string |
รหัสกลุ่มที่ไม่บังคับสำหรับจัดกลุ่มตัวเลือกที่เกี่ยวข้อง |
groupLabel |
ไม่ | string |
ป้ายกำกับที่แสดงต่อผู้ใช้สำหรับกลุ่มนั้น |
groupHint |
ไม่ | string |
ข้อความช่วยเหลือสั้นๆ สำหรับกลุ่ม |
onboardingFeatured |
ไม่ | boolean |
แสดงกลุ่มนี้ในระดับแนะนำของตัวเลือกเริ่มต้นใช้งานแบบโต้ตอบ ก่อนรายการ "More..." |
optionKey |
ไม่ | string |
คีย์ตัวเลือกภายในสำหรับขั้นตอนการยืนยันตัวตนแบบแฟล็กเดียวอย่างง่าย |
cliFlag |
ไม่ | string |
ชื่อแฟล็ก CLI เช่น --openrouter-api-key |
cliOption |
ไม่ | string |
รูปแบบตัวเลือก CLI แบบเต็ม เช่น --openrouter-api-key <key> |
cliDescription |
ไม่ | string |
คำอธิบายที่ใช้ในความช่วยเหลือ CLI |
appGuidedSecret |
ไม่ | boolean |
ข้อมูลลับหนึ่งรายการที่วางเข้ามาร่วมกับค่าเริ่มต้นของผู้ให้บริการ เพียงพอสำหรับการตั้งค่าที่แอปแนะนำ |
appGuidedDiscovery |
ไม่ | boolean |
วิธีการยืนยันตัวตนของรันไทม์ที่ตรงกันเป็นเจ้าของการค้นหาในเครื่องแบบอ่านอย่างเดียวผ่าน appGuidedSetup |
appGuidedAuth |
ไม่ | "oauth" | "device-code" |
การเข้าสู่ระบบแบบโต้ตอบที่ผู้ให้บริการเป็นเจ้าของ ซึ่งไคลเอนต์ตั้งค่าแบบเนทีฟสามารถแสดงผลในรูปแบบทั่วไป |
onboardingScopes |
ไม่ | Array<"text-inference" | "image-generation" | "music-generation"> |
พื้นผิวการเริ่มต้นใช้งานที่ควรแสดงตัวเลือกนี้ หากละไว้ ค่าเริ่มต้นคือ ["text-inference"] |
เมื่อ appGuidedDiscovery เป็น true วิธีการยืนยันตัวตนของผู้ให้บริการที่ตรงกันต้องเปิดเผย
appGuidedSetup.detect และ appGuidedSetup.prepare การตรวจหาต้องเป็นแบบ
อ่านอย่างเดียว: ห้ามเข้าสู่ระบบ ดึงโมเดล ดาวน์โหลด หรือเขียนการกำหนดค่า การเตรียมการจะตรวจสอบ
โมเดลที่เลือกอย่างเจาะจงอีกครั้งและส่งคืนข้อเสนอการกำหนดค่า OpenClaw จะทดสอบข้อเสนอแบบสด
โดยแยกจากระบบ และบันทึกการเปลี่ยนแปลงเมื่อสำเร็จแล้วเท่านั้น
ข้อมูลอ้างอิง commandAliases
ใช้ commandAliases เมื่อ Plugin เป็นเจ้าของชื่อคำสั่งรันไทม์ที่ผู้ใช้อาจใส่ผิดใน plugins.allow หรือพยายามเรียกใช้เป็นคำสั่ง CLI ระดับรูท OpenClaw ใช้ข้อมูลเมตานี้เพื่อการวินิจฉัยโดยไม่ต้องนำเข้าโค้ดรันไทม์ของ Plugin
{ "commandAliases": [ { "name": "dreaming", "kind": "runtime-slash", "cliCommand": "memory" } ]}| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
name |
ใช่ | string |
ชื่อคำสั่งที่เป็นของ Plugin นี้ |
kind |
ไม่ | "runtime-slash" |
ระบุว่า alias เป็นคำสั่งแชตแบบเครื่องหมายทับ ไม่ใช่คำสั่ง CLI ระดับรูท |
cliCommand |
ไม่ | string |
คำสั่ง CLI ระดับรูทที่เกี่ยวข้องเพื่อแนะนำสำหรับการดำเนินการ CLI หากมี |
ข้อมูลอ้างอิง activation
ใช้ activation เมื่อ Plugin สามารถประกาศได้โดยใช้ทรัพยากรน้อยว่าเหตุการณ์ใดใน control plane ควรรวม Plugin นี้ไว้ในแผนการเปิดใช้งาน/โหลด
บล็อกนี้เป็นข้อมูลเมตาของตัววางแผน ไม่ใช่ API วงจรชีวิต บล็อกนี้ไม่ลงทะเบียนพฤติกรรมรันไทม์ ไม่แทนที่ register(...) และไม่รับประกันว่าโค้ดของ Plugin ได้ทำงานแล้ว ตัววางแผนการเปิดใช้งานใช้ฟิลด์เหล่านี้เพื่อจำกัด Plugin ที่เป็นตัวเลือก ก่อนจะย้อนกลับไปใช้ข้อมูลเมตาความเป็นเจ้าของใน manifest ที่มีอยู่ เช่น providers, channels, commandAliases, setup.providers, contracts.tools และ hooks
ควรใช้ข้อมูลเมตาที่แคบที่สุดซึ่งอธิบายความเป็นเจ้าของได้อยู่แล้ว ใช้ providers, channels, commandAliases, ตัวอธิบายการตั้งค่า หรือ contracts เมื่อฟิลด์เหล่านั้นแสดงความสัมพันธ์ได้ ใช้ activation สำหรับคำใบ้เพิ่มเติมแก่ตัววางแผนที่ไม่สามารถแสดงด้วยฟิลด์ความเป็นเจ้าของเหล่านั้น ใช้ cliBackends ระดับบนสุดสำหรับ alias รันไทม์ CLI เช่น claude-cli, my-cli หรือ google-gemini-cli; activation.onAgentHarnesses ใช้เฉพาะรหัส harness ของเอเจนต์แบบฝังที่ยังไม่มีฟิลด์ความเป็นเจ้าของ
Plugin ทุกตัวควรกำหนด activation.onStartup โดยตั้งใจ ตั้งเป็น true เฉพาะเมื่อ Plugin ต้องทำงานระหว่างการเริ่มต้น Gateway ตั้งเป็น false เมื่อ Plugin ไม่ทำงานขณะเริ่มต้นและควรโหลดจากทริกเกอร์ที่แคบกว่าเท่านั้น การละ onStartup จะไม่ทำให้ Plugin ถูกโหลดเมื่อเริ่มต้นโดยปริยายอีกต่อไป ให้ใช้ข้อมูลเมตาการเปิดใช้งานอย่างชัดเจนสำหรับการเริ่มต้น ช่องทาง การกำหนดค่า harness ของเอเจนต์ หน่วยความจำ หรือทริกเกอร์การเปิดใช้งานอื่นที่แคบกว่า
{ "activation": { "onStartup": false, "onProviders": ["openai"], "onCommands": ["models"], "onChannels": ["web"], "onRoutes": ["gateway-webhook"], "onConfigPaths": ["browser"], "onCapabilities": ["provider", "tool"] }}| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
onStartup |
ไม่ | boolean |
การเปิดใช้งานเมื่อเริ่มต้น Gateway อย่างชัดเจน Plugin ทุกตัวควรกำหนดค่านี้ true จะนำเข้า Plugin ระหว่างการเริ่มต้น ส่วน false จะคงการโหลดแบบหน่วงไว้จนกว่าทริกเกอร์อื่นที่ตรงกันจะกำหนดให้โหลด |
onProviders |
ไม่ | string[] |
รหัสผู้ให้บริการที่ควรรวม Plugin นี้ไว้ในแผนการเปิดใช้งาน/โหลด |
onAgentHarnesses |
ไม่ | string[] |
รหัสรันไทม์ harness ของเอเจนต์แบบฝังที่ควรรวม Plugin นี้ไว้ในแผนการเปิดใช้งาน/โหลด ใช้ cliBackends ระดับบนสุดสำหรับ alias แบ็กเอนด์ CLI |
onCommands |
ไม่ | string[] |
รหัสคำสั่งที่ควรรวม Plugin นี้ไว้ในแผนการเปิดใช้งาน/โหลด |
onChannels |
ไม่ | string[] |
รหัสช่องทางที่ควรรวม Plugin นี้ไว้ในแผนการเปิดใช้งาน/โหลด |
onRoutes |
ไม่ | string[] |
ชนิดเส้นทางที่ควรรวม Plugin นี้ไว้ในแผนการเปิดใช้งาน/โหลด |
onConfigPaths |
ไม่ | string[] |
พาธการกำหนดค่าที่อ้างอิงจากรูท ซึ่งควรรวม Plugin นี้ไว้ในแผนการเริ่มต้น/โหลดเมื่อมีพาธอยู่และไม่ได้ถูกปิดใช้งานอย่างชัดเจน |
onCapabilities |
ไม่ | Array<"provider" | "channel" | "tool" | "hook"> |
คำใบ้ความสามารถแบบกว้างที่ใช้โดยการวางแผนการเปิดใช้งานของ control plane ควรใช้ฟิลด์ที่แคบกว่าเมื่อทำได้ |
ผู้ใช้งานจริงในปัจจุบัน:
- การวางแผนการเริ่มต้น Gateway ใช้
activation.onStartupสำหรับการนำเข้าขณะเริ่มต้นอย่างชัดเจน - การวางแผน CLI ที่ทริกเกอร์ด้วยคำสั่งจะใช้
commandAliases[].cliCommandหรือcommandAliases[].nameแบบเดิมเป็นทางเลือกสำรอง - การวางแผนการเริ่มต้นรันไทม์ของเอเจนต์ใช้
activation.onAgentHarnessesสำหรับชุดทดสอบแบบฝัง และใช้cliBackends[]ระดับบนสุดสำหรับนามแฝงรันไทม์ CLI - การวางแผนการตั้งค่า/ช่องทางที่ทริกเกอร์โดยช่องทางจะใช้การเป็นเจ้าของ
channels[]แบบเดิมเป็นทางเลือกสำรอง เมื่อไม่มีเมทาดาทาการเปิดใช้งานช่องทางอย่างชัดเจน - การวางแผน Plugin ขณะเริ่มต้นใช้
activation.onConfigPathsสำหรับพื้นผิวการกำหนดค่ารูทที่ไม่ใช่ช่องทาง เช่น บล็อกbrowserของ Plugin เบราว์เซอร์ที่รวมมาให้ - การวางแผนการตั้งค่า/รันไทม์ที่ทริกเกอร์โดยผู้ให้บริการจะใช้การเป็นเจ้าของ
providers[]แบบเดิมและcliBackends[]ระดับบนสุดเป็นทางเลือกสำรอง เมื่อไม่มีเมทาดาทาการเปิดใช้งานผู้ให้บริการอย่างชัดเจน
การวินิจฉัยของตัววางแผนสามารถแยกคำแนะนำการเปิดใช้งานอย่างชัดเจนออกจากทางเลือกสำรองตามการเป็นเจ้าของในไฟล์ manifest ได้ ตัวอย่างเช่น activation-command-hint หมายความว่า activation.onCommands ตรงกัน ขณะที่ manifest-command-alias หมายความว่าตัววางแผนใช้การเป็นเจ้าของ commandAliases แทน ป้ายกำกับเหตุผลเหล่านี้มีไว้สำหรับการวินิจฉัยของโฮสต์และการทดสอบ ผู้เขียน Plugin ควรประกาศเมทาดาทาที่อธิบายการเป็นเจ้าของได้เหมาะสมที่สุดต่อไป
ข้อมูลอ้างอิง qaRunners
ใช้ qaRunners เมื่อ Plugin สนับสนุนตัวรันการขนส่งอย่างน้อยหนึ่งรายการภายใต้
รูท openclaw qa ที่ใช้ร่วมกัน ทำให้เมทาดาทานี้ประมวลผลได้รวดเร็วและคงที่ รันไทม์
ของ Plugin ยังคงเป็นเจ้าของการลงทะเบียน CLI จริงผ่านพื้นผิว
runtime-api.ts แบบน้ำหนักเบาซึ่งส่งออก qaRunnerCliRegistrations ที่ตรงกัน ส่วน
adapterFactory ซึ่งเป็นตัวเลือกจะเปิดเผยการขนส่งแก่สถานการณ์ QA ที่ใช้ร่วมกันโดยไม่
เปลี่ยนตัวรันของคำสั่งที่ลงทะเบียนไว้
{ "qaRunners": [ { "commandName": "matrix", "description": "เรียกใช้เลน QA แบบสดของ Matrix ที่ใช้ Docker กับ homeserver แบบใช้แล้วทิ้ง" } ]}| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
commandName |
ใช่ | string |
คำสั่งย่อยที่เมานต์ภายใต้ openclaw qa เช่น matrix |
description |
ไม่ | string |
ข้อความช่วยเหลือสำรองที่ใช้เมื่อโฮสต์ที่ใช้ร่วมกันต้องใช้คำสั่งตัวแทน |
รหัส adapterFactory ต้องตรงกับ commandName อย่าส่งออกการลงทะเบียน
สำหรับคำสั่งที่ไม่มีอยู่ในไฟล์ manifest
ข้อมูลอ้างอิง setup
ใช้ setup เมื่อพื้นผิวการตั้งค่าและการเริ่มต้นใช้งานต้องใช้เมทาดาทาที่ Plugin เป็นเจ้าของและเรียกใช้ได้อย่างรวดเร็วก่อนโหลดรันไทม์
{ "setup": { "providers": [ { "id": "openai", "authMethods": ["api-key"], "envVars": ["OPENAI_API_KEY"], "authEvidence": [ { "type": "local-file-with-env", "fileEnvVar": "OPENAI_CREDENTIALS_FILE", "requiresAllEnv": ["OPENAI_PROJECT"], "credentialMarker": "openai-local-credentials", "source": "ข้อมูลประจำตัวภายในเครื่องของ openai" } ] } ], "cliBackends": ["openai-cli"], "configMigrations": ["legacy-openai-auth"], "requiresRuntime": false }}cliBackends ระดับบนสุดยังคงใช้ได้และยังคงอธิบายแบ็กเอนด์การอนุมาน CLI ต่อไป setup.cliBackends คือพื้นผิวตัวอธิบายเฉพาะการตั้งค่าสำหรับโฟลว์การตั้งค่า/ระนาบควบคุมที่ควรเป็นเมทาดาทาเท่านั้น
เมื่อมี setup.providers และ setup.cliBackends ทั้งสองรายการนี้คือพื้นผิวการค้นหาที่ใช้ตัวอธิบายก่อนสำหรับการค้นพบการตั้งค่า หากตัวอธิบายเพียงจำกัดขอบเขต Plugin ที่เป็นตัวเลือก และการตั้งค่ายังต้องใช้ฮุกของรันไทม์ขณะตั้งค่าที่มีรายละเอียดมากขึ้น ให้ตั้งค่า requiresRuntime: true และคง setup-api ไว้เป็นเส้นทางดำเนินการสำรอง
OpenClaw รวม setup.providers[].envVars ไว้ในการค้นหาการยืนยันตัวตนของผู้ให้บริการและตัวแปรสภาพแวดล้อมแบบทั่วไป ให้ใส่เมทาดาทาสภาพแวดล้อมสำหรับการตั้งค่าและสถานะไว้ที่นั่น
ใช้ providerUsageAuthEnvVars เมื่อข้อมูลประจำตัวระดับการเรียกเก็บเงินหรือระดับองค์กรต้องเปิดใช้งาน resolveUsageAuth โดยไม่กลายเป็นข้อมูลประจำตัวสำหรับการอนุมาน ชื่อเหล่านี้จะรวมอยู่ในการบล็อก dotenv ของเวิร์กสเปซ การตัดออกจากโปรเซสลูก ACP การกรองข้อมูลลับในแซนด์บ็อกซ์ และการล้างข้อมูลลับในวงกว้าง รันไทม์ของผู้ให้บริการยังคงอ่านและจำแนกค่าภายใน resolveUsageAuth
OpenClaw ยังสามารถอนุมานตัวเลือกการตั้งค่าอย่างง่ายจาก setup.providers[].authMethods เมื่อไม่มีรายการการตั้งค่า หรือเมื่อ setup.requiresRuntime: false ระบุว่าไม่จำเป็นต้องใช้รันไทม์การตั้งค่า รายการ providerAuthChoices ที่ระบุอย่างชัดเจนยังคงมีลำดับความสำคัญสำหรับป้ายกำกับแบบกำหนดเอง แฟล็ก CLI ขอบเขตการเริ่มต้นใช้งาน และเมทาดาทาของผู้ช่วย
ตั้งค่า requiresRuntime: false เฉพาะเมื่อตัวอธิบายเหล่านั้นเพียงพอสำหรับพื้นผิวการตั้งค่า OpenClaw ถือว่า false ที่ระบุอย่างชัดเจนเป็นสัญญาแบบใช้ตัวอธิบายเท่านั้น และจะไม่เรียกใช้ setup-api หรือ openclaw.setupEntry สำหรับการค้นหาการตั้งค่า หาก Plugin แบบใช้ตัวอธิบายเท่านั้นยังคงจัดส่งรายการรันไทม์การตั้งค่ารายการใดรายการหนึ่งดังกล่าว OpenClaw จะรายงานการวินิจฉัยเพิ่มเติมและยังคงเพิกเฉยต่อรายการนั้น การละ requiresRuntime จะคงพฤติกรรมทางเลือกสำรองแบบเดิมไว้ เพื่อไม่ให้ Plugin ที่มีอยู่ซึ่งเพิ่มตัวอธิบายโดยไม่มีแฟล็กนี้เสียหาย
เนื่องจากการค้นหาการตั้งค่าสามารถเรียกใช้โค้ด setup-api ที่ Plugin เป็นเจ้าของ ค่า setup.providers[].id และ setup.cliBackends[] ที่ผ่านการปรับให้เป็นมาตรฐานต้องไม่ซ้ำกันในบรรดา Plugin ที่ค้นพบ การเป็นเจ้าของที่กำกวมจะปฏิเสธการทำงานเพื่อความปลอดภัย แทนที่จะเลือกผู้ชนะตามลำดับการค้นพบ
เมื่อมีการเรียกใช้รันไทม์การตั้งค่า การวินิจฉัยรีจิสทรีการตั้งค่าจะรายงานความคลาดเคลื่อนของตัวอธิบาย หาก setup-api ลงทะเบียนผู้ให้บริการหรือแบ็กเอนด์ CLI ที่ตัวอธิบายในไฟล์ manifest ไม่ได้ประกาศ หรือหากตัวอธิบายไม่มีการลงทะเบียนรันไทม์ที่ตรงกัน การวินิจฉัยเหล่านี้เป็นข้อมูลเพิ่มเติมและจะไม่ปฏิเสธ Plugin แบบเดิม
ข้อมูลอ้างอิง setup.providers
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
id |
ใช่ | string |
รหัสผู้ให้บริการที่เปิดเผยระหว่างการตั้งค่าหรือการเริ่มต้นใช้งาน รักษารหัสที่ปรับให้เป็นมาตรฐานไม่ให้ซ้ำกันทั่วระบบ |
authMethods |
ไม่ | string[] |
รหัสวิธีการตั้งค่า/การยืนยันตัวตนที่ผู้ให้บริการนี้รองรับโดยไม่ต้องโหลดรันไทม์ทั้งหมด |
envVars |
ไม่ | string[] |
ตัวแปรสภาพแวดล้อมที่พื้นผิวการตั้งค่า/สถานะแบบทั่วไปสามารถตรวจสอบก่อนโหลดรันไทม์ของ Plugin |
authEvidence |
ไม่ | object[] |
การตรวจสอบหลักฐานการยืนยันตัวตนภายในเครื่องที่ประมวลผลได้รวดเร็ว สำหรับผู้ให้บริการที่สามารถยืนยันตัวตนผ่านเครื่องหมายที่ไม่ใช่ข้อมูลลับ |
authEvidence ใช้สำหรับเครื่องหมายข้อมูลประจำตัวภายในเครื่องที่ผู้ให้บริการเป็นเจ้าของ ซึ่งสามารถตรวจสอบได้โดยไม่ต้องโหลดโค้ดรันไทม์ การตรวจสอบเหล่านี้ต้องประมวลผลได้รวดเร็วและอยู่ภายในเครื่องเท่านั้น: ห้ามเรียกใช้เครือข่าย ห้ามอ่านพวงกุญแจหรือตัวจัดการข้อมูลลับ ห้ามใช้คำสั่งเชลล์ และห้ามตรวจสอบ API ของผู้ให้บริการ
รายการหลักฐานที่รองรับ:
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
type |
ใช่ | string |
ปัจจุบันคือ local-file-with-env |
fileEnvVar |
ไม่ | string |
ตัวแปรสภาพแวดล้อมที่มีพาธไฟล์ข้อมูลประจำตัวที่ระบุไว้อย่างชัดเจน |
fallbackPaths |
ไม่ | string[] |
พาธไฟล์ข้อมูลประจำตัวภายในเครื่องที่ตรวจสอบเมื่อไม่มี fileEnvVar หรือมีค่าว่าง รองรับ ${HOME} และ ${APPDATA} |
requiresAnyEnv |
ไม่ | string[] |
ตัวแปรสภาพแวดล้อมที่ระบุไว้อย่างน้อยหนึ่งรายการต้องไม่ว่างเปล่า ก่อนที่หลักฐานจะใช้ได้ |
requiresAllEnv |
ไม่ | string[] |
ตัวแปรสภาพแวดล้อมที่ระบุไว้ทุกรายการต้องไม่ว่างเปล่า ก่อนที่หลักฐานจะใช้ได้ |
credentialMarker |
ใช่ | string |
เครื่องหมายที่ไม่ใช่ข้อมูลลับซึ่งส่งคืนเมื่อพบหลักฐาน |
source |
ไม่ | string |
ป้ายกำกับแหล่งที่มาที่ผู้ใช้เห็นสำหรับผลลัพธ์การยืนยันตัวตน/สถานะ |
ฟิลด์ setup
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
providers |
ไม่ | object[] |
ตัวอธิบายการตั้งค่าผู้ให้บริการที่เปิดเผยระหว่างการตั้งค่าและการเริ่มต้นใช้งาน |
cliBackends |
ไม่ | string[] |
รหัสแบ็กเอนด์ขณะตั้งค่าที่ใช้สำหรับการค้นหาการตั้งค่าแบบใช้ตัวอธิบายก่อน รักษารหัสที่ปรับให้เป็นมาตรฐานไม่ให้ซ้ำกันทั่วระบบ |
configMigrations |
ไม่ | string[] |
รหัสการย้ายข้อมูลการกำหนดค่าที่พื้นผิวการตั้งค่าของ Plugin นี้เป็นเจ้าของ |
requiresRuntime |
ไม่ | boolean |
ระบุว่าการตั้งค่ายังต้องเรียกใช้ setup-api หลังจากค้นหาตัวอธิบายหรือไม่ |
ข้อมูลอ้างอิง uiHints
uiHints คือแมปจากชื่อฟิลด์การกำหนดค่าไปยังคำแนะนำการแสดงผลขนาดเล็ก คีย์สามารถใช้จุดสำหรับฟิลด์การกำหนดค่าที่ซ้อนกันได้ แต่ส่วนใดของพาธต้องไม่เป็น __proto__, constructor หรือ prototype; การตั้งค่าจะปฏิเสธชื่อเหล่านั้น
{ "uiHints": { "apiKey": { "label": "คีย์ API", "help": "ใช้สำหรับคำขอ OpenRouter", "placeholder": "sk-or-v1-...", "sensitive": true } }}คำแนะนำของแต่ละฟิลด์สามารถมีรายการต่อไปนี้:
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
label |
string |
ป้ายกำกับฟิลด์ที่ผู้ใช้เห็น |
help |
string |
ข้อความช่วยเหลือสั้น ๆ |
tags |
string[] |
แท็ก UI ที่เป็นตัวเลือก |
advanced |
boolean |
ทำเครื่องหมายฟิลด์ว่าเป็นขั้นสูง |
sensitive |
boolean |
ทำเครื่องหมายฟิลด์ว่าเป็นข้อมูลลับหรือข้อมูลละเอียดอ่อน |
placeholder |
string |
ข้อความตัวแทนสำหรับช่องป้อนข้อมูลในแบบฟอร์ม |
ข้อมูลอ้างอิง contracts
ใช้ contracts เฉพาะสำหรับเมทาดาทาการเป็นเจ้าของความสามารถแบบคงที่ที่ OpenClaw สามารถอ่านได้โดยไม่ต้องนำเข้ารันไทม์ของ Plugin
{ "contracts": { "agentToolResultMiddleware": ["openclaw", "codex"], "trustedToolPolicies": ["workflow-budget"], "externalAuthProviders": ["acme-ai"], "embeddingProviders": ["openai-compatible"], "speechProviders": ["openai"], "realtimeTranscriptionProviders": ["openai"], "realtimeVoiceProviders": ["openai"], "memoryEmbeddingProviders": ["local"], "mediaUnderstandingProviders": ["openai"], "imageGenerationProviders": ["openai"], "videoGenerationProviders": ["qwen"], "musicGenerationProviders": ["stability-audio"], "documentExtractors": ["example-docs"], "webContentExtractors": ["firecrawl"], "webFetchProviders": ["firecrawl"], "webSearchProviders": ["gemini"], "workerProviders": ["example-worker"], "usageProviders": ["acme-ai"], "migrationProviders": ["hermes"], "gatewayMethodDispatch": ["authenticated-request"], "tools": ["firecrawl_search", "firecrawl_scrape"] }}แต่ละรายการเป็นตัวเลือก:
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
embeddedExtensionFactories |
string[] |
รหัสแฟกทอรีส่วนขยาย app-server ของ Codex ซึ่งปัจจุบันคือ codex-app-server |
agentToolResultMiddleware |
string[] |
รหัสรันไทม์ที่ Plugin นี้อาจลงทะเบียนมิดเดิลแวร์ผลลัพธ์ของเครื่องมือให้ |
trustedToolPolicies |
string[] |
รหัสนโยบายก่อนใช้เครื่องมือที่เชื่อถือได้และใช้ภายใน Plugin ซึ่ง Plugin ที่ติดตั้งอาจลงทะเบียนได้ Plugin ที่มาพร้อมระบบอาจลงทะเบียนนโยบายโดยไม่มีฟิลด์นี้ |
externalAuthProviders |
string[] |
รหัสผู้ให้บริการซึ่ง Plugin นี้เป็นเจ้าของฮุกโปรไฟล์การยืนยันตัวตนภายนอก |
embeddingProviders |
string[] |
รหัสผู้ให้บริการ embedding ทั่วไปที่ Plugin นี้เป็นเจ้าของสำหรับการใช้ vector embedding ซ้ำ รวมถึงหน่วยความจำ |
speechProviders |
string[] |
รหัสผู้ให้บริการเสียงพูดที่ Plugin นี้เป็นเจ้าของ |
realtimeTranscriptionProviders |
string[] |
รหัสผู้ให้บริการถอดเสียงแบบเรียลไทม์ที่ Plugin นี้เป็นเจ้าของ |
realtimeVoiceProviders |
string[] |
รหัสผู้ให้บริการเสียงแบบเรียลไทม์ที่ Plugin นี้เป็นเจ้าของ |
memoryEmbeddingProviders |
string[] |
รหัสผู้ให้บริการ embedding สำหรับหน่วยความจำโดยเฉพาะที่เลิกใช้แล้ว ซึ่ง Plugin นี้เป็นเจ้าของ |
mediaUnderstandingProviders |
string[] |
รหัสผู้ให้บริการทำความเข้าใจสื่อที่ Plugin นี้เป็นเจ้าของ |
transcriptSourceProviders |
string[] |
รหัสผู้ให้บริการแหล่งที่มาของข้อความถอดเสียงที่ Plugin นี้เป็นเจ้าของ |
documentExtractors |
string[] |
รหัสผู้ให้บริการแยกข้อมูลจากเอกสาร (เช่น PDF) ที่ Plugin นี้เป็นเจ้าของ |
imageGenerationProviders |
string[] |
รหัสผู้ให้บริการสร้างภาพที่ Plugin นี้เป็นเจ้าของ |
videoGenerationProviders |
string[] |
รหัสผู้ให้บริการสร้างวิดีโอที่ Plugin นี้เป็นเจ้าของ |
musicGenerationProviders |
string[] |
รหัสผู้ให้บริการสร้างเพลงที่ Plugin นี้เป็นเจ้าของ |
webContentExtractors |
string[] |
รหัสผู้ให้บริการแยกเนื้อหาจากหน้าเว็บที่ Plugin นี้เป็นเจ้าของ |
webFetchProviders |
string[] |
รหัสผู้ให้บริการดึงข้อมูลจากเว็บที่ Plugin นี้เป็นเจ้าของ |
webSearchProviders |
string[] |
รหัสผู้ให้บริการค้นหาเว็บที่ Plugin นี้เป็นเจ้าของ |
workerProviders |
string[] |
รหัสผู้ให้บริการเวิร์กเกอร์บนคลาวด์ที่ Plugin นี้เป็นเจ้าของ สำหรับการจัดเตรียมและวงจรชีวิตสัญญาเช่าที่อิงโปรไฟล์ |
usageProviders |
string[] |
รหัสผู้ให้บริการซึ่ง Plugin นี้เป็นเจ้าของฮุกการยืนยันตัวตนเพื่อการใช้งานและสแนปช็อตการใช้งาน |
migrationProviders |
string[] |
รหัสผู้ให้บริการนำเข้าที่ Plugin นี้เป็นเจ้าของสำหรับ openclaw migrate |
gatewayMethodDispatch |
string[] |
สิทธิ์ที่สงวนไว้สำหรับเส้นทาง HTTP ของ Plugin ที่ผ่านการยืนยันตัวตน ซึ่งส่งต่อเมธอดของ Gateway ภายในโปรเซส |
tools |
string[] |
ชื่อเครื่องมือของเอเจนต์ที่ Plugin นี้เป็นเจ้าของ |
contracts.embeddedExtensionFactories ยังคงเก็บไว้สำหรับแฟกทอรีส่วนขยายที่ใช้เฉพาะ app-server ของ Codex ซึ่งมาพร้อมระบบ การแปลงผลลัพธ์ของเครื่องมือที่มาพร้อมระบบควรประกาศ contracts.agentToolResultMiddleware และลงทะเบียนด้วย api.registerAgentToolResultMiddleware(...) แทน Plugin ที่ติดตั้งอาจใช้จุดเชื่อมมิดเดิลแวร์เดียวกันได้เฉพาะเมื่อเปิดใช้อย่างชัดเจน และเฉพาะสำหรับรันไทม์ที่ประกาศไว้ใน contracts.agentToolResultMiddleware
Plugin ที่ติดตั้งซึ่งต้องใช้ระดับนโยบายก่อนใช้เครื่องมือที่โฮสต์เชื่อถือ ต้องประกาศรหัสภายในแต่ละรายการที่ลงทะเบียนใน contracts.trustedToolPolicies และต้องเปิดใช้อย่างชัดเจน Plugin ที่มาพร้อมระบบยังคงใช้เส้นทางนโยบายที่เชื่อถือได้เดิม แต่ Plugin ที่ติดตั้งซึ่งมีรหัสนโยบายที่ไม่ได้ประกาศจะถูกปฏิเสธก่อนการลงทะเบียน รหัสนโยบายมีขอบเขตเฉพาะ Plugin ที่ลงทะเบียน ดังนั้น Plugin สองตัวจึงสามารถประกาศและลงทะเบียน workflow-budget ได้ทั้งคู่ แต่ Plugin เดียวไม่สามารถลงทะเบียนรหัสภายในเดียวกันซ้ำสองครั้งได้
การลงทะเบียนรันไทม์ api.registerTool(...) ต้องตรงกับ contracts.tools การค้นหาเครื่องมือใช้รายการนี้เพื่อโหลดเฉพาะรันไทม์ของ Plugin ที่สามารถเป็นเจ้าของเครื่องมือที่ร้องขอได้
Plugin ผู้ให้บริการที่ใช้งาน resolveExternalAuthProfiles ควรประกาศ contracts.externalAuthProviders ฮุกการยืนยันตัวตนภายนอกที่ไม่ได้ประกาศจะถูกละเว้น
Plugin ผู้ให้บริการที่ใช้งานทั้ง resolveUsageAuth และ fetchUsageSnapshot ควรประกาศรหัสผู้ให้บริการที่ค้นพบอัตโนมัติแต่ละรายการใน contracts.usageProviders การค้นหาการใช้งานจะอ่านสัญญานี้ก่อนโหลดโค้ดรันไทม์ จากนั้นตรวจสอบฮุกทั้งสองหลังจากโหลดเฉพาะเจ้าของที่ประกาศไว้
ผู้ให้บริการ embedding ทั่วไปควรประกาศ contracts.embeddingProviders สำหรับอะแดปเตอร์แต่ละตัวที่ลงทะเบียนด้วย api.registerEmbeddingProvider(...) ใช้สัญญาทั่วไปสำหรับการสร้างเวกเตอร์ที่นำกลับมาใช้ซ้ำได้ รวมถึงผู้ให้บริการที่การค้นหาหน่วยความจำใช้งาน contracts.memoryEmbeddingProviders เป็นความเข้ากันได้เฉพาะหน่วยความจำที่เลิกใช้แล้ว และจะคงอยู่เฉพาะระหว่างที่ผู้ให้บริการเดิมย้ายไปยังจุดเชื่อมผู้ให้บริการ embedding แบบทั่วไป
ผู้ให้บริการเวิร์กเกอร์ต้องประกาศรหัส api.registerWorkerProvider(...) แต่ละรายการใน contracts.workerProviders Core จะบันทึกเจตนาที่คงทนก่อนเรียก provision ผู้ให้บริการจะตรวจสอบการตั้งค่าของตนก่อนจัดสรรทรัพยากรภายนอก และการเรียกซ้ำด้วยรหัสการดำเนินการเดียวกันต้องรับช่วงสัญญาเช่าเดิม Core ยังบันทึกสแนปช็อตการตั้งค่าที่ผ่านการตรวจสอบนั้น และส่งไปพร้อมกับ leaseId ให้แก่ inspect({ leaseId, profile }) และ destroy({ leaseId, profile }) รวมถึงหลังจากโปรไฟล์ที่ระบุชื่อถูกเปลี่ยนแปลงหรือลบแล้ว การทำลายเป็นแบบ idempotent การตรวจสอบจะส่งคืนยูเนียนสถานะปิด active / destroyed / unknown และวัสดุคีย์ส่วนตัว SSH จะถูกอ้างอิงผ่าน SecretRef เท่านั้น ปลายทาง SSH ที่จัดเตรียมแล้วต้องมี hostKey สาธารณะจากผลลัพธ์การจัดเตรียมที่เชื่อถือได้ในรูปแบบ algorithm base64 อย่างเคร่งครัด โดยไม่มีชื่อโฮสต์หรือความคิดเห็น เพื่อให้ Core สามารถตรึงโฮสต์ก่อนเชื่อมต่อ ผู้ให้บริการที่สร้างการอ้างอิงข้อมูลประจำตัวแบบไดนามิกอาจใช้งาน resolveSshIdentity({ leaseId, profile, keyRef }) ที่มีอำนาจสูงสุด ผู้ให้บริการที่ไม่มีรายการนี้จะใช้ตัวแก้ไขข้อมูลลับทั่วไปของ Core unknown ที่มีอำนาจสูงสุดจะทำให้ระเบียนภายในที่ใช้งานอยู่กลายเป็นระเบียนกำพร้า และหลังจากคำขอทำลายถูกบันทึกแล้ว จะใช้ยืนยันว่าการรื้อถอนได้เสร็จสิ้น
ปัจจุบัน contracts.gatewayMethodDispatch ยอมรับ "authenticated-request" รายการนี้เป็นด่านตรวจสุขอนามัยของ API สำหรับเส้นทาง HTTP แบบเนทีฟของ Plugin ที่ตั้งใจส่งต่อเมธอดระนาบควบคุมของ Gateway ภายในโปรเซส ไม่ใช่แซนด์บ็อกซ์สำหรับป้องกัน Plugin แบบเนทีฟที่เป็นอันตราย ใช้เฉพาะกับพื้นผิวที่มาพร้อมระบบหรือสำหรับผู้ปฏิบัติงานซึ่งผ่านการตรวจสอบอย่างเข้มงวด และกำหนดให้ใช้การยืนยันตัวตน HTTP ของ Gateway อยู่แล้ว เส้นทางที่มีสิทธิ์จะยังเข้าถึงได้ขณะที่ปิดการรับงานระดับรากของ Gateway เฉพาะเมื่อเส้นทางนั้นประกาศทั้ง auth: "gateway" และ gatewayRuntimeScopeSurface: "trusted-operator" เฉพาะเส้นทาง ส่วนเส้นทางพี่น้องทั่วไปจาก Plugin เดียวกันจะยังคงอยู่หลังขอบเขตการรับงาน วิธีนี้ช่วยให้ยังเข้าถึงสถานะการระงับและการดำเนินการต่อได้ โดยไม่ให้สิทธิ์ข้ามการรับงานแก่ทั้ง Plugin จำกัดขอบเขตการแยกวิเคราะห์และการจัดรูปแบบการตอบกลับไว้นอกการส่งต่อ งานที่มีสาระสำคัญหรือแก้ไขข้อมูลต้องดำเนินการผ่านการส่งต่อเมธอดของ Gateway ซึ่งเป็นเจ้าของการบังคับใช้การรับงานและขอบเขต
ข้อมูลอ้างอิง configContracts
ใช้ configContracts สำหรับพฤติกรรมการกำหนดค่าที่แมนิเฟสต์เป็นเจ้าของ ซึ่งตัวช่วยทั่วไปของ Core ต้องใช้โดยไม่ต้องนำเข้ารันไทม์ของ Plugin ได้แก่ การตรวจจับแฟล็กอันตราย เป้าหมายการย้าย SecretRef และการจำกัดเส้นทางการกำหนดค่าแบบเดิม
{ "configContracts": { "compatibilityMigrationPaths": ["legacyProvider"], "compatibilityRuntimePaths": ["legacyProvider.webhook"], "dangerousFlags": [ { "path": "accounts.*.allowUnverifiedSenders", "equals": true } ], "secretInputs": { "bundledDefaultEnabled": false, "paths": [ { "path": "routes.*.secret", "expected": "string", "ownerKind": "route" } ] } }}| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
compatibilityMigrationPaths |
ไม่ | string[] |
เส้นทางการกำหนดค่าที่สัมพันธ์กับราก ซึ่งระบุว่าการย้ายเพื่อความเข้ากันได้ระหว่างการตั้งค่าของ Plugin นี้อาจมีผล ช่วยให้การอ่านการกำหนดค่ารันไทม์ทั่วไปข้ามพื้นผิวการตั้งค่าทั้งหมดของ Plugin ได้ เมื่อการกำหนดค่าไม่เคยอ้างอิง Plugin |
compatibilityRuntimePaths |
ไม่ | string[] |
เส้นทางความเข้ากันได้ที่สัมพันธ์กับราก ซึ่ง Plugin นี้สามารถรองรับระหว่างรันไทม์ก่อนที่โค้ด Plugin จะเปิดใช้งานอย่างสมบูรณ์ ใช้สำหรับพื้นผิวแบบเดิมที่ควรจำกัดชุดตัวเลือกที่มาพร้อมระบบโดยไม่ต้องนำเข้ารันไทม์ของ Plugin ที่เข้ากันได้ทุกตัว |
dangerousFlags |
ไม่ | object[] |
ลิเทอรัลการกำหนดค่าที่ openclaw doctor ควรทำเครื่องหมายว่าไม่ปลอดภัยหรือเป็นอันตรายเมื่อเปิดใช้งาน ดูรายละเอียดด้านล่าง |
secretInputs |
ไม่ | object |
เส้นทางการกำหนดค่าภายใต้ plugins.entries.<id>.config สำหรับการย้าย SecretRef การตรวจสอบ การสร้างค่าเพื่อใช้งานเมื่อเริ่มต้นระบบ และการแยกเจ้าของรันไทม์แบบเลือกใช้ ดูรายละเอียดด้านล่าง |
แต่ละรายการ dangerousFlags รองรับ:
| ฟิลด์ | จำเป็น | ชนิด | ความหมาย |
|---|---|---|---|
path |
ใช่ | string |
เส้นทางการกำหนดค่าที่คั่นด้วยจุดและสัมพันธ์กับ plugins.entries.<id>.config รองรับไวลด์การ์ด * สำหรับเซกเมนต์ของแมป/อาร์เรย์ |
equals |
ใช่ | string | number | boolean | null |
ลิเทอรัลที่ตรงกันทุกประการซึ่งระบุว่าค่าการกำหนดค่านี้เป็นอันตราย |
secretInputs รองรับ:
| ฟิลด์ | จำเป็น | ประเภท | ความหมาย |
|---|---|---|---|
bundledDefaultEnabled |
ไม่ | boolean |
แทนที่ค่าเริ่มต้นของการเปิดใช้งาน Plugin ที่รวมมาให้ เมื่อพิจารณาว่าพื้นที่ผิว SecretRef นี้ทำงานอยู่หรือไม่ ใช้เมื่อ Plugin รวมมาให้ แต่พื้นที่ผิวควรยังคงไม่ทำงานจนกว่าจะเปิดใช้งานอย่างชัดเจนในการกำหนดค่า |
paths |
ใช่ | object[] |
พาธการกำหนดค่าที่มีรูปแบบเป็นข้อมูลลับ โดยแต่ละพาธมี path (คั่นด้วยจุด สัมพันธ์กับ plugins.entries.<id>.config และรองรับไวลด์การ์ด *) พร้อม expected ที่เป็นตัวเลือก (ปัจจุบันมีเฉพาะ "string") และ ownerKind ที่เป็นตัวเลือก (ปัจจุบันมีเฉพาะ "route") เจ้าของที่ประกาศจะแยกเฉพาะพาธที่ตรงกันทุกประการนั้นเมื่อการแก้ค่าล้มเหลว โดยรหัสเจ้าของคือพาธการกำหนดค่าแบบเต็ม |
เอกสารอ้างอิง mediaUnderstandingProviderMetadata
ใช้ mediaUnderstandingProviderMetadata เมื่อผู้ให้บริการการทำความเข้าใจสื่อมีโมเดลเริ่มต้น ลำดับความสำคัญของทางเลือกสำรองในการยืนยันตัวตนอัตโนมัติ หรือการรองรับเอกสารแบบเนทีฟที่ตัวช่วยทั่วไปของแกนหลักต้องใช้ก่อนโหลดรันไทม์ นอกจากนี้ยังต้องประกาศคีย์ใน contracts.mediaUnderstandingProviders
{ "contracts": { "mediaUnderstandingProviders": ["example"] }, "mediaUnderstandingProviderMetadata": { "example": { "capabilities": ["image", "audio"], "defaultModels": { "image": "example-vision-latest", "audio": "example-transcribe-latest" }, "autoPriority": { "image": 40 }, "nativeDocumentInputs": ["pdf"], "documentModels": { "pdf": { "textExtraction": "example-doc-text-latest", "image": "example-doc-vision-latest" } } } }}รายการผู้ให้บริการแต่ละรายการสามารถมีสิ่งต่อไปนี้:
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
capabilities |
("image" | "audio" | "video")[] |
ความสามารถด้านสื่อที่ผู้ให้บริการนี้เปิดให้ใช้ |
defaultModels |
Record<string, string> |
ค่าเริ่มต้นในการจับคู่ความสามารถกับโมเดล ซึ่งใช้เมื่อการกำหนดค่าไม่ได้ระบุโมเดล |
autoPriority |
Record<string, number> |
ตัวเลขที่ต่ำกว่าจะถูกจัดเรียงก่อนสำหรับทางเลือกสำรองของผู้ให้บริการโดยอัตโนมัติตามข้อมูลประจำตัว |
nativeDocumentInputs |
"pdf"[] |
อินพุตเอกสารแบบเนทีฟที่ผู้ให้บริการรองรับ |
documentModels |
{ pdf?: { textExtraction?: string; image?: string | false } } |
การแทนที่โมเดลแยกตามประเภทเอกสาร ตั้งค่า image: false เพื่อปิดใช้งานการแยกข้อมูลจากรูปภาพสำหรับเอกสารประเภทนั้น |
เอกสารอ้างอิง channelConfigs
ใช้ channelConfigs เมื่อ Plugin ช่องทางต้องการข้อมูลเมตาการกำหนดค่าที่มีต้นทุนต่ำก่อนโหลดรันไทม์ การค้นพบการตั้งค่า/สถานะช่องทางแบบอ่านอย่างเดียวสามารถใช้ข้อมูลเมตานี้โดยตรงสำหรับช่องทางภายนอกที่กำหนดค่าไว้ เมื่อไม่มีรายการตั้งค่า หรือเมื่อ setup.requiresRuntime: false ประกาศว่าไม่จำเป็นต้องใช้รันไทม์การตั้งค่า
channelConfigs เป็นข้อมูลเมตาของไฟล์รายการ Plugin ไม่ใช่ส่วนการกำหนดค่าระดับบนสุดใหม่สำหรับผู้ใช้ ผู้ใช้ยังคงกำหนดค่าอินสแตนซ์ช่องทางภายใต้ channels.<channel-id> OpenClaw อ่านข้อมูลเมตาของไฟล์รายการเพื่อพิจารณาว่า Plugin ใดเป็นเจ้าของช่องทางที่กำหนดค่าไว้นั้น ก่อนที่โค้ดรันไทม์ของ Plugin จะทำงาน
สำหรับ Plugin ช่องทาง configSchema และ channelConfigs อธิบายพาธที่แตกต่างกัน:
configSchemaตรวจสอบความถูกต้องของplugins.entries.<plugin-id>.configchannelConfigs.<channel-id>.schemaตรวจสอบความถูกต้องของchannels.<channel-id>
Plugin ที่ไม่ได้รวมมาให้ซึ่งประกาศ channels[] ควรประกาศรายการ channelConfigs ที่ตรงกันด้วย หากไม่มีรายการเหล่านี้ OpenClaw ยังคงโหลด Plugin ได้ แต่สคีมาการกำหนดค่าแบบโคลด์พาธ การตั้งค่า และพื้นที่ผิว Control UI จะไม่ทราบรูปร่างตัวเลือกที่ช่องทางเป็นเจ้าของจนกว่ารันไทม์ของ Plugin จะทำงาน
channelConfigs.<channel-id>.commands.nativeCommandsAutoEnabled และ nativeSkillsAutoEnabled สามารถประกาศค่าเริ่มต้น auto แบบคงที่สำหรับการตรวจสอบการกำหนดค่าคำสั่งที่ทำงานก่อนโหลดรันไทม์ช่องทาง ช่องทางที่รวมมาให้ยังสามารถเผยแพร่ค่าเริ่มต้นเดียวกันผ่าน package.json#openclaw.channel.commands ควบคู่กับข้อมูลเมตาแค็ตตาล็อกช่องทางอื่นที่แพ็กเกจเป็นเจ้าของ
{ "channelConfigs": { "matrix": { "schema": { "type": "object", "additionalProperties": false, "properties": { "homeserverUrl": { "type": "string" } } }, "uiHints": { "homeserverUrl": { "label": "URL ของโฮมเซิร์ฟเวอร์", "placeholder": "https://matrix.example.com" } }, "label": "Matrix", "description": "การเชื่อมต่อโฮมเซิร์ฟเวอร์ Matrix", "commands": { "nativeCommandsAutoEnabled": true, "nativeSkillsAutoEnabled": true }, "preferOver": ["matrix-legacy"] } }}รายการช่องทางแต่ละรายการสามารถมีสิ่งต่อไปนี้:
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
schema |
object |
JSON Schema สำหรับ channels.<id> จำเป็นสำหรับรายการการกำหนดค่าช่องทางแต่ละรายการที่ประกาศ |
uiHints |
Record<string, object> |
ป้ายกำกับ UI/ข้อความตัวอย่าง/คำแนะนำเกี่ยวกับข้อมูลละเอียดอ่อนที่เป็นตัวเลือกสำหรับส่วนการกำหนดค่าช่องทางนั้น |
label |
string |
ป้ายกำกับช่องทางที่ผสานเข้ากับพื้นที่ผิวตัวเลือกและการตรวจสอบเมื่อข้อมูลเมตารันไทม์ยังไม่พร้อม |
description |
string |
คำอธิบายช่องทางแบบสั้นสำหรับพื้นที่ผิวการตรวจสอบและแค็ตตาล็อก |
commands |
object |
ค่าเริ่มต้นอัตโนมัติแบบคงที่ของคำสั่งเนทีฟและ Skills เนทีฟสำหรับการตรวจสอบการกำหนดค่าก่อนรันไทม์ |
preferOver |
string[] |
รหัส Plugin แบบเดิมหรือที่มีลำดับความสำคัญต่ำกว่า ซึ่งช่องทางนี้ควรมีลำดับเหนือกว่าในพื้นที่ผิวการเลือก |
การแทนที่ Plugin ช่องทางอื่น
ใช้ preferOver เมื่อ Plugin ของคุณเป็นเจ้าของที่ต้องการสำหรับรหัสช่องทางที่ Plugin อื่นสามารถให้บริการได้เช่นกัน กรณีทั่วไปได้แก่ รหัส Plugin ที่เปลี่ยนชื่อ Plugin แบบสแตนด์อโลนที่เข้ามาแทนที่ Plugin ที่รวมมาให้ หรือฟอร์กที่มีการบำรุงรักษาซึ่งคงรหัสช่องทางเดิมไว้เพื่อความเข้ากันได้ของการกำหนดค่า
{ "id": "acme-chat", "channels": ["chat"], "channelConfigs": { "chat": { "schema": { "type": "object", "additionalProperties": false, "properties": { "webhookUrl": { "type": "string" } } }, "preferOver": ["chat"] } }}เมื่อกำหนดค่า channels.chat แล้ว OpenClaw จะพิจารณาทั้งรหัสช่องทางและรหัส Plugin ที่ต้องการ หาก Plugin ที่มีลำดับความสำคัญต่ำกว่าถูกเลือกเพียงเพราะเป็น Plugin ที่รวมมาให้หรือเปิดใช้งานโดยค่าเริ่มต้น OpenClaw จะปิดใช้งาน Plugin นั้นในการกำหนดค่ารันไทม์ที่มีผล เพื่อให้ Plugin เดียวเป็นเจ้าของช่องทางและเครื่องมือของช่องทาง การเลือกอย่างชัดเจนของผู้ใช้ยังคงมีผลเหนือกว่า หากผู้ใช้เปิดใช้งาน Plugin ทั้งสองอย่างชัดเจน (ผ่าน plugins.allow หรือการกำหนดค่า plugins.entries ที่มีสาระสำคัญ) OpenClaw จะคงตัวเลือกนั้นไว้และรายงานการวินิจฉัยช่องทาง/เครื่องมือที่ซ้ำกัน แทนที่จะเปลี่ยนชุด Plugin ที่ร้องขอโดยไม่แจ้ง
จำกัดขอบเขต preferOver ไว้เฉพาะรหัส Plugin ที่สามารถให้บริการช่องทางเดียวกันได้จริง ฟิลด์นี้ไม่ใช่ฟิลด์ลำดับความสำคัญทั่วไปและไม่ได้เปลี่ยนชื่อคีย์การกำหนดค่าของผู้ใช้
เอกสารอ้างอิง modelSupport
ใช้ modelSupport เมื่อ OpenClaw ควรอนุมาน Plugin ผู้ให้บริการของคุณจากรหัสโมเดลแบบย่อ เช่น gpt-5.6-sol หรือ claude-sonnet-4.6 ก่อนโหลดรันไทม์ของ Plugin
{ "modelSupport": { "modelPrefixes": ["gpt-", "o1", "o3", "o4"], "modelPatterns": ["^computer-use-preview"] }}OpenClaw ใช้ลำดับความสำคัญดังนี้:
- การอ้างอิง
provider/modelแบบชัดเจนใช้ข้อมูลเมตาของไฟล์รายการprovidersที่เป็นเจ้าของ modelPatternsมีลำดับเหนือกว่าmodelPrefixes- หาก Plugin ที่ไม่ได้รวมมาให้หนึ่งรายการและ Plugin ที่รวมมาให้หนึ่งรายการตรงกัน Plugin ที่ไม่ได้รวมมาให้จะมีผลเหนือกว่า
- ความกำกวมที่เหลือจะถูกละเว้นจนกว่าผู้ใช้หรือการกำหนดค่าจะระบุผู้ให้บริการ
ฟิลด์:
| ฟิลด์ | ประเภท | ความหมาย |
|---|---|---|
modelPrefixes |
string[] |
คำนำหน้าที่จับคู่ด้วย startsWith กับรหัสโมเดลแบบย่อ |
modelPatterns |
string[] |
ซอร์สเรเจกซ์ที่จับคู่กับรหัสโมเดลแบบย่อหลังนำส่วนต่อท้ายโปรไฟล์ออก |
รายการ modelPatterns จะถูกคอมไพล์ผ่าน compileSafeRegex ซึ่งปฏิเสธรูปแบบที่มีการทำซ้ำซ้อนกัน (ตัวอย่างเช่น (a+)+$) รูปแบบที่ไม่ผ่านการตรวจสอบความปลอดภัยจะถูกข้ามโดยไม่แจ้ง เช่นเดียวกับเรเจกซ์ที่มีไวยากรณ์ไม่ถูกต้อง ควรรักษารูปแบบให้เรียบง่ายและหลีกเลี่ยงตัวระบุจำนวนแบบซ้อนกัน
เอกสารอ้างอิง modelCatalog
ใช้ modelCatalog เมื่อ OpenClaw ควรทราบข้อมูลเมตาโมเดลของผู้ให้บริการก่อนโหลดรันไทม์ของ Plugin นี่คือแหล่งข้อมูลที่ไฟล์รายการเป็นเจ้าของสำหรับแถวแค็ตตาล็อกแบบคงที่ นามแฝงผู้ให้บริการ กฎการระงับ และโหมดการค้นพบ การรีเฟรชรันไทม์ยังคงเป็นหน้าที่ของโค้ดรันไทม์ผู้ให้บริการ แต่ไฟล์รายการจะแจ้งแกนหลักว่าเมื่อใดจำเป็นต้องใช้รันไทม์
{ "providers": ["openai"], "modelCatalog": { "providers": { "openai": { "baseUrl": "https://api.openai.com/v1", "api": "openai-responses", "models": [ { "id": "gpt-5.4", "name": "GPT-5.4", "input": ["text", "image"], "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "cost": { "input": 1.25, "output": 10, "cacheRead": 0.125 }, "status": "available", "tags": ["default"] } ] } }, "aliases": { "azure-openai-responses": { "provider": "openai", "api": "azure-openai-responses" } }, "suppressions": [ { "provider": "azure-openai-responses", "model": "gpt-5.3-codex-spark", "reason": "ไม่มีให้ใช้งานบน Azure OpenAI Responses" } ], "discovery": { "openai": "static" } }}ฟิลด์ระดับบนสุด:
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
providers |
Record<string, object> |
แถวแค็ตตาล็อกสำหรับรหัสผู้ให้บริการที่ Plugin นี้เป็นเจ้าของ คีย์ควรปรากฏใน providers ระดับบนสุดด้วย |
aliases |
Record<string, object> |
นามแฝงผู้ให้บริการที่ควรแปลงเป็นผู้ให้บริการที่เป็นเจ้าของสำหรับการวางแผนแค็ตตาล็อกหรือการระงับ |
suppressions |
object[] |
แถวโมเดลจากแหล่งอื่นที่ Plugin นี้ระงับด้วยเหตุผลเฉพาะของผู้ให้บริการ |
discovery |
Record<string, "static" | "refreshable" | "runtime"> |
ระบุว่าแค็ตตาล็อกผู้ให้บริการสามารถอ่านจากเมทาดาทาของแมนิเฟสต์ รีเฟรชลงแคช หรือต้องใช้รันไทม์ |
runtimeAugment |
boolean |
ตั้งเป็น true เฉพาะเมื่อรันไทม์ของผู้ให้บริการต้องเพิ่มแถวแค็ตตาล็อกหลังการวางแผนแมนิเฟสต์/การกำหนดค่า |
aliases มีส่วนร่วมในการค้นหาความเป็นเจ้าของผู้ให้บริการสำหรับการวางแผนแค็ตตาล็อกโมเดล เป้าหมายนามแฝงต้องเป็นผู้ให้บริการระดับบนสุดที่ Plugin เดียวกันเป็นเจ้าของ เมื่อรายการที่กรองตามผู้ให้บริการใช้นามแฝง OpenClaw สามารถอ่านแมนิเฟสต์ของเจ้าของและใช้การเขียนทับ API/URL ฐานของนามแฝงได้โดยไม่ต้องโหลดรันไทม์ของผู้ให้บริการ นามแฝงจะไม่ขยายรายการแค็ตตาล็อกที่ไม่ได้กรอง รายการแบบกว้างจะแสดงเฉพาะแถวผู้ให้บริการมาตรฐานของเจ้าของเท่านั้น
suppressions แทนที่ฮุก suppressBuiltInModel แบบเก่าของรันไทม์ผู้ให้บริการ รายการระงับจะมีผลเฉพาะเมื่อ Plugin เป็นเจ้าของผู้ให้บริการ หรือประกาศเป็นคีย์ modelCatalog.aliases ที่ชี้ไปยังผู้ให้บริการที่เป็นเจ้าของ ระบบจะไม่เรียกฮุกระงับของรันไทม์ระหว่างการแปลงค่าโมเดลอีกต่อไป
ฟิลด์ผู้ให้บริการ:
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
baseUrl |
string |
URL ฐานเริ่มต้นที่เลือกกำหนดได้สำหรับโมเดลในแค็ตตาล็อกผู้ให้บริการนี้ |
api |
ModelApi |
อะแดปเตอร์ API เริ่มต้นที่เลือกกำหนดได้สำหรับโมเดลในแค็ตตาล็อกผู้ให้บริการนี้ |
headers |
Record<string, string> |
ส่วนหัวแบบคงที่ที่เลือกกำหนดได้ซึ่งใช้กับแค็ตตาล็อกผู้ให้บริการนี้ |
defaultUtilityModel |
string |
รหัสโมเดลขนาดเล็กที่ผู้ให้บริการแนะนำซึ่งเลือกกำหนดได้สำหรับงานอรรถประโยชน์ภายในระยะสั้น (ชื่อเรื่อง การบรรยายความคืบหน้า) ใช้เมื่อไม่ได้ตั้งค่า agents.defaults.utilityModel และผู้ให้บริการนี้ให้บริการโมเดลหลักของเอเจนต์ |
models |
object[] |
แถวโมเดลที่จำเป็น ระบบจะละเว้นแถวที่ไม่มี id |
ฟิลด์โมเดล:
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
id |
string |
รหัสโมเดลภายในผู้ให้บริการ โดยไม่มีคำนำหน้า provider/ |
name |
string |
ชื่อที่แสดงซึ่งเลือกกำหนดได้ |
api |
ModelApi |
การเขียนทับ API รายโมเดลซึ่งเลือกกำหนดได้ |
baseUrl |
string |
การเขียนทับ URL ฐานรายโมเดลซึ่งเลือกกำหนดได้ |
headers |
Record<string, string> |
ส่วนหัวแบบคงที่รายโมเดลซึ่งเลือกกำหนดได้ |
input |
Array<"text" | "image" | "document"> |
รูปแบบข้อมูลที่โมเดลยอมรับ ค่าอื่นจะถูกตัดทิ้งโดยไม่มีการแจ้งเตือน |
reasoning |
boolean |
ระบุว่าโมเดลเปิดเผยพฤติกรรมการให้เหตุผลหรือไม่ |
contextWindow |
number |
หน้าต่างบริบทดั้งเดิมของผู้ให้บริการ |
contextTokens |
number |
ขีดจำกัดบริบทรันไทม์ที่มีผลซึ่งเลือกกำหนดได้ เมื่อแตกต่างจาก contextWindow |
maxTokens |
number |
จำนวนโทเค็นเอาต์พุตสูงสุดเมื่อทราบค่า |
thinkingLevelMap |
Record<string, string | null> |
การเขียนทับรหัสโมเดลหรือพารามิเตอร์ตามระดับการคิดซึ่งเลือกกำหนดได้ |
cost |
object |
ราคาที่เลือกกำหนดได้ในหน่วย USD ต่อหนึ่งล้านโทเค็น รวมถึง tieredPricing ที่เลือกกำหนดได้ |
compat |
object |
แฟล็กความเข้ากันได้ที่เลือกกำหนดได้ ซึ่งตรงกับความเข้ากันได้ของการกำหนดค่าโมเดล OpenClaw |
mediaInput |
object |
การกำหนดค่าอินพุตรายรูปแบบข้อมูลซึ่งเลือกกำหนดได้ ปัจจุบันรองรับเฉพาะรูปภาพ |
status |
"available" | "preview" | "deprecated" | "disabled" |
สถานะการแสดงรายการ ระงับเฉพาะเมื่อแถวนั้นต้องไม่ปรากฏเลย |
statusReason |
string |
เหตุผลที่เลือกกำหนดได้ซึ่งแสดงพร้อมสถานะไม่พร้อมใช้งาน |
replaces |
string[] |
รหัสโมเดลภายในผู้ให้บริการแบบเก่าที่โมเดลนี้เข้ามาแทนที่ |
replacedBy |
string |
รหัสโมเดลภายในผู้ให้บริการที่ใช้แทนสำหรับแถวที่เลิกใช้แล้ว |
tags |
string[] |
แท็กที่เสถียรซึ่งใช้โดยตัวเลือกและตัวกรอง |
ฟิลด์การระงับ:
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
provider |
string |
รหัสผู้ให้บริการสำหรับแถวต้นทางที่จะระงับ Plugin นี้ต้องเป็นเจ้าของหรือประกาศเป็นนามแฝงที่เป็นเจ้าของ |
model |
string |
รหัสโมเดลภายในผู้ให้บริการที่จะระงับ |
reason |
string |
ข้อความที่เลือกกำหนดได้ซึ่งแสดงเมื่อมีการร้องขอแถวที่ถูกระงับโดยตรง |
when.baseUrlHosts |
string[] |
รายการโฮสต์ URL ฐานที่มีผลของผู้ให้บริการซึ่งเลือกกำหนดได้และจำเป็นก่อนการระงับจะมีผล |
when.providerConfigApiIn |
string[] |
รายการค่า api ที่ตรงกันทุกประการในการกำหนดค่าผู้ให้บริการซึ่งเลือกกำหนดได้และจำเป็นก่อนการระงับจะมีผล |
อย่าใส่ข้อมูลที่ใช้เฉพาะรันไทม์ใน modelCatalog ใช้ static เฉพาะเมื่อแถวแมนิเฟสต์สมบูรณ์เพียงพอให้รายการที่กรองตามผู้ให้บริการและพื้นผิวตัวเลือกข้ามการค้นหารีจิสทรี/รันไทม์ได้ ใช้ refreshable เมื่อแถวแมนิเฟสต์เป็นข้อมูลตั้งต้นหรือส่วนเสริมที่มีประโยชน์และแสดงในรายการได้ แต่การรีเฟรช/แคชสามารถเพิ่มแถวเพิ่มเติมภายหลังได้ แถวที่รีเฟรชได้ไม่ถือเป็นแหล่งข้อมูลที่เชื่อถือได้โดยตัวมันเอง ใช้ runtime เมื่อ OpenClaw ต้องโหลดรันไทม์ของผู้ให้บริการเพื่อทราบรายการ
ข้อมูลอ้างอิง modelIdNormalization
ใช้ modelIdNormalization สำหรับการปรับแต่งรหัสโมเดลที่ผู้ให้บริการเป็นเจ้าของแบบประหยัด ซึ่งต้องเกิดขึ้นก่อนโหลดรันไทม์ของผู้ให้บริการ วิธีนี้เก็บนามแฝง เช่น ชื่อโมเดลแบบสั้น รหัสเดิมภายในผู้ให้บริการ และกฎคำนำหน้าพร็อกซี ไว้ในแมนิเฟสต์ของ Plugin เจ้าของ แทนที่จะอยู่ในตารางเลือกโมเดลของแกนหลัก
{ "providers": ["anthropic", "openrouter"], "modelIdNormalization": { "providers": { "anthropic": { "aliases": { "sonnet-4.6": "claude-sonnet-4-6" } }, "openrouter": { "prefixWhenBare": "openrouter" } } }}ฟิลด์ผู้ให้บริการ:
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
aliases |
Record<string,string> |
นามแฝงรหัสโมเดลที่ตรงกันทุกประการโดยไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ ระบบจะส่งคืนค่าตามที่เขียนไว้ |
stripPrefixes |
string[] |
คำนำหน้าที่จะนำออกก่อนค้นหานามแฝง มีประโยชน์สำหรับการซ้ำซ้อนของผู้ให้บริการ/โมเดลแบบเดิม |
prefixWhenBare |
string |
คำนำหน้าที่จะเพิ่มเมื่อรหัสโมเดลที่ปรับมาตรฐานแล้วไม่มี / อยู่ก่อน |
prefixWhenBareAfterAliasStartsWith |
object[] |
กฎคำนำหน้ารหัสเปล่าแบบมีเงื่อนไขหลังการค้นหานามแฝง โดยใช้ modelPrefix และ prefix เป็นคีย์ |
ข้อมูลอ้างอิง providerEndpoints
ใช้ providerEndpoints สำหรับการจำแนกปลายทางที่นโยบายคำขอทั่วไปต้องทราบก่อนโหลดรันไทม์ของผู้ให้บริการ แกนหลักยังคงเป็นเจ้าของความหมายของ endpointClass แต่ละรายการ ส่วนแมนิเฟสต์ของ Plugin เป็นเจ้าของเมทาดาทาโฮสต์และ URL ฐาน
Plugin ผู้ให้บริการที่แยกออกเป็นภายนอกอย่างเป็นทางการจะไม่รวมอยู่ในชุดแจกจ่ายหลัก ดังนั้น
แมนิเฟสต์ของ Plugin เหล่านั้นจึงมองไม่เห็นจนกว่าจะติดตั้ง และต้องทำสำเนา providerEndpoints
ไว้ใน scripts/lib/official-external-provider-catalog.json ด้วย เพื่อให้
การจำแนกปลายทางยังคงทำงานได้โดยไม่มี Plugin โดยมีการทดสอบสัญญา
คอยบังคับให้ข้อมูลสำเนาตรงกัน
ฟิลด์ปลายทาง:
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
endpointClass |
string |
คลาสเอนด์พอยต์หลักที่รู้จัก เช่น openrouter, moonshot-native หรือ google-vertex |
hosts |
string[] |
ชื่อโฮสต์แบบตรงกันทุกประการที่แมปกับคลาสเอนด์พอยต์ |
hostSuffixes |
string[] |
ส่วนต่อท้ายของโฮสต์ที่แมปกับคลาสเอนด์พอยต์ เติม . ไว้ข้างหน้าสำหรับการจับคู่เฉพาะส่วนต่อท้ายของโดเมน |
baseUrls |
string[] |
URL ฐาน HTTP(S) ที่ปรับรูปแบบแล้วและตรงกันทุกประการ ซึ่งแมปกับคลาสเอนด์พอยต์ |
googleVertexRegion |
string |
ภูมิภาค Google Vertex แบบคงที่สำหรับโฮสต์ส่วนกลางที่ตรงกันทุกประการ |
googleVertexRegionHostSuffix |
string |
ส่วนต่อท้ายที่จะตัดออกจากโฮสต์ที่ตรงกัน เพื่อแสดงคำนำหน้าภูมิภาค Google Vertex |
ข้อมูลอ้างอิง providerRequest
ใช้ providerRequest สำหรับข้อมูลเมตาความเข้ากันได้ของคำขอที่มีต้นทุนต่ำ ซึ่งนโยบายคำขอทั่วไปต้องใช้โดยไม่ต้องโหลดรันไทม์ของผู้ให้บริการ เก็บการเขียนเพย์โหลดใหม่ที่เฉพาะเจาะจงกับพฤติกรรมไว้ในฮุกของรันไทม์ผู้ให้บริการหรือตัวช่วยร่วมของตระกูลผู้ให้บริการ
{ "providerRequest": { "providers": { "vllm": { "family": "vllm", "openAICompletions": { "supportsStreamingUsage": true } } } }}ฟิลด์ผู้ให้บริการ:
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
family |
string |
ป้ายกำกับตระกูลผู้ให้บริการที่ใช้ในการตัดสินใจด้านความเข้ากันได้ของคำขอทั่วไปและการวินิจฉัย |
compatibilityFamily |
"moonshot" |
กลุ่มความเข้ากันได้ของตระกูลผู้ให้บริการที่เป็นตัวเลือก สำหรับตัวช่วยคำขอที่ใช้ร่วมกัน |
openAICompletions |
object |
แฟล็กคำขอ completions ที่เข้ากันได้กับ OpenAI ซึ่งปัจจุบันคือ supportsStreamingUsage |
ข้อมูลอ้างอิง secretProviderIntegrations
ใช้ secretProviderIntegrations เมื่อ Plugin สามารถเผยแพร่พรีเซ็ตผู้ให้บริการ exec ของ SecretRef ที่นำกลับมาใช้ใหม่ได้ OpenClaw อ่านข้อมูลเมตานี้ก่อนโหลดรันไทม์ของ Plugin จัดเก็บความเป็นเจ้าของ Plugin ไว้ใน secrets.providers.<alias>.pluginIntegration และปล่อยให้รันไทม์ SecretRef ดำเนินการแก้ไขข้อมูลลับจริง พรีเซ็ตจะแสดงเฉพาะสำหรับ Plugin ที่รวมมาให้และ Plugin ที่ติดตั้งซึ่งค้นพบจากรูทการติดตั้ง Plugin ที่มีการจัดการ เช่น การติดตั้งผ่าน git และ ClawHub
{ "secretProviderIntegrations": { "secret-store": { "providerAlias": "team-secrets", "displayName": "Team secrets", "source": "exec", "command": "${node}", "args": ["./bin/resolve-secrets.mjs"] } }}คีย์ของแมปคือรหัสการผสานการทำงาน หากละเว้น providerAlias OpenClaw จะใช้รหัสการผสานการทำงานเป็นนามแฝงผู้ให้บริการ SecretRef นามแฝงผู้ให้บริการต้องตรงกับรูปแบบนามแฝงผู้ให้บริการ SecretRef ปกติ เช่น team-secrets หรือ onepassword-work
เมื่อผู้ดำเนินการเลือกพรีเซ็ต OpenClaw จะเขียนการอ้างอิงผู้ให้บริการดังนี้:
{ "secrets": { "providers": { "team-secrets": { "source": "exec", "pluginIntegration": { "pluginId": "acme-secrets", "integrationId": "secret-store" } } } }}เมื่อเริ่มต้น/โหลดใหม่ OpenClaw จะแก้ไขผู้ให้บริการนั้นโดยโหลดข้อมูลเมตาแมนิเฟสต์ Plugin ปัจจุบัน ตรวจสอบว่า Plugin เจ้าของได้รับการติดตั้งและทำงานอยู่ และสร้างคำสั่ง exec จากแมนิเฟสต์ การปิดใช้งานหรือลบ Plugin จะเพิกถอนผู้ให้บริการสำหรับ SecretRef ที่ใช้งานอยู่ ผู้ดำเนินการที่ต้องการการกำหนดค่า exec แบบสแตนด์อโลนยังคงสามารถเขียนผู้ให้บริการ command/args ด้วยตนเองได้โดยตรง
ปัจจุบันรองรับเฉพาะพรีเซ็ต source: "exec" เท่านั้น command ต้องเป็น ${node} และ args[0] ต้องเป็นสคริปต์ตัวแก้ไข ./ ที่สัมพันธ์กับรูทของ Plugin OpenClaw จะสร้างค่าดังกล่าวเมื่อเริ่มต้น/โหลดใหม่ให้เป็นไฟล์ปฏิบัติการ Node ปัจจุบันและพาธสัมบูรณ์ของสคริปต์ภายใน Plugin ตัวเลือก Node เช่น --require, --import, --loader, --env-file, --eval และ --print ไม่ได้เป็นส่วนหนึ่งของสัญญาพรีเซ็ตแมนิเฟสต์ ผู้ดำเนินการที่ต้องใช้คำสั่งที่ไม่ใช่ Node สามารถกำหนดค่าผู้ให้บริการ exec แบบสแตนด์อโลนด้วยตนเองได้โดยตรง
OpenClaw สร้าง trustedDirs สำหรับพรีเซ็ตแมนิเฟสต์จากรูทของ Plugin และสำหรับพรีเซ็ต ${node} จะสร้างจากไดเรกทอรีไฟล์ปฏิบัติการ Node ปัจจุบัน trustedDirs ที่กำหนดไว้ในแมนิเฟสต์จะถูกละเว้น ตัวเลือกผู้ให้บริการ exec อื่นๆ เช่น timeoutMs, noOutputTimeoutMs, maxOutputBytes, jsonOnly, env, passEnv และ allowInsecurePath จะถูกส่งต่อไปยังการกำหนดค่าผู้ให้บริการ exec ของ SecretRef ตามปกติ
ข้อมูลอ้างอิง modelPricing
ใช้ modelPricing เมื่อผู้ให้บริการต้องควบคุมพฤติกรรมการกำหนดราคาของระนาบควบคุมก่อนโหลดรันไทม์ แคชราคาของ Gateway จะอ่านข้อมูลเมตานี้โดยไม่ต้องนำเข้าโค้ดรันไทม์ของผู้ให้บริการ
{ "providers": ["ollama", "openrouter"], "modelPricing": { "providers": { "ollama": { "external": false }, "openrouter": { "openRouter": { "passthroughProviderModel": true }, "liteLLM": false } } }}ฟิลด์ผู้ให้บริการ:
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
external |
boolean |
ตั้งค่า false สำหรับผู้ให้บริการภายในเครื่อง/โฮสต์เองที่ต้องไม่ดึงข้อมูลราคา OpenRouter หรือ LiteLLM โดยเด็ดขาด |
openRouter |
false | object |
การแมปการค้นหาราคา OpenRouter โดย false จะปิดใช้งานการค้นหา OpenRouter สำหรับผู้ให้บริการนี้ |
liteLLM |
false | object |
การแมปการค้นหาราคา LiteLLM โดย false จะปิดใช้งานการค้นหา LiteLLM สำหรับผู้ให้บริการนี้ |
ฟิลด์แหล่งที่มา:
| ฟิลด์ | ชนิด | ความหมาย |
|---|---|---|
provider |
string |
รหัสผู้ให้บริการแค็ตตาล็อกภายนอกเมื่อแตกต่างจากรหัสผู้ให้บริการ OpenClaw เช่น z-ai สำหรับผู้ให้บริการ zai |
passthroughProviderModel |
boolean |
ถือว่ารหัสโมเดลที่มีเครื่องหมายทับเป็นการอ้างอิงผู้ให้บริการ/โมเดลแบบซ้อน ซึ่งมีประโยชน์สำหรับผู้ให้บริการพร็อกซี เช่น OpenRouter |
modelIdTransforms |
"version-dots"[] |
รูปแบบรหัสโมเดลของแค็ตตาล็อกภายนอกเพิ่มเติม โดย version-dots จะลองรหัสเวอร์ชันแบบมีจุด เช่น claude-opus-4.6 |
ดัชนีผู้ให้บริการ OpenClaw
ดัชนีผู้ให้บริการ OpenClaw คือข้อมูลเมตาตัวอย่างที่ OpenClaw เป็นเจ้าของ สำหรับผู้ให้บริการซึ่งอาจยังไม่ได้ติดตั้ง Plugin ข้อมูลนี้ไม่ใช่ส่วนหนึ่งของแมนิเฟสต์ Plugin แมนิเฟสต์ Plugin ยังคงเป็นแหล่งข้อมูลที่เชื่อถือได้สำหรับ Plugin ที่ติดตั้ง ดัชนีผู้ให้บริการเป็นสัญญาสำรองภายในที่พื้นผิวผู้ให้บริการแบบติดตั้งได้และตัวเลือกโมเดลก่อนติดตั้งในอนาคตจะใช้ เมื่อยังไม่ได้ติดตั้ง Plugin ของผู้ให้บริการ
ลำดับความน่าเชื่อถือของแค็ตตาล็อก:
- การกำหนดค่าของผู้ใช้
- แมนิเฟสต์ Plugin ที่ติดตั้ง
modelCatalog - แคชแค็ตตาล็อกโมเดลจากการรีเฟรชอย่างชัดเจน
- แถวตัวอย่างจากดัชนีผู้ให้บริการ OpenClaw
ดัชนีผู้ให้บริการต้องไม่มีข้อมูลลับ สถานะการเปิดใช้งาน ฮุกรันไทม์ หรือข้อมูลโมเดลสดที่เฉพาะเจาะจงกับบัญชี แค็ตตาล็อกตัวอย่างใช้รูปแบบแถวผู้ให้บริการ modelCatalog เดียวกับแมนิเฟสต์ Plugin แต่ควรจำกัดไว้เฉพาะข้อมูลเมตาสำหรับการแสดงผลที่เสถียร เว้นแต่ฟิลด์อะแดปเตอร์รันไทม์ เช่น api, baseUrl, ราคา หรือแฟล็กความเข้ากันได้ จะได้รับการรักษาให้สอดคล้องกับแมนิเฟสต์ Plugin ที่ติดตั้งโดยเจตนา ผู้ให้บริการที่มีการค้นหา /models แบบสดควรเขียนแถวที่รีเฟรชผ่านพาธแคชแค็ตตาล็อกโมเดลอย่างชัดเจน แทนที่จะให้การแสดงรายการหรือการเริ่มต้นใช้งานตามปกติเรียก API ของผู้ให้บริการ
รายการในดัชนีผู้ให้บริการอาจมีข้อมูลเมตาของ Plugin ที่ติดตั้งได้ด้วย สำหรับผู้ให้บริการที่ย้าย Plugin ออกจากแกนหลักหรือยังไม่ได้ติดตั้งด้วยเหตุผลอื่น ข้อมูลเมตานี้สะท้อนรูปแบบแค็ตตาล็อกช่องทาง ได้แก่ ชื่อแพ็กเกจ ข้อกำหนดการติดตั้ง npm ค่า integrity ที่คาดไว้ และป้ายกำกับตัวเลือกการยืนยันตัวตนที่มีต้นทุนต่ำ ซึ่งเพียงพอสำหรับแสดงตัวเลือกการตั้งค่าที่ติดตั้งได้ เมื่อติดตั้ง Plugin แล้ว แมนิเฟสต์ของ Plugin จะมีลำดับความสำคัญเหนือกว่า และรายการดัชนีผู้ให้บริการสำหรับผู้ให้บริการนั้นจะถูกละเว้น
openclaw doctor --fix ย้ายชุดคีย์ความสามารถระดับบนสุดแบบเดิมของแมนิเฟสต์ที่มีขนาดเล็กและจำกัดไปยัง contracts.* ได้แก่ speechProviders, mediaUnderstandingProviders, imageGenerationProviders และ tools คีย์เหล่านี้ทั้งหมด (รวมถึงรายการความสามารถอื่นๆ) จะไม่ถูกอ่านเป็นฟิลด์ระดับบนสุดของแมนิเฟสต์อีกต่อไป การโหลดแมนิเฟสต์ตามปกติจะรู้จักคีย์เหล่านี้เฉพาะภายใต้ contracts
แมนิเฟสต์เทียบกับ package.json
ไฟล์ทั้งสองทำหน้าที่ต่างกัน:
| ไฟล์ | ใช้สำหรับ |
|---|---|
openclaw.plugin.json |
การค้นพบ การตรวจสอบความถูกต้องของการกำหนดค่า ข้อมูลเมตาตัวเลือกการยืนยันตัวตน และคำแนะนำ UI ที่ต้องมีอยู่ก่อนโค้ด Plugin ทำงาน |
package.json |
ข้อมูลเมตา npm การติดตั้งการขึ้นต่อกัน และบล็อก openclaw ที่ใช้สำหรับเอนทรีพอยต์ การควบคุมการติดตั้ง การตั้งค่า หรือข้อมูลเมตาแค็ตตาล็อก |
หากไม่แน่ใจว่าข้อมูลเมตาส่วนหนึ่งควรอยู่ที่ใด ให้ใช้กฎนี้:
- หาก OpenClaw ต้องทราบข้อมูลนั้นก่อนโหลดโค้ด Plugin ให้ใส่ไว้ใน
openclaw.plugin.json - หากข้อมูลนั้นเกี่ยวกับการจัดแพ็กเกจ ไฟล์เริ่มต้น หรือพฤติกรรมการติดตั้ง npm ให้ใส่ไว้ใน
package.json
ฟิลด์ package.json ที่ส่งผลต่อการค้นพบ
ข้อมูลเมตา Plugin ก่อนรันไทม์บางส่วนถูกจัดเก็บไว้ใน package.json ภายใต้บล็อก openclaw แทน openclaw.plugin.json โดยเจตนา openclaw.bundle และ openclaw.bundle.json ไม่ใช่สัญญา Plugin ของ OpenClaw โดย Plugin แบบเนทีฟต้องใช้ openclaw.plugin.json ร่วมกับฟิลด์ package.json#openclaw ที่รองรับด้านล่าง
ตัวอย่างสำคัญ:
| ฟิลด์ | ความหมาย |
|---|---|
openclaw.extensions |
ประกาศจุดเริ่มต้นของ Plugin แบบเนทีฟ ต้องอยู่ภายในไดเรกทอรีแพ็กเกจของ Plugin |
openclaw.runtimeExtensions |
ประกาศจุดเริ่มต้นรันไทม์ JavaScript ที่สร้างแล้วสำหรับแพ็กเกจที่ติดตั้ง ต้องอยู่ภายในไดเรกทอรีแพ็กเกจของ Plugin |
openclaw.setupEntry |
จุดเริ่มต้นขนาดเล็กสำหรับการตั้งค่าเท่านั้น ซึ่งใช้ระหว่างการเริ่มต้นใช้งาน การเริ่มช่องทางแบบเลื่อนเวลา และการตรวจสอบสถานะช่องทาง/การค้นหา SecretRef แบบอ่านอย่างเดียว ต้องอยู่ภายในไดเรกทอรีแพ็กเกจของ Plugin |
openclaw.runtimeSetupEntry |
ประกาศจุดเริ่มต้นการตั้งค่า JavaScript ที่สร้างแล้วสำหรับแพ็กเกจที่ติดตั้ง ต้องมี setupEntry ต้องมีอยู่จริง และต้องอยู่ภายในไดเรกทอรีแพ็กเกจของ Plugin |
openclaw.channel |
เมทาดาทาแค็ตตาล็อกช่องทางที่มีขนาดเล็ก เช่น ป้ายกำกับ พาธเอกสาร นามแฝง และข้อความสำหรับการเลือก |
openclaw.channel.approvalFlags |
แฟล็กลักษณะการทำงานของการอนุมัติแบบปิดที่พร้อมใช้ก่อนโหลดรันไทม์ native หมายถึงช่องทางเป็นเจ้าของ UI การอนุมัติแบบเนทีฟและการแก้ไขให้เสร็จภายในเทิร์นเดียวกัน |
openclaw.channel.commands |
เมทาดาทาค่าเริ่มต้นอัตโนมัติแบบคงที่สำหรับคำสั่งเนทีฟและ Skills แบบเนทีฟ ซึ่งการกำหนดค่า การตรวจสอบ และพื้นผิวรายการคำสั่งใช้ก่อนโหลดรันไทม์ของช่องทาง |
openclaw.channel.configuredState |
เมทาดาทาตัวตรวจสอบสถานะการกำหนดค่าแบบขนาดเล็กที่ตอบได้ว่า "มีการตั้งค่าผ่านตัวแปรสภาพแวดล้อมเท่านั้นอยู่แล้วหรือไม่" โดยไม่ต้องโหลดรันไทม์ของช่องทางทั้งหมด |
openclaw.channel.persistedAuthState |
เมทาดาทาตัวตรวจสอบการยืนยันตัวตนที่บันทึกไว้แบบขนาดเล็ก ซึ่งตอบได้ว่า "มีสิ่งใดลงชื่อเข้าใช้อยู่แล้วหรือไม่" โดยไม่ต้องโหลดรันไทม์ของช่องทางทั้งหมด |
openclaw.install.clawhubSpec / openclaw.install.npmSpec / openclaw.install.localPath |
คำแนะนำการติดตั้ง/อัปเดตสำหรับ Plugin ที่รวมมาด้วยและเผยแพร่ภายนอก |
openclaw.install.defaultChoice |
พาธการติดตั้งที่ต้องการเมื่อมีแหล่งติดตั้งหลายแหล่ง |
openclaw.install.minHostVersion |
เวอร์ชันโฮสต์ OpenClaw ขั้นต่ำที่รองรับ โดยใช้ค่าขั้นต่ำของ semver เช่น >=2026.3.22 หรือ >=2026.5.1-beta.1 |
openclaw.compat.pluginApi |
ช่วง API ของ Plugin OpenClaw ขั้นต่ำที่แพ็กเกจนี้ต้องใช้ โดยใช้ค่าขั้นต่ำของ semver เช่น >=2026.5.27 |
openclaw.install.expectedIntegrity |
สตริงความถูกต้องสมบูรณ์ของ npm dist ที่คาดไว้ เช่น sha512-...; ขั้นตอนการติดตั้งและอัปเดตจะตรวจสอบอาร์ติแฟกต์ที่ดึงมากับค่านี้ |
openclaw.install.allowInvalidConfigRecovery |
อนุญาตพาธการกู้คืนแบบจำกัดสำหรับการติดตั้ง Plugin ที่รวมมาด้วยอีกครั้งเมื่อการกำหนดค่าไม่ถูกต้อง |
openclaw.install.requiredPlatformPackages |
นามแฝงแพ็กเกจ npm ที่ต้องถูกสร้างขึ้นเมื่อข้อจำกัดแพลตฟอร์มใน lockfile ตรงกับโฮสต์ปัจจุบัน |
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen |
ช่วยให้พื้นผิวช่องทางของรันไทม์การตั้งค่าโหลดได้ก่อนเริ่มรับฟัง จากนั้นเลื่อนการโหลด Plugin ช่องทางที่กำหนดค่าไว้อย่างสมบูรณ์ไปจนถึงการเปิดใช้งานหลังเริ่มรับฟัง |
เมทาดาทาแมนิเฟสต์กำหนดว่าตัวเลือกผู้ให้บริการ/ช่องทาง/การตั้งค่าใดจะปรากฏในการเริ่มต้นใช้งานก่อนโหลดรันไทม์ package.json#openclaw.install บอกขั้นตอนการเริ่มต้นใช้งานว่าจะดึงหรือเปิดใช้ Plugin นั้นอย่างไรเมื่อผู้ใช้เลือกหนึ่งในตัวเลือกเหล่านั้น อย่าย้ายคำแนะนำการติดตั้งไปไว้ใน openclaw.plugin.json
openclaw.install.minHostVersion ถูกบังคับใช้ระหว่างการติดตั้งและการโหลดรีจิสทรีแมนิเฟสต์สำหรับแหล่ง Plugin ที่ไม่ได้รวมมาด้วย ค่าที่ไม่ถูกต้องจะถูกปฏิเสธ ส่วนค่าที่ถูกต้องแต่ใหม่กว่าจะทำให้ข้าม Plugin ภายนอกบนโฮสต์รุ่นเก่า ถือว่า Plugin ต้นทางที่รวมมาด้วยใช้เวอร์ชันเดียวกับเช็กเอาต์ของโฮสต์
openclaw.install.requiredPlatformPackages ใช้สำหรับแพ็กเกจ npm ที่เปิดเผยไบนารีเนทีฟที่จำเป็นผ่านนามแฝงแบบไม่บังคับซึ่งจำเพาะต่อแพลตฟอร์ม ระบุชื่อแพ็กเกจ npm แบบไม่มีส่วนขยายสำหรับทุกนามแฝงแพลตฟอร์มที่รองรับ ระหว่างการติดตั้ง npm OpenClaw จะตรวจสอบเฉพาะนามแฝงที่ประกาศไว้ซึ่งมีข้อจำกัดใน lockfile ตรงกับโฮสต์ปัจจุบัน หาก npm รายงานว่าสำเร็จแต่ละเว้นนามแฝงนั้น OpenClaw จะลองใหม่หนึ่งครั้งด้วยแคชใหม่ และย้อนกลับการติดตั้งหากนามแฝงยังคงหายไป
openclaw.compat.pluginApi ถูกบังคับใช้ระหว่างการติดตั้งแพ็กเกจสำหรับแหล่ง Plugin ที่ไม่ได้รวมมาด้วย ใช้ค่านี้เป็นค่าขั้นต่ำของ API รันไทม์/SDK ของ Plugin OpenClaw ที่ใช้สร้างแพ็กเกจ ค่านี้อาจเข้มงวดกว่า minHostVersion เมื่อแพ็กเกจ Plugin ต้องใช้ API ที่ใหม่กว่า แต่ยังคงคำแนะนำการติดตั้งขั้นต่ำที่ต่ำกว่าสำหรับขั้นตอนอื่น โดยค่าเริ่มต้น การซิงค์รีลีสอย่างเป็นทางการของ OpenClaw จะเพิ่มค่าขั้นต่ำ API ของ Plugin อย่างเป็นทางการที่มีอยู่ให้เท่ากับเวอร์ชันรีลีสของ OpenClaw แต่รีลีสที่มีเฉพาะ Plugin สามารถคงค่าขั้นต่ำที่ต่ำกว่าได้เมื่อแพ็กเกจตั้งใจรองรับโฮสต์รุ่นเก่า อย่าใช้เวอร์ชันแพ็กเกจเพียงอย่างเดียวเป็นสัญญาความเข้ากันได้ peerDependencies.openclaw ยังคงเป็นเมทาดาทาแพ็กเกจ npm; OpenClaw ใช้สัญญา openclaw.compat.pluginApi สำหรับการตัดสินใจด้านความเข้ากันได้ในการติดตั้ง
เมทาดาทาการติดตั้งตามต้องการอย่างเป็นทางการควรใช้ clawhubSpec เมื่อ Plugin เผยแพร่บน ClawHub; ขั้นตอนการเริ่มต้นใช้งานจะถือว่านี่เป็นแหล่งระยะไกลที่ต้องการและบันทึกข้อมูลอาร์ติแฟกต์ ClawHub หลังติดตั้ง npmSpec ยังคงเป็นทางเลือกสำรองเพื่อความเข้ากันได้สำหรับแพ็กเกจที่ยังไม่ได้ย้ายไป ClawHub
การตรึงเวอร์ชัน npm แบบตรงตัวมีอยู่แล้วใน npmSpec ตัวอย่างเช่น "npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3" รายการแค็ตตาล็อกภายนอกอย่างเป็นทางการควรจับคู่ข้อกำหนดแบบตรงตัวกับ expectedIntegrity เพื่อให้ขั้นตอนการอัปเดตหยุดอย่างปลอดภัยหากอาร์ติแฟกต์ npm ที่ดึงมาไม่ตรงกับรีลีสที่ตรึงไว้อีกต่อไป การเริ่มต้นใช้งานแบบโต้ตอบยังคงเสนอข้อกำหนด npm จากรีจิสทรีที่เชื่อถือได้ รวมถึงชื่อแพ็กเกจแบบไม่มีส่วนขยายและ dist-tags เพื่อความเข้ากันได้ การวินิจฉัยแค็ตตาล็อกสามารถแยกแยะแหล่งตัวเลือกเริ่มต้นแบบตรงตัว แบบลอยตัว แบบตรึงความถูกต้องสมบูรณ์ แบบไม่มีความถูกต้องสมบูรณ์ แบบชื่อแพ็กเกจไม่ตรงกัน และแบบไม่ถูกต้องได้ นอกจากนี้ยังเตือนเมื่อมี expectedIntegrity แต่ไม่มีแหล่ง npm ที่ถูกต้องให้ตรึง เมื่อมี expectedIntegrity ขั้นตอนการติดตั้ง/อัปเดตจะบังคับใช้ค่านี้ เมื่อไม่มีค่านี้ ระบบจะบันทึกการแก้ไขรีจิสทรีโดยไม่มีการตรึงความถูกต้องสมบูรณ์
Plugin ช่องทางควรระบุ openclaw.setupEntry เมื่อการตรวจสอบสถานะ รายการช่องทาง หรือการสแกน SecretRef จำเป็นต้องระบุบัญชีที่กำหนดค่าไว้โดยไม่โหลดรันไทม์ทั้งหมด จุดเริ่มต้นการตั้งค่าควรเปิดเผยเมทาดาทาช่องทาง รวมถึงอะแดปเตอร์การกำหนดค่า สถานะ และข้อมูลลับที่ปลอดภัยสำหรับการตั้งค่า ส่วนไคลเอ็นต์เครือข่าย ตัวรับฟัง Gateway และรันไทม์การขนส่งให้เก็บไว้ในจุดเริ่มต้นส่วนขยายหลัก
ฟิลด์จุดเริ่มต้นรันไทม์ไม่ลบล้างการตรวจสอบขอบเขตแพ็กเกจสำหรับฟิลด์จุดเริ่มต้นต้นทาง ตัวอย่างเช่น openclaw.runtimeExtensions ไม่สามารถทำให้พาธ openclaw.extensions ที่หลุดออกนอกขอบเขตสามารถโหลดได้
openclaw.install.allowInvalidConfigRecovery มีขอบเขตจำกัดโดยเจตนา ค่านี้ไม่ได้ทำให้การกำหนดค่าที่เสียหายใด ๆ สามารถติดตั้งได้ ปัจจุบันค่านี้อนุญาตให้ขั้นตอนการติดตั้งกู้คืนจากความล้มเหลวเฉพาะของการอัปเกรด Plugin ที่รวมมาด้วยซึ่งล้าสมัยเท่านั้น เช่น พาธ Plugin ที่รวมมาด้วยหายไป หรือรายการ channels.<id> ที่ล้าสมัยสำหรับ Plugin ที่รวมมาด้วยเดียวกัน ข้อผิดพลาดการกำหนดค่าที่ไม่เกี่ยวข้องยังคงขัดขวางการติดตั้งและส่งผู้ดำเนินการไปยัง openclaw doctor --fix
openclaw.channel.persistedAuthState คือเมทาดาทาแพ็กเกจสำหรับโมดูลตัวตรวจสอบขนาดเล็ก:
{ "openclaw": { "channel": { "id": "whatsapp", "persistedAuthState": { "specifier": "./auth-presence", "exportName": "hasAnyWhatsAppAuth" } } }}ใช้ค่านี้เมื่อขั้นตอนการตั้งค่า doctor สถานะ หรือขั้นตอนตรวจสอบการมีอยู่แบบอ่านอย่างเดียว ต้องการการตรวจสอบการยืนยันตัวตนแบบใช่/ไม่ใช่ที่มีต้นทุนต่ำก่อนโหลด Plugin ช่องทางทั้งหมด สถานะการยืนยันตัวตนที่บันทึกไว้ไม่ใช่สถานะช่องทางที่กำหนดค่าไว้: อย่าใช้เมทาดาทานี้เพื่อเปิดใช้ Plugin โดยอัตโนมัติ ซ่อมแซมการขึ้นต่อกันของรันไทม์ หรือตัดสินใจว่าควรโหลดรันไทม์ของช่องทางหรือไม่ เอ็กซ์พอร์ตเป้าหมายควรเป็นฟังก์ชันขนาดเล็กที่อ่านเฉพาะสถานะที่บันทึกไว้ อย่าส่งผ่าน barrel ของรันไทม์ช่องทางทั้งหมด
openclaw.channel.configuredState รองรับการตรวจสอบการกำหนดค่าที่มีต้นทุนต่ำ ควรใช้เมทาดาทาตัวแปรสภาพแวดล้อมแบบประกาศเมื่อใช้เพียงตัวแปรสภาพแวดล้อมก็เพียงพอ:
{ "openclaw": { "channel": { "id": "telegram", "configuredState": { "env": { "allOf": ["TELEGRAM_BOT_TOKEN"] } } } }}ใช้ env.allOf เมื่อต้องมีทุกตัวแปรที่ระบุ และใช้ env.anyOf เมื่อตัวแปรใดตัวแปรหนึ่งที่ไม่ว่างก็เพียงพอ หากการตรวจสอบขนาดเล็กที่ไม่ใช่รันไทม์ต้องการมากกว่าเมทาดาทาตัวแปรสภาพแวดล้อม ให้ใช้ specifier ร่วมกับ exportName ตามที่แสดงสำหรับ persistedAuthState; เมื่อมี env OpenClaw จะใช้ค่านี้โดยไม่โหลดโมดูลนั้น หากการตรวจสอบต้องใช้การแก้ไขการกำหนดค่าแบบเต็มหรือรันไทม์ช่องทางจริง ให้เก็บตรรกะนั้นไว้ในฮุก config.hasConfiguredState ของ Plugin แทน
ลำดับความสำคัญในการค้นหา (รหัส Plugin ซ้ำกัน)
OpenClaw ค้นหา Plugin จากสามรูท โดยตรวจสอบตามลำดับนี้: Plugin ที่รวมและจัดส่งมากับ OpenClaw, รูทการติดตั้งส่วนกลาง (~/.openclaw/extensions) และรูทพื้นที่ทำงานปัจจุบัน (<workspace>/.openclaw/extensions) รวมถึงรายการ plugins.load.paths ที่ระบุไว้อย่างชัดเจน
หากผลการค้นหาสองรายการมี id เดียวกัน ระบบจะเก็บเฉพาะแมนิเฟสต์ที่มีลำดับความสำคัญสูงสุด ส่วนรายการซ้ำที่มีลำดับความสำคัญต่ำกว่าจะถูกทิ้งแทนที่จะโหลดควบคู่กัน ลำดับความสำคัญจากสูงสุดไปต่ำสุด:
- เลือกโดยการกำหนดค่า — พาธที่ตรึงไว้อย่างชัดเจนใน
plugins.entries.<id> - การติดตั้งส่วนกลางที่ตรงกับระเบียนการติดตั้งที่ติดตามไว้ — Plugin ที่ติดตั้งผ่าน
openclaw plugin install/openclaw plugin updateซึ่งการติดตามการติดตั้งของ OpenClaw รู้จักว่าเป็นรหัสเดียวกัน แม้ว่ารหัสนั้นจะเป็นของ Plugin ที่รวมมาด้วยด้วยก็ตาม - รวมมาด้วย — Plugin ที่จัดส่งมากับ OpenClaw
- พื้นที่ทำงาน — Plugin ที่ค้นพบโดยอ้างอิงจากพื้นที่ทำงานปัจจุบัน
- ตัวเลือกอื่นใดที่ค้นพบ
ผลที่ตามมา:
- สำเนาที่ fork ไว้หรือล้าสมัยของ Plugin ที่รวมมา ซึ่งวางอยู่โดยไม่ถูกติดตามในเวิร์กสเปซหรือรูทส่วนกลาง จะไม่บดบังบิลด์ที่รวมมา
- หากต้องการแทนที่ Plugin ที่รวมมา ให้เรียกใช้
openclaw plugin installสำหรับ id นั้น เพื่อให้การติดตั้งส่วนกลางที่ติดตามไว้มีลำดับความสำคัญสูงกว่าสำเนาที่รวมมา หรือปักหมุดพาธเฉพาะผ่านplugins.entries.<id>เพื่อให้พาธนั้นชนะตามลำดับความสำคัญที่เลือกด้วยการกำหนดค่า - ระบบจะบันทึกการทิ้งรายการซ้ำลงในล็อก เพื่อให้ Doctor และการวินิจฉัยเมื่อเริ่มต้นระบบสามารถชี้ไปยังสำเนาที่ถูกละทิ้งได้
- การแทนที่รายการซ้ำที่เลือกด้วยการกำหนดค่าจะแสดงถ้อยคำในการวินิจฉัยว่าเป็นการแทนที่อย่างชัดเจน แต่ยังคงแจ้งเตือนเพื่อให้ fork ที่ล้าสมัยและการบดบังโดยไม่ตั้งใจยังคงมองเห็นได้
ข้อกำหนดของ JSON Schema
- ทุก Plugin ต้องมาพร้อม JSON Schema แม้ว่าจะไม่รับการกำหนดค่าใดก็ตาม
- สามารถใช้สคีมาว่างได้ (ตัวอย่างเช่น
{ "type": "object", "additionalProperties": false }) - ระบบจะตรวจสอบความถูกต้องของสคีมาขณะอ่าน/เขียนการกำหนดค่า ไม่ใช่ขณะรันไทม์
- เมื่อขยายหรือ fork Plugin ที่รวมมาด้วยคีย์การกำหนดค่าใหม่ ให้อัปเดต
openclaw.plugin.jsonconfigSchemaของ Plugin นั้นพร้อมกัน สคีมาของ Plugin ที่รวมมามีความเข้มงวด ดังนั้นการเพิ่มplugins.entries.<id>.config.myNewKeyในการกำหนดค่าของผู้ใช้โดยไม่เพิ่มmyNewKeyลงในconfigSchema.propertiesจะถูกปฏิเสธก่อนที่รันไทม์ของ Plugin จะโหลด
ตัวอย่างการขยายสคีมา:
{ "configSchema": { "type": "object", "additionalProperties": false, "properties": { "myNewKey": { "type": "string" } } }}ลักษณะการตรวจสอบความถูกต้อง
- คีย์
channels.*ที่ไม่รู้จักถือเป็น ข้อผิดพลาด เว้นแต่ id ของช่องทางจะประกาศโดยไฟล์ manifest ของ Plugin หาก id เดียวกันปรากฏในplugins.allow,plugins.entriesหรือplugins.installsด้วย (Plugin ที่ถูกอ้างอิงแต่ยังค้นหาไม่พบในขณะนี้) OpenClaw จะลดระดับกรณีนี้เป็น คำเตือน แทน plugins.entries.<id>,plugins.allowและplugins.denyที่อ้างอิง id ของ Plugin ที่ไม่รู้จักถือเป็น คำเตือน ("ละเว้นรายการการกำหนดค่าที่ล้าสมัย") ไม่ใช่ข้อผิดพลาด เพื่อให้การอัปเกรดและ Plugin ที่ถูกลบ/เปลี่ยนชื่อไม่ขัดขวางการเริ่มต้น Gatewayplugins.slots.memoryที่อ้างอิง id ของ Plugin ที่ไม่รู้จักถือเป็น ข้อผิดพลาด ยกเว้น Plugin ภายนอกอย่างเป็นทางการmemory-lancedbที่ระบบรู้จัก ซึ่งจะแจ้งเตือนแทน- หากมีการติดตั้ง Plugin แต่ไฟล์ manifest หรือสคีมาเสียหายหรือขาดหาย การตรวจสอบความถูกต้องจะล้มเหลว และ Doctor จะรายงานข้อผิดพลาดของ Plugin
- หากมีการกำหนดค่าของ Plugin แต่ Plugin ถูกปิดใช้งาน ระบบจะเก็บการกำหนดค่าไว้และแสดง คำเตือน ใน Doctor และล็อก
ดูสคีมา plugins.* ฉบับเต็มได้ที่ ข้อมูลอ้างอิงการกำหนดค่า
หมายเหตุ
- ไฟล์ manifest จำเป็นสำหรับ Plugin แบบเนทีฟของ OpenClaw รวมถึงการโหลดจากระบบไฟล์ภายในเครื่อง รันไทม์ยังคงโหลดโมดูลของ Plugin แยกต่างหาก ส่วนไฟล์ manifest ใช้สำหรับการค้นหาและการตรวจสอบความถูกต้องเท่านั้น
- ไฟล์ manifest แบบเนทีฟได้รับการแยกวิเคราะห์ด้วย JSON5 จึงรองรับความคิดเห็น เครื่องหมายจุลภาคต่อท้าย และคีย์ที่ไม่ใส่เครื่องหมายคำพูด ตราบใดที่ค่าสุดท้ายยังคงเป็นออบเจ็กต์
- ตัวโหลดไฟล์ manifest จะอ่านเฉพาะฟิลด์ที่มีเอกสารกำกับเท่านั้น หลีกเลี่ยงการใช้คีย์ระดับบนสุดแบบกำหนดเอง
- สามารถละเว้น
channels,providers,cliBackendsและskillsทั้งหมดได้เมื่อ Plugin ไม่จำเป็นต้องใช้ providerCatalogEntryต้องมีขนาดเบาและไม่ควรนำเข้าโค้ดรันไทม์ในวงกว้าง ให้ใช้สำหรับเมทาดาทาของแค็ตตาล็อกผู้ให้บริการแบบคงที่หรือตัวอธิบายการค้นหาที่มีขอบเขตแคบ ไม่ใช่การดำเนินการขณะประมวลผลคำขอ- ชนิด Plugin แบบเลือกได้เพียงรายการเดียวจะเลือกผ่าน
plugins.slots.*:kind: "memory"ผ่านplugins.slots.memory(ค่าเริ่มต้นmemory-core),kind: "context-engine"ผ่านplugins.slots.contextEngine(ค่าเริ่มต้นlegacy) - ประกาศชนิด Plugin แบบเลือกได้เพียงรายการเดียวในไฟล์ manifest นี้
OpenClawPluginDefinition.kindของรายการเข้าสู่รันไทม์เลิกแนะนำให้ใช้แล้ว และยังคงมีอยู่เฉพาะเป็นทางเลือกสำรองเพื่อความเข้ากันได้สำหรับ Plugin รุ่นเก่า - เมทาดาทาของตัวแปรสภาพแวดล้อมใน
setup.providers[].envVarsมีไว้เพื่อการประกาศเท่านั้น สถานะ การตรวจสอบ การตรวจสอบความถูกต้องของการส่ง Cron และส่วนอื่นที่อ่านอย่างเดียวยังคงใช้นโยบายความน่าเชื่อถือและการเปิดใช้งานที่มีผลของ Plugin ก่อนถือว่าตัวแปรสภาพแวดล้อมได้รับการกำหนดค่าแล้ว - สำหรับเมทาดาทาของวิซาร์ดรันไทม์ที่ต้องใช้โค้ดของผู้ให้บริการ โปรดดู ฮุกของรันไทม์ผู้ให้บริการ
- หาก Plugin ของคุณพึ่งพาโมดูลแบบเนทีฟ ให้จัดทำเอกสารขั้นตอนการบิลด์และข้อกำหนดของรายการอนุญาตสำหรับตัวจัดการแพ็กเกจ (ตัวอย่างเช่น pnpm
allow-build-scripts+pnpm rebuild <package>)