Plugin SDK reference
Tổng quan về SDK Plugin
Plugin SDK là hợp đồng có kiểu giữa các plugin và lõi. Trang này là tài liệu tham chiếu về những gì cần nhập và những gì có thể đăng ký.
Quy ước nhập
Luôn nhập từ một đường dẫn con cụ thể:
Mỗi đường dẫn con là một mô-đun nhỏ, độc lập. Điều này giúp khởi động nhanh và
ngăn ngừa các vấn đề phụ thuộc vòng. Đối với các trình trợ giúp điểm vào/bản dựng dành riêng cho kênh,
hãy ưu tiên openclaw/plugin-sdk/channel-core; giữ openclaw/plugin-sdk/core cho
bề mặt bao quát rộng hơn và các trình trợ giúp dùng chung như
buildChannelConfigSchema.
Đối với cấu hình kênh, hãy công bố JSON Schema do kênh sở hữu thông qua
openclaw.plugin.json#channelConfigs. Đường dẫn con plugin-sdk/channel-config-schema
dành cho các thành phần schema nguyên thủy dùng chung và trình dựng chung. Các plugin
đi kèm OpenClaw sử dụng plugin-sdk/bundled-channel-config-schema cho các schema
kênh đi kèm được giữ lại. Đường dẫn con schema đi kèm đó không phải là mẫu cho các
plugin mới.
Tham chiếu đường dẫn con
Plugin SDK được cung cấp dưới dạng một tập hợp các đường dẫn con có phạm vi hẹp, được nhóm theo lĩnh vực (điểm vào plugin, kênh, nhà cung cấp, xác thực, runtime, khả năng, bộ nhớ và các trình trợ giúp plugin đi kèm được dành riêng). Để xem danh mục đầy đủ — đã được nhóm và liên kết — hãy xem Đường dẫn con Plugin SDK.
Danh mục điểm vào của trình biên dịch nằm trong
scripts/lib/plugin-sdk-entrypoints.json; các mục xuất công khai có kiểu loại trừ
các đường dẫn con nội bộ được liệt kê trong
scripts/lib/plugin-sdk-private-local-only-subpaths.json. Các điểm vào sản xuất
trong danh sách đó vẫn giữ các mục xuất runtime máy chủ chỉ dành cho JavaScript cho các plugin chính thức
được phát hành riêng, trong khi các điểm vào chỉ dành cho kiểm thử vẫn không được xuất. Chạy
pnpm plugin-sdk:surface để kiểm tra số lượng mục xuất công khai. Các đường dẫn con công khai
đã ngừng khuyến nghị, đủ cũ và không được mã sản xuất của tiện ích mở rộng đi kèm sử dụng,
được theo dõi trong scripts/lib/plugin-sdk-deprecated-public-subpaths.json; các
barrel tái xuất rộng đã ngừng khuyến nghị được theo dõi trong
scripts/lib/plugin-sdk-deprecated-barrel-subpaths.json.
API đăng ký
Callback register(api) nhận một đối tượng OpenClawPluginApi với các
phương thức sau:
Các plugin cung cấp bề mặt trò chuyện nhóm bên ngoài cho một phiên có thể đăng ký
nhà cung cấp duy nhất trên toàn tiến trình được xuất bởi
openclaw/plugin-sdk/session-discussion. Phương thức info({ sessionKey }) của nó
cho biết một cuộc thảo luận không khả dụng, sẵn sàng mở hay đã mở;
open({ sessionKey }) tạo hoặc phân giải cuộc thảo luận và trả về các URL nhúng
và bên ngoài của cuộc thảo luận. Việc đăng ký một nhà cung cấp khác sẽ thay thế nhà cung cấp hiện tại.
Đăng ký khả năng
| Phương thức | Nội dung đăng ký |
|---|---|
api.registerProvider(...) |
Suy luận văn bản (LLM) |
api.registerWorkerProvider(...) |
Lease vòng đời worker đám mây |
api.registerModelCatalogProvider(...) |
Các hàng danh mục mô hình cho việc tạo văn bản và nội dung đa phương tiện |
api.registerAgentHarness(...) |
Trình thực thi agent gốc Thử nghiệm (Codex, Copilot) |
api.registerCliBackend(...) |
Backend suy luận CLI cục bộ |
api.registerChannel(...) |
Kênh nhắn tin |
api.registerEmbeddingProvider(...) |
Nhà cung cấp embedding vectơ có thể tái sử dụng |
api.registerSpeechProvider(...) |
Tổng hợp văn bản thành giọng nói / STT |
api.registerRealtimeTranscriptionProvider(...) |
Phiên âm thời gian thực dạng luồng |
api.registerRealtimeVoiceProvider(...) |
Phiên thoại thời gian thực hai chiều |
api.registerMediaUnderstandingProvider(...) |
Phân tích hình ảnh/âm thanh/video |
api.registerTranscriptSourceProvider(...) |
Nguồn bản chép lời cuộc họp trực tiếp hoặc được nhập |
api.registerImageGenerationProvider(...) |
Tạo hình ảnh |
api.registerMusicGenerationProvider(...) |
Tạo nhạc |
api.registerVideoGenerationProvider(...) |
Tạo video |
api.registerWebFetchProvider(...) |
Nhà cung cấp tìm nạp / thu thập dữ liệu web |
api.registerWebSearchProvider(...) |
Tìm kiếm web |
api.registerCompactionProvider(...) |
Backend Compaction bản chép lời có thể cắm |
Các nhà cung cấp worker cũng phải khai báo id của mình trong contracts.workerProviders.
Lõi lưu giữ ý định bền vững trước provision(profile, operationId). Các nhà cung cấp xác thực cài đặt trước khi cấp phát bên ngoài và ném WorkerProviderError khi hồ sơ bị từ chối vĩnh viễn. provision phải tiếp nhận cùng một lease khi id thao tác lặp lại.
Lõi lưu giữ các cài đặt hồ sơ đã xác thực cùng với lease và cung cấp bản chụp đó cho destroy({ leaseId, profile }), phương thức này phải có tính lũy đẳng, và inspect({ leaseId, profile }), phương thức này trả về active, destroyed hoặc unknown. Điều này cho phép các nhà cung cấp định tuyến các lệnh gọi vòng đời sau khi Gateway khởi động lại hoặc hồ sơ có tên bị xóa. Các điểm cuối SSH sử dụng một SecretRef cho keyRef, không bao giờ dùng trực tiếp vật liệu khóa, và bao gồm một hostKey từ đầu ra cấp phát đáng tin cậy dưới dạng chính xác algorithm base64, không có tên máy chủ hoặc chú thích. Lõi ghim hostKey và không bao giờ tin cậy khóa từ kết nối đầu tiên. Nhà cung cấp tạo một keyRef động có thể triển khai resolveSshIdentity({ leaseId, profile, keyRef }); khi có, trình phân giải đó là nguồn có thẩm quyền, còn các nhà cung cấp không có trình phân giải này sử dụng trình phân giải bí mật chung đã cấu hình.
Các nhà cung cấp có lease có thể gia hạn cũng có thể triển khai renew(leaseId).
inspect phải ném lỗi đối với các lỗi tạm thời hoặc không xác định; chỉ trả về unknown khi sự vắng mặt đã được xác nhận chắc chắn. Lõi đánh dấu một bản ghi cục bộ đang hoạt động là mồ côi hoặc coi sự vắng mặt là việc tháo dỡ đã hoàn tất sau một yêu cầu hủy đã được lưu giữ.
Các nhà cung cấp embedding được đăng ký bằng api.registerEmbeddingProvider(...) cũng phải
được liệt kê trong contracts.embeddingProviders trong manifest plugin. Đây
là bề mặt embedding chung để tạo vectơ có thể tái sử dụng. Tìm kiếm bộ nhớ
có thể sử dụng bề mặt nhà cung cấp chung này. Seam cũ
api.registerMemoryEmbeddingProvider(...) và
contracts.memoryEmbeddingProviders là lớp tương thích đã ngừng khuyến nghị trong khi
các nhà cung cấp dành riêng cho bộ nhớ hiện có tiến hành di chuyển.
Các nhà cung cấp dành riêng cho bộ nhớ vẫn cung cấp một batchEmbed(...) runtime tiếp tục sử dụng
hợp đồng xử lý theo lô trên từng tệp hiện có, trừ khi runtime của chúng đặt rõ ràng
sourceWideBatchEmbed: true. Tùy chọn bật này cho phép máy chủ bộ nhớ gửi các đoạn từ
nhiều tệp bộ nhớ đã thay đổi và các nguồn đã bật trong một lệnh gọi batchEmbed(...), tối đa
theo giới hạn lô của máy chủ. Các adapter lô tải lên tệp yêu cầu JSONL cũng phải
chia nhỏ các tác vụ nhà cung cấp trước khi đạt giới hạn kích thước tải lên cũng như giới hạn số lượng
yêu cầu. Nhà cung cấp phải trả về một embedding cho mỗi đoạn đầu vào theo cùng thứ tự như
batch.chunks; bỏ cờ này khi nhà cung cấp yêu cầu các lô cục bộ theo tệp hoặc
không thể giữ nguyên thứ tự đầu vào trong một tác vụ lớn hơn trên toàn nguồn.
Công cụ và lệnh
Sử dụng defineToolPlugin cho các plugin chỉ có công cụ đơn giản
với tên công cụ cố định. Sử dụng trực tiếp api.registerTool(...) cho các plugin hỗn hợp
hoặc việc đăng ký công cụ hoàn toàn động.
| Phương thức | Nội dung đăng ký |
|---|---|
api.registerTool(tool, opts?) |
Công cụ agent (bắt buộc hoặc { optional: true }) |
api.registerCommand(def) |
Lệnh tùy chỉnh (bỏ qua LLM) |
api.registerNodeHostCommand(command) |
Lệnh do openclaw node run xử lý; siêu dữ liệu agentTool tùy chọn có thể hiển thị lệnh dưới dạng công cụ mà agent thấy được khi Node được kết nối |
Các lệnh plugin có thể đặt agentPromptGuidance khi agent cần một gợi ý định tuyến ngắn
do lệnh sở hữu. Chỉ để nội dung đó nói về chính lệnh; không thêm
chính sách dành riêng cho nhà cung cấp hoặc plugin vào các trình dựng prompt lõi.
Các mục hướng dẫn có thể là chuỗi kế thừa, áp dụng cho mọi bề mặt prompt, hoặc các mục có cấu trúc:
agentPromptGuidance: [ "Gợi ý lệnh toàn cục.", { text: "Chỉ hiển thị nội dung này trong prompt OpenClaw chính.", surfaces: ["openclaw_main"] },];surfaces có cấu trúc có thể bao gồm openclaw_main, codex_app_server,
cli_backend, acp_backend hoặc subagent. pi_main vẫn là bí danh đã ngừng khuyến nghị
cho openclaw_main. Bỏ surfaces khi chủ ý áp dụng hướng dẫn cho mọi bề mặt. Không
truyền một mảng surfaces rỗng; mảng này sẽ bị từ chối để việc vô tình mất phạm vi không
biến thành văn bản prompt toàn cục.
Chỉ dẫn dành cho nhà phát triển của máy chủ ứng dụng Codex gốc nghiêm ngặt hơn các bề mặt prompt
khác: chỉ hướng dẫn được giới hạn phạm vi rõ ràng ở codex_app_server mới được đưa vào
luồng có mức ưu tiên cao hơn đó. Hướng dẫn dạng chuỗi kế thừa và hướng dẫn có cấu trúc
không giới hạn phạm vi vẫn khả dụng cho các bề mặt prompt không phải Codex nhằm đảm bảo khả năng tương thích.
Các lệnh trên máy chủ Node chạy trên máy chủ Node đã kết nối, không chạy bên trong tiến trình
Gateway. Nếu có agentTool, Node sẽ công bố một bộ mô tả sau khi
kết nối Gateway thành công; Gateway chỉ cung cấp bộ mô tả đó cho các lượt chạy của tác nhân trong khi
Node đó đang kết nối và chỉ khi command của bộ mô tả nằm trong bề mặt lệnh
được phê duyệt của Node. Đặt agentTool.defaultPlatforms để đưa một
lệnh không nguy hiểm vào danh sách cho phép lệnh Node mặc định; nếu không, yêu cầu
gateway.nodes.allowCommands rõ ràng hoặc chính sách gọi Node. agentTool.name
phải an toàn với nhà cung cấp: bắt đầu bằng một chữ cái, chỉ sử dụng chữ cái, chữ số,
dấu gạch dưới hoặc dấu gạch nối và không vượt quá 64 ký tự. Các công cụ Node dựa trên MCP
có thể đặt siêu dữ liệu agentTool.mcp để các bề mặt danh mục và tìm kiếm công cụ có thể hiển thị
danh tính máy chủ/công cụ MCP từ xa, nhưng việc thực thi vẫn đi qua
lệnh Node đã được công bố.
Hạ tầng
| Phương thức | Nội dung đăng ký |
|---|---|
api.registerHook(events, handler, opts?) |
Hook sự kiện |
api.registerHttpRoute(params) |
Điểm cuối HTTP của Gateway |
api.registerGatewayMethod(name, handler) |
Phương thức RPC của Gateway |
api.registerGatewayDiscoveryService(service) |
Bộ quảng bá khám phá Gateway cục bộ |
api.registerCli(registrar, opts?) |
Lệnh con CLI |
api.registerNodeCliFeature(registrar, opts?) |
CLI tính năng Node trong openclaw nodes |
api.registerService(service) |
Dịch vụ nền |
api.registerInteractiveHandler(registration) |
Trình xử lý tương tác |
api.registerAgentToolResultMiddleware(...) |
Middleware kết quả công cụ khi chạy |
api.registerMemoryPromptSupplement(builder) |
Phần bổ sung liên quan đến bộ nhớ trong prompt |
api.registerMemoryPromptPreparation(prepare) |
Chuẩn bị bất đồng bộ cho phần liên quan đến bộ nhớ trong prompt |
api.registerMemoryCorpusSupplement(adapter) |
Kho dữ liệu tìm kiếm/đọc bộ nhớ bổ sung |
api.registerHostedMediaResolver(resolver) |
Trình phân giải URL phương tiện được lưu trữ kiểu trình duyệt |
api.registerMcpServerConnectionResolver(...) |
Vận chuyển MCP theo từng bên yêu cầu (url/headers) cho một tên máy chủ tĩnh |
api.registerTextTransforms(transforms) |
Viết lại văn bản tương thích prompt/tin nhắn do Plugin sở hữu |
api.registerConfigMigration(migrate) |
Di chuyển cấu hình nhẹ chạy trước khi môi trường chạy Plugin tải |
api.registerMigrationProvider(provider) |
Trình nhập cho openclaw migrate |
api.registerAutoEnableProbe(probe) |
Phép dò cấu hình có thể tự động bật Plugin này |
api.registerReload(registration) |
Chính sách tiền tố cấu hình khởi động lại/tải nóng/không làm gì để xử lý tải lại |
api.registerNodeHostCommand(command) |
Trình xử lý lệnh được cung cấp cho các Node đã ghép cặp |
api.registerNodeInvokePolicy(policy) |
Chính sách danh sách cho phép/phê duyệt cho các lệnh do Node gọi |
api.registerSecurityAuditCollector(collector) |
Bộ thu thập phát hiện cho openclaw security audit |
Công việc Webhook sau khi xác nhận
Các tuyến Webhook xác nhận yêu cầu trước khi hoàn tất xử lý phải chuyển công việc đã tách đó sang gốc tiếp nhận được theo dõi riêng:
void runDetachedWebhookWork(() => processWebhookEvent(event)).catch((error) => { runtime.error?.(`điều phối webhook thất bại: ${String(error)}`);});Gọi runDetachedWebhookWork(...) một cách đồng bộ khi yêu cầu HTTP vẫn đang
được tiếp nhận. Trình trợ giúp lập tức dành riêng một gốc độc lập, sau đó bắt đầu
callback trong vi tác vụ tiếp theo để trình xử lý yêu cầu có thể ghi
xác nhận trước. Promise được trả về tiếp nhận kết quả callback; bên gọi
vẫn chịu trách nhiệm xử lý từ chối. Điều này giúp công việc hàng đợi sau xác nhận được tiếp nhận và khiến
quá trình xả khi khởi động lại hoặc tạm ngưng chờ công việc đó. Các trình xử lý chờ toàn bộ quá trình xử lý
trước khi trả về không cần trình trợ giúp này.
Kết nối MCP theo phạm vi bên yêu cầu
Giữ danh tính máy chủ MCP ở dạng tĩnh (tên, bộ lọc công cụ) trong mcp.servers hoặc một
manifest gói. Có thể đăng ký thêm trình phân giải kết nối để mỗi
bên yêu cầu tin nhắn đáng tin cậy có phương thức vận chuyển riêng:
api.registerMcpServerConnectionResolver({ serverName: "user-email", resolve: async (ctx) => { // ctx.requesterSenderId được máy chủ tin cậy; tuyệt đối không tự tạo danh tính người gửi tại đây. const token = await lookupUserToken(ctx.requesterSenderId); if (!token) { return null; // bỏ qua máy chủ này trong lượt chạy hiện tại } return { url: "https://mcp.example.com/email", headers: { Authorization: `Bearer ${token}` }, }; },});Ghi chú về hợp đồng:
- Ngữ cảnh trình phân giải chỉ mang danh tính máy chủ đáng tin cậy (
requesterSenderId, cùngagentAccountId/messageChanneltùy chọn). Có thể bổ sung các trường đáng tin cậy trong tương lai (ví dụ ngữ cảnh người dùng cron/tác nhân con) theo hướng cộng thêm. - Một Plugin sở hữu một tên máy chủ:
registerMcpServerConnectionResolvertrùng lặp cho cùngserverNametừ một Plugin khác sẽ bị từ chối kèm chẩn đoán lỗi (lần đăng ký đầu tiên thắng), để quyền sở hữu kết nối không bao giờ phụ thuộc vào thứ tự tải Plugin. - Tên công cụ được suy ra từ toàn bộ tập hợp máy chủ đã khai báo để việc phân giải một phần không bao giờ làm thay đổi tên máy chủ an toàn giữa các bên yêu cầu hoặc các lượt. Phần lõi không xác minh rằng các điểm cuối của những bên yêu cầu khác nhau cung cấp lược đồ công cụ giống nhau; một trình phân giải phải trỏ mọi bên yêu cầu đến cùng một dịch vụ logic, nếu không các lược đồ công cụ (và độ ổn định của bộ nhớ đệm prompt) sẽ khác nhau theo từng bên yêu cầu.
- Các lượt chạy không có
requesterSenderIdđáng tin cậy (cron, tác nhân con, heartbeat, Gateway công khai) không bao giờ hiện thực hóa máy chủ theo phạm vi bên yêu cầu. Không có kết nối dự phòng dùng chung. resolvebị giới hạn ở 10 giây cho mỗi máy chủ; hết thời gian chờ hoặc phát sinh ngoại lệ sẽ bỏ qua máy chủ đó trong lượt chạy mà không làm MCP tĩnh thất bại.- Các kết nối đã phân giải được xác thực lại tối đa mỗi 5 phút cho mỗi bên yêu cầu:
việc xoay vòng dựng lại phương thức vận chuyển bằng thông tin xác thực mới, còn kết quả
nullsẽ thu hồi kết nối đó (môi trường chạy được lưu đệm sẽ bị hủy ngay cả giữa phiên). Do đó, thông tin xác thực đã bị thu hồi hoặc xoay vòng có thể vẫn được sử dụng trong tối đa 5 phút. headersđã phân giải không bao giờ được ghi nhật ký hoặc lưu bền vững; phần lõi chỉ giữ một bản tóm lược có khóa tạm thời trong bộ nhớ (HMAC cục bộ theo tiến trình) để phát hiện việc xoay vòng thông tin xác thực và đăng ký các giá trị thông tin xác thực trong tiêu đề/URL đã phân giải với sổ đăng ký che dữ liệu của chức năng ghi nhật ký/ghi lại thông tin gỡ lỗi.- Máy chủ theo phạm vi bên yêu cầu không tạo chế độ xem Ứng dụng MCP: một chế độ xem tồn tại lâu hơn lượt chạy đã xác thực bên yêu cầu và ranh giới chế độ xem Gateway không có danh tính bên yêu cầu, vì vậy bản xem trước ứng dụng giữ trạng thái đóng an toàn cho các máy chủ này. Kết quả công cụ không bị ảnh hưởng.
- Các máy chủ tĩnh không có trình phân giải tiếp tục sử dụng vòng đời theo phạm vi phiên hiện có.
- Quy tắc phân phối của bộ kiểm thử: máy chủ theo phạm vi bên yêu cầu không bao giờ được đưa vào
cấu hình máy khách MCP gốc của bộ kiểm thử (luồng Codex
mcp_servers, CLI-c mcp_servers=…hoặc bất kỳ phép chiếu MCP dùng chung theo phiên nào khác). Thay vào đó, các bộ kiểm thử phân phối chúng dưới dạng công cụ theo phạm vi lượt chạy:- Trình chạy nhúng: môi trường chạy MCP theo phiên + công cụ gói (tĩnh + theo phạm vi).
- Máy chủ ứng dụng Codex: công cụ động thông qua
materializeRequesterScopedMcpToolsForHarnessRun(chỉ theo phạm vi; các máy chủ tĩnh vẫn sử dụng máy khách MCP gốc của Codex).
- Đặc tả công cụ theo phạm vi ổn định trong phiên sau lần phân giải thành công đầu tiên trong phiên đó, vì vậy các bộ kiểm thử dùng chung luồng (Codex) không xoay vòng luồng khi người gửi thay đổi. Trước khi bất kỳ bên yêu cầu nào phân giải, không có đặc tả theo phạm vi nào được công bố.
- Các bên yêu cầu chưa xác thực trên bộ kiểm thử dùng chung luồng vẫn thấy các công cụ theo phạm vi đã được công bố; việc gọi một công cụ sẽ trả về lỗi công cụ chưa kết nối rõ ràng cho bên yêu cầu đó. OpenClaw không bao giờ dùng thông tin xác thực của bên yêu cầu khác làm dự phòng.
Các trình dựng phần bổ sung prompt bộ nhớ nhận ngữ cảnh agentId,
agentSessionKey và sandboxed tùy chọn. Các lệnh gọi search
và get của phần bổ sung kho dữ liệu bộ nhớ nhận ngữ cảnh agentId và sandboxed tùy chọn. Các Plugin có
bộ lưu trữ do tác nhân sở hữu phải phân giải bộ lưu trữ đó cho từng lệnh gọi thay vì
ghi nhận một đường dẫn toàn cục trong lúc đăng ký. Nếu cần ID tác nhân nhưng
bị thiếu trong một thao tác đa tác nhân, hãy đóng an toàn thay vì chọn một
tác nhân tùy ý.
Sử dụng registerMemoryPromptPreparation(...) khi văn bản prompt phụ thuộc vào trạng thái Plugin
bất đồng bộ. Callback chạy một lần trước mỗi prompt tác nhân đầy đủ và nhận
cùng ngữ cảnh công cụ, tác nhân, phiên và sandbox như các trình dựng prompt
bộ nhớ đồng bộ. Xác thực phiên bản chủ sở hữu bộ lưu trữ hiện tại trước khi tải trạng thái
được lưu bền vững, sau đó chỉ trả về các dòng dành cho lượt chạy đó. OpenClaw đóng băng các dòng đó và
chuyển kết quả bất biến cho quá trình hợp thành prompt đồng bộ. Giữ việc lưu bền vững,
thay thế nguyên tử và xóa khi loại bỏ chủ sở hữu bên trong Plugin sở hữu; không
thăm dò hoặc đọc tệp từ trình dựng prompt.
Các trình xử lý tương tác Telegram có thể trả về { submitText } để định tuyến văn bản qua
đường dẫn tác nhân đầu vào thông thường của Telegram sau khi trình xử lý thành công. OpenClaw giữ
nút callback khi chính sách đầu vào bỏ qua văn bản hoặc quá trình xử lý thất bại, để
người dùng có thể thử lại sau khi điều kiện chặn thay đổi. Trường kết quả này dành riêng
cho Telegram; các kênh khác giữ hợp đồng kết quả tương tác riêng.
Hook máy chủ cho Plugin quy trình công việc
Hook máy chủ là các điểm nối SDK dành cho Plugin cần tham gia vào vòng đời máy chủ thay vì chỉ thêm nhà cung cấp, kênh hoặc công cụ. Chúng là các hợp đồng chung; Chế độ lập kế hoạch có thể sử dụng chúng, cũng như các quy trình phê duyệt, cổng chính sách không gian làm việc, trình giám sát nền, trình hướng dẫn thiết lập và Plugin đồng hành giao diện người dùng.
| Phương thức | Hợp đồng do phương thức sở hữu |
|---|---|
api.session.state.registerSessionExtension(...) |
Trạng thái phiên tương thích với JSON do Plugin sở hữu, được chiếu qua các phiên Gateway |
api.session.workflow.enqueueNextTurnInjection(...) |
Ngữ cảnh bền vững, chính xác một lần được chèn vào lượt tác tử tiếp theo cho một phiên |
api.registerTrustedToolPolicy(...) |
Chính sách công cụ tin cậy trước Plugin, được kiểm soát bằng manifest, có thể chặn hoặc viết lại các tham số công cụ |
api.registerToolMetadata(...) |
Siêu dữ liệu hiển thị danh mục công cụ mà không thay đổi phần triển khai công cụ |
api.registerCommand(...) |
Các lệnh Plugin có phạm vi; kết quả lệnh có thể đặt continueAgent: true hoặc suppressReply: true; các lệnh gốc của Discord hỗ trợ descriptionLocalizations |
api.session.controls.registerControlUiDescriptor(...) |
Bộ mô tả phần đóng góp cho Control UI đối với các bề mặt phiên, công cụ, lượt chạy, cài đặt hoặc thẻ |
api.lifecycle.registerRuntimeLifecycle(...) |
Các callback dọn dẹp tài nguyên thời gian chạy do Plugin sở hữu trên các đường dẫn đặt lại/xóa/tải lại |
api.agent.events.registerAgentEventSubscription(...) |
Các đăng ký sự kiện đã được làm sạch dành cho trạng thái quy trình công việc và trình giám sát |
api.runContext.setRunContext(...) / getRunContext(...) / clearRunContext(...) |
Trạng thái tạm của Plugin theo từng lượt chạy, được xóa khi lượt chạy bước vào giai đoạn kết thúc vòng đời |
api.session.workflow.registerSessionSchedulerJob(...) |
Siêu dữ liệu dọn dẹp cho các công việc của bộ lập lịch do Plugin sở hữu; không lập lịch công việc hoặc tạo bản ghi tác vụ |
api.session.workflow.sendSessionAttachment(...) |
Chỉ dành cho Plugin đi kèm: phân phối tệp đính kèm qua máy chủ đến tuyến phiên gửi trực tiếp đang hoạt động |
api.session.workflow.scheduleSessionTurn(...) / unscheduleSessionTurnsByTag(...) |
Chỉ dành cho Plugin đi kèm: các lượt phiên được lập lịch dựa trên Cron cùng hoạt động dọn dẹp theo thẻ |
api.session.controls.registerSessionAction(...) |
Các hành động phiên có kiểu mà máy khách có thể điều phối qua Gateway |
Bộ mô tả surface: "tab" thêm một thẻ thanh bên vào Control UI. Bộ mô tả thẻ
của các Plugin đang hoạt động được công bố cho máy khách bảng điều khiển trong lời chào của
Gateway (controlUiTabs), vì vậy thẻ chỉ xuất hiện khi Plugin được bật.
Các Plugin đi kèm có thể cung cấp chế độ xem bảng điều khiển hạng nhất cho thẻ của mình; các
Plugin khác có thể đặt path thành một tuyến HTTP của Plugin (xem
api.registerHttpRoute(...)) để bảng điều khiển kết xuất trong một khung sandbox.
icon là gợi ý tên biểu tượng bảng điều khiển, group chọn phần thanh bên
(control hoặc agent), order sắp xếp giữa các thẻ Plugin, còn requiredScopes
ẩn thẻ khỏi các kết nối không có những phạm vi vận hành viên đó:
Đối với thẻ bên ngoài được Gateway bảo vệ, hãy đăng ký bộ mô tả path dưới một
tuyến HTTP auth: "gateway" thuộc cùng Plugin. Sau khi khởi tạo đã xác thực, trình duyệt nhận được một
quyền cấp HttpOnly ngắn hạn, giới hạn trong Plugin và gốc tuyến đó, để
khung sandbox có thể tải mà không cần sao chép bearer token của Gateway vào URL
hoặc JavaScript. Thành phần cha đã xác thực gia hạn quyền cấp khi thẻ bên ngoài
đang hoạt động và trước khi gắn thẻ sau thao tác điều hướng hoặc khi trình duyệt tiếp tục hoạt động. Thành phần này cũng
thăm dò quyền cấp từ chính sandbox opaque đó trước khi gắn, để các chế độ
quyền riêng tư của trình duyệt chặn cookie sẽ đóng an toàn bằng một bảng điều khiển không khả dụng.
Quyền cấp cho khung chỉ chấp nhận GET và HEAD, đồng thời luôn mang
operator.read; requiredScopes kiểm soát khả năng hiển thị thẻ nhưng không bao giờ mở rộng
quyền cấp cookie. Các thao tác thay đổi vẫn nằm trên thành phần cha được Gateway xác thực rõ ràng hoặc
các bề mặt bearer. Các thẻ bên ngoài yêu cầu HTTPS/Tailscale Serve hoặc một
nguồn loopback được trình duyệt tin cậy; HTTP thuần túy trên máy chủ LAN hiển thị
lỗi ngữ cảnh bảo mật thay vì gắn một bảng điều khiển không thể xác thực.
Việc chặn hoàn toàn cookie của bên thứ ba cũng khiến các thẻ được Gateway bảo vệ không khả dụng.
Giống như mọi bề mặt Plugin gốc, khung vẫn nằm trong ranh giới tin cậy của
Plugin đã cài đặt; OpenClaw không coi các Plugin đã cài đặt là những
chủ thể bảo mật trình duyệt được cách ly lẫn nhau.
Quyền cấp cookie sử dụng ranh giới tên máy chủ của trình duyệt, không phải ranh giới cổng. Không
đồng lưu trữ các dịch vụ không tin cậy lẫn nhau trên tên máy chủ Gateway, kể cả trên các
cổng khác.
Các thẻ được hỗ trợ bởi cơ chế xác thực do Plugin quản lý vẫn giữ hành vi iframe trực tiếp và không
yêu cầu hoặc cần quyền cấp Gateway này.
api.session.controls.registerControlUiDescriptor({ surface: "tab", id: "logbook", label: "Nhật ký", description: "Ngày của bạn dưới dạng dòng thời gian, được tạo từ các ảnh chụp màn hình.", icon: "sun", group: "control", requiredScopes: ["operator.write"],});Sử dụng các không gian tên được nhóm cho mã Plugin mới:
api.session.state.registerSessionExtension(...)api.session.workflow.enqueueNextTurnInjection(...)api.session.workflow.registerSessionSchedulerJob(...)api.session.workflow.sendSessionAttachment(...)api.session.workflow.scheduleSessionTurn(...)api.session.workflow.unscheduleSessionTurnsByTag(...)api.session.controls.registerSessionAction(...)api.session.controls.registerControlUiDescriptor(...)api.agent.events.registerAgentEventSubscription(...)api.agent.events.emitAgentEvent(...)api.runContext.setRunContext(...)/getRunContext(...)/clearRunContext(...)api.lifecycle.registerRuntimeLifecycle(...)
Các phương thức phẳng tương đương vẫn khả dụng dưới dạng bí danh tương thích đã lỗi thời
cho các Plugin hiện có. Không thêm mã Plugin mới gọi trực tiếp
api.registerSessionExtension, api.enqueueNextTurnInjection,
api.registerControlUiDescriptor, api.registerRuntimeLifecycle,
api.registerAgentEventSubscription, api.emitAgentEvent,
api.setRunContext, api.getRunContext, api.clearRunContext,
api.registerSessionSchedulerJob, api.registerSessionAction,
api.sendSessionAttachment, api.scheduleSessionTurn hoặc
api.unscheduleSessionTurnsByTag.
scheduleSessionTurn(...) là một tiện ích có phạm vi phiên nằm trên bộ lập lịch
Cron của Gateway. Cron sở hữu thời điểm và tạo bản ghi tác vụ nền khi
lượt chạy diễn ra; Plugin SDK chỉ ràng buộc phiên đích, cách đặt tên
do Plugin sở hữu và hoạt động dọn dẹp. Sử dụng api.runtime.tasks.managedFlows bên trong
lượt được lập lịch khi chính công việc cần trạng thái Task Flow nhiều bước bền vững.
Các hợp đồng chủ ý phân chia thẩm quyền:
- Các Plugin bên ngoài có thể sở hữu phần mở rộng phiên, bộ mô tả UI, lệnh, siêu dữ liệu công cụ, nội dung chèn cho lượt tiếp theo và các hook thông thường.
- Các chính sách công cụ tin cậy chạy trước các hook
before_tool_callthông thường và được máy chủ tin cậy. Chính sách đi kèm chạy trước; chính sách của Plugin đã cài đặt yêu cầu bật rõ ràng cùng các id cục bộ của chúng trongcontracts.trustedToolPolicies, sau đó chạy theo thứ tự tải Plugin. Id chính sách được giới hạn trong Plugin đăng ký. - Quyền sở hữu lệnh dành riêng chỉ áp dụng cho thành phần đi kèm. Các Plugin bên ngoài nên dùng tên lệnh hoặc bí danh riêng.
allowPromptInjection=falsevô hiệu hóa các hook thay đổi prompt, bao gồmagent_turn_prepare,before_prompt_build,heartbeat_prompt_contributionvàenqueueNextTurnInjection.
Ví dụ về các thành phần sử dụng không thuộc Plan:
| Kiểu mẫu Plugin | Hook được sử dụng |
|---|---|
| Quy trình phê duyệt | Phần mở rộng phiên, tiếp tục lệnh, chèn cho lượt tiếp theo, bộ mô tả UI |
| Cổng chính sách ngân sách/không gian làm việc | Chính sách công cụ tin cậy, siêu dữ liệu công cụ, phép chiếu phiên |
| Trình giám sát vòng đời nền | Dọn dẹp vòng đời thời gian chạy, đăng ký sự kiện tác tử, quyền sở hữu/dọn dẹp bộ lập lịch phiên, đóng góp prompt Heartbeat, bộ mô tả UI |
| Trình hướng dẫn thiết lập hoặc làm quen | Phần mở rộng phiên, lệnh có phạm vi, bộ mô tả Control UI |
Khi nào nên sử dụng middleware kết quả công cụ
Các Plugin đi kèm và Plugin đã cài đặt được bật rõ ràng với hợp đồng
manifest tương ứng có thể sử dụng api.registerAgentToolResultMiddleware(...) khi
cần viết lại kết quả công cụ sau khi thực thi và trước khi thời gian chạy
đưa kết quả đó trở lại mô hình. Đây là seam trung lập với thời gian chạy, đáng tin cậy
dành cho các bộ rút gọn đầu ra bất đồng bộ như tokenjuice.
Các Plugin phải khai báo contracts.agentToolResultMiddleware cho từng
thời gian chạy mục tiêu, ví dụ ["openclaw", "codex"]. Plugin đã cài đặt không có
hợp đồng đó hoặc không được bật rõ ràng sẽ không thể đăng ký middleware này; hãy giữ
các hook Plugin OpenClaw thông thường cho công việc không cần thời điểm xử lý kết quả công cụ
trước mô hình. Đường dẫn đăng ký factory phần mở rộng cũ
chỉ dành cho trình chạy nhúng đã bị xóa.
Đăng ký khám phá Gateway
api.registerGatewayDiscoveryService(...) cho phép một Plugin quảng bá Gateway
đang hoạt động trên phương thức truyền tải khám phá cục bộ như mDNS/Bonjour. OpenClaw gọi
dịch vụ trong lúc Gateway khởi động khi khám phá cục bộ được bật, truyền vào
các cổng Gateway hiện tại cùng dữ liệu gợi ý TXT không bí mật, và gọi trình xử lý
stop được trả về trong lúc Gateway tắt.
api.registerGatewayDiscoveryService({ id: "my-discovery", async advertise(ctx) { const handle = await startMyAdvertiser({ gatewayPort: ctx.gatewayPort, tls: ctx.gatewayTlsEnabled, displayName: ctx.machineDisplayName, }); return { stop: () => handle.stop() }; },});Các Plugin khám phá Gateway không được coi các giá trị TXT được quảng bá là bí mật hoặc thông tin xác thực. Khám phá chỉ là gợi ý định tuyến; cơ chế xác thực Gateway và ghim TLS vẫn sở hữu việc thiết lập tin cậy.
Siêu dữ liệu đăng ký CLI
api.registerCli(registrar, opts?) chấp nhận hai loại siêu dữ liệu lệnh:
commands: các tên lệnh rõ ràng thuộc sở hữu của thành phần đăng kýdescriptors: các bộ mô tả lệnh tại thời điểm phân tích cú pháp dùng cho phần trợ giúp CLI, định tuyến và đăng ký CLI Plugin theo cơ chế tải lườiparentPath: đường dẫn lệnh cha tùy chọn cho các nhóm lệnh lồng nhau, chẳng hạn như["nodes"]
Đối với các tính năng Node đã ghép cặp, ưu tiên
api.registerNodeCliFeature(registrar, opts?). Đây là một trình bao nhỏ quanh
api.registerCli(..., { parentPath: ["nodes"] }) và xác định rõ các lệnh như
openclaw nodes canvas là tính năng Node do Plugin sở hữu.
Nếu muốn một lệnh Plugin tiếp tục được tải lười trong đường dẫn CLI gốc thông thường,
hãy cung cấp descriptors bao phủ mọi gốc lệnh cấp cao nhất do
thành phần đăng ký đó cung cấp.
api.registerCli( async ({ program }) => { const { registerMatrixCli } = await import("./src/cli.js"); registerMatrixCli({ program }); }, { descriptors: [ { name: "matrix", description: "Manage Matrix accounts, verification, devices, and profile state", hasSubcommands: true, }, ], },);Các lệnh lồng nhau nhận lệnh cha đã được phân giải dưới dạng program:
api.registerCli( async ({ program }) => { const { registerNodesCanvasCommands } = await import("./src/cli.js"); registerNodesCanvasCommands(program); }, { parentPath: ["nodes"], descriptors: [ { name: "canvas", description: "Capture or render canvas content from a paired node", hasSubcommands: true, }, ], },);Chỉ sử dụng riêng commands khi không cần đăng ký CLI gốc theo cơ chế tải lười.
Đường dẫn tương thích tải ngay đó vẫn được hỗ trợ, nhưng không cài đặt
các phần giữ chỗ dựa trên bộ mô tả để tải lười tại thời điểm phân tích cú pháp.
Đăng ký backend CLI
api.registerCliBackend(...) cho phép một plugin sở hữu cấu hình mặc định cho một
backend CLI AI cục bộ như claude-cli hoặc my-cli.
idcủa backend trở thành tiền tố nhà cung cấp trong các tham chiếu mô hình nhưmy-cli/gpt-5.configcủa backend sử dụng cùng cấu trúc vớiagents.defaults.cliBackends.<id>.- Cấu hình người dùng vẫn được ưu tiên. OpenClaw hợp nhất
agents.defaults.cliBackends.<id>lên trên cấu hình mặc định của plugin trước khi chạy CLI. - Sử dụng
normalizeConfigkhi backend cần chuyển đổi tương thích sau khi hợp nhất (ví dụ: chuẩn hóa các cấu trúc cờ cũ). - Sử dụng
resolveExecutionArgscho các phép chuyển đổi argv theo phạm vi yêu cầu thuộc về phương ngữ CLI, chẳng hạn như ánh xạ các mức suy luận của OpenClaw sang một cờ mức nỗ lực gốc. Hook nhậnctx.executionMode; sử dụng"side-question"để thêm các cờ cô lập gốc của backend cho các lệnh gọi/btwtạm thời. Nếu các cờ đó vô hiệu hóa công cụ gốc một cách đáng tin cậy đối với một CLI vốn luôn bật chúng, hãy khai báo cảsideQuestionToolMode: "disabled". - Sử dụng
prepareExecutioncho môi trường khởi chạy do backend sở hữu hoặc các cầu nối xác thực/cấu hình tạm thời.ctx.contextTokenBudgetcủa nó là giới hạn token hiệu dụng được chọn cho lượt chạy, để các backend có Compaction gốc có thể căn chỉnh ngưỡng riêng mà không cần các nhánh lõi dành riêng cho nhà cung cấp. - Các backend có thể vô hiệu hóa tất cả công cụ gốc cho một lượt chạy cụ thể có thể khai báo
nativeToolMode: "selectable". Các lệnh gọi bị hạn chế truyền một bộctx.toolAvailability.nativerỗng cùng với danh sách cho phép MCP được cô lập chính xác khỏi máy chủ;resolveExecutionArgsphải thực thi cả hai trên argv cuối cùng của lượt mới hoặc lượt tiếp tục. OpenClaw đóng an toàn nếu backend không thể thực hiện điều đó.
Để xem hướng dẫn xây dựng toàn diện, hãy tham khảo Plugin backend CLI.
Các vị trí độc quyền
| Phương thức | Nội dung đăng ký |
|---|---|
api.registerContextEngine(id, factory) |
Công cụ ngữ cảnh (mỗi thời điểm chỉ có một công cụ hoạt động). Các callback vòng đời nhận runtimeSettings khi máy chủ có thể cung cấp thông tin chẩn đoán mô hình/nhà cung cấp/chế độ; các công cụ nghiêm ngặt cũ hơn được thử lại mà không có khóa đó. |
api.registerMemoryCapability(capability) |
Khả năng bộ nhớ hợp nhất |
Các adapter nhúng bộ nhớ không còn được khuyến nghị
| Phương thức | Nội dung đăng ký |
|---|---|
api.registerMemoryEmbeddingProvider(adapter) |
Adapter nhúng bộ nhớ cho plugin đang hoạt động |
registerMemoryCapabilitylà API độc quyền của plugin bộ nhớ.registerMemoryCapabilitycũng có thể cung cấppublicArtifacts.listArtifacts(...)cho các bản xuất do máy chủ quản lý. Các plugin đồng hành liệt kê những thành phần đã khai báo đó vẫn sử dụnglistActiveMemoryPublicArtifacts(...)từ facadeopenclaw/plugin-sdk/memory-host-coređược giữ lại cho đến khi có một API công khai tập trung dành cho đối tượng sử dụng; chúng không được truy cập vào bố cục riêng tư của plugin khác.MemoryFlushPlan.modelcó thể ghim lượt xả vào một tham chiếuprovider/modelchính xác, chẳng hạn nhưollama/qwen3:8b, mà không kế thừa chuỗi dự phòng đang hoạt động.registerMemoryEmbeddingProviderkhông còn được khuyến nghị. Các nhà cung cấp nhúng mới nên sử dụngapi.registerEmbeddingProvider(...)vàcontracts.embeddingProviders.- Các nhà cung cấp dành riêng cho bộ nhớ hiện có tiếp tục hoạt động trong giai đoạn chuyển đổi, nhưng tính năng kiểm tra plugin báo cáo đây là khoản nợ tương thích đối với các plugin không đi kèm.
Sự kiện và vòng đời
| Phương thức | Chức năng |
|---|---|
api.on(hookName, handler, opts?) |
Hook vòng đời có kiểu |
api.onConversationBindingResolved(handler) |
Callback liên kết cuộc hội thoại |
Xem Hook của plugin để biết ví dụ, tên hook phổ biến và ngữ nghĩa của cơ chế bảo vệ.
Ngữ nghĩa quyết định của hook
before_install là hook vòng đời của môi trường chạy plugin, không phải bề mặt
chính sách cài đặt dành cho người vận hành. Sử dụng security.installPolicy khi quyết định cho phép/chặn phải
bao phủ các đường dẫn cài đặt hoặc cập nhật qua CLI và Gateway.
before_tool_call: trả về{ block: true }là kết thúc. Khi bất kỳ trình xử lý nào đặt giá trị này, các trình xử lý có độ ưu tiên thấp hơn sẽ bị bỏ qua.before_tool_call: trả về{ block: false }được xem là không có quyết định (giống như bỏ quablock), không phải là ghi đè.before_install: trả về{ block: true }là kết thúc. Khi bất kỳ trình xử lý nào đặt giá trị này, các trình xử lý có độ ưu tiên thấp hơn sẽ bị bỏ qua.before_install: trả về{ block: false }được xem là không có quyết định (giống như bỏ quablock), không phải là ghi đè.reply_dispatch: trả về{ handled: true, ... }là kết thúc. Khi bất kỳ trình xử lý nào nhận điều phối, các trình xử lý có độ ưu tiên thấp hơn và đường dẫn điều phối mô hình mặc định sẽ bị bỏ qua.message_sending: trả về{ cancel: true }là kết thúc. Khi bất kỳ trình xử lý nào đặt giá trị này, các trình xử lý có độ ưu tiên thấp hơn sẽ bị bỏ qua.message_sending: trả về{ cancel: false }được xem là không có quyết định (giống như bỏ quacancel), không phải là ghi đè.message_received: sử dụng trườngthreadIdcó kiểu khi cần định tuyến luồng/chủ đề đầu vào. Giữmetadatacho các phần bổ sung dành riêng cho kênh.message_sending: sử dụng các trường định tuyến có kiểureplyToId/threadIdtrước khi dự phòng vềmetadatadành riêng cho kênh.gateway_start: sử dụngctx.config,ctx.workspaceDirvàctx.getCron?.()cho trạng thái khởi động do Gateway sở hữu thay vì dựa vào các hookgateway:startupnội bộ. Cron có thể vẫn đang tải tại thời điểm này.cron_reconciled: xây dựng lại toàn bộ phép chiếu cron bên ngoài sau khi khởi động hoặc tải lại bộ lập lịch. Nó bao gồmreasonvà trạng tháienabledhiệu dụng, bao gồmenabled: false, trong khictx.getCron?.()trả về chính xác bộ lập lịch đã được đối soát. Truyềnctx.abortSignalvào công việc chiếu bền vững; nó hủy khi ảnh chụp bộ lập lịch đó bị thay thế hoặc Gateway đóng.cron_changed: theo dõi các thay đổi vòng đời cron do Gateway sở hữu. Các sự kiệnscheduledvàremovedlà gợi ý đối soát sau khi cam kết, không phải nhật ký thay đổi có thứ tự.event.nextRunAtMscủa một sự kiện đã lên lịch không tồn tại khi tác vụ không có lần đánh thức tiếp theo; một sự kiện đã bị xóa vẫn mang theo ảnh chụp tác vụ đã xóa.
Các bộ lập lịch đánh thức bên ngoài nên chống dội hoặc gộp các sự kiện cron_changed,
sau đó đọc lại toàn bộ chế độ xem bền vững từ bộ lập lịch được
cron_reconciled ghi nhận gần nhất. Không sử dụng bộ lập lịch từ ngữ cảnh cron_changed: một
gợi ý tách rời từ bộ lập lịch cũ hơn có thể chồng lấn với lần tải lại sau đó.
Sử dụng cron_reconciled làm trình kích hoạt ảnh chụp đầy đủ cho trạng thái bền vững được tải khi
Gateway khởi động hoặc khi thay thế bộ lập lịch. Nó không được phát lại khi chỉ
tải nóng lại plugin. Các trình xử lý theo dõi chạy song song và những lượt
điều phối không chờ kết quả có thể chồng lấn, vì vậy đối tượng sử dụng không được phụ thuộc vào thứ tự hoàn tất sự kiện.
Giữ OpenClaw làm nguồn chân lý cho việc kiểm tra đến hạn và thực thi.
Để xem adapter đơn luồng thực thi với khả năng thay thế bền vững, thử lại/chờ lùi và tắt sạch, hãy tham khảo Phép chiếu cron bên ngoài an toàn.
Các trường của đối tượng API
| Trường | Kiểu | Mô tả |
|---|---|---|
api.id |
string |
ID plugin |
api.name |
string |
Tên hiển thị |
api.version |
string? |
Phiên bản plugin (không bắt buộc) |
api.description |
string? |
Mô tả plugin (không bắt buộc) |
api.source |
string |
Đường dẫn nguồn plugin |
api.rootDir |
string? |
Thư mục gốc của plugin (không bắt buộc) |
api.config |
OpenClawConfig |
Ảnh chụp cấu hình hiện tại (ảnh chụp môi trường chạy trong bộ nhớ đang hoạt động khi có) |
api.pluginConfig |
Record<string, unknown> |
Cấu hình dành riêng cho plugin từ plugins.entries.<id>.config |
api.runtime |
PluginRuntime |
Trình trợ giúp môi trường chạy |
api.logger |
PluginLogger |
Trình ghi nhật ký theo phạm vi (debug, info, warn, error) |
api.registrationMode |
PluginRegistrationMode |
Chế độ tải hiện tại; "setup-runtime" là khoảng thời gian khởi động/thiết lập nhẹ trước khi tải mục nhập đầy đủ |
api.resolvePath(input) |
(string) => string |
Phân giải đường dẫn tương đối với thư mục gốc của plugin |
Quy ước mô-đun nội bộ
Trong plugin của bạn, hãy sử dụng các tệp barrel cục bộ cho các import nội bộ:
my-plugin/ api.ts # Các phần xuất công khai cho đối tượng sử dụng bên ngoài runtime-api.ts # Các phần xuất môi trường chạy chỉ dùng nội bộ index.ts # Điểm vào của plugin setup-entry.ts # Điểm vào nhẹ chỉ dành cho thiết lập (không bắt buộc)Các bề mặt công khai của plugin đi kèm được tải qua facade (api.ts, runtime-api.ts,
index.ts, setup-entry.ts và các tệp điểm vào công khai tương tự) ưu tiên
ảnh chụp nhanh cấu hình runtime đang hoạt động khi OpenClaw đã chạy. Nếu chưa có
ảnh chụp nhanh runtime, chúng sẽ dùng tệp cấu hình đã phân giải trên đĩa làm phương án dự phòng.
Các facade của plugin đi kèm đã đóng gói nên được tải thông qua các trình tải facade
plugin của OpenClaw; việc nhập trực tiếp từ dist/extensions/... sẽ bỏ qua các bước kiểm tra manifest
và sidecar runtime mà bản cài đặt đã đóng gói sử dụng cho mã thuộc quyền sở hữu của plugin.
Các plugin nhà cung cấp có thể cung cấp một barrel hợp đồng hẹp, cục bộ trong plugin khi một trình trợ giúp được chủ ý thiết kế riêng cho nhà cung cấp và chưa phù hợp với một đường dẫn con SDK chung. Các ví dụ đi kèm:
- Anthropic: bề mặt công khai
api.ts/contract-api.tscho các trình trợ giúp beta-header của Claude và luồngservice_tier. @openclaw/openai-provider:api.tsxuất các trình dựng nhà cung cấp, trình trợ giúp mô hình mặc định và trình dựng nhà cung cấp thời gian thực.@openclaw/openrouter-provider:api.tsxuất trình dựng nhà cung cấp cùng các trình trợ giúp onboarding/cấu hình.
Liên quan
Các tùy chọn definePluginEntry và defineChannelPluginEntry.
Tài liệu tham khảo đầy đủ về namespace api.runtime.
Đóng gói, manifest và schema cấu hình.
Tiện ích kiểm thử và quy tắc lint.
Di chuyển khỏi các bề mặt không còn được khuyến nghị.
Kiến trúc chuyên sâu và mô hình khả năng.