OpenClaw ได้ย้ายจากเลเยอร์ความเข้ากันได้ย้อนหลังแบบกว้าง ไปสู่สถาปัตยกรรม Plugin สมัยใหม่ที่มี import แบบเจาะจงและมีเอกสารกำกับ หาก Plugin ของคุณสร้างขึ้นก่อน สถาปัตยกรรมใหม่ คู่มือนี้จะช่วยให้คุณย้ายระบบได้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.
สิ่งที่กำลังเปลี่ยนแปลง
ระบบ Plugin แบบเก่าให้พื้นผิวแบบเปิดกว้างสองส่วน ซึ่งทำให้ Plugin สามารถ import ทุกสิ่งที่ต้องใช้จากจุดเข้าเดียวได้:openclaw/plugin-sdk/compat- import เดียวที่ re-export ตัวช่วยหลายสิบรายการ ถูกเพิ่มเข้ามาเพื่อให้ Plugin รุ่นเก่าที่อิง hook ยังทำงานได้ระหว่างที่ สถาปัตยกรรม Plugin ใหม่กำลังถูกสร้างopenclaw/plugin-sdk/infra-runtime- barrel ตัวช่วย runtime แบบกว้างที่ รวม event ของระบบ, สถานะ Heartbeat, คิวการส่งมอบ, ตัวช่วย fetch/proxy, ตัวช่วยไฟล์, ประเภทการอนุมัติ และยูทิลิตีที่ไม่เกี่ยวข้องไว้ด้วยกันopenclaw/plugin-sdk/config-runtime- barrel ความเข้ากันได้ของ config แบบกว้าง ที่ยังคงมีตัวช่วย load/write โดยตรงที่เลิกใช้แล้วระหว่างช่วง migrationopenclaw/extension-api- bridge ที่ให้ Plugin เข้าถึงตัวช่วยฝั่ง host ได้โดยตรง เช่น embedded agent runnerapi.registerEmbeddedExtensionFactory(...)- hook ของ bundled extension เฉพาะ Pi ที่ถูกนำออกแล้ว ซึ่งเคยสังเกต event ของ embedded-runner เช่นtool_resultได้
เหตุผลที่เปลี่ยนแปลง
แนวทางเดิมทำให้เกิดปัญหา:- เริ่มต้นช้า - การ import ตัวช่วยเดียวโหลดโมดูลที่ไม่เกี่ยวข้องหลายสิบรายการ
- dependency แบบวงกลม - re-export แบบกว้างทำให้สร้าง import cycle ได้ง่าย
- พื้นผิว API ไม่ชัดเจน - ไม่มีวิธีบอกว่า export ใดเสถียรและ export ใดเป็น internal
openclaw/plugin-sdk/\<subpath\>)
เป็นโมดูลขนาดเล็กที่แยกตัวเอง มีวัตถุประสงค์ชัดเจนและมี contract ที่ documented
seam อำนวยความสะดวกของ provider รุ่นเก่าสำหรับ bundled channels ก็ถูกนำออกแล้วเช่นกัน
seam ตัวช่วยที่ผูกกับแบรนด์ channel เป็นทางลัดส่วนตัวของ mono-repo ไม่ใช่
contract ของ Plugin ที่เสถียร ให้ใช้ SDK subpath แบบ generic และแคบแทน ภายใน
workspace ของ bundled Plugin ให้เก็บตัวช่วยที่ provider เป็นเจ้าของไว้ใน api.ts
หรือ runtime-api.ts ของ Plugin นั้นเอง
ตัวอย่าง bundled provider ปัจจุบัน:
- Anthropic เก็บตัวช่วย stream เฉพาะ Claude ไว้ใน seam
api.ts/contract-api.tsของตัวเอง - OpenAI เก็บ provider builders, ตัวช่วย default-model และ realtime provider
builders ไว้ใน
api.tsของตัวเอง - OpenRouter เก็บ provider builder และตัวช่วย onboarding/config ไว้ใน
api.tsของตัวเอง
แผน migration สำหรับ Talk และเสียงเรียลไทม์
โค้ด Talk สำหรับเสียงเรียลไทม์, โทรศัพท์, การประชุม และเบราว์เซอร์ กำลังย้ายจาก การทำ turn bookkeeping เฉพาะ surface ไปสู่ Talk session controller แบบใช้ร่วมกัน ที่ export โดยopenclaw/plugin-sdk/realtime-voice controller ใหม่เป็นเจ้าของ
ซอง event ของ Talk ร่วมกัน, สถานะ active turn, สถานะ capture, สถานะ output-audio,
ประวัติ event ล่าสุด และการปฏิเสธ stale-turn Plugin ของ provider ควรยังคงเป็น
เจ้าของ session เรียลไทม์เฉพาะ vendor; Plugin ของ surface ควรยังคงเป็นเจ้าของ
รายละเอียดเฉพาะของ capture, playback, โทรศัพท์ และการประชุม
migration ของ Talk นี้ตั้งใจให้เป็นการเปลี่ยนแบบ breaking-clean:
- เก็บ controller/runtime primitives ที่ใช้ร่วมกันไว้ใน
plugin-sdk/realtime-voice - ย้าย bundled surfaces ไปใช้ controller ที่ใช้ร่วมกัน: browser relay, managed-room handoff, voice-call realtime, voice-call streaming STT, Google Meet realtime และ native push-to-talk
- แทนที่ตระกูล Talk RPC เก่าด้วย API สุดท้าย
talk.session.*และtalk.client.* - ประกาศ live Talk event channel หนึ่งรายการใน Gateway
hello-ok.features.events:talk.event - ลบ endpoint HTTP เรียลไทม์เก่า และ path override instruction ขณะ request ทั้งหมด
createTalkEventSequencer(...) โดยตรง เว้นแต่กำลัง implement
adapter ระดับต่ำหรือ test fixture ให้ใช้ controller ที่ใช้ร่วมกันแทน เพื่อให้
event ที่อยู่ใน scope ของ turn ไม่สามารถถูก emit โดยไม่มี turn id, การเรียก
turnEnd / turnCancel ที่ stale ไม่สามารถล้าง active turn ที่ใหม่กว่า และ
event lifecycle ของ output-audio สอดคล้องกันในโทรศัพท์, การประชุม, browser relay,
managed-room handoff และ native Talk clients
รูปทรง API สาธารณะเป้าหมายคือ:
talk.client.create
เพราะเบราว์เซอร์เป็นเจ้าของการ negotiate กับ provider และ media transport ขณะที่
Gateway เป็นเจ้าของ credentials, instructions และ tool policy talk.session.*
เป็น surface ร่วมที่ Gateway จัดการสำหรับ gateway-relay realtime, gateway-relay
transcription และ session STT/TTS แบบ native ของ managed-room
config รุ่นเก่าที่วาง realtime selectors ไว้ข้าง talk.provider /
talk.providers ควรถูกซ่อมด้วย openclaw doctor --fix; runtime Talk
จะไม่ตีความ config provider ของ speech/TTS เป็น config provider ของ realtime
ชุดค่าที่รองรับสำหรับ talk.session.create ถูกตั้งใจให้มีขนาดเล็ก:
| Mode | Transport | Brain | Owner | Notes |
|---|---|---|---|---|
realtime | gateway-relay | agent-consult | Gateway | เสียง provider แบบ full-duplex ที่ bridge ผ่าน Gateway; tool calls ถูก route ผ่าน tool agent-consult |
transcription | gateway-relay | none | Gateway | เฉพาะ streaming STT; caller ส่ง input audio และรับ transcript events |
stt-tts | managed-room | agent-consult | Native/client room | ห้องสไตล์ push-to-talk และ walkie-talkie ที่ client เป็นเจ้าของ capture/playback และ Gateway เป็นเจ้าของสถานะ turn |
stt-tts | managed-room | direct-tools | Native/client room | โหมดห้องสำหรับ admin เท่านั้น สำหรับ first-party surfaces ที่ trusted ซึ่ง execute Gateway tool actions โดยตรง |
| Old | New |
|---|---|
talk.realtime.session | talk.client.create |
talk.realtime.toolCall | talk.client.toolCall |
talk.realtime.relayAudio | talk.session.appendAudio |
talk.realtime.relayCancel | talk.session.cancelOutput or talk.session.cancelTurn |
talk.realtime.relayToolResult | talk.session.submitToolResult |
talk.realtime.relayStop | talk.session.close |
talk.transcription.session | talk.session.create({ mode: "transcription" }) |
talk.transcription.relayAudio | talk.session.appendAudio |
talk.transcription.relayCancel | talk.session.cancelTurn |
talk.transcription.relayStop | talk.session.close |
talk.handoff.create | talk.session.create({ transport: "managed-room" }) |
talk.handoff.join | talk.session.join |
talk.handoff.revoke | talk.session.close |
| Method | Applies to | Contract |
|---|---|---|
talk.session.appendAudio | realtime/gateway-relay, transcription/gateway-relay | append ชิ้นเสียง PCM แบบ base64 ไปยัง session provider ที่เป็นเจ้าของโดยการเชื่อมต่อ Gateway เดียวกัน |
talk.session.startTurn | stt-tts/managed-room | เริ่ม turn ของผู้ใช้ใน managed-room |
talk.session.endTurn | stt-tts/managed-room | สิ้นสุด active turn หลังจากตรวจสอบ stale-turn |
talk.session.cancelTurn | all Gateway-owned sessions | ยกเลิกงาน active capture/provider/agent/TTS สำหรับ turn หนึ่ง |
talk.session.cancelOutput | realtime/gateway-relay | หยุด output เสียงของ assistant โดยไม่จำเป็นต้องสิ้นสุด turn ของผู้ใช้ |
talk.session.submitToolResult | realtime/gateway-relay | ทำ provider tool call ที่ relay emit ให้เสร็จสมบูรณ์; ส่ง options.willContinue สำหรับ output ชั่วคราว หรือ options.suppressResponse เพื่อตอบสนอง call โดยไม่มี response จาก assistant อีกครั้ง |
talk.session.close | all unified sessions | หยุด relay sessions หรือ revoke สถานะ managed-room จากนั้นลืม unified session id |
นโยบายความเข้ากันได้
สำหรับ Plugin ภายนอก งานด้านความเข้ากันได้ให้ทำตามลำดับนี้:- เพิ่มสัญญาใหม่
- คงพฤติกรรมเดิมไว้โดยเชื่อมผ่านอะแดปเตอร์ความเข้ากันได้
- ส่ง diagnostic หรือคำเตือนที่ระบุชื่อพาธเดิมและสิ่งที่ใช้แทน
- ครอบคลุมทั้งสองพาธในเทสต์
- จัดทำเอกสารการเลิกใช้และพาธการย้าย
- ลบออกหลังจากหน้าต่างการย้ายที่ประกาศไว้เท่านั้น โดยปกติใน major release
pnpm plugins:boundary-report ใช้ pnpm plugins:boundary-report:summary สำหรับ
จำนวนแบบกะทัดรัด, --owner <id> สำหรับ Plugin เดียวหรือเจ้าของความเข้ากันได้ และ
pnpm plugins:boundary-report:ci เมื่อ CI gate ควรล้มเหลวจากระเบียน
ความเข้ากันได้ที่ครบกำหนด, การ import SDK ที่สงวนไว้ข้ามเจ้าของ หรือ SDK
subpaths ที่สงวนไว้แต่ไม่ได้ใช้ รายงานจะจัดกลุ่มระเบียนความเข้ากันได้ที่เลิกใช้แล้ว
ตามวันที่ลบ, นับการอ้างอิงในโค้ด/เอกสารภายในเครื่อง, แสดงการ import SDK ที่สงวนไว้ข้ามเจ้าของ
และสรุป bridge SDK ของ private memory-host เพื่อให้การล้างความเข้ากันได้ชัดเจน
แทนที่จะพึ่งพาการค้นหาเฉพาะกิจ SDK subpaths ที่สงวนไว้ต้องมีการใช้งานของเจ้าของที่ติดตามไว้
ควรลบ helper exports ที่สงวนไว้แต่ไม่ได้ใช้ออกจาก SDK สาธารณะ
หาก manifest field ยังยอมรับอยู่ ผู้เขียน Plugin สามารถใช้ต่อไปได้จนกว่า
เอกสารและ diagnostic จะระบุเป็นอย่างอื่น โค้ดใหม่ควรใช้สิ่งที่เอกสารระบุให้ใช้แทน
แต่ Plugin ที่มีอยู่ไม่ควรแตกใน minor releases ตามปกติ
วิธีการย้าย
ย้าย helpers สำหรับโหลด/เขียน runtime config
api.runtime.config.loadConfig() และ
api.runtime.config.writeConfigFile(...) โดยตรง ให้ใช้ config ที่ถูกส่งเข้า
active call path อยู่แล้วเป็นหลัก handlers ที่มีอายุยาวซึ่งต้องการ snapshot
ของ process ปัจจุบันสามารถใช้ api.runtime.config.current() ได้ tools ของ agent
ที่มีอายุยาวควรใช้ ctx.getRuntimeConfig() ของ tool context ภายใน
execute เพื่อให้ tool ที่ถูกสร้างก่อนการเขียน config ยังคงเห็น
runtime config ที่ refresh แล้วการเขียน config ต้องผ่าน transactional helpers และเลือกนโยบาย
หลังเขียน:afterWrite: { mode: "restart", reason: "..." } เมื่อ caller รู้ว่า
การเปลี่ยนแปลงต้องการ gateway restart ที่สะอาด และใช้
afterWrite: { mode: "none", reason: "..." } เฉพาะเมื่อ caller เป็นเจ้าของ
งานติดตามผลและตั้งใจต้องการปิด reload planner
ผลลัพธ์การ mutate จะมีสรุป followUp ที่มีชนิดข้อมูลสำหรับเทสต์และการ logging;
gateway ยังคงรับผิดชอบในการนำ restart ไปใช้หรือจัดตาราง
loadConfig และ writeConfigFile ยังคงเป็น helpers ความเข้ากันได้ที่เลิกใช้แล้ว
สำหรับ Plugin ภายนอกระหว่างหน้าต่างการย้าย และเตือนหนึ่งครั้งด้วย
compatibility code runtime-config-load-write bundled plugins และ runtime code
ใน repo ได้รับการปกป้องด้วย scanner guardrails ใน
pnpm check:deprecated-api-usage และ
pnpm check:no-runtime-action-load-config: การใช้งานใหม่ใน production plugin
จะล้มเหลวทันที, การเขียน config โดยตรงจะล้มเหลว, methods ของ gateway server ต้องใช้
request runtime snapshot, runtime channel send/action/client helpers
ต้องรับ config จาก boundary ของตน และ runtime modules ที่มีอายุยาว
อนุญาตให้มีการเรียก loadConfig() แบบ ambient ได้เป็นศูนย์ครั้งโค้ด Plugin ใหม่ควรหลีกเลี่ยงการ import compatibility barrel แบบกว้าง
openclaw/plugin-sdk/config-runtime ด้วย ใช้ SDK subpath แบบแคบที่ตรงกับงาน:| ความต้องการ | Import |
|---|---|
ชนิดของ config เช่น OpenClawConfig | openclaw/plugin-sdk/config-contracts |
| assertion ของ config ที่โหลดแล้วและการค้นหา plugin-entry config | openclaw/plugin-sdk/plugin-config-runtime |
| การอ่าน snapshot ของ runtime ปัจจุบัน | openclaw/plugin-sdk/runtime-config-snapshot |
| การเขียน config | openclaw/plugin-sdk/config-mutation |
| session store helpers | openclaw/plugin-sdk/session-store-runtime |
| config ตาราง Markdown | openclaw/plugin-sdk/markdown-table-runtime |
| group policy runtime helpers | openclaw/plugin-sdk/runtime-group-policy |
| การ resolve secret input | openclaw/plugin-sdk/secret-input-runtime |
| model/session overrides | openclaw/plugin-sdk/model-session-runtime |
ย้ายส่วนขยาย tool-result ของ Pi ไปยัง middleware
api.registerEmbeddedExtensionFactory(...) ด้วย
middleware ที่เป็นกลางต่อ runtimeย้าย approval-native handlers ไปยัง capability facts
approvalCapability.nativeRuntime พร้อมกับ runtime-context registry ที่ใช้ร่วมกันการเปลี่ยนแปลงสำคัญ:- แทนที่
approvalCapability.handler.loadRuntime(...)ด้วยapprovalCapability.nativeRuntime - ย้าย auth/delivery เฉพาะ approval ออกจาก wiring เดิม
plugin.auth/plugin.approvalsและไปไว้ที่approvalCapability ChannelPlugin.approvalsถูกลบออกจากสัญญา channel-plugin สาธารณะแล้ว; ย้าย delivery/native/render fields ไปไว้ที่approvalCapabilityplugin.authยังคงใช้สำหรับ flows การ login/logout ของ channel เท่านั้น; hooks ของ approval auth ที่นั่นจะไม่ถูก core อ่านอีกต่อไป- ลงทะเบียน runtime objects ที่ channel เป็นเจ้าของ เช่น clients, tokens หรือ Bolt
apps ผ่าน
openclaw/plugin-sdk/channel-runtime-context - อย่าส่ง notices การ reroute ที่ Plugin เป็นเจ้าของจาก native approval handlers; ตอนนี้ core เป็นเจ้าของ notices แบบ routed-elsewhere จากผลลัพธ์ delivery จริง
- เมื่อส่ง
channelRuntimeเข้าcreateChannelManager(...)ให้ระบุ surfacecreatePluginRuntime().channelจริง Partial stubs จะถูกปฏิเสธ
/plugins/sdk-channel-plugins สำหรับ layout approval capability ปัจจุบันตรวจสอบพฤติกรรม fallback ของ Windows wrapper
openclaw/plugin-sdk/windows-spawn wrappers ของ Windows
.cmd/.bat ที่ resolve ไม่ได้จะ fail closed แล้ว เว้นแต่คุณจะส่ง
allowShellFallback: true อย่างชัดเจนallowShellFallback และให้จัดการ error ที่ถูก throw แทนค้นหา imports ที่เลิกใช้แล้ว
แทนที่ด้วย imports ที่เจาะจง
| import เดิม | สิ่งที่เทียบเท่าสมัยใหม่ |
|---|---|
resolveAgentDir | api.runtime.agent.resolveAgentDir |
resolveAgentWorkspaceDir | api.runtime.agent.resolveAgentWorkspaceDir |
resolveAgentIdentity | api.runtime.agent.resolveAgentIdentity |
resolveThinkingDefault | api.runtime.agent.resolveThinkingDefault |
resolveAgentTimeoutMs | api.runtime.agent.resolveAgentTimeoutMs |
ensureAgentWorkspace | api.runtime.agent.ensureAgentWorkspace |
| session store helpers | api.runtime.agent.session.* |
แทนที่ infra-runtime imports แบบกว้าง
openclaw/plugin-sdk/infra-runtime ยังคงมีอยู่เพื่อความเข้ากันได้ภายนอก
แต่โค้ดใหม่ควร import surface helper ที่เจาะจงตามที่จำเป็นจริง:| ความต้องการ | Import |
|---|---|
| system event queue helpers | openclaw/plugin-sdk/system-event-runtime |
| Heartbeat wake, event และ visibility helpers | openclaw/plugin-sdk/heartbeat-runtime |
| การ drain pending delivery queue | openclaw/plugin-sdk/delivery-queue-runtime |
| telemetry ของ channel activity | openclaw/plugin-sdk/channel-activity-runtime |
| dedupe caches ในหน่วยความจำ | openclaw/plugin-sdk/dedupe-runtime |
| helpers สำหรับพาธ local-file/media ที่ปลอดภัย | openclaw/plugin-sdk/file-access-runtime |
| fetch ที่รู้จัก dispatcher | openclaw/plugin-sdk/runtime-fetch |
| proxy และ guarded fetch helpers | openclaw/plugin-sdk/fetch-runtime |
| ชนิดนโยบาย SSRF dispatcher | openclaw/plugin-sdk/ssrf-dispatcher |
| ชนิด approval request/resolution | openclaw/plugin-sdk/approval-runtime |
| approval reply payload และ command helpers | openclaw/plugin-sdk/approval-reply-runtime |
| error formatting helpers | openclaw/plugin-sdk/error-runtime |
| การรอ transport readiness | openclaw/plugin-sdk/transport-ready-runtime |
| secure token helpers | openclaw/plugin-sdk/secure-random-runtime |
| bounded async task concurrency | openclaw/plugin-sdk/concurrency-runtime |
| numeric coercion | openclaw/plugin-sdk/number-runtime |
| process-local async lock | openclaw/plugin-sdk/async-lock-runtime |
| file locks | openclaw/plugin-sdk/file-lock |
infra-runtime ดังนั้นโค้ดใน repo
จึงไม่สามารถถอยกลับไปใช้ barrel แบบกว้างได้ย้าย channel route helpers
openclaw/plugin-sdk/channel-route
ชื่อ route-key และ comparable-target แบบเก่ายังคงอยู่เป็น aliases
เพื่อความเข้ากันได้ระหว่างหน้าต่างการย้าย แต่ Plugin ใหม่ควรใช้ชื่อ route
ที่อธิบายพฤติกรรมโดยตรง:| ตัวช่วยเก่า | ตัวช่วยสมัยใหม่ |
|---|---|
channelRouteIdentityKey(...) | channelRouteDedupeKey(...) |
channelRouteKey(...) | channelRouteCompactKey(...) |
ComparableChannelTarget | ChannelRouteParsedTarget |
resolveComparableTargetForChannel(...) | resolveRouteTargetForChannel(...) |
resolveComparableTargetForLoadedChannel(...) | resolveRouteTargetForLoadedChannel(...) |
comparableChannelTargetsMatch(...) | channelRouteTargetsMatchExact(...) |
comparableChannelTargetsShareRoute(...) | channelRouteTargetsShareConversation(...) |
{ channel, to, accountId, threadId }
อย่างสอดคล้องกันใน native approvals, reply suppression, inbound dedupe,
การส่ง Cron และ session routing หาก Plugin ของคุณเป็นเจ้าของไวยากรณ์ target
แบบกำหนดเอง ให้ใช้ resolveChannelRouteTargetWithParser(...) เพื่อปรับ
parser นั้นให้เข้ากับสัญญา route target เดียวกันข้อมูลอ้างอิงเส้นทาง import
ตารางพาธการนำเข้าที่ใช้บ่อย
ตารางพาธการนำเข้าที่ใช้บ่อย
scripts/lib/plugin-sdk-entrypoints.json; package exports จะถูกสร้างจาก
ชุดย่อยสาธารณะ
seam ตัวช่วยของ Plugin ที่รวมมากับแพ็กเกจซึ่งสงวนไว้ ถูกถอดออกจาก export map
ของ SDK สาธารณะแล้ว ยกเว้น compatibility facade ที่มีเอกสารชัดเจน เช่น shim
plugin-sdk/discord ที่เลิกใช้แล้วแต่ยังคงไว้สำหรับแพ็กเกจ
@openclaw/discord@2026.3.13 ที่เผยแพร่ไปแล้ว ตัวช่วยเฉพาะ owner จะอยู่ภายใน
แพ็กเกจ Plugin ที่เป็นเจ้าของนั้น พฤติกรรม host ที่ใช้ร่วมกันควรย้ายผ่านสัญญา
SDK แบบทั่วไป เช่น plugin-sdk/gateway-runtime, plugin-sdk/security-runtime,
และ plugin-sdk/plugin-config-runtime
ใช้อิมพอร์ตที่แคบที่สุดซึ่งตรงกับงาน หากหา export ไม่พบ ให้ตรวจสอบซอร์สที่
src/plugin-sdk/ หรือถาม maintainers ว่าสัญญาทั่วไปใดควรเป็นเจ้าของสิ่งนั้น
การเลิกใช้ที่ยังมีผลอยู่
การเลิกใช้ที่แคบลงซึ่งใช้กับ plugin SDK, สัญญา provider, พื้นผิว runtime และ manifest แต่ละรายการยังคงทำงานได้ในวันนี้ แต่จะถูกลบออกใน major release ในอนาคต รายการใต้แต่ละหัวข้อจะ map API เก่าไปยังตัวแทนที่เป็น canonicalcommand-auth help builders → command-status
command-auth help builders → command-status
openclaw/plugin-sdk/command-auth): buildCommandsMessage,
buildCommandsMessagePaginated, buildHelpMessage.ใหม่ (openclaw/plugin-sdk/command-status): signature เดิม, export เดิม
เพียงแค่อิมพอร์ตจาก subpath ที่แคบกว่า command-auth
จะ re-export รายการเหล่านี้เป็น compat stubMention gating helpers → resolveInboundMentionDecision
Mention gating helpers → resolveInboundMentionDecision
resolveInboundMentionRequirement({ facts, policy }) และ
shouldDropInboundForMention(...) จาก
openclaw/plugin-sdk/channel-inbound หรือ
openclaw/plugin-sdk/channel-mention-gating.ใหม่: resolveInboundMentionDecision({ facts, policy }) - คืนค่า
object การตัดสินใจเดียว แทนการเรียกสองครั้งที่แยกกันPlugin ช่องทางปลายน้ำ (Slack, Discord, Matrix, MS Teams) ได้เปลี่ยนแล้วChannel runtime shim and channel actions helpers
Channel runtime shim and channel actions helpers
openclaw/plugin-sdk/channel-runtime เป็น compatibility shim สำหรับ
Plugin ช่องทางรุ่นเก่า อย่าอิมพอร์ตจากโค้ดใหม่ ให้ใช้
openclaw/plugin-sdk/channel-runtime-context สำหรับการลงทะเบียน object
runtimeตัวช่วย channelActions* ใน openclaw/plugin-sdk/channel-actions ถูกเลิกใช้
พร้อมกับ export ช่องทาง “actions” แบบดิบ ให้เปิดเผย capability ผ่านพื้นผิว
presentation เชิงความหมายแทน - Plugin ช่องทางประกาศว่าตน render อะไร
(cards, buttons, selects) ไม่ใช่ชื่อ action ดิบใดที่ยอมรับWeb search provider tool() helper → createTool() on the plugin
Web search provider tool() helper → createTool() on the plugin
tool() จาก openclaw/plugin-sdk/provider-web-search.ใหม่: implement createTool(...) โดยตรงบน provider Plugin
OpenClaw ไม่ต้องใช้ตัวช่วย SDK เพื่อลงทะเบียน wrapper ของเครื่องมืออีกต่อไปPlaintext channel envelopes → BodyForAgent
Plaintext channel envelopes → BodyForAgent
formatInboundEnvelope(...) (และ
ChannelMessageForAgent.channelEnvelope) เพื่อสร้าง prompt envelope
แบบ plaintext แบนจากข้อความช่องทางขาเข้าใหม่: BodyForAgent พร้อม block บริบทผู้ใช้แบบมีโครงสร้าง
Plugin ช่องทางแนบ metadata การจัดเส้นทาง (thread, topic, reply-to, reactions)
เป็น field ที่มี type แทนการต่อเข้ากับ prompt string ตัวช่วย
formatAgentEnvelope(...) ยังรองรับสำหรับ envelope ที่สังเคราะห์ขึ้นเพื่อ
assistant แต่ envelope plaintext ขาเข้ากำลังจะถูกเลิกใช้พื้นที่ที่ได้รับผลกระทบ: inbound_claim, message_received, และ Plugin
ช่องทางกำหนดเองใดๆ ที่ post-process ข้อความ channelEnvelopeProvider discovery types → provider catalog types
Provider discovery types → provider catalog types
| alias เดิม | type ใหม่ |
|---|---|
ProviderDiscoveryOrder | ProviderCatalogOrder |
ProviderDiscoveryContext | ProviderCatalogContext |
ProviderDiscoveryResult | ProviderCatalogResult |
ProviderPluginDiscovery | ProviderPluginCatalog |
ProviderCapabilities แบบเดิม - provider Plugin
ควรใช้ hook ของ provider ที่ชัดเจน เช่น buildReplayPolicy,
normalizeToolSchemas, และ wrapStreamFn แทน object แบบ staticThinking policy hooks → resolveThinkingProfile
Thinking policy hooks → resolveThinkingProfile
ProviderThinkingPolicy):
isBinaryThinking(ctx), supportsXHighThinking(ctx), และ
resolveDefaultThinkingLevel(ctx).ใหม่: resolveThinkingProfile(ctx) รายการเดียวที่คืนค่า
ProviderThinkingProfile พร้อม id แบบ canonical, label ที่ไม่บังคับ,
และรายการ level ที่จัดอันดับแล้ว OpenClaw จะ downgrade ค่าที่เก็บไว้ซึ่งล้าสมัย
ตามอันดับ profile โดยอัตโนมัติimplement hook เดียวแทนสามรายการ hook เดิมยังทำงานระหว่างช่วงเลิกใช้
แต่จะไม่ถูก compose กับผลลัพธ์ profileExternal OAuth provider fallback → contracts.externalAuthProviders
External OAuth provider fallback → contracts.externalAuthProviders
resolveExternalOAuthProfiles(...) โดยไม่ประกาศ
provider ใน Plugin manifestใหม่: ประกาศ contracts.externalAuthProviders ใน Plugin manifest
และ implement resolveExternalAuthProfiles(...) เส้นทาง “auth
fallback” เดิมจะ emit คำเตือนตอน runtime และจะถูกลบออกProvider env-var lookup → setup.providers[].envVars
Provider env-var lookup → setup.providers[].envVars
providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.ใหม่: mirror การ lookup env-var เดิมลงใน setup.providers[].envVars
บน manifest วิธีนี้รวม metadata env สำหรับ setup/status ไว้ที่เดียว
และหลีกเลี่ยงการ boot runtime ของ Plugin เพียงเพื่อตอบ lookup env-varproviderAuthEnvVars ยังคงรองรับผ่าน compatibility adapter จนกว่าช่วงเลิกใช้จะปิดลงMemory plugin registration → registerMemoryCapability
Memory plugin registration → registerMemoryCapability
api.registerMemoryPromptSection(...),
api.registerMemoryFlushPlan(...),
api.registerMemoryRuntime(...).ใหม่: การเรียกเดียวบน memory-state API -
registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).slot เดิมทั้งหมด ใช้การเรียกลงทะเบียนเดียว ตัวช่วย memory แบบ additive
(registerMemoryPromptSupplement, registerMemoryCorpusSupplement,
registerMemoryEmbeddingProvider) ไม่ได้รับผลกระทบSubagent session messages types renamed
Subagent session messages types renamed
src/plugins/runtime/types.ts:| เดิม | ใหม่ |
|---|---|
SubagentReadSessionParams | SubagentGetSessionMessagesParams |
SubagentReadSessionResult | SubagentGetSessionMessagesResult |
readSession ถูกเลิกใช้ เพื่อใช้
getSessionMessages แทน signature เดิม; method เดิมจะเรียกต่อไปยัง
method ใหม่runtime.tasks.flow → runtime.tasks.managedFlows
runtime.tasks.flow → runtime.tasks.managedFlows
runtime.tasks.flow (เอกพจน์) คืนค่า accessor ของ task-flow แบบ liveใหม่: runtime.tasks.managedFlows คง runtime การ mutate TaskFlow
แบบ managed ไว้สำหรับ Plugin ที่สร้าง อัปเดต ยกเลิก หรือรัน child tasks
จาก flow ใช้ runtime.tasks.flows เมื่อ Plugin ต้องการเพียงการอ่านแบบ DTOEmbedded extension factories → agent tool-result middleware
Embedded extension factories → agent tool-result middleware
api.registerEmbeddedExtensionFactory(...) ที่ถูกลบออก ถูกแทนที่ด้วย
api.registerAgentToolResultMiddleware(...) พร้อมรายการ runtime ที่ชัดเจน
ใน contracts.agentToolResultMiddleware.OpenClawSchemaType alias → OpenClawConfig
OpenClawSchemaType alias → OpenClawConfig
OpenClawSchemaType ที่ re-export จาก openclaw/plugin-sdk ตอนนี้เป็น
alias หนึ่งบรรทัดของ OpenClawConfig ควรใช้ชื่อ canonicalextensions/) ถูกติดตามไว้ใน barrel api.ts และ runtime-api.ts
ของตนเอง สิ่งเหล่านี้ไม่กระทบสัญญา Plugin ของ third-party และไม่ได้แสดงรายการไว้
ที่นี่ หากคุณใช้ barrel local ของ Plugin ที่รวมมากับแพ็กเกจโดยตรง ให้อ่าน
ความคิดเห็นเรื่องการเลิกใช้ใน barrel นั้นก่อนอัปเกรดไทม์ไลน์การลบ
| เมื่อใด | สิ่งที่จะเกิดขึ้น |
|---|---|
| ตอนนี้ | พื้นผิวที่เลิกใช้จะ emit คำเตือน runtime |
| major release ถัดไป | พื้นผิวที่เลิกใช้จะถูกลบออก; Plugin ที่ยังใช้อยู่จะล้มเหลว |
การระงับคำเตือนชั่วคราว
ตั้ง environment variables เหล่านี้ขณะทำงานย้าย:ที่เกี่ยวข้อง
- เริ่มต้นใช้งาน - สร้าง Plugin แรกของคุณ
- ภาพรวม SDK - อ้างอิงการอิมพอร์ต subpath ฉบับเต็ม
- Plugin ช่องทาง - การสร้าง Plugin ช่องทาง
- Provider Plugins - การสร้าง provider Plugin
- ภายในของ Plugin - เจาะลึกสถาปัตยกรรม
- Plugin Manifest - อ้างอิง schema ของ manifest