Ana içeriğe atla

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.

Bu sayfa, herkese açık OpenClaw App SDK için ayrıntılı API referansı tasarımıdır. Bilerek Plugin SDK’den ayrı tutulmuştur.
@openclaw/sdk, Gateway ile konuşmak için kullanılan harici app/istemci paketidir. openclaw/plugin-sdk/*, süreç içi Plugin yazarlığı sözleşmesidir. Yalnızca ajanları çalıştırması gereken uygulamalardan Plugin SDK alt yollarını içe aktarmayın.
Herkese açık app SDK iki katmanda oluşturulmalıdır:
  1. Düşük seviyeli, oluşturulmuş bir Gateway istemcisi.
  2. OpenClaw, Agent, Session, Run, Task, Artifact, Approval ve Environment nesneleriyle yüksek seviyeli ergonomik bir sarmalayıcı.

Ad alanı tasarımı

Düşük seviyeli ad alanları Gateway kaynaklarını yakından izlemelidir:
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
Yüksek seviyeli sarmalayıcılar, yaygın akışları kullanışlı hale getiren nesneler döndürmelidir:
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();

Olay sözleşmesi

Herkese açık SDK, sürümlü, yeniden oynatılabilir, normalleştirilmiş olaylar sunmalıdır.
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, yeniden oynatma imlecidir. Tüketiciler events({ after: id }) ile yeniden bağlanabilmeli ve saklama izin verdiğinde kaçırılan olayları alabilmelidir. Önerilen normalleştirilmiş olay aileleri:
OlayAnlam
run.createdÇalıştırma kabul edildi.
run.queuedÇalıştırma bir oturum hattı, çalışma zamanı veya ortam bekliyor.
run.startedÇalışma zamanı yürütmeyi başlattı.
run.completedÇalıştırma başarıyla tamamlandı.
run.failedÇalıştırma bir hatayla sona erdi.
run.cancelledÇalıştırma iptal edildi.
run.timed_outÇalıştırma zaman aşımını aştı.
assistant.deltaAsistan metin deltası.
assistant.messageTam asistan mesajı veya değiştirme.
thinking.deltaİlke görünürlüğe izin verdiğinde akıl yürütme veya plan deltası.
tool.call.startedAraç çağrısı başladı.
tool.call.deltaAraç çağrısı ilerleme veya kısmi çıktıyı akışla iletti.
tool.call.completedAraç çağrısı başarıyla döndü.
tool.call.failedAraç çağrısı başarısız oldu.
approval.requestedBir çalıştırma veya aracın onaya ihtiyacı var.
approval.resolvedOnay verildi, reddedildi, süresi doldu veya iptal edildi.
question.requestedÇalışma zamanı kullanıcıdan veya ana uygulamadan girdi ister.
question.answeredAna uygulama bir yanıt sağladı.
artifact.createdYeni artifact kullanılabilir.
artifact.updatedMevcut artifact değişti.
session.createdOturum oluşturuldu.
session.updatedOturum meta verileri değişti.
session.compactedOturum Compaction gerçekleşti.
task.updatedArka plan görev durumu değişti.
git.branchÇalışma zamanı dal durumunu gözlemledi veya değiştirdi.
git.diffÇalışma zamanı bir diff üretti veya değiştirdi.
git.prÇalışma zamanı bir pull request açtı, güncelledi veya bağladı.
Çalışma zamanına özgü payload’lar raw üzerinden kullanılabilir olmalıdır, ancak uygulamalar normal UI için raw ayrıştırmak zorunda kalmamalıdır.

Sonuç sözleşmesi

Run.wait() kararlı bir sonuç zarfı döndürmelidir:
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;
};
Sonuç sade ve kararlı olmalıdır. Zaman damgası değerleri Gateway şeklini korur; bu nedenle mevcut yaşam döngüsü destekli çalıştırmalar genellikle epoch milisaniye sayıları bildirirken adaptörler hâlâ ISO dizgileri yüzeye çıkarabilir. Zengin UI, araç izleri ve çalışma zamanına özgü ayrıntılar olaylara ve artifact’lere aittir. accepted, terminal olmayan bir bekleme sonucudur: Gateway bekleme son tarihinin çalıştırma bir yaşam döngüsü bitişi/hatası üretmeden önce dolduğu anlamına gelir. timed_out olarak ele alınmamalıdır; timed_out, kendi çalışma zamanı zaman aşımını aşan bir çalıştırma için ayrılmıştır.

Onaylar ve sorular

Kodlama ajanları sürekli güvenlik sınırlarını geçtiği için onaylar birinci sınıf olmalıdır.
run.onApproval(async (request) => {
  if (request.kind === "tool" && request.toolName === "exec") {
    return request.approveOnce({ reason: "CI command allowed by policy" });
  }

  return request.askUser();
});
Onay olayları şunları taşımalıdır:
  • onay id’si
  • çalıştırma id’si ve oturum id’si
  • istek türü
  • istenen eylem özeti
  • araç adı veya ortam eylemi
  • risk seviyesi
  • kullanılabilir kararlar
  • süre sonu
  • kararın yeniden kullanılıp kullanılamayacağı
Sorular onaylardan ayrıdır. Bir soru kullanıcıdan veya ana uygulamadan bilgi ister. Bir onay, bir eylemi gerçekleştirmek için izin ister.

ToolSpace modeli

Uygulamaların, Plugin iç işleyişlerini içe aktarmadan araç yüzeyini anlaması gerekir.
const tools = await run.toolSpace();

for (const tool of tools.list()) {
  console.log(tool.name, tool.source, tool.requiresApproval);
}
SDK şunları sunmalıdır:
  • normalleştirilmiş araç meta verileri
  • kaynak: OpenClaw, MCP, Plugin, kanal, çalışma zamanı veya uygulama
  • şema özeti
  • onay ilkesi
  • çalışma zamanı uyumluluğu
  • bir aracın gizli, salt okunur, yazma yetenekli veya ana makine yetenekli olup olmadığı
SDK üzerinden araç çağırma açık ve kapsamlı olmalıdır. Çoğu uygulama ajanları çalıştırmalı, rastgele araçları doğrudan çağırmamalıdır.

Artifact modeli

Artifact’ler dosyalardan fazlasını kapsamalıdır.
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;
};
Yaygın örnekler:
  • dosya düzenlemeleri ve oluşturulan dosyalar
  • patch paketleri
  • VCS diff’leri
  • ekran görüntüleri ve medya çıktıları
  • günlükler ve iz paketleri
  • pull request bağlantıları
  • çalışma zamanı yörüngeleri
  • yönetilen ortam çalışma alanı anlık görüntüleri
Artifact erişimi, her artifact’in normal bir yerel dosya olduğunu varsaymadan redaksiyon, saklama ve indirme URL’lerini desteklemelidir.

Güvenlik modeli

App SDK yetki konusunda açık olmalıdır. Önerilen token kapsamları:
Kapsamİzin verdiği şeyler
agent.readAjanları listeleme ve inceleme.
agent.runÇalıştırmaları başlatma.
session.readOturum meta verilerini ve mesajları okuma.
session.writeOturum oluşturma, oturuma gönderme, fork etme, compact etme ve iptal etme.
task.readArka plan görev durumunu okuma.
task.writeGörev bildirim ilkesini iptal etme veya değiştirme.
approval.respondİstekleri onaylama veya reddetme.
tools.invokeAçığa çıkarılan araçları doğrudan çağırma.
artifacts.readArtifact’leri listeleme ve indirme.
environment.writeYönetilen ortamlar oluşturma veya yok etme.
adminYönetim işlemleri.
Varsayılanlar:
  • varsayılan olarak secret iletimi yok
  • kısıtlamasız ortam değişkeni aktarımı yok
  • secret değerleri yerine secret referansları
  • açık sandbox ve ağ ilkesi
  • açık uzak ortam saklama
  • ilke aksini kanıtlamadıkça ana makine yürütmesi için onaylar
  • çağıranın daha güçlü bir tanılama kapsamı olmadığı sürece ham çalışma zamanı olayları Gateway dışına çıkmadan önce redakte edilir

Yönetilen ortam sağlayıcısı

Yönetilen ajanlar ortam sağlayıcıları olarak uygulanmalıdır.
type EnvironmentProvider = {
  id: string;
  capabilities: {
    checkout?: boolean;
    sandbox?: boolean;
    networkPolicy?: boolean;
    secrets?: boolean;
    artifacts?: boolean;
    logs?: boolean;
    pullRequests?: boolean;
    longRunning?: boolean;
  };
};
İlk uygulamanın barındırılan bir SaaS olması gerekmez. Mevcut node ana makinelerini, geçici çalışma alanlarını, CI tarzı çalıştırıcıları veya Testbox tarzı ortamları hedefleyebilir. Önemli sözleşme şudur:
  1. çalışma alanını hazırla
  2. güvenli ortamı ve secret’ları bağla
  3. çalıştırmayı başlat
  4. olayları akışla ilet
  5. artifact’leri topla
  6. ilkeye göre temizle veya sakla
Bu kararlı hale geldiğinde, barındırılan bir bulut hizmeti aynı sağlayıcı sözleşmesini uygulayabilir.

Paket yapısı

Önerilen paketler:
PaketAmaç
@openclaw/sdkHerkese açık yüksek seviyeli SDK ve oluşturulmuş düşük seviyeli Gateway istemcisi.
@openclaw/sdk-reactPanolar ve uygulama oluşturucular için isteğe bağlı React kancaları.
@openclaw/sdk-testingUygulama entegrasyonları için test yardımcıları ve sahte Gateway sunucusu.
Repo, Plugin’ler için zaten openclaw/plugin-sdk/* içeriyor. Plugin yazarlarını uygulama geliştiricileriyle karıştırmamak için bu ad alanını ayrı tutun.

Oluşturulmuş istemci stratejisi

Düşük seviyeli istemci, sürümlenmiş Gateway protokolü şemalarından üretilmeli, ardından el yazımı ergonomik sınıflarla sarmalanmalıdır. Katmanlama:
  1. Gateway şeması tek doğruluk kaynağıdır.
  2. Üretilmiş düşük seviyeli TypeScript istemcisi.
  3. Dış girdiler ve olay yükleri için çalışma zamanı doğrulayıcıları.
  4. Yüksek seviyeli OpenClaw, Agent, Session, Run, Task ve Artifact sarmalayıcıları.
  5. Cookbook örnekleri ve entegrasyon testleri.
Avantajlar:
  • protokol sapması görünür olur
  • testler üretilmiş yöntemleri Gateway dışa aktarımlarıyla karşılaştırabilir
  • Uygulama SDK’sı, Plugin SDK iç yapılarından bağımsız kalır
  • düşük seviyeli tüketiciler hâlâ tam protokol erişimine sahip olur
  • yüksek seviyeli tüketiciler küçük ürün API’sini alır

İlgili dokümanlar