Ana içeriğe atla

Plugin Çalışma Zamanı Yardımcıları

Kayıt sırasında her plugin’e enjekte edilen api.runtime nesnesi için başvuru. Host iç detaylarını doğrudan içe aktarmak yerine bu yardımcıları kullanın.
Adım adım bir kılavuz mu arıyorsunuz? Bu yardımcıların bağlam içinde nasıl kullanıldığını gösteren adım adım kılavuzlar için Channel Plugins veya Provider Plugins sayfalarına bakın.
register(api) {
  const runtime = api.runtime;
}

Çalışma zamanı ad alanları

api.runtime.agent

Aracı kimliği, dizinler ve oturum yönetimi.
// Aracının çalışma dizinini çözümleyin
const agentDir = api.runtime.agent.resolveAgentDir(cfg);

// Aracı çalışma alanını çözümleyin
const workspaceDir = api.runtime.agent.resolveAgentWorkspaceDir(cfg);

// Aracı kimliğini alın
const identity = api.runtime.agent.resolveAgentIdentity(cfg);

// Varsayılan düşünme düzeyini alın
const thinking = api.runtime.agent.resolveThinkingDefault(cfg, provider, model);

// Aracı zaman aşımını alın
const timeoutMs = api.runtime.agent.resolveAgentTimeoutMs(cfg);

// Çalışma alanının mevcut olduğundan emin olun
await api.runtime.agent.ensureAgentWorkspace(cfg);

// Gömülü bir Pi aracısı çalıştırın
const agentDir = api.runtime.agent.resolveAgentDir(cfg);
const result = await api.runtime.agent.runEmbeddedPiAgent({
  sessionId: "my-plugin:task-1",
  runId: crypto.randomUUID(),
  sessionFile: path.join(agentDir, "sessions", "my-plugin-task-1.jsonl"),
  workspaceDir: api.runtime.agent.resolveAgentWorkspaceDir(cfg),
  prompt: "Son değişiklikleri özetle",
  timeoutMs: api.runtime.agent.resolveAgentTimeoutMs(cfg),
});
Oturum deposu yardımcıları, api.runtime.agent.session altındadır:
const storePath = api.runtime.agent.session.resolveStorePath(cfg);
const store = api.runtime.agent.session.loadSessionStore(cfg);
await api.runtime.agent.session.saveSessionStore(cfg, store);
const filePath = api.runtime.agent.session.resolveSessionFilePath(cfg, sessionId);

api.runtime.agent.defaults

Varsayılan model ve provider sabitleri:
const model = api.runtime.agent.defaults.model; // ör. "anthropic/claude-sonnet-4-6"
const provider = api.runtime.agent.defaults.provider; // ör. "anthropic"

api.runtime.subagent

Arka plandaki alt aracı çalıştırmalarını başlatın ve yönetin.
// Bir alt aracı çalıştırması başlatın
const { runId } = await api.runtime.subagent.run({
  sessionKey: "agent:main:subagent:search-helper",
  message: "Bu sorguyu odaklı takip aramalarına genişlet.",
  provider: "openai", // isteğe bağlı geçersiz kılma
  model: "gpt-4.1-mini", // isteğe bağlı geçersiz kılma
  deliver: false,
});

// Tamamlanmasını bekleyin
const result = await api.runtime.subagent.waitForRun({ runId, timeoutMs: 30000 });

// Oturum mesajlarını okuyun
const { messages } = await api.runtime.subagent.getSessionMessages({
  sessionKey: "agent:main:subagent:search-helper",
  limit: 10,
});

// Bir oturumu silin
await api.runtime.subagent.deleteSession({
  sessionKey: "agent:main:subagent:search-helper",
});
Model geçersiz kılmaları (provider/model), yapılandırmada plugins.entries.<id>.subagent.allowModelOverride: true üzerinden operatör onayı gerektirir. Güvenilmeyen plugin’ler yine de alt aracılar çalıştırabilir, ancak geçersiz kılma istekleri reddedilir.

api.runtime.taskFlow

Bir Task Flow çalışma zamanını mevcut bir OpenClaw oturum anahtarına veya güvenilir araç bağlamına bağlayın, ardından her çağrıda bir sahip geçmeden Task Flow’lar oluşturun ve yönetin.
const taskFlow = api.runtime.taskFlow.fromToolContext(ctx);

const created = taskFlow.createManaged({
  controllerId: "my-plugin/review-batch",
  goal: "Yeni pull request'leri incele",
});

const child = taskFlow.runTask({
  flowId: created.flowId,
  runtime: "acp",
  childSessionKey: "agent:main:subagent:reviewer",
  task: "PR #123'ü incele",
  status: "running",
  startedAt: Date.now(),
});

const waiting = taskFlow.setWaiting({
  flowId: created.flowId,
  expectedRevision: created.revision,
  currentStep: "await-human-reply",
  waitJson: { kind: "reply", channel: "telegram" },
});
Kendi bağlama katmanınızdan gelen güvenilir bir OpenClaw oturum anahtarınız zaten varsa bindSession({ sessionKey, requesterOrigin }) kullanın. Ham kullanıcı girdisinden bağlama yapmayın.

api.runtime.tts

Metinden konuşmaya sentezi.
// Standart TTS
const clip = await api.runtime.tts.textToSpeech({
  text: "OpenClaw'dan merhaba",
  cfg: api.config,
});

// Telefoni için optimize edilmiş TTS
const telephonyClip = await api.runtime.tts.textToSpeechTelephony({
  text: "OpenClaw'dan merhaba",
  cfg: api.config,
});

// Kullanılabilir sesleri listeleyin
const voices = await api.runtime.tts.listVoices({
  provider: "elevenlabs",
  cfg: api.config,
});
Çekirdek messages.tts yapılandırmasını ve provider seçimini kullanır. PCM ses tamponu + örnekleme hızı döndürür.

api.runtime.mediaUnderstanding

Görüntü, ses ve video analizi.
// Bir görüntüyü açıklayın
const image = await api.runtime.mediaUnderstanding.describeImageFile({
  filePath: "/tmp/inbound-photo.jpg",
  cfg: api.config,
  agentDir: "/tmp/agent",
});

// Sesi yazıya dökün
const { text } = await api.runtime.mediaUnderstanding.transcribeAudioFile({
  filePath: "/tmp/inbound-audio.ogg",
  cfg: api.config,
  mime: "audio/ogg", // MIME çıkarılamadığında isteğe bağlı
});

// Bir videoyu açıklayın
const video = await api.runtime.mediaUnderstanding.describeVideoFile({
  filePath: "/tmp/inbound-video.mp4",
  cfg: api.config,
});

// Genel dosya analizi
const result = await api.runtime.mediaUnderstanding.runFile({
  filePath: "/tmp/inbound-file.pdf",
  cfg: api.config,
});
Çıktı üretilmediğinde { text: undefined } döndürür (ör. girdi atlandığında).
api.runtime.stt.transcribeAudioFile(...), uyumluluk diğer adı olarak api.runtime.mediaUnderstanding.transcribeAudioFile(...) için kullanılmaya devam eder.

api.runtime.imageGeneration

Görüntü oluşturma.
const result = await api.runtime.imageGeneration.generate({
  prompt: "Gün batımı çizen bir robot",
  cfg: api.config,
});

const providers = api.runtime.imageGeneration.listProviders({ cfg: api.config });

api.runtime.webSearch

Web arama.
const providers = api.runtime.webSearch.listProviders({ config: api.config });

const result = await api.runtime.webSearch.search({
  config: api.config,
  args: { query: "OpenClaw plugin SDK", count: 5 },
});

api.runtime.media

Düşük seviyeli medya yardımcıları.
const webMedia = await api.runtime.media.loadWebMedia(url);
const mime = await api.runtime.media.detectMime(buffer);
const kind = api.runtime.media.mediaKindFromMime("image/jpeg"); // "image"
const isVoice = api.runtime.media.isVoiceCompatibleAudio(filePath);
const metadata = await api.runtime.media.getImageMetadata(filePath);
const resized = await api.runtime.media.resizeToJpeg(buffer, { maxWidth: 800 });

api.runtime.config

Yapılandırma yükleme ve yazma.
const cfg = await api.runtime.config.loadConfig();
await api.runtime.config.writeConfigFile(cfg);

api.runtime.system

Sistem düzeyinde yardımcılar.
await api.runtime.system.enqueueSystemEvent(event);
api.runtime.system.requestHeartbeatNow();
const output = await api.runtime.system.runCommandWithTimeout(cmd, args, opts);
const hint = api.runtime.system.formatNativeDependencyHint(pkg);

api.runtime.events

Olay abonelikleri.
api.runtime.events.onAgentEvent((event) => {
  /* ... */
});
api.runtime.events.onSessionTranscriptUpdate((update) => {
  /* ... */
});

api.runtime.logging

Günlükleme.
const verbose = api.runtime.logging.shouldLogVerbose();
const childLogger = api.runtime.logging.getChildLogger({ plugin: "my-plugin" }, { level: "debug" });

api.runtime.modelAuth

Model ve provider kimlik doğrulama çözümlemesi.
const auth = await api.runtime.modelAuth.getApiKeyForModel({ model, cfg });
const providerAuth = await api.runtime.modelAuth.resolveApiKeyForProvider({
  provider: "openai",
  cfg,
});

api.runtime.state

Durum dizini çözümlemesi.
const stateDir = api.runtime.state.resolveStateDir();

api.runtime.tools

Bellek aracı fabrikaları ve CLI.
const getTool = api.runtime.tools.createMemoryGetTool(/* ... */);
const searchTool = api.runtime.tools.createMemorySearchTool(/* ... */);
api.runtime.tools.registerMemoryCli(/* ... */);

api.runtime.channel

Kanala özgü çalışma zamanı yardımcıları (bir channel plugin’i yüklendiğinde kullanılabilir).

Çalışma zamanı başvurularını depolama

register geri çağrısı dışında kullanmak üzere çalışma zamanı başvurusunu saklamak için createPluginRuntimeStore kullanın:
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
import type { PluginRuntime } from "openclaw/plugin-sdk/runtime-store";

const store = createPluginRuntimeStore<PluginRuntime>("my-plugin runtime not initialized");

// Giriş noktanızda
export default defineChannelPluginEntry({
  id: "my-plugin",
  name: "My Plugin",
  description: "Example",
  plugin: myPlugin,
  setRuntime: store.setRuntime,
});

// Diğer dosyalarda
export function getRuntime() {
  return store.getRuntime(); // başlatılmadıysa fırlatır
}

export function tryGetRuntime() {
  return store.tryGetRuntime(); // başlatılmadıysa null döndürür
}

Diğer üst düzey api alanları

api.runtime ötesinde, API nesnesi ayrıca şunları sağlar:
AlanTürAçıklama
api.idstringPlugin kimliği
api.namestringPlugin görünen adı
api.configOpenClawConfigGeçerli yapılandırma anlık görüntüsü (varsa etkin bellek içi çalışma zamanı anlık görüntüsü)
api.pluginConfigRecord<string, unknown>plugins.entries.<id>.config içinden plugin’e özgü yapılandırma
api.loggerPluginLoggerKapsamlı günlükleyici (debug, info, warn, error)
api.registrationModePluginRegistrationModeGeçerli yükleme modu; "setup-runtime" hafif tam-giriş öncesi başlangıç/kurulum penceresidir
api.resolvePath(input)(string) => stringPlugin köküne göre göreli bir yolu çözümleyin

İlgili