package.json nên trỏ phần tải runtime đến
JavaScript đã build khi có sẵn:
extensions và setupEntry vẫn là các mục nhập nguồn hợp lệ cho workspace và
phát triển bằng git checkout. runtimeExtensions và runtimeSetupEntry được ưu
tiên khi OpenClaw tải một gói đã cài đặt, đồng thời cho phép các gói npm tránh
biên dịch TypeScript trong runtime. Các mục nhập runtime tường minh là bắt buộc:
runtimeSetupEntry yêu cầu setupEntry, và các artifact runtimeExtensions hoặc
runtimeSetupEntry bị thiếu sẽ làm cài đặt/khám phá thất bại thay vì âm thầm
quay về nguồn. Nếu một gói đã cài đặt chỉ khai báo mục nhập nguồn TypeScript,
OpenClaw sẽ dùng một peer dist/*.js đã build tương ứng khi có, rồi quay về
nguồn TypeScript.
Tất cả đường dẫn mục nhập phải nằm trong thư mục gói Plugin. Các mục nhập runtime
và peer JavaScript đã build được suy luận không làm cho đường dẫn nguồn
extensions hoặc setupEntry thoát ra ngoài trở nên hợp lệ.
defineToolPlugin
Import: openclaw/plugin-sdk/tool-plugin
Dành cho các Plugin đơn giản chỉ thêm công cụ cho agent. defineToolPlugin giữ
nguồn tác giả nhỏ gọn, suy luận kiểu cấu hình và tham số công cụ từ schema
TypeBox, bọc các giá trị trả về thuần trong định dạng kết quả công cụ của
OpenClaw, và phơi bày metadata tĩnh mà openclaw plugins build ghi vào manifest
Plugin.
configSchemalà tùy chọn. Khi bỏ qua, OpenClaw dùng một schema đối tượng rỗng nghiêm ngặt và manifest được tạo vẫn bao gồmconfigSchema.executetrả về một chuỗi thuần hoặc giá trị có thể tuần tự hóa thành JSON. Helper bọc nó thành kết quả công cụ dạng văn bản vớidetails.- Tên công cụ là tĩnh.
openclaw plugins buildsuy racontracts.toolstừ các công cụ đã khai báo, nên tác giả không cần tự nhân đôi tên. - Việc tải runtime vẫn nghiêm ngặt. Các Plugin đã cài đặt vẫn cần
openclaw.plugin.jsonvàpackage.jsonopenclaw.extensions; OpenClaw không thực thi mã Plugin để suy luận dữ liệu manifest bị thiếu.
definePluginEntry
Import: openclaw/plugin-sdk/plugin-entry
Dành cho Plugin nhà cung cấp, Plugin công cụ nâng cao, Plugin hook, và mọi thứ
không phải là kênh nhắn tin.
| Trường | Kiểu | Bắt buộc | Mặc định |
|---|---|---|---|
id | string | Có | - |
name | string | Có | - |
description | string | Có | - |
kind | string | Không | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Không | Schema đối tượng rỗng |
register | (api: OpenClawPluginApi) => void | Có | - |
idphải khớp với manifestopenclaw.plugin.jsoncủa bạn.kinddành cho các vị trí độc quyền:"memory"hoặc"context-engine".configSchemacó thể là một hàm để đánh giá lười.- OpenClaw phân giải và ghi nhớ schema đó trong lần truy cập đầu tiên, nên các trình tạo schema tốn kém chỉ chạy một lần.
defineChannelPluginEntry
Import: openclaw/plugin-sdk/channel-core
Bọc definePluginEntry với phần nối dây dành riêng cho kênh. Tự động gọi
api.registerChannel({ plugin }), phơi bày một seam metadata CLI trợ giúp gốc
tùy chọn, và khóa registerFull theo chế độ đăng ký.
| Trường | Kiểu | Bắt buộc | Mặc định |
|---|---|---|---|
id | string | Có | - |
name | string | Có | - |
description | string | Có | - |
plugin | ChannelPlugin | Có | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Không | Schema đối tượng rỗng |
setRuntime | (runtime: PluginRuntime) => void | Không | - |
registerCliMetadata | (api: OpenClawPluginApi) => void | Không | - |
registerFull | (api: OpenClawPluginApi) => void | Không | - |
setRuntimeđược gọi trong quá trình đăng ký để bạn có thể lưu tham chiếu runtime (thường quacreatePluginRuntimeStore). Nó được bỏ qua trong quá trình thu thập metadata CLI.registerCliMetadatachạy trongapi.registrationMode === "cli-metadata",api.registrationMode === "discovery", vàapi.registrationMode === "full". Dùng nó làm nơi chính thức cho các descriptor CLI do kênh sở hữu để trợ giúp gốc không kích hoạt Plugin, snapshot khám phá bao gồm metadata lệnh tĩnh, và việc đăng ký lệnh CLI thông thường vẫn tương thích với tải Plugin đầy đủ.- Đăng ký khám phá là không kích hoạt, không phải không import. OpenClaw có thể
đánh giá mục nhập Plugin đáng tin cậy và module Plugin kênh để xây dựng
snapshot, vì vậy hãy giữ các import cấp cao nhất không có hiệu ứng phụ và đặt
socket, client, worker, và service phía sau các đường dẫn chỉ dành cho
"full". registerFullchỉ chạy khiapi.registrationMode === "full". Nó được bỏ qua trong quá trình tải chỉ dành cho thiết lập.- Giống
definePluginEntry,configSchemacó thể là một factory lười và OpenClaw ghi nhớ schema đã phân giải trong lần truy cập đầu tiên. - Đối với các lệnh CLI gốc do Plugin sở hữu, ưu tiên
api.registerCli(..., { descriptors: [...] })khi bạn muốn lệnh vẫn được tải lười mà không biến mất khỏi cây phân tích CLI gốc. Đối với các lệnh tính năng nút theo cặp, ưu tiênapi.registerNodeCliFeature(...)để lệnh nằm dướiopenclaw nodes. Đối với các lệnh Plugin lồng khác, thêmparentPathvà đăng ký lệnh trên đối tượngprogramđược truyền cho registrar; OpenClaw phân giải nó tới lệnh cha trước khi gọi Plugin. Đối với Plugin kênh, ưu tiên đăng ký các descriptor đó từregisterCliMetadata(...)và giữregisterFull(...)tập trung vào công việc chỉ dành cho runtime. - Nếu
registerFull(...)cũng đăng ký các phương thức RPC Gateway, hãy giữ chúng trên tiền tố riêng của Plugin. Các namespace quản trị lõi được dành riêng (config.*,exec.approvals.*,wizard.*,update.*) luôn bị ép vềoperator.admin.
defineSetupPluginEntry
Import: openclaw/plugin-sdk/channel-core
Dành cho tệp setup-entry.ts nhẹ. Chỉ trả về { plugin } mà không có nối dây
runtime hoặc CLI.
defineSetupPluginEntry(...) với các họ helper thiết lập
hẹp:
openclaw/plugin-sdk/setup-runtimedành cho các helper thiết lập an toàn với runtime nhưcreateSetupTranslator, adapter vá thiết lập an toàn để import, đầu ra ghi chú tra cứu,promptResolvedAllowFrom,splitSetupEntries, và proxy thiết lập được ủy quyềnopenclaw/plugin-sdk/channel-setupdành cho các bề mặt thiết lập cài đặt tùy chọnopenclaw/plugin-sdk/setup-toolsdành cho các helper CLI/kho lưu trữ/tài liệu về thiết lập/cài đặt
defineBundledChannelSetupEntry(...) từ
openclaw/plugin-sdk/channel-entry-contract thay thế. Contract đó cho phép mục
nhập thiết lập giữ các export Plugin/secret an toàn cho thiết lập trong khi vẫn
phơi bày một setter runtime:
registerSetupRuntime chỉ chạy cho các lần tải "setup-runtime";
giữ nó giới hạn ở các route hoặc phương thức chỉ liên quan đến cấu hình phải tồn
tại trước khi kích hoạt đầy đủ trì hoãn.
Chế độ đăng ký
api.registrationMode cho Plugin của bạn biết nó đã được tải như thế nào:
| Chế độ | Khi nào | Nội dung cần đăng ký |
|---|---|---|
"full" | Khởi động Gateway thông thường | Mọi thứ |
"discovery" | Khám phá khả năng chỉ đọc | Đăng ký kênh cộng với các mô tả CLI tĩnh; mã entry có thể tải, nhưng bỏ qua socket, worker, client và dịch vụ |
"setup-only" | Kênh bị tắt/chưa cấu hình | Chỉ đăng ký kênh |
"setup-runtime" | Luồng thiết lập có runtime khả dụng | Đăng ký kênh cộng với chỉ runtime nhẹ cần thiết trước khi entry đầy đủ tải |
"cli-metadata" | Trợ giúp gốc / ghi nhận siêu dữ liệu CLI | Chỉ các mô tả CLI |
defineChannelPluginEntry tự động xử lý việc tách này. Nếu bạn dùng
definePluginEntry trực tiếp cho một kênh, hãy tự kiểm tra chế độ:
"setup-runtime" là khoảng thời gian mà các bề mặt khởi động chỉ dành cho thiết lập phải
tồn tại mà không vào lại runtime kênh đi kèm đầy đủ. Các lựa chọn phù hợp là
đăng ký kênh, route HTTP an toàn cho thiết lập, phương thức Gateway an toàn cho thiết lập, và
trình trợ giúp thiết lập được ủy quyền. Các dịch vụ nền nặng, trình đăng ký CLI, và
khởi tạo SDK nhà cung cấp/client vẫn thuộc về "full".
Riêng với trình đăng ký CLI:
- dùng
descriptorskhi trình đăng ký sở hữu một hoặc nhiều lệnh gốc và bạn muốn OpenClaw tải lười mô-đun CLI thật ở lần gọi đầu tiên - bảo đảm các mô tả đó bao phủ mọi gốc lệnh cấp cao nhất do trình đăng ký cung cấp
- giữ tên lệnh trong mô tả chỉ gồm chữ cái, chữ số, dấu gạch nối và dấu gạch dưới, bắt đầu bằng chữ cái hoặc chữ số; OpenClaw từ chối tên mô tả nằm ngoài dạng đó và loại bỏ các chuỗi điều khiển terminal khỏi phần mô tả trước khi hiển thị trợ giúp
- chỉ dùng riêng
commandscho các đường dẫn tương thích eager
Hình dạng Plugin
OpenClaw phân loại các Plugin đã tải theo hành vi đăng ký của chúng:| Hình dạng | Mô tả |
|---|---|
| plain-capability | Một loại khả năng (ví dụ: chỉ nhà cung cấp) |
| hybrid-capability | Nhiều loại khả năng (ví dụ: nhà cung cấp + giọng nói) |
| hook-only | Chỉ hook, không có khả năng |
| non-capability | Công cụ/lệnh/dịch vụ nhưng không có khả năng |
openclaw plugins inspect <id> để xem hình dạng của một Plugin.
Liên quan
- Tổng quan SDK - API đăng ký và tham chiếu subpath
- Trình trợ giúp runtime -
api.runtimevàcreatePluginRuntimeStore - Thiết lập và cấu hình - manifest, entry thiết lập, tải trì hoãn
- Plugin kênh - xây dựng đối tượng
ChannelPlugin - Plugin nhà cung cấp - đăng ký nhà cung cấp và hook