Plugins
Compatibilidade do Plugin
OpenClaw mantém contratos de plugins mais antigos conectados por meio de adaptadores de compatibilidade nomeados antes de removê-los. Isso protege plugins agrupados e externos existentes enquanto os contratos do SDK, manifesto, configuração, config e runtime do agente evoluem.
Registro de compatibilidade
Os contratos de compatibilidade de plugins são rastreados no registro central em
src/plugins/compat/registry.ts.
Cada registro tem:
- um código de compatibilidade estável
- status:
active,deprecated,removal-pendingouremoved - proprietário: SDK, config, configuração, canal, provedor, execução de plugin, runtime do agente ou core
- datas de introdução e depreciação quando aplicável
- orientação de substituição
- docs, diagnósticos e testes que cobrem o comportamento antigo e novo
O registro é a fonte para o planejamento dos mantenedores e futuras verificações do inspetor de plugins. Se um comportamento voltado para plugins mudar, adicione ou atualize o registro de compatibilidade na mesma alteração que adiciona o adaptador.
A compatibilidade de reparo e migração do Doctor é rastreada separadamente em
src/commands/doctor/shared/deprecation-compat.ts. Esses registros cobrem
formatos antigos de config, layouts de registro de instalação e shims de reparo
que talvez precisem permanecer disponíveis depois que o caminho de
compatibilidade de runtime for removido.
Varreduras de release devem verificar ambos os registros. Não exclua uma migração do Doctor apenas porque o registro correspondente de compatibilidade de runtime ou config expirou; primeiro verifique se não há nenhum caminho de atualização com suporte que ainda precise do reparo. Revalide também cada anotação de substituição durante o planejamento da release, porque a propriedade de plugins e a superfície de config podem mudar à medida que provedores e canais saem do core.
Pacote do inspetor de plugins
O inspetor de plugins deve ficar fora do repositório principal do OpenClaw como um pacote/repositório separado, apoiado pelos contratos versionados de compatibilidade e manifesto.
A CLI do primeiro dia deve ser:
openclaw-plugin-inspector ./my-plugin
Ela deve emitir:
- validação de manifesto/esquema
- a versão de compatibilidade de contrato que está sendo verificada
- verificações de metadados de instalação/origem
- verificações de importação de caminho frio
- avisos de depreciação e compatibilidade
Use --json para saída estável legível por máquina em anotações de CI. O core do
OpenClaw deve expor contratos e fixtures que o inspetor possa consumir, mas não
deve publicar o binário do inspetor a partir do pacote principal openclaw.
Linha de aceitação para mantenedores
Use Blacksmith Testbox para a linha de aceitação do pacote instalável ao validar o inspetor externo contra pacotes de plugins do OpenClaw. Execute a partir de um checkout limpo do OpenClaw depois que o pacote for compilado:
blacksmith testbox warmup ci-check-testbox.yml --ref main --idle-timeout 90
blacksmith testbox run --id <tbx_id> "pnpm install && pnpm build && npm exec --yes @openclaw/[email protected] -- ./extensions/telegram --json"
blacksmith testbox run --id <tbx_id> "npm exec --yes @openclaw/[email protected] -- ./extensions/discord --json"
blacksmith testbox run --id <tbx_id> "npm exec --yes @openclaw/[email protected] -- <clawhub-plugin-dir> --json"
blacksmith testbox stop <tbx_id>
Mantenha essa linha opt-in para mantenedores, porque ela instala um pacote npm externo e pode inspecionar pacotes de plugins clonados fora do repositório. As proteções do repositório local cobrem o mapa de exportação do SDK, metadados do registro de compatibilidade, redução de importações obsoletas do SDK e limites de importação de extensões agrupadas; a prova do inspetor no Testbox cobre o pacote como autores externos de plugins o consomem.
Política de depreciação
O OpenClaw não deve remover um contrato de plugin documentado na mesma release que introduz sua substituição.
A sequência de migração é:
- Adicione o novo contrato.
- Mantenha o comportamento antigo conectado por meio de um adaptador de compatibilidade nomeado.
- Emita diagnósticos ou avisos quando autores de plugins puderem agir.
- Documente a substituição e o cronograma.
- Teste os caminhos antigo e novo.
- Aguarde durante a janela de migração anunciada.
- Remova somente com aprovação explícita de release com breaking change.
Registros obsoletos devem incluir uma data de início do aviso, substituição, link
de docs e data final de remoção não mais que três meses após o início do aviso.
Não adicione um caminho de compatibilidade obsoleto com uma janela de remoção sem
prazo definido, a menos que os mantenedores decidam explicitamente que é
compatibilidade permanente e o marquem como active.
Áreas de compatibilidade atuais
Os registros de compatibilidade atuais incluem:
- importações amplas legadas do SDK, como
openclaw/plugin-sdk/compat - formatos legados de plugin somente com hooks e
before_agent_start - pontos de entrada legados de plugin
activate(api)enquanto plugins migram pararegister(api) - aliases legados do SDK, como
openclaw/extension-api,openclaw/plugin-sdk/channel-runtime, construtores de statusopenclaw/plugin-sdk/command-auth,openclaw/plugin-sdk/test-utils(substituídos por subcaminhos de teste focados deopenclaw/plugin-sdk/*) e os aliases de tipoClawdbotConfig/OpenClawSchemaType - comportamento de allowlist e ativação de plugins agrupados
- metadados legados de manifesto de variáveis de ambiente de provedor/canal
- hooks legados de plugins de provedor e aliases de tipo enquanto provedores migram para hooks explícitos de catálogo, autenticação, raciocínio, reprodução e transporte
- aliases legados de runtime, como
api.runtime.taskFlow,api.runtime.subagent.getSession,api.runtime.stte os obsoletosapi.runtime.config.loadConfig()/api.runtime.config.writeConfigFile(...) - registro dividido legado de plugin de memória enquanto plugins de memória migram
para
registerMemoryCapability - helpers legados do SDK de canal para esquemas de mensagens nativas, bloqueio por menções, formatação de envelope de entrada e aninhamento de capacidade de aprovação
- aliases legados de chave de rota de canal e helper de destino comparável enquanto
plugins migram para
openclaw/plugin-sdk/channel-route - dicas de ativação que estão sendo substituídas por propriedade de contribuições de manifesto
- fallback de runtime de
setup-apienquanto descritores de configuração migram para metadados friossetup.requiresRuntime: false - hooks
discoveryde provedor enquanto hooks de catálogo de provedor migram paracatalog.run(...) - metadados de canal
showConfigured/showInSetupenquanto pacotes de canal migram paraopenclaw.channel.exposure - chaves legadas de config de política de runtime enquanto o Doctor migra operadores
para
agentRuntime - fallback gerado de metadados de config de canal agrupado enquanto metadados
channelConfigscom registro primeiro são lançados - flags de ambiente persistidas de desativação do registro de plugins e migração de
instalação enquanto fluxos de reparo migram operadores para
openclaw plugins registry --refresheopenclaw doctor --fix - caminhos legados de config de pesquisa web, busca web e x_search pertencentes a
plugins enquanto o Doctor os migra para
plugins.entries.<plugin>.config - config autorada legada de
plugins.installse aliases de caminho de carregamento de plugins agrupados enquanto metadados de instalação migram para o registro de plugins gerenciado por estado
Novo código de plugin deve preferir a substituição listada no registro e no guia de migração específico. Plugins existentes podem continuar usando um caminho de compatibilidade até que docs, diagnósticos e notas de release anunciem uma janela de remoção.
Notas de release
As notas de release devem incluir depreciações futuras de plugins com datas-alvo
e links para docs de migração. Esse aviso precisa acontecer antes que um caminho
de compatibilidade passe para removal-pending ou removed.