Auxiliares de tiempo de ejecución de complementos
Auxiliares de tiempo de ejecución de complementos
Sección titulada «Auxiliares de tiempo de ejecución de complementos»Referencia del objeto api.runtime inyectado en cada complemento durante
el registro. Utilice estos auxiliares en lugar de importar directamente los internos del host.
register(api) { const runtime = api.runtime;}Espacios de nombres de tiempo de ejecución
Sección titulada «Espacios de nombres de tiempo de ejecución»api.runtime.agent
Sección titulada «api.runtime.agent»Identidad del agente, directorios y gestión de sesiones.
// Resolve the agent's working directoryconst agentDir = api.runtime.agent.resolveAgentDir(cfg);
// Resolve agent workspaceconst workspaceDir = api.runtime.agent.resolveAgentWorkspaceDir(cfg);
// Get agent identityconst identity = api.runtime.agent.resolveAgentIdentity(cfg);
// Get default thinking levelconst thinking = api.runtime.agent.resolveThinkingDefault(cfg, provider, model);
// Get agent timeoutconst timeoutMs = api.runtime.agent.resolveAgentTimeoutMs(cfg);
// Ensure workspace existsawait api.runtime.agent.ensureAgentWorkspace(cfg);
// Run an embedded Pi agentconst 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: "Summarize the latest changes", timeoutMs: api.runtime.agent.resolveAgentTimeoutMs(cfg),});Los auxiliares del almacén de sesiones están en api.runtime.agent.session:
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
Sección titulada «api.runtime.agent.defaults»Constantes predeterminadas de modelo y proveedor:
const model = api.runtime.agent.defaults.model; // e.g. "anthropic/claude-sonnet-4-6"const provider = api.runtime.agent.defaults.provider; // e.g. "anthropic"api.runtime.subagent
Sección titulada «api.runtime.subagent»Inicie y gestione ejecuciones de subagentes en segundo plano.
// Start a subagent runconst { runId } = await api.runtime.subagent.run({ sessionKey: "agent:main:subagent:search-helper", message: "Expand this query into focused follow-up searches.", provider: "openai", // optional override model: "gpt-4.1-mini", // optional override deliver: false,});
// Wait for completionconst result = await api.runtime.subagent.waitForRun({ runId, timeoutMs: 30000 });
// Read session messagesconst { messages } = await api.runtime.subagent.getSessionMessages({ sessionKey: "agent:main:subagent:search-helper", limit: 10,});
// Delete a sessionawait api.runtime.subagent.deleteSession({ sessionKey: "agent:main:subagent:search-helper",});api.runtime.tts
Sección titulada «api.runtime.tts»Síntesis de texto a voz.
// Standard TTSconst clip = await api.runtime.tts.textToSpeech({ text: "Hello from OpenClaw", cfg: api.config,});
// Telephony-optimized TTSconst telephonyClip = await api.runtime.tts.textToSpeechTelephony({ text: "Hello from OpenClaw", cfg: api.config,});
// List available voicesconst voices = await api.runtime.tts.listVoices({ provider: "elevenlabs", cfg: api.config,});Utiliza la configuración messages.tts central y la selección de proveedores. Devuelve el búfer de audio
PCM + la frecuencia de muestreo.
api.runtime.mediaUnderstanding
Sección titulada «api.runtime.mediaUnderstanding»Análisis de imágenes, audio y video.
// Describe an imageconst image = await api.runtime.mediaUnderstanding.describeImageFile({ filePath: "/tmp/inbound-photo.jpg", cfg: api.config, agentDir: "/tmp/agent",});
// Transcribe audioconst { text } = await api.runtime.mediaUnderstanding.transcribeAudioFile({ filePath: "/tmp/inbound-audio.ogg", cfg: api.config, mime: "audio/ogg", // optional, for when MIME cannot be inferred});
// Describe a videoconst video = await api.runtime.mediaUnderstanding.describeVideoFile({ filePath: "/tmp/inbound-video.mp4", cfg: api.config,});
// Generic file analysisconst result = await api.runtime.mediaUnderstanding.runFile({ filePath: "/tmp/inbound-file.pdf", cfg: api.config,});Devuelve { text: undefined } cuando no se produce ninguna salida (por ejemplo, entrada omitida).
api.runtime.imageGeneration
Sección titulada «api.runtime.imageGeneration»Generación de imágenes.
const result = await api.runtime.imageGeneration.generate({ prompt: "A robot painting a sunset", cfg: api.config,});
const providers = api.runtime.imageGeneration.listProviders({ cfg: api.config });api.runtime.webSearch
Sección titulada «api.runtime.webSearch»Búsqueda web.
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
Sección titulada «api.runtime.media»Utilidades multimedia de bajo nivel.
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
Sección titulada «api.runtime.config»Carga y escritura de configuración.
const cfg = await api.runtime.config.loadConfig();await api.runtime.config.writeConfigFile(cfg);api.runtime.system
Sección titulada «api.runtime.system»Utilidades a nivel de sistema.
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
Sección titulada «api.runtime.events»Suscripciones a eventos.
api.runtime.events.onAgentEvent((event) => { /* ... */});api.runtime.events.onSessionTranscriptUpdate((update) => { /* ... */});api.runtime.logging
Sección titulada «api.runtime.logging»Registro.
const verbose = api.runtime.logging.shouldLogVerbose();const childLogger = api.runtime.logging.getChildLogger({ plugin: "my-plugin" }, { level: "debug" });api.runtime.modelAuth
Sección titulada «api.runtime.modelAuth»Resolución de autenticación de modelo y proveedor.
const auth = await api.runtime.modelAuth.getApiKeyForModel({ model, cfg });const providerAuth = await api.runtime.modelAuth.resolveApiKeyForProvider({ provider: "openai", cfg,});api.runtime.state
Sección titulada «api.runtime.state»Resolución del directorio de estado.
const stateDir = api.runtime.state.resolveStateDir();api.runtime.tools
Sección titulada «api.runtime.tools»Fábricas de herramientas de memoria y CLI.
const getTool = api.runtime.tools.createMemoryGetTool(/* ... */);const searchTool = api.runtime.tools.createMemorySearchTool(/* ... */);api.runtime.tools.registerMemoryCli(/* ... */);api.runtime.channel
Sección titulada «api.runtime.channel»Auxiliares de tiempo de ejecución específicos del canal (disponibles cuando se carga un complemento de canal).
Almacenar referencias de tiempo de ejecución
Sección titulada «Almacenar referencias de tiempo de ejecución»Use createPluginRuntimeStore para almacenar la referencia de tiempo de ejecución para usarla fuera
del callback register:
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");
// In your entry pointexport default defineChannelPluginEntry({ id: "my-plugin", name: "My Plugin", description: "Example", plugin: myPlugin, setRuntime: store.setRuntime,});
// In other filesexport function getRuntime() { return store.getRuntime(); // throws if not initialized}
export function tryGetRuntime() { return store.tryGetRuntime(); // returns null if not initialized}Otros campos de nivel superior api
Sección titulada «Otros campos de nivel superior api»Más allá de api.runtime, el objeto API también proporciona:
| Campo | Tipo | Descripción |
|---|---|---|
api.id | string | ID del complemento |
api.name | string | Nombre para mostrar del complemento |
api.config | OpenClawConfig | Instantánea de la configuración actual |
api.pluginConfig | Record<string, unknown> | Configuración específica del complemento desde plugins.entries.<id>.config |
api.logger | PluginLogger | Registrador con ámbito (debug, info, warn, error) |
api.registrationMode | PluginRegistrationMode | "full", "setup-only", "setup-runtime" o "cli-metadata" |
api.resolvePath(input) | (string) => string | Resolver una ruta relativa a la raíz del complemento |
Relacionado
Sección titulada «Relacionado»- Resumen del SDK — referencia de subrutas
- Puntos de entrada del SDK — opciones de
definePluginEntry - Aspectos internos de los complementos — modelo de capacidades y registro