Chuyển đến nội dung chính

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.

Trang này là thiết kế tham chiếu API chi tiết cho OpenClaw SDK công khai được đề xuất. Nó được tách riêng có chủ ý với Plugin SDK. SDK ứng dụng công khai nên được xây dựng thành hai lớp:
  1. Một Gateway client được tạo ở cấp thấp.
  2. Một wrapper tiện dụng ở cấp cao với các đối tượng OpenClaw, Agent, Session, Run, Task, Artifact, ApprovalEnvironment.

Thiết kế namespace

Các namespace cấp thấp nên bám sát các tài nguyên Gateway:
oc.agents.list();
oc.agents.get("main");
oc.agents.create(...);
oc.agents.update(...);

oc.sessions.list();
oc.sessions.create(...);
oc.sessions.resolve(...);
oc.sessions.send(...);
oc.sessions.messages(...);
oc.sessions.fork(...);
oc.sessions.compact(...);
oc.sessions.abort(...);

oc.runs.create(...);
oc.runs.get(runId);
oc.runs.events(runId, { after });
oc.runs.wait(runId);
oc.runs.cancel(runId);

oc.tasks.list(); // future API: current SDK throws unsupported
oc.tasks.get(taskId); // future API: current SDK throws unsupported
oc.tasks.cancel(taskId); // future API: current SDK throws unsupported
oc.tasks.events(taskId, { after }); // future API

oc.models.list();
oc.models.status(); // Gateway models.authStatus

oc.tools.list();
oc.tools.invoke(...); // future API: current SDK throws unsupported

oc.artifacts.list({ runId }); // future API: current SDK throws unsupported
oc.artifacts.get(artifactId); // future API: current SDK throws unsupported
oc.artifacts.download(artifactId); // future API: current SDK throws unsupported

oc.approvals.list();
oc.approvals.respond(approvalId, ...);

oc.environments.list(); // future API: current SDK throws unsupported
oc.environments.create(...); // future API: current SDK throws unsupported
oc.environments.status(environmentId); // future API: current SDK throws unsupported
oc.environments.delete(environmentId); // future API: current SDK throws unsupported
Các wrapper cấp cao nên trả về những đối tượng giúp các luồng phổ biến trở nên dễ dùng:
const run = await agent.run(inputOrParams);
await run.cancel();
await run.wait();

for await (const event of run.events()) {
  // normalized event stream
}

const artifacts = await run.artifacts.list();
const session = await run.session();

Hợp đồng sự kiện

SDK công khai nên cung cấp các sự kiện có phiên bản, có thể phát lại và đã chuẩn hóa.
type OpenClawEvent = {
  version: 1;
  id: string;
  ts: number;
  type: OpenClawEventType;
  runId?: string;
  sessionId?: string;
  sessionKey?: string;
  taskId?: string;
  agentId?: string;
  data: unknown;
  raw?: unknown;
};
id là con trỏ phát lại. Người tiêu thụ nên có thể kết nối lại bằng events({ after: id }) và nhận các sự kiện đã bỏ lỡ khi thời gian lưu giữ cho phép. Các nhóm sự kiện chuẩn hóa được khuyến nghị:
Sự kiệnÝ nghĩa
run.createdRun đã được chấp nhận.
run.queuedRun đang chờ một session lane, runtime hoặc environment.
run.startedRuntime đã bắt đầu thực thi.
run.completedRun đã hoàn tất thành công.
run.failedRun kết thúc với lỗi.
run.cancelledRun đã bị hủy.
run.timed_outRun đã vượt quá thời gian chờ.
assistant.deltaDelta văn bản của trợ lý.
assistant.messageTin nhắn trợ lý hoàn chỉnh hoặc bản thay thế.
thinking.deltaDelta suy luận hoặc kế hoạch, khi chính sách cho phép hiển thị.
tool.call.startedLệnh gọi công cụ đã bắt đầu.
tool.call.deltaLệnh gọi công cụ đã phát trực tuyến tiến trình hoặc đầu ra một phần.
tool.call.completedLệnh gọi công cụ trả về thành công.
tool.call.failedLệnh gọi công cụ thất bại.
approval.requestedMột run hoặc công cụ cần phê duyệt.
approval.resolvedPhê duyệt đã được cấp, từ chối, hết hạn hoặc hủy.
question.requestedRuntime yêu cầu người dùng hoặc ứng dụng host cung cấp đầu vào.
question.answeredỨng dụng host đã cung cấp câu trả lời.
artifact.createdArtifact mới đã sẵn sàng.
artifact.updatedArtifact hiện có đã thay đổi.
session.createdSession đã được tạo.
session.updatedMetadata của session đã thay đổi.
session.compactedCompaction của session đã diễn ra.
task.updatedTrạng thái tác vụ nền đã thay đổi.
git.branchRuntime đã quan sát hoặc thay đổi trạng thái nhánh.
git.diffRuntime đã tạo hoặc thay đổi một diff.
git.prRuntime đã mở, cập nhật hoặc liên kết một pull request.
Payload gốc của runtime nên có sẵn thông qua raw, nhưng ứng dụng không nên phải phân tích raw cho UI thông thường.

Hợp đồng kết quả

Run.wait() nên trả về một envelope kết quả ổn định:
type RunResult = {
  runId: string;
  status: "accepted" | "completed" | "failed" | "cancelled" | "timed_out";
  sessionId?: string;
  sessionKey?: string;
  taskId?: string;
  startedAt?: string | number;
  endedAt?: string | number;
  output?: {
    text?: string;
    messages?: SDKMessage[];
  };
  usage?: {
    inputTokens?: number;
    outputTokens?: number;
    totalTokens?: number;
    costUsd?: number;
  };
  artifacts?: ArtifactSummary[];
  error?: SDKError;
};
Kết quả nên đơn giản và ổn định. Giá trị timestamp giữ nguyên hình dạng của Gateway, nên các run hiện tại được backed bằng vòng đời thường báo cáo số mili giây epoch, trong khi adapter vẫn có thể hiển thị chuỗi ISO. UI phong phú, trace công cụ và chi tiết gốc của runtime thuộc về sự kiện và artifact. accepted là một kết quả chờ không kết thúc: nó nghĩa là hạn chót chờ của Gateway đã hết trước khi run tạo ra kết thúc/lỗi vòng đời. Không được xem nó là timed_out; timed_out được dành riêng cho một run đã vượt quá thời gian chờ runtime của chính nó.

Phê duyệt và câu hỏi

Phê duyệt phải là thực thể hạng nhất vì các tác tử lập trình liên tục vượt qua các ranh giới an toàn.
run.onApproval(async (request) => {
  if (request.kind === "tool" && request.toolName === "exec") {
    return request.approveOnce({ reason: "CI command allowed by policy" });
  }

  return request.askUser();
});
Sự kiện phê duyệt nên mang:
  • id phê duyệt
  • id run và id session
  • loại yêu cầu
  • tóm tắt hành động được yêu cầu
  • tên công cụ hoặc hành động environment
  • mức rủi ro
  • các quyết định có sẵn
  • thời điểm hết hạn
  • liệu quyết định có thể được tái sử dụng hay không
Câu hỏi tách biệt với phê duyệt. Một câu hỏi yêu cầu người dùng hoặc ứng dụng host cung cấp thông tin. Một phê duyệt yêu cầu quyền để thực hiện một hành động.

Mô hình ToolSpace

Ứng dụng cần hiểu bề mặt công cụ mà không nhập nội bộ Plugin.
const tools = await run.toolSpace();

for (const tool of tools.list()) {
  console.log(tool.name, tool.source, tool.requiresApproval);
}
SDK nên cung cấp:
  • metadata công cụ đã chuẩn hóa
  • nguồn: OpenClaw, MCP, Plugin, kênh, runtime hoặc ứng dụng
  • tóm tắt schema
  • chính sách phê duyệt
  • khả năng tương thích runtime
  • liệu một công cụ là ẩn, chỉ đọc, có khả năng ghi hoặc có khả năng host
Lệnh gọi công cụ thông qua SDK nên rõ ràng và có phạm vi. Hầu hết ứng dụng nên chạy tác tử, không gọi trực tiếp các công cụ tùy ý.

Mô hình artifact

Artifact nên bao phủ nhiều hơn tệp.
type ArtifactSummary = {
  id: string;
  runId?: string;
  sessionId?: string;
  type:
    | "file"
    | "patch"
    | "diff"
    | "log"
    | "media"
    | "screenshot"
    | "trajectory"
    | "pull_request"
    | "workspace";
  title?: string;
  mimeType?: string;
  sizeBytes?: number;
  createdAt: string;
  expiresAt?: string;
};
Ví dụ phổ biến:
  • chỉnh sửa tệp và tệp được tạo
  • gói patch
  • diff VCS
  • ảnh chụp màn hình và đầu ra media
  • log và gói trace
  • liên kết pull request
  • quỹ đạo runtime
  • snapshot workspace environment được quản lý
Truy cập artifact nên hỗ trợ biên tập dữ liệu nhạy cảm, lưu giữ và URL tải xuống mà không giả định mọi artifact đều là một tệp cục bộ thông thường.

Mô hình bảo mật

SDK ứng dụng phải nêu rõ quyền hạn. Các scope token được khuyến nghị:
ScopeCho phép
agent.readLiệt kê và kiểm tra các tác tử.
agent.runBắt đầu run.
session.readĐọc metadata và tin nhắn của session.
session.writeTạo, gửi tới, fork, compact và hủy session.
task.readĐọc trạng thái tác vụ nền.
task.writeHủy hoặc sửa đổi chính sách thông báo tác vụ.
approval.respondPhê duyệt hoặc từ chối yêu cầu.
tools.invokeGọi trực tiếp các công cụ được phơi bày.
artifacts.readLiệt kê và tải xuống artifact.
environment.writeTạo hoặc hủy environment được quản lý.
adminThao tác quản trị.
Mặc định:
  • không chuyển tiếp bí mật theo mặc định
  • không truyền biến môi trường không hạn chế
  • tham chiếu bí mật thay vì giá trị bí mật
  • chính sách sandbox và mạng rõ ràng
  • lưu giữ environment từ xa rõ ràng
  • phê duyệt cho thực thi host trừ khi chính sách chứng minh điều ngược lại
  • sự kiện runtime thô được biên tập dữ liệu nhạy cảm trước khi rời Gateway, trừ khi caller có scope chẩn đoán mạnh hơn

Nhà cung cấp environment được quản lý

Các tác tử được quản lý nên được triển khai dưới dạng nhà cung cấp environment.
type EnvironmentProvider = {
  id: string;
  capabilities: {
    checkout?: boolean;
    sandbox?: boolean;
    networkPolicy?: boolean;
    secrets?: boolean;
    artifacts?: boolean;
    logs?: boolean;
    pullRequests?: boolean;
    longRunning?: boolean;
  };
};
Triển khai đầu tiên không cần là một SaaS được host. Nó có thể nhắm tới các node host hiện có, workspace tạm thời, runner kiểu CI hoặc environment kiểu Testbox. Hợp đồng quan trọng là:
  1. chuẩn bị workspace
  2. liên kết environment và bí mật an toàn
  3. bắt đầu run
  4. stream sự kiện
  5. thu thập artifact
  6. dọn dẹp hoặc lưu giữ theo chính sách
Khi điều này ổn định, một dịch vụ đám mây được host có thể triển khai cùng hợp đồng nhà cung cấp.

Cấu trúc package

Các package được khuyến nghị:
PackageMục đích
@openclaw/sdkSDK cấp cao công khai và Gateway client cấp thấp được tạo.
@openclaw/sdk-reactReact hook tùy chọn cho dashboard và người xây dựng ứng dụng.
@openclaw/sdk-testingTrình trợ giúp kiểm thử và máy chủ Gateway giả cho tích hợp ứng dụng.
Repo đã có openclaw/plugin-sdk/* cho Plugin. Giữ namespace đó tách biệt để tránh gây nhầm lẫn giữa tác giả Plugin và nhà phát triển ứng dụng.

Chiến lược client được tạo

Client cấp thấp nên được tạo từ các schema giao thức Gateway có phiên bản, rồi được bao bọc bằng các lớp tiện dụng viết tay. Phân lớp:
  1. Nguồn chuẩn cho lược đồ Gateway.
  2. Trình khách TypeScript cấp thấp được tạo sinh.
  3. Bộ xác thực khi chạy cho đầu vào bên ngoài và dữ liệu tải sự kiện.
  4. Các lớp bao bọc cấp cao OpenClaw, Agent, Session, Run, TaskArtifact.
  5. Ví dụ hướng dẫn thực hành và kiểm thử tích hợp.
Lợi ích:
  • độ lệch giao thức trở nên dễ thấy
  • kiểm thử có thể so sánh các phương thức được tạo sinh với các export của Gateway
  • SDK ứng dụng vẫn độc lập với phần nội bộ của SDK Plugin
  • người dùng cấp thấp vẫn có toàn quyền truy cập giao thức
  • người dùng cấp cao nhận được API sản phẩm nhỏ gọn

Tài liệu liên quan