Saltar al contenido principal
OpenClaw reemplazó una amplia capa de compatibilidad retroactiva por una arquitectura de plugins moderna creada a partir de importaciones pequeñas y enfocadas. Si tu plugin es anterior a ese cambio, esta guía lo lleva a los contratos actuales.

Qué cambió

Dos superficies de importación completamente abiertas solían permitir que los plugins alcanzaran casi cualquier cosa desde un único punto de entrada:
  • openclaw/plugin-sdk/compat - reexportaba decenas de helpers para mantener funcionando los plugins antiguos basados en hooks mientras se construía la nueva arquitectura.
  • openclaw/plugin-sdk/infra-runtime - un barrel amplio que mezclaba eventos del sistema, estado de heartbeat, colas de entrega, helpers de fetch/proxy, helpers de archivos, tipos de aprobación y utilidades no relacionadas.
  • openclaw/plugin-sdk/config-runtime - un barrel de configuración amplio que todavía llevaba helpers obsoletos de carga/escritura directa durante la ventana de migración.
  • openclaw/extension-api - un puente que daba a los plugins acceso directo a helpers del lado del host, como el ejecutor de agente integrado.
  • api.registerEmbeddedExtensionFactory(...) - un hook eliminado exclusivo del ejecutor integrado que observaba eventos del ejecutor integrado como tool_result. Usa en su lugar middleware de resultados de herramientas de agente (consulta Migrar extensiones integradas de resultados de herramientas a middleware).
Estas superficies están obsoletas: todavía funcionan, pero los plugins nuevos no deben usarlas, y los plugins existentes deberían migrar antes de que la próxima versión mayor las elimine. registerEmbeddedExtensionFactory ya se eliminó; los registros heredados ya no se cargan.
La capa de compatibilidad retroactiva se eliminará en una futura versión mayor. Los plugins que sigan importando desde estas superficies se romperán cuando eso ocurra.
OpenClaw no elimina ni reinterpreta el comportamiento documentado de los plugins en el mismo cambio que introduce un reemplazo. Los cambios que rompen contratos pasan primero por un adaptador de compatibilidad, diagnósticos, documentación y una ventana de obsolescencia. Eso se aplica a importaciones del SDK, campos del manifiesto, APIs de configuración, hooks y comportamiento de registro en runtime.

Por qué

  • Inicio lento - importar un helper cargaba decenas de módulos no relacionados.
  • Dependencias circulares - las reexportaciones amplias facilitaban la creación de ciclos de importación.
  • Superficie de API poco clara - no había forma de distinguir las exportaciones estables de las internas.
Cada openclaw/plugin-sdk/<subpath> ahora es un módulo pequeño y autónomo con un contrato documentado. También desaparecieron las seams heredadas de conveniencia de proveedores para canales agrupados: los atajos de helpers con marca de canal eran conveniencias privadas del monorepo, no contratos estables de plugins. Usa en su lugar subrutas genéricas y estrechas del SDK. Dentro del workspace de plugins agrupados, mantén los helpers propiedad del proveedor en el propio api.ts o runtime-api.ts de ese plugin:
  • Anthropic mantiene los helpers de stream específicos de Claude en su propia seam api.ts / contract-api.ts.
  • OpenAI mantiene constructores de proveedor, helpers de modelo predeterminado y constructores de proveedor en tiempo real en su propio api.ts.
  • OpenRouter mantiene el constructor de proveedor y los helpers de onboarding/configuración en su propio api.ts.

Política de compatibilidad

El trabajo de compatibilidad para plugins externos sigue este orden:
  1. Agregar el contrato nuevo.
  2. Mantener el comportamiento antiguo conectado mediante un adaptador de compatibilidad.
  3. Emitir un diagnóstico o advertencia que nombre la ruta antigua y su reemplazo.
  4. Cubrir ambas rutas en pruebas.
  5. Documentar la obsolescencia y la ruta de migración.
  6. Eliminar solo después de la ventana de migración anunciada, normalmente en una versión mayor.
Si un campo del manifiesto todavía se acepta, sigue usándolo hasta que la documentación y los diagnósticos indiquen lo contrario. El código nuevo debería preferir el reemplazo documentado; los plugins existentes no deberían romperse durante versiones menores ordinarias. Audita la cola de migración actual con pnpm plugins:boundary-report:
MarcaEfecto
--summary (o pnpm plugins:boundary-report:summary)Recuentos compactos en lugar del detalle completo.
--jsonInforme legible por máquina.
--owner <id>Filtra a un plugin o propietario de compatibilidad.
--fail-on-cross-ownerSale con código distinto de cero en importaciones reservadas del SDK entre propietarios.
--fail-on-eligible-compatSale con código distinto de cero cuando ha pasado la fecha removeAfter de un registro de compatibilidad obsoleto.
--fail-on-unclassified-unused-reservedSale con código distinto de cero en shims reservados del SDK sin usar.
pnpm plugins:boundary-report:ci se ejecuta con las tres marcas de fallo. Cada registro de compatibilidad tiene una fecha removeAfter explícita (no una vaga “próxima versión mayor”): el informe agrupa los registros obsoletos por esa fecha, cuenta referencias locales en código/documentación, muestra importaciones reservadas del SDK entre propietarios y resume el puente privado del SDK de memory-host. Las subrutas reservadas del SDK deben tener uso de propietario rastreado; las exportaciones reservadas sin usar deberían eliminarse del SDK público.

Cómo migrar

1

Migrar helpers de carga/escritura de configuración en runtime

Los plugins agrupados deberían dejar de llamar directamente a api.runtime.config.loadConfig() y api.runtime.config.writeConfigFile(...). Prefiere la configuración ya pasada a la ruta de llamada activa. Los handlers de larga duración que necesiten la instantánea actual del proceso pueden usar api.runtime.config.current(). Las herramientas de agente de larga duración deberían leer ctx.getRuntimeConfig() dentro de execute para que una herramienta creada antes de una escritura de configuración siga viendo la configuración actualizada.Las escrituras de configuración pasan por el helper transaccional con una política explícita posterior a la escritura:
await api.runtime.config.mutateConfigFile({
  afterWrite: { mode: "auto" },
  mutate(draft) {
    draft.plugins ??= {};
  },
});
Usa afterWrite: { mode: "restart", reason: "..." } cuando el cambio necesite un reinicio limpio del Gateway, y afterWrite: { mode: "none", reason: "..." } solo cuando el llamador sea dueño del seguimiento y suprima deliberadamente el planificador de recarga. Los resultados de mutación incluyen un resumen tipado followUp para pruebas y registros; el Gateway sigue siendo responsable de aplicar o programar el reinicio.loadConfig y writeConfigFile permanecen como helpers de compatibilidad obsoletos para plugins externos y advierten una vez con el código de compatibilidad runtime-config-load-write. Los plugins agrupados y el código de runtime del repo están protegidos por pnpm check:deprecated-api-usage y pnpm check:no-runtime-action-load-config: el nuevo uso en plugins de producción falla directamente, las escrituras directas de configuración fallan, los métodos del servidor Gateway deben usar la instantánea de runtime de la solicitud, los helpers de envío/acción/cliente del canal de runtime deben recibir configuración desde su límite, y los módulos de runtime de larga duración permiten cero llamadas ambientales a loadConfig().El código nuevo de plugins debería evitar el barrel amplio openclaw/plugin-sdk/config-runtime. Usa la subruta estrecha para la tarea:
NecesidadImportación
Tipos de configuración como OpenClawConfigopenclaw/plugin-sdk/config-contracts
Aserciones de configuración ya cargada y búsqueda de configuración de entrada de pluginopenclaw/plugin-sdk/plugin-config-runtime
Lecturas de la instantánea actual de runtimeopenclaw/plugin-sdk/runtime-config-snapshot
Escrituras de configuraciónopenclaw/plugin-sdk/config-mutation
Helpers de almacén de sesionesopenclaw/plugin-sdk/session-store-runtime
Configuración de tablas Markdownopenclaw/plugin-sdk/markdown-table-runtime
Helpers de runtime de política de gruposopenclaw/plugin-sdk/runtime-group-policy
Resolución de entrada secretaopenclaw/plugin-sdk/secret-input-runtime
Sobrescrituras de modelo/sesiónopenclaw/plugin-sdk/model-session-runtime
Los plugins agrupados y sus pruebas están protegidos por escáner contra el barrel amplio para que las importaciones y los mocks permanezcan locales al comportamiento que necesitan. El barrel todavía existe para compatibilidad externa, pero el código nuevo no debería depender de él.
2

Migrar extensiones integradas de resultados de herramientas a middleware

Los plugins agrupados deben reemplazar los handlers de resultados de herramientas api.registerEmbeddedExtensionFactory(...) exclusivos del ejecutor integrado por middleware neutral respecto al runtime:
// OpenClaw and Codex runtime dynamic tools
api.registerAgentToolResultMiddleware(async (event) => {
  return compactToolResult(event);
}, {
  runtimes: ["openclaw", "codex"],
});
Actualiza el manifiesto del plugin al mismo tiempo:
{
  "contracts": {
    "agentToolResultMiddleware": ["openclaw", "codex"]
  }
}
Los plugins instalados también pueden registrar middleware de resultados de herramientas cuando estén explícitamente habilitados y cada runtime objetivo esté declarado en contracts.agentToolResultMiddleware. Los registros de middleware instalados no declarados se rechazan.
3

Migrar handlers nativos de aprobación a hechos de capacidad

Los plugins de canal con capacidad de aprobación exponen el comportamiento nativo de aprobación mediante approvalCapability.nativeRuntime más el registro compartido de contexto de runtime:
  • Reemplaza approvalCapability.handler.loadRuntime(...) por approvalCapability.nativeRuntime.
  • Mueve la autenticación/entrega específica de aprobación fuera del cableado heredado plugin.auth / plugin.approvals y hacia approvalCapability.
  • ChannelPlugin.approvals se eliminó del contrato público de plugin de canal; mueve los campos de entrega/nativo/renderizado a approvalCapability.
  • plugin.auth permanece solo para flujos de inicio/cierre de sesión de canal; core ya no lee hooks de autenticación de aprobación ahí.
  • Registra objetos de runtime propiedad del canal (clientes, tokens, apps Bolt) mediante openclaw/plugin-sdk/channel-runtime-context.
  • No envíes avisos de redirección propiedad del plugin desde handlers nativos de aprobación; core es dueño de los avisos de enrutado a otro lugar a partir de resultados de entrega reales.
  • Al pasar channelRuntime a createChannelManager(...), proporciona una superficie real createPluginRuntime().channel: los stubs parciales se rechazan.
Consulta Plugins de canal para el diseño actual de capacidades de aprobación.
4

Auditar el comportamiento de fallback del wrapper de Windows

Si tu plugin usa openclaw/plugin-sdk/windows-spawn, los wrappers .cmd/.bat de Windows no resueltos ahora fallan de forma cerrada a menos que pases explícitamente allowShellFallback: true:
// Before
const program = applyWindowsSpawnProgramPolicy({ candidate });

// After
const program = applyWindowsSpawnProgramPolicy({
  candidate,
  // Only set this for trusted compatibility callers that intentionally
  // accept shell-mediated fallback.
  allowShellFallback: true,
});
Si tu llamador no depende intencionalmente del fallback de shell, no establezcas allowShellFallback y maneja en su lugar el error lanzado.
5

Encontrar importaciones obsoletas

grep -r "plugin-sdk/compat" my-plugin/
grep -r "plugin-sdk/infra-runtime" my-plugin/
grep -r "plugin-sdk/config-runtime" my-plugin/
grep -r "openclaw/extension-api" my-plugin/
6

Reemplazar por importaciones enfocadas

Cada exportación de la superficie antigua se asigna a una ruta de importación moderna específica:
// Before (deprecated backwards-compatibility layer)
import {
  createChannelReplyPipeline,
  createPluginRuntimeStore,
  resolveControlCommandGate,
} from "openclaw/plugin-sdk/compat";

// After (modern focused imports)
import { createChannelReplyPipeline } from "openclaw/plugin-sdk/channel-reply-pipeline";
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
import { resolveControlCommandGate } from "openclaw/plugin-sdk/command-auth";
Para los helpers del lado del host, usa el runtime de Plugin inyectado en lugar de importar directamente:
// Before (deprecated extension-api bridge)
import { runEmbeddedAgent } from "openclaw/extension-api";
const result = await runEmbeddedAgent({ sessionId, prompt });

// After (injected runtime)
const result = await api.runtime.agent.runEmbeddedAgent({ sessionId, prompt });
El mismo patrón se aplica a otros helpers de puente heredados:
Importación antiguaEquivalente moderno
resolveAgentDirapi.runtime.agent.resolveAgentDir
resolveAgentWorkspaceDirapi.runtime.agent.resolveAgentWorkspaceDir
resolveAgentIdentityapi.runtime.agent.resolveAgentIdentity
resolveThinkingDefaultapi.runtime.agent.resolveThinkingDefault
resolveAgentTimeoutMsapi.runtime.agent.resolveAgentTimeoutMs
ensureAgentWorkspaceapi.runtime.agent.ensureAgentWorkspace
helpers de almacén de sesionesapi.runtime.agent.session.*
7

Replace broad infra-runtime imports

openclaw/plugin-sdk/infra-runtime sigue existiendo por compatibilidad externa, pero el código nuevo debe importar la superficie específica que realmente necesita:
NecesidadImportación
Helpers de cola de eventos del sistemaopenclaw/plugin-sdk/system-event-runtime
Helpers de activación, eventos y visibilidad de Heartbeatopenclaw/plugin-sdk/heartbeat-runtime
Vaciado de cola de entrega pendienteopenclaw/plugin-sdk/delivery-queue-runtime
Telemetría de actividad de canalopenclaw/plugin-sdk/channel-activity-runtime
Cachés de deduplicación en memoria y respaldadas por persistenciaopenclaw/plugin-sdk/dedupe-runtime
Helpers seguros para rutas de archivos/medios localesopenclaw/plugin-sdk/file-access-runtime
Fetch con reconocimiento del despachadoropenclaw/plugin-sdk/runtime-fetch
Helpers de proxy y fetch protegidoopenclaw/plugin-sdk/fetch-runtime
Tipos de política de despachador SSRFopenclaw/plugin-sdk/ssrf-dispatcher
Tipos de solicitud/resolución de aprobaciónopenclaw/plugin-sdk/approval-runtime
Helpers de payload de respuesta de aprobación y comandosopenclaw/plugin-sdk/approval-reply-runtime
Helpers de formato de erroresopenclaw/plugin-sdk/error-runtime
Esperas de disponibilidad de transporteopenclaw/plugin-sdk/transport-ready-runtime
Helpers de tokens segurosopenclaw/plugin-sdk/secure-random-runtime
Concurrencia acotada de tareas asíncronasopenclaw/plugin-sdk/concurrency-runtime
Coerción numéricaopenclaw/plugin-sdk/number-runtime
Bloqueo asíncrono local al procesoopenclaw/plugin-sdk/async-lock-runtime
Bloqueos de archivoopenclaw/plugin-sdk/file-lock
Los plugins incluidos están protegidos por el escáner contra infra-runtime, así que el código del repo no puede volver al barrel amplio.
8

Migrate channel route helpers

El código nuevo de rutas de canal usa openclaw/plugin-sdk/channel-route. Los nombres antiguos de route-key y comparable-target permanecen como alias de compatibilidad:
Helper antiguoHelper moderno
channelRouteIdentityKey(...)channelRouteDedupeKey(...)
channelRouteKey(...)channelRouteCompactKey(...)
ComparableChannelTargetChannelRouteParsedTarget
comparableChannelTargetsMatch(...)channelRouteTargetsMatchExact(...)
comparableChannelTargetsShareRoute(...)channelRouteTargetsShareConversation(...)
Los helpers modernos de ruta normalizan { channel, to, accountId, threadId } de forma coherente en aprobaciones nativas, supresión de respuestas, deduplicación entrante, entrega de Cron y enrutamiento de sesiones.No agregues nuevos usos de ChannelMessagingAdapter.parseExplicitTarget, los helpers de ruta cargada respaldados por parser (parseExplicitTargetForLoadedChannel, resolveRouteTargetForLoadedChannel), ni resolveChannelRouteTargetWithParser(...) de plugin-sdk/channel-route; están obsoletos y permanecen solo para plugins antiguos. Los nuevos plugins de canal deben usar messaging.targetResolver.resolveTarget(...) para la normalización de target-id y el fallback ante ausencia en directorio, messaging.inferTargetChatType(...) cuando el core necesita un tipo de par temprano, y messaging.resolveOutboundSessionRoute(...) para la identidad de sesión y thread nativa del proveedor.
9

Build and test

pnpm build
pnpm test my-plugin/

Referencia de rutas de importación

Ruta de importaciónPropósitoExportaciones clave
plugin-sdk/plugin-entryAyudante de entrada canónica de PlugindefinePluginEntry
plugin-sdk/coreReexportación paraguas heredada para definiciones/constructores de entradas de canaldefineChannelPluginEntry, createChatChannelPlugin
plugin-sdk/config-schemaExportación del esquema de configuración raízOpenClawSchema
plugin-sdk/provider-entryAyudante de entrada de proveedor únicodefineSingleProviderPluginEntry
plugin-sdk/channel-coreDefiniciones y constructores enfocados de entradas de canaldefineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase
plugin-sdk/setupAyudantes compartidos del asistente de configuraciónTraductor de configuración, mensajes de lista de permitidos, constructores de estado de configuración
plugin-sdk/setup-runtimeAyudantes de runtime durante la configuracióncreateSetupTranslator, adaptadores de parches de configuración seguros para importar, ayudantes de notas de búsqueda, promptResolvedAllowFrom, splitSetupEntries, proxies de configuración delegada
plugin-sdk/setup-adapter-runtimeAlias obsoleto del adaptador de configuraciónUsa plugin-sdk/setup-runtime
plugin-sdk/setup-toolsAyudantes de herramientas de configuraciónformatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR
plugin-sdk/account-coreAyudantes multicuentaAyudantes de lista/configuración/compuerta de acciones de cuentas
plugin-sdk/account-idAyudantes de id de cuentaDEFAULT_ACCOUNT_ID, normalización de id de cuenta
plugin-sdk/account-resolutionAyudantes de búsqueda de cuentasAyudantes de búsqueda de cuentas y respaldo predeterminado
plugin-sdk/account-helpersAyudantes acotados de cuentasAyudantes de lista de cuentas/acción de cuenta
plugin-sdk/channel-setupAdaptadores del asistente de configuracióncreateOptionalChannelSetupSurface, createOptionalChannelSetupAdapter, createOptionalChannelSetupWizard, más DEFAULT_ACCOUNT_ID, createTopLevelChannelDmPolicy, setSetupChannelEnabled, splitSetupEntries
plugin-sdk/channel-pairingPrimitivas de emparejamiento de DMcreateChannelPairingController
plugin-sdk/channel-reply-pipelineCableado de prefijo de respuesta, escritura y entrega de origencreateChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode
plugin-sdk/channel-config-helpersFábricas de adaptadores de configuración y ayudantes de acceso a DMcreateHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases
plugin-sdk/channel-config-schemaConstructores de esquemas de configuraciónSolo primitivas compartidas de esquemas de configuración de canal y el constructor genérico
plugin-sdk/bundled-channel-config-schemaEsquemas de configuración incluidosSolo plugins incluidos mantenidos por OpenClaw; los plugins nuevos deben definir esquemas locales del Plugin
plugin-sdk/channel-config-schema-legacyEsquemas de configuración incluidos obsoletosSolo alias de compatibilidad; usa plugin-sdk/bundled-channel-config-schema para plugins incluidos mantenidos
plugin-sdk/telegram-command-configAyudantes de configuración de comandos de TelegramNormalización de nombres de comando, recorte de descripciones, validación de duplicados/conflictos
plugin-sdk/channel-policyResolución de políticas de grupo/DMresolveChannelGroupRequireMention
plugin-sdk/channel-lifecycleFachada de compatibilidad obsoletaUsa plugin-sdk/channel-outbound
plugin-sdk/inbound-envelopeAyudantes de sobres entrantesAyudantes compartidos de ruta y constructor de sobres
plugin-sdk/channel-inboundAyudantes de recepción entranteCreación de contexto, formato, raíces, ejecutores, despacho de respuestas preparadas y predicados de despacho
plugin-sdk/messaging-targetsRuta de importación obsoleta para análisis de destinosUsa plugin-sdk/channel-targets para ayudantes genéricos de análisis de destinos, plugin-sdk/channel-route para comparación de rutas, y messaging.targetResolver / messaging.resolveOutboundSessionRoute propiedad del Plugin para resolución de destinos específica del proveedor
plugin-sdk/outbound-mediaAyudantes de medios salientesCarga compartida de medios salientes
plugin-sdk/outbound-send-depsFachada de compatibilidad obsoletaUsa plugin-sdk/channel-outbound
plugin-sdk/channel-outboundAyudantes del ciclo de vida de mensajes salientesAdaptadores de mensajes, recibos, ayudantes de envío duradero, ayudantes de vista previa/transmisión en vivo, opciones de respuesta, ayudantes de ciclo de vida, identidad saliente y planificación de cargas útiles
plugin-sdk/channel-streamingFachada de compatibilidad obsoletaUsa plugin-sdk/channel-outbound
plugin-sdk/outbound-runtimeFachada de compatibilidad obsoletaUsa plugin-sdk/channel-outbound
plugin-sdk/thread-bindings-runtimeAyudantes de vinculación de hilosAyudantes de ciclo de vida y adaptadores de vinculación de hilos
plugin-sdk/agent-media-payloadAyudantes heredados de cargas útiles de mediosConstructor de cargas útiles de medios del agente para diseños de campos heredados
plugin-sdk/channel-runtimeCapa de compatibilidad obsoletaSolo utilidades heredadas de runtime de canal
plugin-sdk/channel-send-resultTipos de resultado de envíoTipos de resultado de respuesta
plugin-sdk/runtime-storeAlmacenamiento persistente de PlugincreatePluginRuntimeStore
plugin-sdk/runtimeAyudantes amplios de runtimeAyudantes de runtime/registro/respaldo/instalación de plugins
plugin-sdk/runtime-envAyudantes acotados de entorno de runtimeAyudantes de registrador/entorno de runtime, tiempo de espera, reintento y retroceso
plugin-sdk/plugin-runtimeAyudantes compartidos de runtime de PluginAyudantes de comandos/hooks/http/interactivos de Plugin
plugin-sdk/hook-runtimeAyudantes de canalización de hooksAyudantes compartidos de canalización de Webhook/hooks internos
plugin-sdk/lazy-runtimeAyudantes de runtime diferidocreateLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface
plugin-sdk/process-runtimeAyudantes de procesoAyudantes compartidos de ejecución
plugin-sdk/cli-runtimeAyudantes de runtime de CLIFormato de comandos, esperas, ayudantes de versión
plugin-sdk/gateway-runtimeAyudantes de GatewayCliente de Gateway, ayudante de inicio listo para bucle de eventos, resolución de host LAN anunciado y ayudantes de parches de estado de canal
plugin-sdk/config-runtimeCapa obsoleta de compatibilidad de configuraciónPrefiere config-contracts, plugin-config-runtime, runtime-config-snapshot y config-mutation
plugin-sdk/telegram-command-configAyudantes de comandos de TelegramAyudantes de validación de comandos de Telegram estables con respaldo cuando la superficie del contrato de Telegram incluido no está disponible
plugin-sdk/approval-runtimeAyudantes de mensajes de aprobaciónCarga útil de aprobación de ejecución/Plugin, ayudantes de capacidad/perfil de aprobación, ayudantes nativos de enrutamiento/runtime de aprobación y formato de rutas de visualización estructurada de aprobación
plugin-sdk/approval-auth-runtimeAyudantes de autenticación de aprobaciónResolución de aprobador, autenticación de acciones en el mismo chat
plugin-sdk/approval-client-runtimeAyudantes de cliente de aprobaciónAyudantes nativos de perfil/filtro de aprobación de ejecución
plugin-sdk/approval-delivery-runtimeAyudantes de entrega de aprobaciónAdaptadores nativos de capacidad/entrega de aprobación
plugin-sdk/approval-gateway-runtimeAyudantes de Gateway de aprobaciónAyudante compartido de resolución de Gateway de aprobación
plugin-sdk/approval-handler-adapter-runtimeAyudantes de adaptador de aprobaciónAyudantes ligeros de carga de adaptadores nativos de aprobación para puntos de entrada de canal activos
plugin-sdk/approval-handler-runtimeAyudantes de manejador de aprobaciónAyudantes más amplios de runtime del manejador de aprobación; prefiere las superficies más acotadas de adaptador/Gateway cuando basten
plugin-sdk/approval-native-runtimeAyudantes de destino de aprobaciónAyudantes nativos de vinculación de destino/cuenta de aprobación
plugin-sdk/approval-reply-runtimeAyudantes de respuesta de aprobaciónAyudantes de cargas útiles de respuesta de aprobación de ejecución/Plugin
plugin-sdk/channel-runtime-contextAyudantes de contexto de runtime de canalAyudantes genéricos de registro/obtención/observación de contexto de runtime de canal
plugin-sdk/security-runtimeAyudantes de seguridadAyudantes compartidos de confianza, compuerta de DM, archivos/rutas acotados a la raíz, contenido externo y recopilación de secretos
plugin-sdk/ssrf-policyAyudantes de políticas SSRFAyudantes de lista de permitidos de hosts y políticas de red privada
plugin-sdk/ssrf-runtimeAyudantes de runtime SSRFDespachador fijado, fetch protegido, ayudantes de políticas SSRF
plugin-sdk/system-event-runtimeAyudantes de eventos del sistemaenqueueSystemEvent, peekSystemEventEntries
plugin-sdk/heartbeat-runtimeAyudantes de HeartbeatAyudantes de activación, evento y visibilidad de Heartbeat
plugin-sdk/delivery-queue-runtimeAyudantes de cola de entregadrainPendingDeliveries
plugin-sdk/channel-activity-runtimeAyudantes de actividad de canalrecordChannelActivity
plugin-sdk/dedupe-runtimeAyudantes de deduplicaciónCachés de deduplicación en memoria y respaldadas por persistencia
plugin-sdk/file-access-runtimeAyudantes de acceso a archivosAyudantes seguros de rutas de archivos/medios locales
plugin-sdk/transport-ready-runtimeAyudantes de preparación de transportewaitForTransportReady
plugin-sdk/exec-approvals-runtimeAyudantes de política de aprobación de ejecuciónloadExecApprovals, resolveExecApprovalsFromFile, ExecApprovalsFile
plugin-sdk/collection-runtimeAyudantes de caché acotadapruneMapToMaxSize
plugin-sdk/diagnostic-runtimeAyudantes de compuerta de diagnósticoisDiagnosticFlagEnabled, isDiagnosticsEnabled
plugin-sdk/error-runtimeAyudantes de formato de erroresformatUncaughtError, isApprovalNotFoundError, ayudantes de grafo de errores
plugin-sdk/fetch-runtimeAyudantes de fetch/proxy envueltosresolveFetch, ayudantes de proxy, ayudantes de opciones de EnvHttpProxyAgent
plugin-sdk/host-runtimeAyudantes de normalización de hostsnormalizeHostname, normalizeScpRemoteHost
plugin-sdk/retry-runtimeAyudantes de reintentoRetryConfig, retryAsync, ejecutores de políticas
plugin-sdk/allow-fromFormato de listas de permitidos y asignación de entradasformatAllowFromLowercase, mapAllowlistResolutionInputs
plugin-sdk/command-authAyudantes de compuerta de comandos y superficie de comandosresolveControlCommandGate, ayudantes de autorización de remitentes, ayudantes de registro de comandos, incluido formato de menú de argumentos dinámicos
plugin-sdk/command-statusRenderizadores de estado/ayuda de comandosbuildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage
plugin-sdk/secret-inputAnálisis de entrada de secretosAyudantes de entrada de secretos
plugin-sdk/webhook-ingressAyudantes de solicitudes WebhookUtilidades de destinos Webhook
plugin-sdk/webhook-request-guardsAyudantes de protección del cuerpo de WebhookAyudantes de lectura/límite del cuerpo de solicitud
plugin-sdk/reply-runtimeRuntime compartido de respuestaDespacho entrante, Heartbeat, planificador de respuestas, fragmentación
plugin-sdk/reply-dispatch-runtimeAyudantes acotados de despacho de respuestasFinalización, despacho de proveedor y ayudantes de etiquetas de conversación
plugin-sdk/reply-historyAyudantes de historial de respuestascreateChannelHistoryWindow; exportaciones obsoletas de compatibilidad de ayudantes de mapa como buildPendingHistoryContextFromMap, recordPendingHistoryEntry y clearHistoryEntriesIfEnabled
plugin-sdk/reply-referencePlanificación de referencias de respuestacreateReplyReferencePlanner
plugin-sdk/reply-chunkingAyudantes de fragmentos de respuestaAyudantes de fragmentación de texto/markdown
plugin-sdk/session-store-runtimeAyudantes de almacén de sesionesAyudantes de ruta de almacén y fecha de actualización
plugin-sdk/state-pathsAyudantes de rutas de estadoAyudantes de directorios de estado y OAuth
plugin-sdk/routingHelpers de enrutamiento/clave de sesiónresolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, helpers de normalización de clave de sesión
plugin-sdk/status-helpersHelpers de estado de canalConstructores de resumen de estado de canal/cuenta, valores predeterminados de estado en tiempo de ejecución, helpers de metadatos de incidencias
plugin-sdk/target-resolver-runtimeHelpers de resolución de destinoHelpers compartidos de resolución de destino
plugin-sdk/string-normalization-runtimeHelpers de normalización de cadenasHelpers de normalización de slug/cadena
plugin-sdk/request-urlHelpers de URL de solicitudExtrae URL de cadena desde entradas similares a solicitudes
plugin-sdk/run-commandHelpers de comandos con límite de tiempoEjecutor de comandos con límite de tiempo con stdout/stderr normalizados
plugin-sdk/param-readersLectores de parámetrosLectores comunes de parámetros de herramienta/CLI
plugin-sdk/tool-payloadExtracción de carga útil de herramientaExtrae cargas útiles normalizadas desde objetos de resultado de herramienta
plugin-sdk/tool-sendExtracción de envío de herramientaExtrae campos canónicos de destino de envío desde argumentos de herramienta
plugin-sdk/temp-pathHelpers de rutas temporalesHelpers compartidos de rutas de descarga temporales
plugin-sdk/logging-coreHelpers de registroHelpers de registrador de subsistema y censura
plugin-sdk/markdown-table-runtimeHelpers de tablas MarkdownHelpers de modo de tabla Markdown
plugin-sdk/reply-payloadTipos de respuesta de mensajeTipos de carga útil de respuesta
plugin-sdk/provider-setupHelpers seleccionados de configuración de proveedores locales/autohospedadosHelpers de descubrimiento/configuración de proveedores autohospedados
plugin-sdk/self-hosted-provider-setupHelpers enfocados de configuración de proveedores autohospedados compatibles con OpenAILos mismos helpers de descubrimiento/configuración de proveedores autohospedados
plugin-sdk/provider-auth-runtimeHelpers de autenticación de proveedor en tiempo de ejecuciónHelpers de resolución de claves de API en tiempo de ejecución
plugin-sdk/provider-auth-api-keyHelpers de configuración de claves de API de proveedorHelpers de incorporación/escritura de perfil de claves de API
plugin-sdk/provider-auth-resultHelpers de resultado de autenticación de proveedorConstructor estándar de resultado de autenticación OAuth
plugin-sdk/provider-selection-runtimeHelpers de selección de proveedorSelección de proveedor configurado o automático y combinación de configuración sin procesar de proveedor
plugin-sdk/provider-env-varsHelpers de variables de entorno de proveedorHelpers de búsqueda de variables de entorno de autenticación de proveedor
plugin-sdk/provider-model-sharedHelpers compartidos de modelo/repetición de proveedorProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, constructores compartidos de políticas de repetición, helpers de endpoints de proveedor y helpers de normalización de id de modelo
plugin-sdk/provider-catalog-sharedHelpers compartidos de catálogo de proveedorfindCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat
plugin-sdk/provider-onboardParches de incorporación de proveedorHelpers de configuración de incorporación
plugin-sdk/provider-httpHelpers HTTP de proveedorHelpers genéricos de capacidades HTTP/endpoint de proveedor, incluidos helpers de formulario multipart para transcripción de audio
plugin-sdk/provider-web-fetchHelpers de web-fetch de proveedorHelpers de registro/caché de proveedor de web-fetch
plugin-sdk/provider-web-search-config-contractHelpers de configuración de búsqueda web de proveedorHelpers estrechos de configuración/credenciales de búsqueda web para proveedores que no necesitan cableado de habilitación de plugins
plugin-sdk/provider-web-search-contractHelpers de contrato de búsqueda web de proveedorHelpers estrechos de contrato de configuración/credenciales de búsqueda web, como createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig y setters/getters de credenciales con ámbito
plugin-sdk/provider-web-searchHelpers de búsqueda web de proveedorHelpers de registro/caché/tiempo de ejecución de proveedor de búsqueda web
plugin-sdk/provider-toolsHelpers de compatibilidad de herramientas/esquemas de proveedorProviderToolCompatFamily, buildProviderToolCompatFamilyHooks y limpieza + diagnósticos de esquemas de DeepSeek/Gemini/OpenAI
plugin-sdk/provider-usageHelpers de uso de proveedorfetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage y otros helpers de uso de proveedor
plugin-sdk/provider-streamHelpers de contenedor de streams de proveedorProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, tipos de contenedor de stream y helpers compartidos de contenedor de Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot
plugin-sdk/provider-transport-runtimeHelpers de transporte de proveedorHelpers nativos de transporte de proveedor, como fetch protegido, extracción de texto de resultados de herramienta, transformaciones de mensajes de transporte y streams de eventos de transporte escribibles
plugin-sdk/keyed-async-queueCola asíncrona ordenadaKeyedAsyncQueue
plugin-sdk/media-runtimeHelpers compartidos de mediosHelpers de obtención/transformación/almacenamiento de medios, sondeo de dimensiones de video respaldado por ffprobe y constructores de carga útil de medios
plugin-sdk/media-generation-runtimeHelpers compartidos de generación de mediosHelpers compartidos de conmutación por error, selección de candidatos y mensajería de modelo faltante para generación de imagen/video/música
plugin-sdk/media-understandingHelpers de comprensión de mediosTipos de proveedor de comprensión de medios y exportaciones de helpers de imagen/audio orientadas a proveedores
plugin-sdk/text-runtimeExportación amplia obsoleta de compatibilidad de textoUsa string-coerce-runtime, text-chunking, text-utility-runtime y logging-core
plugin-sdk/text-chunkingHelpers de fragmentación de textoHelper de fragmentación de texto saliente
plugin-sdk/speechHelpers de vozTipos de proveedor de voz y helpers de directivas, registro y validación orientados a proveedores, además del constructor TTS compatible con OpenAI
plugin-sdk/speech-coreNúcleo compartido de vozTipos de proveedor de voz, registro, directivas, normalización
plugin-sdk/realtime-transcriptionHelpers de transcripción en tiempo realTipos de proveedor, helpers de registro y helper compartido de sesión WebSocket
plugin-sdk/realtime-voiceHelpers de voz en tiempo realTipos de proveedor, helpers de registro/resolución, helpers de sesión puente, colas compartidas de respuesta oral de agente, control de voz de ejecución activa, salud de transcripción/eventos, supresión de eco, coincidencia de preguntas de consulta, coordinación de consulta forzada, seguimiento de contexto de turno, seguimiento de actividad de salida y helpers de consulta rápida de contexto
plugin-sdk/image-generationHelpers de generación de imágenesTipos de proveedor de generación de imágenes y helpers de recursos de imagen/URL de datos, además del constructor de proveedor de imágenes compatible con OpenAI
plugin-sdk/image-generation-coreNúcleo compartido de generación de imágenesTipos de generación de imágenes, conmutación por error, autenticación y helpers de registro
plugin-sdk/music-generationHelpers de generación de músicaTipos de proveedor/solicitud/resultado de generación de música
plugin-sdk/music-generation-coreNúcleo compartido de generación de músicaTipos de generación de música, helpers de conmutación por error, búsqueda de proveedor y análisis de referencia de modelo
plugin-sdk/video-generationHelpers de generación de videoTipos de proveedor/solicitud/resultado de generación de video
plugin-sdk/video-generation-coreNúcleo compartido de generación de videoTipos de generación de video, helpers de conmutación por error, búsqueda de proveedor y análisis de referencia de modelo
plugin-sdk/interactive-runtimeHelpers de respuesta interactivaNormalización/reducción de carga útil de respuesta interactiva
plugin-sdk/channel-config-primitivesPrimitivas de configuración de canalPrimitivas estrechas de esquema de configuración de canal
plugin-sdk/channel-config-writesHelpers de escritura de configuración de canalHelpers de autorización de escritura de configuración de canal
plugin-sdk/channel-plugin-commonPreludio compartido de canalExportaciones compartidas de preludio de Plugin de canal
plugin-sdk/channel-statusHelpers de estado de canalHelpers compartidos de instantánea/resumen de estado de canal
plugin-sdk/allowlist-config-editHelpers de configuración de allowlistHelpers de edición/lectura de configuración de allowlist
plugin-sdk/group-accessHelpers de acceso de grupoHelpers compartidos de decisión de acceso de grupo
plugin-sdk/direct-dm, plugin-sdk/direct-dm-accessFachadas de compatibilidad obsoletasUsa plugin-sdk/channel-inbound
plugin-sdk/direct-dm-guard-policyHelpers de protección de mensajes directosHelpers estrechos de política de protección previa a criptografía
plugin-sdk/extension-sharedHelpers compartidos de extensiónPrimitivas de helpers de canal pasivo/estado y proxy ambiental
plugin-sdk/webhook-targetsHelpers de destino de WebhookRegistro de destinos de Webhook y helpers de instalación de rutas
plugin-sdk/webhook-pathAlias obsoleto de ruta de WebhookUsa plugin-sdk/webhook-ingress
plugin-sdk/web-mediaHelpers compartidos de medios webHelpers de carga de medios remotos/locales
plugin-sdk/zodReexportación obsoleta de compatibilidad con ZodImporta zod desde zod directamente
plugin-sdk/memory-coreHelpers incluidos de memory-coreSuperficie de helpers de gestor de memoria/configuración/archivo/CLI
plugin-sdk/memory-core-engine-runtimeFachada de tiempo de ejecución del motor de memoriaFachada de tiempo de ejecución de índice/búsqueda de memoria
plugin-sdk/memory-core-host-embedding-registryRegistro de embeddings de memoriaHelpers ligeros de registro de proveedores de embeddings de memoria
plugin-sdk/memory-core-host-engine-foundationMotor base del host de memoriaExportaciones del motor base del host de memoria
plugin-sdk/memory-core-host-engine-embeddingsMotor de embeddings del host de memoriaContratos de embeddings de memoria, acceso al registro, proveedor local y helpers genéricos de lotes/remotos; los proveedores remotos concretos viven en sus plugins propietarios
plugin-sdk/memory-core-host-engine-qmdMotor QMD del host de memoriaExportaciones del motor QMD del host de memoria
plugin-sdk/memory-core-host-engine-storageMotor de almacenamiento del host de memoriaExportaciones del motor de almacenamiento del host de memoria
plugin-sdk/memory-core-host-multimodalHelpers multimodales del host de memoriaHelpers multimodales del host de memoria
plugin-sdk/memory-core-host-queryHelpers de consulta del host de memoriaHelpers de consulta del host de memoria
plugin-sdk/memory-core-host-secretHelpers de secretos del host de memoriaHelpers de secretos del host de memoria
plugin-sdk/memory-core-host-eventsAlias obsoleto de eventos de memoriaUsa plugin-sdk/memory-host-events
plugin-sdk/memory-core-host-statusHelpers de estado del host de memoriaHelpers de estado del host de memoria
plugin-sdk/memory-core-host-runtime-cliTiempo de ejecución CLI del host de memoriaHelpers de tiempo de ejecución CLI del host de memoria
plugin-sdk/memory-core-host-runtime-coreTiempo de ejecución central del host de memoriaHelpers de tiempo de ejecución central del host de memoria
plugin-sdk/memory-core-host-runtime-filesHelpers de archivo/tiempo de ejecución del host de memoriaHelpers de archivo/tiempo de ejecución del host de memoria
plugin-sdk/memory-host-coreAlias del tiempo de ejecución central del host de memoriaAlias neutral respecto al proveedor para helpers del tiempo de ejecución central del host de memoria
plugin-sdk/memory-host-eventsAlias del diario de eventos del host de memoriaAlias neutral respecto al proveedor para helpers del diario de eventos del host de memoria
plugin-sdk/memory-host-filesAlias obsoleto de archivo/tiempo de ejecución de memoriaUsa plugin-sdk/memory-core-host-runtime-files
plugin-sdk/memory-host-markdownHelpers de markdown gestionadoHelpers compartidos de markdown gestionado para plugins adyacentes a memoria
plugin-sdk/memory-host-searchFachada de búsqueda de Active MemoryFachada diferida de tiempo de ejecución del gestor de búsqueda de Active Memory
plugin-sdk/memory-host-statusAlias obsoleto de estado del host de memoriaUsa plugin-sdk/memory-core-host-status
plugin-sdk/testingUtilidades de pruebaBarrel de compatibilidad obsoleto local del repositorio; usa subrutas de prueba locales enfocadas del repositorio, como plugin-sdk/plugin-test-runtime, plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing, plugin-sdk/test-env y plugin-sdk/test-fixtures
Esta tabla es el subconjunto común de migración, no toda la superficie del SDK. El inventario de puntos de entrada del compilador está en scripts/lib/plugin-sdk-entrypoints.json; las exportaciones de paquetes se generan a partir del subconjunto público. Las costuras auxiliares reservadas para plugins incluidos se retiraron del mapa de exportación del SDK público, salvo las fachadas de compatibilidad documentadas explícitamente, como el shim obsoleto plugin-sdk/discord, conservado para plugins externos que aún importan directamente el paquete publicado @openclaw/discord. Los auxiliares específicos del propietario viven dentro del paquete del plugin propietario; el comportamiento compartido del host pasa por contratos genéricos del SDK como plugin-sdk/gateway-runtime, plugin-sdk/security-runtime y plugin-sdk/plugin-config-runtime. Usa la importación más estrecha que coincida con la tarea. Si no encuentras una exportación, revisa el código fuente en src/plugin-sdk/ o pregunta a los mantenedores qué contrato genérico debería poseerla.

Desaprobaciones activas

Desaprobaciones más estrechas en el SDK de plugins, el contrato de proveedor, la superficie de runtime y el manifiesto. Cada una todavía funciona hoy, pero se eliminará en una futura versión mayor. Cada entrada asigna la API antigua a su reemplazo canónico.
Antiguo (openclaw/plugin-sdk/command-auth): buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage.Nuevo (openclaw/plugin-sdk/command-status): mismas firmas, mismas exportaciones; solo se importan desde la subruta más estrecha. command-auth las reexporta como stubs de compatibilidad.
// Before
import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth";

// After
import { buildHelpMessage } from "openclaw/plugin-sdk/command-status";
Antiguo: resolveMentionGating(params) y resolveMentionGatingWithBypass(params) desde openclaw/plugin-sdk/channel-inbound u openclaw/plugin-sdk/channel-mention-gating.Nuevo: resolveInboundMentionDecision({ facts, policy }): un objeto de decisión en lugar de dos formas de llamada separadas.Adoptado en Discord, iMessage, Matrix, MS Teams, QQBot, Signal, Telegram, WhatsApp y Zalo. El propio modelo de evento app_mention de Slack no usa este auxiliar.
openclaw/plugin-sdk/channel-runtime es un shim de compatibilidad para plugins de canal antiguos. No lo importes desde código nuevo; usa openclaw/plugin-sdk/channel-runtime-context para registrar objetos de runtime.Los auxiliares channelActions* en openclaw/plugin-sdk/channel-actions están desaprobados junto con las exportaciones de canal “actions” sin procesar. Expón capacidades mediante la superficie semántica presentation en su lugar: los plugins de canal declaran qué renderizan (tarjetas, botones, selectores) en vez de qué nombres de acciones sin procesar aceptan.
Antiguo: fábrica tool() desde openclaw/plugin-sdk/provider-web-search.Nuevo: implementa createTool(...) directamente en el plugin proveedor. OpenClaw ya no necesita el auxiliar del SDK para registrar el wrapper de la herramienta.
Antiguo: api.runtime.channel.reply.formatInboundEnvelope(...) (y el campo channelEnvelope en los objetos de mensaje entrante) para construir un sobre de prompt plano de texto a partir de mensajes entrantes de canal.Nuevo: BodyForAgent más bloques estructurados de contexto de usuario. Los plugins de canal adjuntan metadatos de enrutamiento (hilo, tema, responder a, reacciones) como campos tipados en lugar de concatenarlos en una cadena de prompt. El auxiliar formatAgentEnvelope(...) sigue siendo compatible para sobres sintetizados orientados al asistente, pero los sobres entrantes de texto plano están en retirada.Áreas afectadas: inbound_claim, message_received y cualquier plugin de canal personalizado que posprocesara el texto del sobre antiguo.
Antiguo: api.on("deactivate", handler).Nuevo: api.on("gateway_stop", handler). Mismo contrato de limpieza de apagado; solo cambia el nombre del hook.
// Before
api.on("deactivate", async (event, ctx) => {
  await stopPluginService(ctx);
});

// After
api.on("gateway_stop", async (event, ctx) => {
  await stopPluginService(ctx);
});
deactivate permanece conectado como alias de compatibilidad obsoleto hasta que se elimine después del 2026-08-16.
Antiguo: api.on("subagent_spawning", handler) que devuelve threadBindingReady o deliveryOrigin.Nuevo: deja que el núcleo prepare vinculaciones de subagentes thread: true mediante el adaptador de vinculación de sesiones de canal. Usa api.on("subagent_spawned", handler) solo para observación posterior al lanzamiento.
// Before
api.on("subagent_spawning", async () => ({
  status: "ok",
  threadBindingReady: true,
  deliveryOrigin: { channel: "discord", to: "channel:123", threadId: "456" },
}));

// After
api.on("subagent_spawned", async (event) => {
  await observeSubagentLaunch(event);
});
subagent_spawning, PluginHookSubagentSpawningEvent, PluginHookSubagentSpawningResult y SubagentLifecycleHookRunner.runSubagentSpawning(...) permanecen solo como superficies de compatibilidad obsoletas mientras migran los plugins externos; se eliminarán después del 2026-08-30.
Cuatro alias de tipos de descubrimiento ahora son wrappers ligeros sobre los tipos de la era del catálogo:
Alias antiguoTipo nuevo
ProviderDiscoveryOrderProviderCatalogOrder
ProviderDiscoveryContextProviderCatalogContext
ProviderDiscoveryResultProviderCatalogResult
ProviderPluginDiscoveryProviderPluginCatalog
Además de la bolsa estática heredada ProviderCapabilities: los plugins de proveedor deberían usar hooks de proveedor explícitos como buildReplayPolicy, normalizeToolSchemas y wrapStreamFn en lugar de un objeto estático.
Antiguo (tres hooks separados en ProviderThinkingPolicy): isBinaryThinking(ctx), supportsXHighThinking(ctx) y resolveDefaultThinkingLevel(ctx).Nuevo: un único resolveThinkingProfile(ctx) que devuelve un ProviderThinkingProfile con el id canónico, label opcional y una lista ordenada de niveles. OpenClaw rebaja automáticamente valores almacenados obsoletos por rango de perfil.El contexto incluye provider, modelId, reasoning fusionado opcional y hechos compat de modelo fusionados opcionales. Los plugins de proveedor pueden usar esos hechos de catálogo para exponer un perfil específico del modelo solo cuando el contrato de solicitud configurado lo admite.Implementa un hook en lugar de tres. Los hooks heredados siguen funcionando durante la ventana de desaprobación, pero no se componen con el resultado del perfil.
Antiguo: implementar hooks de autenticación externa sin declarar el proveedor en el manifiesto del plugin.Nuevo: declara contracts.externalAuthProviders en el manifiesto del plugin e implementa resolveExternalAuthProfiles(...).
{
  "contracts": {
    "externalAuthProviders": ["anthropic", "openai"]
  }
}
Campo de manifiesto antiguo: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.Nuevo: replica la misma búsqueda de variables de entorno en setup.providers[].envVars dentro del manifiesto. Esto consolida los metadatos de entorno de configuración/estado en un solo lugar y evita iniciar el runtime del plugin solo para responder búsquedas de variables de entorno.providerAuthEnvVars sigue siendo compatible mediante un adaptador de compatibilidad hasta que se cierre la ventana de desaprobación.
Antiguo: tres llamadas separadas: api.registerMemoryPromptSection(...), api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).Nuevo: una llamada en la API de estado de memoria: registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).Mismas ranuras, una sola llamada de registro. Los auxiliares aditivos de prompt y corpus (registerMemoryPromptSupplement, registerMemoryCorpusSupplement) no se ven afectados.
Antiguo: api.registerMemoryEmbeddingProvider(...) más contracts.memoryEmbeddingProviders.Nuevo: api.registerEmbeddingProvider(...) más contracts.embeddingProviders.El contrato genérico de proveedor de embeddings se puede reutilizar fuera de la memoria y es la ruta compatible para proveedores nuevos. La API de registro específica de memoria permanece conectada como compatibilidad obsoleta mientras migran los proveedores existentes. La inspección de plugins informa el uso no incluido como deuda de compatibilidad.
Dos alias de tipos heredados siguen exportándose desde src/plugins/runtime/types.ts:
AntiguoNuevo
SubagentReadSessionParamsSubagentGetSessionMessagesParams
SubagentReadSessionResultSubagentGetSessionMessagesResult
El método de runtime readSession está desaprobado a favor de getSessionMessages. Misma firma; el método antiguo delega en el nuevo.
Antiguo: runtime.tasks.flow (singular) devolvía un accesor de flujo de tareas en vivo.Nuevo: runtime.tasks.managedFlows conserva el runtime de mutación de TaskFlow gestionado para plugins que crean, actualizan, cancelan o ejecutan tareas hijas desde un flujo. Usa runtime.tasks.flows cuando el plugin solo necesita lecturas basadas en DTO.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
Eliminado después del 2026-07-26.
Cubierto en Cómo migrar arriba. Incluido aquí para mayor completitud: la ruta api.registerEmbeddedExtensionFactory(...), eliminada y exclusiva del ejecutor integrado, se reemplaza por api.registerAgentToolResultMiddleware(...) con una lista explícita de runtimes en contracts.agentToolResultMiddleware.
OpenClawSchemaType, reexportado desde openclaw/plugin-sdk, ahora es un alias de una línea para OpenClawConfig. Prefiere el nombre canónico.
// Before
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
// After
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
Las obsolescencias a nivel de extensión (dentro de los plugins de canal/proveedor incluidos en extensions/) se rastrean dentro de sus propios barriles api.ts y runtime-api.ts. No afectan a los contratos de plugins de terceros y no se enumeran aquí. Si consumes directamente el barril local de un plugin incluido, lee los comentarios de obsolescencia en ese barril antes de actualizar.

Migración de Talk y voz en tiempo real

El código de voz en tiempo real, telefonía, reuniones y Talk del navegador comparte un controlador de sesión Talk exportado por openclaw/plugin-sdk/realtime-voice. El controlador posee el sobre de eventos Talk común, el estado del turno activo, el estado de captura, el estado de audio de salida, el historial de eventos reciente y el rechazo de turnos obsoletos. Los plugins de proveedor poseen las sesiones en tiempo real específicas del proveedor; los plugins de superficie poseen las particularidades de captura, reproducción, telefonía y reuniones. Todas las superficies incluidas se ejecutan sobre el controlador compartido: retransmisión del navegador, traspaso de sala administrada, tiempo real de llamada de voz, STT en streaming de llamada de voz, tiempo real de Google Meet y pulsar para hablar nativo. Gateway anuncia un canal de eventos Talk en vivo en hello-ok.features.events: talk.event. El código nuevo no debe llamar directamente a createTalkEventSequencer(...) salvo que implemente un adaptador de bajo nivel o un fixture de prueba. Usa el controlador compartido para que los eventos con alcance de turno no puedan emitirse sin un id de turno, las llamadas turnEnd / turnCancel obsoletas no puedan limpiar un turno activo más nuevo, y los eventos de ciclo de vida de audio de salida se mantengan coherentes entre telefonía, reuniones, retransmisión del navegador, traspaso de sala administrada y clientes Talk nativos. La forma de la API pública:
// Gateway-owned Talk session API.
await gateway.request("talk.session.create", {
  mode: "realtime",
  transport: "gateway-relay",
  brain: "agent-consult",
  sessionKey: "main",
});
await gateway.request("talk.session.appendAudio", { sessionId, audioBase64 });
await gateway.request("talk.session.cancelOutput", { sessionId, reason: "barge-in" });
await gateway.request("talk.session.submitToolResult", {
  sessionId,
  callId,
  result: { status: "working" },
  options: { willContinue: true },
});
await gateway.request("talk.session.submitToolResult", {
  sessionId,
  callId,
  result: { status: "already_delivered" },
  options: { suppressResponse: true },
});
await gateway.request("talk.session.submitToolResult", { sessionId, callId, result });
await gateway.request("talk.session.close", { sessionId });

// Client-owned provider session API.
await gateway.request("talk.client.create", {
  mode: "realtime",
  transport: "webrtc",
  brain: "agent-consult",
  sessionKey: "main",
});
await gateway.request("talk.client.toolCall", { sessionKey, callId, name, args });
await gateway.request("talk.client.steer", { sessionKey, text, mode: "steer" });
Las sesiones WebRTC/websocket de proveedor propiedad del navegador usan talk.client.create, porque el navegador posee la negociación del proveedor y el transporte de medios, mientras que el Gateway posee las credenciales, las instrucciones y la política de herramientas. talk.session.* es la superficie común administrada por Gateway para tiempo real con gateway-relay, transcripción con gateway-relay y sesiones STT/TTS nativas de sala administrada. Las configuraciones heredadas que colocan selectores de tiempo real junto a talk.provider / talk.providers deben repararse con openclaw doctor --fix; el Talk en tiempo de ejecución no reinterpreta la configuración de proveedor de voz/TTS como configuración de proveedor en tiempo real. Las combinaciones admitidas de talk.session.create son intencionalmente reducidas:
ModoTransporteCerebroPropietarioNotas
realtimegateway-relayagent-consultGatewayAudio de proveedor full-duplex puenteado a través del Gateway; las llamadas a herramientas se enrutan por la herramienta agent-consult.
transcriptiongateway-relaynoneGatewaySolo STT en streaming; los llamadores envían audio de entrada y reciben eventos de transcripción.
stt-ttsmanaged-roomagent-consultSala nativa/clienteSalas de estilo pulsar para hablar y walkie-talkie donde el cliente posee la captura/reproducción y el Gateway posee el estado del turno.
stt-ttsmanaged-roomdirect-toolsSala nativa/clienteModo de sala solo para administradores para superficies propias de confianza que ejecutan directamente acciones de herramientas del Gateway.
Mapa de métodos para lectores que migran desde las familias anteriores talk.realtime.* / talk.transcription.* / talk.handoff.* (todas eliminadas):
AnteriorNuevo
talk.realtime.sessiontalk.client.create
talk.realtime.toolCalltalk.client.toolCall
talk.realtime.relayAudiotalk.session.appendAudio
talk.realtime.relayCanceltalk.session.cancelOutput o talk.session.cancelTurn
talk.realtime.relayToolResulttalk.session.submitToolResult
talk.realtime.relayStoptalk.session.close
talk.transcription.sessiontalk.session.create({ mode: "transcription" })
talk.transcription.relayAudiotalk.session.appendAudio
talk.transcription.relayCanceltalk.session.cancelTurn
talk.transcription.relayStoptalk.session.close
talk.handoff.createtalk.session.create({ transport: "managed-room" })
talk.handoff.jointalk.session.join
talk.handoff.revoketalk.session.close
El vocabulario de control unificado también es deliberadamente limitado:
MétodoSe aplica aContrato
talk.session.appendAudiorealtime/gateway-relay, transcription/gateway-relayAñade un fragmento de audio PCM en base64 a la sesión de proveedor propiedad de la misma conexión Gateway.
talk.session.startTurnstt-tts/managed-roomInicia un turno de usuario de sala administrada.
talk.session.endTurnstt-tts/managed-roomFinaliza el turno activo después de la validación de turno obsoleto.
talk.session.cancelTurntodas las sesiones propiedad de GatewayCancela el trabajo activo de captura/proveedor/agente/TTS para un turno.
talk.session.cancelOutputrealtime/gateway-relayDetiene la salida de audio del asistente sin finalizar necesariamente el turno del usuario.
talk.session.submitToolResultrealtime/gateway-relayCompleta una llamada a herramienta de proveedor emitida por la retransmisión; pasa options.willContinue para salida provisional u options.suppressResponse para satisfacer la llamada sin otra respuesta del asistente.
talk.session.steersesiones Talk respaldadas por agenteEnvía control hablado status, steer, cancel o followup a la ejecución incrustada activa resuelta desde la sesión Talk.
talk.session.closetodas las sesiones unificadasDetiene sesiones de retransmisión o revoca el estado de sala administrada, y luego olvida el id de sesión unificada.
No introduzcas casos especiales de proveedor o plataforma en core para que esto funcione. Core posee la semántica de sesiones Talk. Los plugins de proveedor poseen la configuración de sesiones de proveedor. Voice-call y Google Meet poseen adaptadores de telefonía/reuniones. El navegador y las apps nativas poseen la UX de captura/reproducción del dispositivo.

Calendario de eliminación

CuándoQué ocurre
AhoraLas superficies obsoletas emiten advertencias en tiempo de ejecución.
Fecha removeAfter de cada registro compatEsa superficie específica es elegible para eliminación; pnpm plugins:boundary-report --fail-on-eligible-compat hace fallar CI una vez pasada la fecha.
Próxima versión principalCualquier superficie que aún no haya migrado se elimina; los plugins que todavía las usen fallarán.
Todos los plugins core ya han migrado. Los plugins externos deben migrar antes de la próxima versión principal. Ejecuta pnpm plugins:boundary-report para ver qué registros compat vencen antes para las superficies que usa tu plugin.

Suprimir temporalmente las advertencias

OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
Esta es una vía de escape temporal, no una solución permanente.

Relacionado