Registro de compatibilidad
Los contratos de compatibilidad de plugins se rastrean en el registro central ensrc/plugins/compat/registry.ts. Cada registro tiene:
- un código de compatibilidad estable
- estado:
active,deprecated,removal-pendingoremoved - propietario:
sdk,config,setup,channel,provider,plugin-execution,agent-runtimeocore - fechas de introducción y desuso cuando corresponda
- orientación de reemplazo
- documentación, diagnósticos y pruebas que cubren el comportamiento antiguo y el nuevo
src/commands/doctor/shared/deprecation-compat.ts. Esos registros cubren formas antiguas de configuración, diseños del registro de instalaciones y shims de reparación que quizá deban permanecer disponibles después de que se elimine la ruta de compatibilidad del runtime.
Los barridos de release deben comprobar ambos registros. No elimines una migración de doctor solo porque haya expirado el registro de compatibilidad de runtime o de configuración correspondiente; primero verifica que no haya una ruta de actualización compatible que todavía necesite la reparación. Vuelve a validar también cada anotación de reemplazo durante la planificación de release, ya que la propiedad de plugins y la huella de configuración pueden cambiar a medida que los proveedores y canales salen del core.
Política de desuso
OpenClaw no debe eliminar un contrato de plugin documentado en el mismo release que introduce su reemplazo. Secuencia de migración:- Agrega el contrato nuevo.
- Mantén el comportamiento antiguo conectado mediante un adaptador de compatibilidad con nombre.
- Emite diagnósticos o advertencias cuando los autores de plugins puedan actuar.
- Documenta el reemplazo y el calendario.
- Prueba las rutas antigua y nueva.
- Espera durante la ventana de migración anunciada.
- Elimina solo con aprobación explícita de release con cambios incompatibles.
active en su lugar.
Áreas de compatibilidad actuales
Actualmente, el registro rastrea alrededor de 70 códigos de compatibilidad en estas áreas. El código nuevo de plugins debe usar el reemplazo de cada área y de la guía de migración específica; los plugins existentes pueden seguir usando una ruta de compatibilidad hasta que la documentación, los diagnósticos y las notas de release anuncien una ventana de eliminación.- importaciones amplias heredadas del SDK, como
openclaw/plugin-sdk/compat - formas heredadas de plugins solo con hooks y
before_agent_start - nombres heredados de hooks de limpieza
api.on("deactivate", ...)mientras los plugins migran agateway_stop - puntos de entrada heredados de plugins
activate(api)mientras los plugins migran aregister(api) - alias heredados del SDK como
openclaw/extension-api,openclaw/plugin-sdk/channel-runtime, constructores de estadoopenclaw/plugin-sdk/command-auth,openclaw/plugin-sdk/test-utils(reemplazado por subrutas de prueba enfocadasopenclaw/plugin-sdk/*) y los alias de tipoClawdbotConfig/OpenClawSchemaType - allowlist de plugins incluidos y comportamiento de habilitación
- metadatos heredados de manifiesto de variables de entorno de proveedores/canales
- hooks heredados de plugins de proveedor y alias de tipo mientras los proveedores migran a hooks explícitos de catálogo, autenticación, razonamiento, replay y transporte
- alias heredados de runtime como
api.runtime.taskFlow,api.runtime.subagent.getSession,api.runtime.stty los obsoletosapi.runtime.config.loadConfig()/api.runtime.config.writeConfigFile(...) - campos planos de callback de WhatsApp
WebInboundMessage(ver abajo) - campos de admisión de nivel superior de WhatsApp
WebInboundMessage(ver abajo) - registro dividido heredado de plugins de memoria mientras los plugins de memoria migran a
registerMemoryCapability - registro heredado específico de memoria de proveedores de embeddings mientras los proveedores de embeddings migran a
api.registerEmbeddingProvider(...)ycontracts.embeddingProviders - helpers heredados del SDK de canales para esquemas de mensajes nativos, control de menciones, formato de sobres entrantes y anidamiento de capacidades de aprobación
- alias heredados de helpers de clave de ruta de canal y objetivo comparable mientras los plugins migran a
openclaw/plugin-sdk/channel-route - sugerencias de activación que se reemplazan por propiedad de contribuciones del manifiesto
- fallback de runtime de
setup-apimientras los descriptores de configuración inicial migran a metadatos fríossetup.requiresRuntime: false - hooks
discoveryde proveedores mientras los hooks de catálogo de proveedores migran acatalog.run(...) - metadatos
showConfigured/showInSetupde canales mientras los paquetes de canales migran aopenclaw.channel.exposure - claves heredadas de configuración de políticas de runtime mientras doctor migra operadores a
agentRuntime - fallback de metadatos generados de configuración de canales incluidos mientras llegan los metadatos
channelConfigscon registro primero - flags de entorno heredados de deshabilitación del registro persistido de plugins y migración de instalaciones mientras los flujos de reparación migran operadores a
openclaw plugins registry --refreshyopenclaw doctor --fix - rutas heredadas de configuración de búsqueda web, obtención web y x_search propiedad de plugins mientras doctor las migra a
plugins.entries.<plugin>.config - configuración heredada creada con
plugins.installsy alias de rutas de carga de plugins incluidos mientras los metadatos de instalación se mueven al ledger de plugins administrado por estado
Alias planos de callbacks entrantes de WhatsApp
Los callbacks del runtime de WhatsApp entreganWebInboundMessage: los contextos canónicos anidados event, payload, quote, group y platform, además de alias planos obsoletos para los campos de callback enviados. El código nuevo de callbacks debe leer los contextos anidados. El código que construye mensajes de callback anidados limpios puede usar WebInboundCallbackMessage; los listeners de compatibilidad que todavía inyectan mensajes antiguos planos de prueba o de plugins deben usar
LegacyFlatWebInboundMessage o WebInboundMessageInput.
Los alias planos permanecen disponibles hasta el 2026-08-30; esa ventana se aplica solo al acceso mediante alias planos, no a la forma anidada, que es el contrato canónico del runtime. La anotación TypeScript @deprecated de cada alias plano nombra su reemplazo anidado exacto. Ejemplos comunes:
id,timestampeisBatchedse mueven bajoevent.body,mediaPath,mediaType,mediaFileName,mediaUrl,location, yuntrustedStructuredContextse mueven bajopayload.to,chatId, campos de remitente/propio,sendComposing,reply(...)ysendMedia(...)se mueven bajoplatform.- Los campos
replyTo*se mueven bajoquote; los campos de asunto/participante/mención de grupo se mueven bajogroup.
payload.untrustedStructuredContext se extrae de payloads de proveedores entrantes. Los plugins deben inspeccionar label, source y type antes de tratar su payload como autoritativo.
Campos de admisión entrante de WhatsApp
Los mensajes de callback aceptados de WhatsApp llevanadmission, un sobre público seguro para la decisión de control de acceso que admitió el mensaje. El código nuevo de callbacks debe leer los datos de admisión desde msg.admission en lugar de los campos de admisión de nivel superior más antiguos.
Los campos de nivel superior permanecen disponibles hasta el 2026-08-30. La anotación TypeScript @deprecated de cada campo nombra su reemplazo:
fromyconversationIdse mueven aadmission.conversation.id.accountIdse mueve aadmission.accountId.accessControlPassedes una vista de compatibilidad derivada deadmission.ingress.decision === "allow"; en mensajes que ya llevanadmission, escribir el booleano heredado no reescribe el grafo de ingreso.chatTypese mueve aadmission.conversation.kind.
Paquete inspector de plugins
El inspector de plugins debe vivir fuera del repositorio core de OpenClaw como un paquete/repositorio separado respaldado por los contratos versionados de compatibilidad y manifiesto. La CLI inicial debe ser:--json para salida estable legible por máquina en anotaciones de CI. El core de OpenClaw debe exponer contratos y fixtures que el inspector pueda consumir, pero no debe publicar el binario del inspector desde el paquete principal openclaw.
Carril de aceptación para mantenedores
Usa Blacksmith Testbox respaldado por Crabbox para el carril de aceptación de paquete instalable al validar el inspector externo contra paquetes de plugins de OpenClaw. Ejecútalo desde un checkout limpio de OpenClaw después de construir el paquete:Notas de release
Las notas de release deben incluir los próximos desusos de plugins con fechas objetivo y enlaces a documentación de migración, antes de que una ruta de compatibilidad pase aremoval-pending o removed.