defineToolPlugin, definePluginEntry,
defineChannelPluginEntry, defineSetupPluginEntry.
Điểm vào gói
Các plugin đã cài đặt trỏ các trườngpackage.json openclaw đến cả điểm vào nguồn và
điểm vào đã dựng:
extensionsvàsetupEntrylà các điểm vào nguồn, được dùng để phát triển trong workspace và bản checkout git.runtimeExtensionsvàruntimeSetupEntryđược ưu tiên cho các gói đã cài đặt: chúng cho phép các gói npm bỏ qua việc biên dịch TypeScript trong thời gian chạy.runtimeExtensions, khi có, phải khớp vớiextensionsvề độ dài mảng (các điểm vào được ghép đôi theo vị trí).runtimeSetupEntryyêu cầusetupEntry.- Nếu một tạo phẩm
runtimeExtensions/runtimeSetupEntryđược khai báo nhưng bị thiếu, quá trình cài đặt/khám phá sẽ thất bại với lỗi đóng gói; OpenClaw không âm thầm quay về nguồn. Việc quay về nguồn (bên dưới) chỉ áp dụng khi hoàn toàn không có điểm vào thời gian chạy nào được khai báo. - Nếu một gói đã cài đặt chỉ khai báo điểm vào nguồn TypeScript, OpenClaw
sẽ tìm bản dựng tương ứng
dist/*.js(hoặc.mjs/.cjs) và sử dụng nó; nếu không, hệ thống sẽ quay về nguồn TypeScript. - Tất cả đường dẫn điểm vào phải nằm trong thư mục gói plugin. Các điểm vào
thời gian chạy và bản dựng JS tương ứng được suy luận không làm cho đường dẫn nguồn
extensionshoặcsetupEntrythoát ra ngoài trở nên hợp lệ.
defineToolPlugin
Nhập: openclaw/plugin-sdk/tool-plugin
Dành cho các plugin chỉ thêm công cụ tác tử. Giữ mã nguồn nhỏ gọn, suy luận kiểu cấu hình
và kiểu tham số công cụ từ các schema TypeBox, bọc giá trị trả về thuần túy theo
định dạng kết quả công cụ của OpenClaw, đồng thời cung cấp siêu dữ liệu tĩnh mà
openclaw plugins build ghi vào manifest plugin (contracts.tools,
configSchema).
configSchemalà tùy chọn; nếu bỏ qua, một schema đối tượng rỗng nghiêm ngặt sẽ được dùng (manifest được tạo vẫn bao gồmconfigSchema).executetrả về một chuỗi thuần túy hoặc giá trị có thể tuần tự hóa thành JSON; hàm trợ giúp bọc giá trị đó thành kết quả công cụ dạng văn bản vớidetailsđược đặt thành giá trị trả về gốc (chưa chuyển thành chuỗi).outputSchemacó thể mô tả giá trịdetailsgốc đó cho Chế độ mã và Tìm kiếm công cụ. Các lệnh gọi danh mục từ chối schema không hợp lệ trước khi thực thi và xác thực giá trị cuối cùng trước khi trả về.- Đối với kết quả công cụ tùy chỉnh,
openclaw/plugin-sdk/tool-resultsxuấttextResultvàjsonResult. - Tên công cụ là tĩnh, vì vậy
openclaw plugins buildsuy racontracts.toolstừ các công cụ đã khai báo mà không cần sao chép thủ công tên. - Quá trình tải thời gian chạy 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 bao giờ thực thi mã plugin để suy luận dữ liệu manifest còn thiếu.
definePluginEntry
Nhập: 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.
idphải khớp với manifestopenclaw.plugin.jsoncủa bạn.- Danh mục phiên bên ngoài sử dụng
openclaw/plugin-sdk/session-catalogvàapi.registerSessionCatalog({ id, label, list, read, continueSession?, archive? }). Phần lõi sở hữu các phương thức Gatewaysessions.catalog.*; nhà cung cấp trả về máy chủ, phiên và các phép chiếu bản ghi đã chuẩn hóa mà không đăng ký RPC. Nhà cung cấp danh sách nên gọi callbackonHost(host)tùy chọn khi từng máy chủ hoàn tất; mảng máy chủ được trả về vẫn bắt buộc làm ảnh chụp nhanh tương thích cuối cùng. kindkhông còn được khuyến nghị: thay vào đó, hãy khai báo một khe độc quyền ("memory"hoặc"context-engine") trong trườngkindcủa manifestopenclaw.plugin.json.kindcủa điểm vào thời gian chạy chỉ còn là phương án tương thích dự phòng cho các plugin cũ hơn.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, vì vậy các trình dựng schema tốn kém chỉ chạy một lần.- Một bộ mô tả
nodeHostCommandscó thể định nghĩaisAvailable({ config, env }). Việc trả vềfalsesẽ loại bỏ lệnh đó và khả năng tương ứng khỏi khai báo Gateway của node không giao diện. OpenClaw đánh giá nó dựa trên cấu hình khởi động cục bộ của node; các trình xử lý lệnh vẫn nên xác thực tính khả dụng khi được gọi.
defineChannelPluginEntry
Nhập: openclaw/plugin-sdk/channel-core
Bọc definePluginEntry bằng cơ chế nối dây dành riêng cho kênh: tự động
gọi api.registerChannel({ plugin }), cung cấp một điểm nối siêu dữ liệu CLI trợ giúp gốc
tùy chọn và giới hạn registerFull theo chế độ đăng ký.
Các callback chạy theo từng chế độ đăng ký (bảng đầy đủ tại
Chế độ đăng ký):
setRuntimechạy trong mọi chế độ ngoại trừ"cli-metadata"và"tool-discovery". Lưu tham chiếu thời gian chạy tại đây, thường thông quacreatePluginRuntimeStore.registerCliMetadatachạy cho"cli-metadata","discovery"và"full". Sử dụng nó làm vị trí chuẩn cho các bộ mô tả CLI thuộc sở hữu của kênh để phần trợ giúp gốc không kích hoạt hệ thống, ảnh chụp nhanh khám phá bao gồm siêu dữ liệu lệnh tĩnh và việc đăng ký CLI thông thường vẫn tương thích với quá trình tải đầy đủ plugin.registerFullchỉ chạy cho"full"và"tool-discovery". Đối với"tool-discovery", nó chạy thay cho việc đăng ký kênh: OpenClaw hoàn toàn bỏ quaregisterChannel/setRuntimevà chỉ gọiregisterFull, vì vậy mọi đăng ký nhà cung cấp/công cụ mà kênh của bạn cần để khám phá hoặc thực thi công cụ độc lập phải nằm ở đó, không phải phía sau phần thiết lập kênh thông thường.- Đăng ký khám phá không kích hoạt hệ thống, nhưng không có nghĩa là không nhập mô-đun: OpenClaw có thể
đánh giá điểm vào plugin đáng tin cậy và mô-đun plugin kênh để xây dựng
ảnh chụp nhanh. Giữ các lệnh nhập cấp cao nhất không có hiệu ứng phụ và đặt socket,
client, worker cùng dịch vụ phía sau các đường dẫn chỉ dành cho
"full". - Giống như
definePluginEntry,configSchemacó thể là một hàm tạo lười; OpenClaw ghi nhớ schema đã phân giải trong lần truy cập đầu tiên.
- Dùng
api.registerCli(..., { descriptors: [...] })cho các lệnh CLI gốc do plugin sở hữu mà bạn muốn tải lười nhưng không biến mất khỏi cây phân tích cú pháp của CLI gốc. Tên bộ mô tả phải 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 các dạng khác và loại bỏ chuỗi điều khiển đầu cuối khỏi phần mô tả trước khi hiển thị trợ giúp. Bao phủ mọi gốc lệnh cấp cao nhất mà trình đăng ký cung cấp. Chỉ riêngcommandsvẫn nằm trên đường dẫn tương thích tải sớm. - Dùng
api.registerNodeCliFeature(...)cho các lệnh tính năng của Node đã ghép cặp để chúng nằm dướiopenclaw nodes(tương đương vớiregisterCli(registrar, { parentPath: ["nodes"], ... })). - Đối với các lệnh plugin lồng nhau khác, hãy thêm
parentPathvà đăng ký lệnh trên đối tượngprogramđược truyền vào trình đăng ký; OpenClaw phân giải đối tượng đó thành lệnh cha trước khi gọi plugin. - Đối với plugin kênh, hãy đăng ký các bộ mô tả CLI từ
registerCliMetadatavà giữregisterFulltập trung vào công việc chỉ dành cho runtime. - Nếu
registerFullcũng đăng ký các phương thức RPC của Gateway, hãy đặt chúng dưới một tiền tố dành riêng cho plugin. Các không gian tên quản trị lõi được dành riêng (config.*,exec.approvals.*,wizard.*,update.*) luôn bị ép thànhoperator.admin.
defineSetupPluginEntry
Nhập: openclaw/plugin-sdk/channel-core
Dành cho tệp setup-entry.ts nhẹ. Chỉ trả về { plugin } mà không
kết nối runtime hoặc CLI.
defineSetupPluginEntry(...) với các nhóm trình trợ giúp thiết lập phạm vi hẹp:
Giữ các SDK nặng, đăng ký CLI và dịch vụ runtime tồn tại lâu dài trong
mục nhập đầy đủ.
Các kênh workspace đi kèm có phân tách bề mặt thiết lập và runtime có thể dùng
defineBundledChannelSetupEntry(...) từ
openclaw/plugin-sdk/channel-entry-contract để thay thế. Nó cho phép mục nhập thiết lập
giữ lại các phần xuất plugin/bí mật an toàn cho thiết lập trong khi vẫn cung cấp một
hàm thiết lập runtime:
registerSetupRuntime chỉ chạy cho các lần tải "setup-runtime"; hãy giới hạn nó
ở các tuyến hoặc phương thức chỉ dành cho cấu hình phải tồn tại trước khi
kích hoạt đầy đủ theo cơ chế trì hoãn.
Chế độ đăng ký
api.registrationMode cho plugin biết cách nó được tải:
defineChannelPluginEntry tự động xử lý phần phân tách này. Nếu dùng
definePluginEntry trực tiếp cho một kênh, hãy tự kiểm tra chế độ và nhớ rằng
"tool-discovery" bỏ qua đăng ký kênh:
plugin.<plugin-id>.changed. Tên sự kiện là một
đoạn viết thường, payload phải là JSON có giới hạn và phạm vi phải là
operator.read, operator.write hoặc operator.admin. Bộ phát chỉ tồn tại
trong vòng đời dịch vụ và bị thu hồi sau khi dừng hoặc khởi động thất bại. Nên ưu tiên
payload phiên bản hoặc vô hiệu hóa thay vì bản ghi đầy đủ để các máy khách được ủy quyền đọc lại
trạng thái chuẩn thông qua các phương thức Gateway có phạm vi của plugin.
Chế độ khám phá tạo một ảnh chụp nhanh sổ đăng ký không kích hoạt. Chế độ này vẫn có thể
đánh giá mục nhập plugin và đối tượng plugin kênh để OpenClaw có thể
đăng ký khả năng của kênh và các bộ mô tả CLI tĩnh. Hãy coi việc đánh giá mô-đun
trong chế độ khám phá là đáng tin cậy nhưng nhẹ: không có máy khách mạng,
tiến trình con, trình lắng nghe, kết nối cơ sở dữ liệu, worker nền,
hoạt động đọc thông tin xác thực hoặc các hiệu ứng phụ runtime trực tiếp khác ở cấp cao nhất.
Hãy coi "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 tái nhập runtime đầy đủ của kênh đi kèm. Các trường hợp phù hợp gồm
đăng ký kênh, tuyến 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à
quy trình khởi tạo SDK nhà cung cấp/máy khách vẫn thuộc về "full".
Các dạng plugin
OpenClaw phân loại các plugin đã tải theo hành vi đăng ký của chúng:
Dùng
openclaw plugins inspect <id> để xem dạng của plugin.
Liên quan
- Tổng quan về SDK - API đăng ký và tham chiếu đường dẫn con
- Trình trợ giúp runtime -
api.runtimevàcreatePluginRuntimeStore - Thiết lập và cấu hình - manifest, mục nhập 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