Pular para o conteúdo principal
OpenClaw passou de uma ampla camada de compatibilidade retroativa para uma arquitetura moderna de Plugins com importações focadas e documentadas. Se o seu Plugin foi criado antes da nova arquitetura, este guia ajuda você a migrar.

O que está mudando

O sistema antigo de Plugins fornecia duas superfícies totalmente abertas que permitiam que Plugins importassem qualquer coisa de que precisassem a partir de um único ponto de entrada:
  • openclaw/plugin-sdk/compat - uma única importação que reexportava dezenas de auxiliares. Ela foi introduzida para manter Plugins mais antigos baseados em hooks funcionando enquanto a nova arquitetura de Plugins estava sendo criada.
  • openclaw/plugin-sdk/infra-runtime - um amplo barrel de auxiliares de runtime que misturava eventos do sistema, estado de Heartbeat, filas de entrega, auxiliares de fetch/proxy, auxiliares de arquivos, tipos de aprovação e utilitários não relacionados.
  • openclaw/plugin-sdk/config-runtime - um amplo barrel de compatibilidade de configuração que ainda carrega auxiliares obsoletos de carregamento/gravação direta durante a janela de migração.
  • openclaw/extension-api - uma ponte que dava aos Plugins acesso direto a auxiliares do lado do host, como o executor de agente incorporado.
  • api.registerEmbeddedExtensionFactory(...) - um hook removido de extensão empacotada somente do executor incorporado que podia observar eventos do executor incorporado, como tool_result.
As amplas superfícies de importação agora estão obsoletas. Elas ainda funcionam em runtime, mas novos Plugins não devem usá-las, e Plugins existentes devem migrar antes que a próxima versão principal as remova. A API de registro de fábrica de extensão somente do executor incorporado foi removida; use middleware de resultado de ferramenta em vez disso. OpenClaw não remove nem reinterpreta comportamento documentado de Plugins na mesma alteração que introduz uma substituição. Alterações de contrato incompatíveis precisam primeiro passar por um adaptador de compatibilidade, diagnósticos, documentação e uma janela de obsolescência. Isso se aplica a importações do SDK, campos de manifesto, APIs de configuração, hooks e comportamento de registro em runtime.
A camada de compatibilidade retroativa será removida em uma futura versão principal. Plugins que ainda importarem dessas superfícies deixarão de funcionar quando isso acontecer. Registros legados de fábrica de extensão incorporada já não são mais carregados.

Por que isso mudou

A abordagem antiga causava problemas:
  • Inicialização lenta - importar um auxiliar carregava dezenas de módulos não relacionados
  • Dependências circulares - reexportações amplas facilitavam a criação de ciclos de importação
  • Superfície de API pouco clara - não havia como saber quais exportações eram estáveis versus internas
O SDK moderno de Plugins corrige isso: cada caminho de importação (openclaw/plugin-sdk/\<subpath\>) é um módulo pequeno e autocontido, com propósito claro e contrato documentado. Seams legados de conveniência de provedor para canais empacotados também foram removidos. Seams auxiliares com marca de canal eram atalhos privados do monorepo, não contratos estáveis de Plugins. Use subcaminhos genéricos e estreitos do SDK em vez disso. Dentro do workspace de Plugins empacotados, mantenha auxiliares pertencentes ao provedor no próprio api.ts ou runtime-api.ts desse Plugin. Exemplos atuais de provedores empacotados:
  • Anthropic mantém auxiliares de stream específicos do Claude em seu próprio seam api.ts / contract-api.ts
  • OpenAI mantém construtores de provedor, auxiliares de modelo padrão e construtores de provedor realtime em seu próprio api.ts
  • OpenRouter mantém o construtor de provedor e auxiliares de onboarding/configuração em seu próprio api.ts

Plano de migração do Talk e voz realtime

O código de voz realtime, telefonia, reunião e Talk no navegador está mudando de contabilidade de turnos local à superfície para um controlador compartilhado de sessão Talk exportado por openclaw/plugin-sdk/realtime-voice. O novo controlador é responsável pelo envelope comum de eventos Talk, estado de turno ativo, estado de captura, estado de áudio de saída, histórico recente de eventos e rejeição de turnos obsoletos. Plugins de provedor devem continuar sendo responsáveis por sessões realtime específicas de fornecedor; Plugins de superfície devem continuar sendo responsáveis por captura, reprodução, telefonia e particularidades de reunião. Esta migração do Talk é intencionalmente limpa e incompatível:
  1. Mantenha o controlador compartilhado e as primitivas de runtime em plugin-sdk/realtime-voice.
  2. Mova as superfícies empacotadas para o controlador compartilhado: retransmissão do navegador, handoff de sala gerenciada, realtime de chamada de voz, STT por streaming de chamada de voz, Google Meet realtime e push-to-talk nativo.
  3. Substitua as antigas famílias de RPC do Talk pela API final talk.session.* e talk.client.*.
  4. Anuncie um canal de eventos Talk ao vivo no Gateway hello-ok.features.events: talk.event.
  5. Exclua o antigo endpoint HTTP realtime e qualquer caminho de substituição de instruções em tempo de solicitação.
Novo código não deve chamar createTalkEventSequencer(...) diretamente, a menos que esteja implementando um adaptador de baixo nível ou fixture de teste. Prefira o controlador compartilhado para que eventos com escopo de turno não possam ser emitidos sem um id de turno, chamadas obsoletas de turnEnd / turnCancel não possam limpar um turno ativo mais recente, e eventos do ciclo de vida de áudio de saída permaneçam consistentes entre telefonia, reuniões, retransmissão do navegador, handoff de sala gerenciada e clientes Talk nativos. O formato alvo da 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" });
Sessões WebRTC/websocket de provedor pertencentes ao navegador usam talk.client.create, porque o navegador é responsável pela negociação do provedor e pelo transporte de mídia, enquanto o Gateway é responsável por credenciais, instruções e política de ferramentas. talk.session.* é a superfície comum gerenciada pelo Gateway para realtime via gateway-relay, transcrição via gateway-relay e sessões STT/TTS nativas de sala gerenciada. Configurações legadas que colocavam seletores realtime ao lado de talk.provider / talk.providers devem ser reparadas com openclaw doctor --fix; o Talk em runtime não reinterpreta configuração de provedor de fala/TTS como configuração de provedor realtime. As combinações compatíveis de talk.session.create são intencionalmente pequenas:
ModoTransporteCérebroProprietárioObservações
realtimegateway-relayagent-consultGatewayÁudio de provedor full-duplex encaminhado pelo Gateway; chamadas de ferramenta são roteadas pela ferramenta agent-consult.
transcriptiongateway-relaynoneGatewayApenas STT por streaming; chamadores enviam áudio de entrada e recebem eventos de transcrição.
stt-ttsmanaged-roomagent-consultSala nativa/clienteSalas no estilo push-to-talk e walkie-talkie em que o cliente é responsável por captura/reprodução e o Gateway é responsável pelo estado de turno.
stt-ttsmanaged-roomdirect-toolsSala nativa/clienteModo de sala somente para administradores para superfícies primárias confiáveis que executam ações de ferramenta do Gateway diretamente.
Mapa de métodos removidos:
AntigoNovo
talk.realtime.sessiontalk.client.create
talk.realtime.toolCalltalk.client.toolCall
talk.realtime.relayAudiotalk.session.appendAudio
talk.realtime.relayCanceltalk.session.cancelOutput ou 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
O vocabulário de controle unificado também é deliberadamente estreito:
MétodoAplica-se aContrato
talk.session.appendAudiorealtime/gateway-relay, transcription/gateway-relayAcrescenta um bloco de áudio PCM em base64 à sessão do provedor pertencente à mesma conexão do Gateway.
talk.session.startTurnstt-tts/managed-roomInicia um turno de usuário em managed-room.
talk.session.endTurnstt-tts/managed-roomEncerra o turno ativo após a validação de turno obsoleto.
talk.session.cancelTurntodas as sessões pertencentes ao GatewayCancela o trabalho ativo de captura/provedor/agente/TTS de um turno.
talk.session.cancelOutputrealtime/gateway-relayInterrompe a saída de áudio do assistente sem necessariamente encerrar o turno do usuário.
talk.session.submitToolResultrealtime/gateway-relayConclui uma chamada de ferramenta do provedor emitida pelo relay; passe options.willContinue para saída intermediária ou options.suppressResponse para satisfazer a chamada sem outra resposta do assistente.
talk.session.steersessões Talk com suporte de agenteEnvia controle falado status, steer, cancel ou followup para a execução incorporada ativa resolvida a partir da sessão Talk.
talk.session.closetodas as sessões unificadasInterrompe sessões de relay ou revoga o estado de managed-room e, em seguida, esquece o id da sessão unificada.
Não introduza casos especiais de provedor ou plataforma no core para fazer isso funcionar. O core é responsável pela semântica de sessão Talk. Os Plugins de provedor são responsáveis pela configuração de sessão do fornecedor. Chamadas de voz e Google Meet são responsáveis por adaptadores de telefonia/reunião. Navegador e aplicativos nativos são responsáveis pela UX de captura/reprodução do dispositivo.

Política de compatibilidade

Para Plugins externos, o trabalho de compatibilidade segue esta ordem:
  1. adicionar o novo contrato
  2. manter o comportamento antigo conectado por meio de um adaptador de compatibilidade
  3. emitir um diagnóstico ou aviso que nomeie o caminho antigo e a substituição
  4. cobrir ambos os caminhos em testes
  5. documentar a depreciação e o caminho de migração
  6. remover somente após a janela de migração anunciada, geralmente em uma versão principal
Mantenedores podem auditar a fila de migração atual com pnpm plugins:boundary-report. Use pnpm plugins:boundary-report:summary para contagens compactas, --owner <id> para um Plugin ou proprietário de compatibilidade, e pnpm plugins:boundary-report:ci quando um gate de CI deve falhar em registros de compatibilidade vencidos, importações reservadas do SDK entre proprietários ou subcaminhos reservados do SDK não utilizados. O relatório agrupa registros de compatibilidade obsoletos por data de remoção, conta referências locais de código/docs, expõe importações reservadas do SDK entre proprietários e resume a ponte privada do SDK do host de memória para que a limpeza de compatibilidade permaneça explícita em vez de depender de buscas ad hoc. Subcaminhos reservados do SDK devem ter uso de proprietário rastreado; exports reservados de auxiliares não utilizados devem ser removidos do SDK público. Se um campo de manifesto ainda for aceito, autores de Plugins podem continuar usando-o até que a documentação e os diagnósticos digam o contrário. Código novo deve preferir a substituição documentada, mas Plugins existentes não devem quebrar durante versões menores ordinárias.

Como migrar

1

Migrar auxiliares de carregamento/gravação de configuração de runtime

Plugins empacotados devem parar de chamar api.runtime.config.loadConfig() e api.runtime.config.writeConfigFile(...) diretamente. Prefira a configuração que já foi passada para o caminho de chamada ativo. Handlers de longa duração que precisam do snapshot atual do processo podem usar api.runtime.config.current(). Ferramentas de agente de longa duração devem usar ctx.getRuntimeConfig() do contexto da ferramenta dentro de execute para que uma ferramenta criada antes de uma gravação de configuração ainda veja a configuração de runtime atualizada.Gravações de configuração devem passar pelos auxiliares transacionais e escolher uma política pós-gravação:
await api.runtime.config.mutateConfigFile({
  afterWrite: { mode: "auto" },
  mutate(draft) {
    draft.plugins ??= {};
  },
});
Use afterWrite: { mode: "restart", reason: "..." } quando o chamador souber que a alteração exige uma reinicialização limpa do gateway, e afterWrite: { mode: "none", reason: "..." } somente quando o chamador for responsável pelo acompanhamento e deliberadamente quiser suprimir o planejador de recarregamento. Resultados de mutação incluem um resumo tipado followUp para testes e logs; o gateway permanece responsável por aplicar ou agendar a reinicialização. loadConfig e writeConfigFile permanecem como auxiliares de compatibilidade obsoletos para Plugins externos durante a janela de migração e avisam uma vez com o código de compatibilidade runtime-config-load-write. Plugins empacotados e código de runtime do repo são protegidos por guardrails de scanner em pnpm check:deprecated-api-usage e pnpm check:no-runtime-action-load-config: novo uso de Plugin de produção falha imediatamente, gravações diretas de configuração falham, métodos do servidor gateway devem usar o snapshot de runtime da solicitação, auxiliares de envio/ação/cliente de canal de runtime devem receber configuração de seu limite, e módulos de runtime de longa duração têm zero chamadas ambientes loadConfig() permitidas.Novo código de Plugin também deve evitar importar o barrel amplo de compatibilidade openclaw/plugin-sdk/config-runtime. Use o subcaminho estreito do SDK que corresponde ao trabalho:
NecessidadeImportação
Tipos de configuração como OpenClawConfigopenclaw/plugin-sdk/config-contracts
Asserções de configuração já carregada e lookup de configuração de entrada de Pluginopenclaw/plugin-sdk/plugin-config-runtime
Leituras do snapshot atual de runtimeopenclaw/plugin-sdk/runtime-config-snapshot
Gravações de configuraçãoopenclaw/plugin-sdk/config-mutation
Auxiliares de armazenamento de sessãoopenclaw/plugin-sdk/session-store-runtime
Configuração de tabela Markdownopenclaw/plugin-sdk/markdown-table-runtime
Auxiliares de runtime de política de grupoopenclaw/plugin-sdk/runtime-group-policy
Resolução de entrada secretaopenclaw/plugin-sdk/secret-input-runtime
Substituições de modelo/sessãoopenclaw/plugin-sdk/model-session-runtime
Plugins empacotados e seus testes são protegidos por scanner contra o barrel amplo para que importações e mocks permaneçam locais ao comportamento de que precisam. O barrel amplo ainda existe para compatibilidade externa, mas código novo não deve depender dele.
2

Migrar extensões incorporadas de resultado de ferramenta para middleware

Plugins empacotados devem substituir handlers de resultado de ferramenta exclusivos do embedded-runner api.registerEmbeddedExtensionFactory(...) por middleware neutro em relação a runtime.
// OpenClaw and Codex runtime dynamic tools
api.registerAgentToolResultMiddleware(async (event) => {
  return compactToolResult(event);
}, {
  runtimes: ["openclaw", "codex"],
});
Atualize o manifesto do Plugin ao mesmo tempo:
{
  "contracts": {
    "agentToolResultMiddleware": ["openclaw", "codex"]
  }
}
Plugins instalados também podem registrar middleware de resultado de ferramenta quando estão explicitamente habilitados e declaram todos os runtimes direcionados em contracts.agentToolResultMiddleware. Registros de middleware instalado não declarados são rejeitados.
3

Migrar handlers nativos de aprovação para fatos de capability

Plugins de canal com suporte a aprovação agora expõem comportamento nativo de aprovação por meio de approvalCapability.nativeRuntime mais o registro compartilhado de contexto de runtime.Principais mudanças:
  • Substitua approvalCapability.handler.loadRuntime(...) por approvalCapability.nativeRuntime
  • Mova auth/entrega específicos de aprovação da fiação legada plugin.auth / plugin.approvals para approvalCapability
  • ChannelPlugin.approvals foi removido do contrato público de Plugin de canal; mova campos de entrega/native/render para approvalCapability
  • plugin.auth permanece apenas para fluxos de login/logout de canal; hooks de auth de aprovação ali não são mais lidos pelo core
  • Registre objetos de runtime pertencentes ao canal, como clientes, tokens ou apps Bolt, por meio de openclaw/plugin-sdk/channel-runtime-context
  • Não envie avisos de reroteamento pertencentes ao Plugin a partir de handlers nativos de aprovação; o core agora é responsável por avisos de roteado para outro lugar a partir de resultados reais de entrega
  • Ao passar channelRuntime para createChannelManager(...), forneça uma superfície real createPluginRuntime().channel. Stubs parciais são rejeitados.
Consulte /plugins/sdk-channel-plugins para o layout atual de capability de aprovação.
4

Auditar comportamento de fallback do wrapper do Windows

Se seu Plugin usa openclaw/plugin-sdk/windows-spawn, wrappers Windows .cmd/.bat não resolvidos agora falham de forma fechada, a menos que você passe explicitamente 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,
});
Se seu chamador não depende intencionalmente de fallback de shell, não defina allowShellFallback e trate o erro lançado em vez disso.
5

Encontrar importações obsoletas

Pesquise seu Plugin por importações de qualquer uma das superfícies 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

Substituir por importações focadas

Cada export da superfície antiga mapeia para um caminho de importação moderno específico:
// 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 auxiliares do lado do host, use o runtime de Plugin injetado em vez de importar diretamente:
// 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 });
O mesmo padrão se aplica a outros auxiliares de ponte legados:
Importação antigaEquivalente 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
auxiliares de armazenamento de sessãoapi.runtime.agent.session.*
7

Replace broad infra-runtime imports

openclaw/plugin-sdk/infra-runtime ainda existe para compatibilidade externa, mas código novo deve importar a superfície de auxiliares focada de que realmente precisa:
NecessidadeImportação
Auxiliares de fila de eventos do sistemaopenclaw/plugin-sdk/system-event-runtime
Auxiliares de ativação, evento e visibilidade de Heartbeatopenclaw/plugin-sdk/heartbeat-runtime
Drenagem da fila de entrega pendenteopenclaw/plugin-sdk/delivery-queue-runtime
Telemetria de atividade de canalopenclaw/plugin-sdk/channel-activity-runtime
Caches de deduplicação em memória e com persistênciaopenclaw/plugin-sdk/dedupe-runtime
Auxiliares seguros de caminho de arquivo/mídia localopenclaw/plugin-sdk/file-access-runtime
Busca ciente de dispatcheropenclaw/plugin-sdk/runtime-fetch
Auxiliares de proxy e busca protegidaopenclaw/plugin-sdk/fetch-runtime
Tipos de política de dispatcher SSRFopenclaw/plugin-sdk/ssrf-dispatcher
Tipos de solicitação/resolução de aprovaçãoopenclaw/plugin-sdk/approval-runtime
Auxiliares de payload de resposta de aprovação e comandosopenclaw/plugin-sdk/approval-reply-runtime
Auxiliares de formatação de errosopenclaw/plugin-sdk/error-runtime
Esperas de prontidão de transporteopenclaw/plugin-sdk/transport-ready-runtime
Auxiliares de token seguroopenclaw/plugin-sdk/secure-random-runtime
Concorrência limitada de tarefas assíncronasopenclaw/plugin-sdk/concurrency-runtime
Coerção numéricaopenclaw/plugin-sdk/number-runtime
Bloqueio assíncrono local ao processoopenclaw/plugin-sdk/async-lock-runtime
Bloqueios de arquivoopenclaw/plugin-sdk/file-lock
Plugins empacotados são protegidos por scanner contra infra-runtime, então o código do repositório não pode regredir para o barrel amplo.
8

Migrate channel route helpers

Novo código de rota de canal deve usar openclaw/plugin-sdk/channel-route. Os nomes antigos de chave de rota e destino comparável continuam como aliases de compatibilidade durante a janela de migração, mas novos plugins devem usar os nomes de rota que descrevem diretamente o comportamento:
Auxiliar antigoAuxiliar moderno
channelRouteIdentityKey(...)channelRouteDedupeKey(...)
channelRouteKey(...)channelRouteCompactKey(...)
ComparableChannelTargetChannelRouteParsedTarget
comparableChannelTargetsMatch(...)channelRouteTargetsMatchExact(...)
comparableChannelTargetsShareRoute(...)channelRouteTargetsShareConversation(...)
Os auxiliares de rota modernos normalizam { channel, to, accountId, threadId } de forma consistente entre aprovações nativas, supressão de respostas, deduplicação de entrada, entrega Cron e roteamento de sessão.Não adicione novos usos de ChannelMessagingAdapter.parseExplicitTarget ou dos auxiliares de rota carregada apoiados por parser (parseExplicitTargetForLoadedChannel ou resolveRouteTargetForLoadedChannel) nem de resolveChannelRouteTargetWithParser(...) de plugin-sdk/channel-route. Esses hooks estão obsoletos e permanecem apenas para plugins antigos durante a janela de migração. Novos plugins de canal devem usar messaging.targetResolver.resolveTarget(...) para normalização de id de destino e fallback de ausência no diretório, messaging.inferTargetChatType(...) quando o core precisa de um tipo de par antecipado, e messaging.resolveOutboundSessionRoute(...) para sessão nativa do provedor e identidade de thread.
9

Build and test

pnpm build
pnpm test -- my-plugin/

Referência de caminhos de importação

Caminho de importaçãoFinalidadeExportações principais
plugin-sdk/plugin-entryAuxiliar canônico de entrada de PlugindefinePluginEntry
plugin-sdk/coreReexportação guarda-chuva legada para definições/construtores de entrada de canaldefineChannelPluginEntry, createChatChannelPlugin
plugin-sdk/config-schemaExportação do esquema de configuração raizOpenClawSchema
plugin-sdk/provider-entryAuxiliar de entrada de provedor únicodefineSingleProviderPluginEntry
plugin-sdk/channel-coreDefinições e construtores focados de entrada de canaldefineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase
plugin-sdk/setupAuxiliares compartilhados do assistente de configuraçãoTradutor de configuração, prompts de lista de permissões, construtores de status de configuração
plugin-sdk/setup-runtimeAuxiliares de runtime durante a configuraçãocreateSetupTranslator, adaptadores de patch de configuração seguros para importação, auxiliares de notas de lookup, promptResolvedAllowFrom, splitSetupEntries, proxies de configuração delegada
plugin-sdk/setup-adapter-runtimeAlias obsoleto do adaptador de configuraçãoUse plugin-sdk/setup-runtime
plugin-sdk/setup-toolsAuxiliares de ferramentas de configuraçãoformatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR
plugin-sdk/account-coreAuxiliares de múltiplas contasAuxiliares de lista/configuração/controle de ação de contas
plugin-sdk/account-idAuxiliares de ID de contaDEFAULT_ACCOUNT_ID, normalização de ID de conta
plugin-sdk/account-resolutionAuxiliares de lookup de contaAuxiliares de lookup de conta + fallback padrão
plugin-sdk/account-helpersAuxiliares restritos de contaAuxiliares de lista de contas/ação de conta
plugin-sdk/channel-setupAdaptadores do assistente de configuraçãocreateOptionalChannelSetupSurface, createOptionalChannelSetupAdapter, createOptionalChannelSetupWizard, além de DEFAULT_ACCOUNT_ID, createTopLevelChannelDmPolicy, setSetupChannelEnabled, splitSetupEntries
plugin-sdk/channel-pairingPrimitivas de pareamento de DMcreateChannelPairingController
plugin-sdk/channel-reply-pipelineCabeamento de prefixo de resposta, digitação e entrega de origemcreateChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode
plugin-sdk/channel-config-helpersFábricas de adaptadores de configuração e auxiliares de acesso a DMcreateHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases
plugin-sdk/channel-config-schemaConstrutores de esquema de configuraçãoPrimitivas compartilhadas de esquema de configuração de canal e apenas o construtor genérico
plugin-sdk/bundled-channel-config-schemaEsquemas de configuração empacotadosApenas Plugins empacotados mantidos pelo OpenClaw; novos Plugins devem definir esquemas locais ao Plugin
plugin-sdk/channel-config-schema-legacyEsquemas de configuração empacotados obsoletosApenas alias de compatibilidade; use plugin-sdk/bundled-channel-config-schema para Plugins empacotados mantidos
plugin-sdk/telegram-command-configAuxiliares de configuração de comandos do TelegramNormalização de nome de comando, aparo de descrição, validação de duplicatas/conflitos
plugin-sdk/channel-policyResolução de política de grupo/DMresolveChannelGroupRequireMention
plugin-sdk/channel-lifecycleFachada de compatibilidade obsoletaUse plugin-sdk/channel-outbound
plugin-sdk/inbound-envelopeAuxiliares de envelope de entradaAuxiliares compartilhados de rota + construtor de envelope
plugin-sdk/channel-inboundAuxiliares de recebimento de entradaConstrução de contexto, formatação, raízes, executores, despacho de resposta preparada e predicados de despacho
plugin-sdk/messaging-targetsCaminho de importação obsoleto para análise de destinoUse plugin-sdk/channel-targets para auxiliares genéricos de análise de destino, plugin-sdk/channel-route para comparação de rota e messaging.targetResolver / messaging.resolveOutboundSessionRoute de propriedade do Plugin para resolução de destino específica do provedor
plugin-sdk/outbound-mediaAuxiliares de mídia de saídaCarregamento compartilhado de mídia de saída
plugin-sdk/outbound-send-depsFachada de compatibilidade obsoletaUse plugin-sdk/channel-outbound
plugin-sdk/channel-outboundAuxiliares de ciclo de vida de mensagens de saídaAdaptadores de mensagem, recibos, auxiliares de envio durável, auxiliares de pré-visualização/streaming ao vivo, opções de resposta, auxiliares de ciclo de vida, identidade de saída e planejamento de payload
plugin-sdk/channel-streamingFachada de compatibilidade obsoletaUse plugin-sdk/channel-outbound
plugin-sdk/outbound-runtimeFachada de compatibilidade obsoletaUse plugin-sdk/channel-outbound
plugin-sdk/thread-bindings-runtimeAuxiliares de vinculação de threadsCiclo de vida de vinculação de threads e auxiliares de adaptador
plugin-sdk/agent-media-payloadAuxiliares legados de payload de mídiaConstrutor de payload de mídia do agente para layouts de campo legados
plugin-sdk/channel-runtimeShim de compatibilidade obsoletoApenas utilitários legados de runtime de canal
plugin-sdk/channel-send-resultTipos de resultado de envioTipos de resultado de resposta
plugin-sdk/runtime-storeArmazenamento persistente de PlugincreatePluginRuntimeStore
plugin-sdk/runtimeAuxiliares amplos de runtimeAuxiliares de runtime/logging/backup/instalação de Plugin
plugin-sdk/runtime-envAuxiliares restritos de ambiente de runtimeAmbiente de logger/runtime, timeout, repetição e auxiliares de backoff
plugin-sdk/plugin-runtimeAuxiliares compartilhados de runtime de PluginAuxiliares de comandos/hooks/http/interativos de Plugin
plugin-sdk/hook-runtimeAuxiliares de pipeline de hookAuxiliares compartilhados de pipeline de Webhook/hook interno
plugin-sdk/lazy-runtimeAuxiliares de runtime lazycreateLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface
plugin-sdk/process-runtimeAuxiliares de processoAuxiliares compartilhados de exec
plugin-sdk/cli-runtimeAuxiliares de runtime de CLIFormatação de comandos, esperas, auxiliares de versão
plugin-sdk/gateway-runtimeAuxiliares de GatewayCliente de Gateway, auxiliar de início pronto para event loop, resolução de host LAN anunciado e auxiliares de patch de status de canal
plugin-sdk/config-runtimeShim de compatibilidade de configuração obsoletoPrefira config-contracts, plugin-config-runtime, runtime-config-snapshot e config-mutation
plugin-sdk/telegram-command-configAuxiliares de comando do TelegramAuxiliares de validação de comando do Telegram estáveis por fallback quando a superfície de contrato empacotada do Telegram está indisponível
plugin-sdk/approval-runtimeAuxiliares de prompt de aprovaçãoPayload de aprovação de exec/Plugin, auxiliares de capacidade/perfil de aprovação, roteamento/runtime de aprovação nativa e formatação estruturada de caminho de exibição de aprovação
plugin-sdk/approval-auth-runtimeAuxiliares de autenticação de aprovaçãoResolução de aprovador, autenticação de ação no mesmo chat
plugin-sdk/approval-client-runtimeAuxiliares de cliente de aprovaçãoAuxiliares nativos de perfil/filtro de aprovação de exec
plugin-sdk/approval-delivery-runtimeAuxiliares de entrega de aprovaçãoAdaptadores nativos de capacidade/entrega de aprovação
plugin-sdk/approval-gateway-runtimeAuxiliares de Gateway de aprovaçãoAuxiliar compartilhado de resolução de Gateway de aprovação
plugin-sdk/approval-handler-adapter-runtimeAuxiliares de adaptador de aprovaçãoAuxiliares leves de carregamento de adaptador de aprovação nativa para pontos de entrada quentes de canal
plugin-sdk/approval-handler-runtimeAuxiliares de manipulador de aprovaçãoAuxiliares mais amplos de runtime de manipulador de aprovação; prefira os pontos de integração mais restritos de adaptador/Gateway quando forem suficientes
plugin-sdk/approval-native-runtimeAuxiliares de destino de aprovaçãoAuxiliares nativos de vinculação de destino/conta de aprovação
plugin-sdk/approval-reply-runtimeAuxiliares de resposta de aprovaçãoAuxiliares de payload de resposta de aprovação de exec/Plugin
plugin-sdk/channel-runtime-contextAuxiliares de contexto de runtime de canalAuxiliares genéricos de registrar/obter/observar contexto de runtime de canal
plugin-sdk/security-runtimeAuxiliares de segurançaConfiança compartilhada, controle de DM, auxiliares de arquivo/caminho delimitados por raiz, conteúdo externo e auxiliares de coleta de segredos
plugin-sdk/ssrf-policyAuxiliares de política SSRFAuxiliares de lista de permissões de hosts e política de rede privada
plugin-sdk/ssrf-runtimeAuxiliares de runtime SSRFDispatcher fixado, fetch protegido, auxiliares de política SSRF
plugin-sdk/system-event-runtimeAuxiliares de evento do sistemaenqueueSystemEvent, peekSystemEventEntries
plugin-sdk/heartbeat-runtimeAuxiliares de HeartbeatAtivação, evento e auxiliares de visibilidade de Heartbeat
plugin-sdk/delivery-queue-runtimeAuxiliares de fila de entregadrainPendingDeliveries
plugin-sdk/channel-activity-runtimeAuxiliares de atividade de canalrecordChannelActivity
plugin-sdk/dedupe-runtimeAuxiliares de desduplicaçãoCaches de desduplicação em memória e com persistência
plugin-sdk/file-access-runtimeAuxiliares de acesso a arquivosAuxiliares seguros de caminho de arquivo/mídia local
plugin-sdk/transport-ready-runtimeAuxiliares de prontidão de transportewaitForTransportReady
plugin-sdk/exec-approvals-runtimeAuxiliares de política de aprovação de execloadExecApprovals, resolveExecApprovalsFromFile, ExecApprovalsFile
plugin-sdk/collection-runtimeAuxiliares de cache limitadopruneMapToMaxSize
plugin-sdk/diagnostic-runtimeAuxiliares de controle de diagnósticoisDiagnosticFlagEnabled, isDiagnosticsEnabled
plugin-sdk/error-runtimeAuxiliares de formatação de erroformatUncaughtError, isApprovalNotFoundError, auxiliares de grafo de erros
plugin-sdk/fetch-runtimeAuxiliares de fetch/proxy encapsuladosresolveFetch, auxiliares de proxy, auxiliares de opção de EnvHttpProxyAgent
plugin-sdk/host-runtimeAuxiliares de normalização de hostnormalizeHostname, normalizeScpRemoteHost
plugin-sdk/retry-runtimeAuxiliares de repetiçãoRetryConfig, retryAsync, executores de política
plugin-sdk/allow-fromFormatação de lista de permissões e mapeamento de entradaformatAllowFromLowercase, mapAllowlistResolutionInputs
plugin-sdk/command-authControle de comandos e auxiliares de superfície de comandoresolveControlCommandGate, auxiliares de autorização de remetente, auxiliares de registro de comandos incluindo formatação dinâmica de menu de argumentos
plugin-sdk/command-statusRenderizadores de status/ajuda de comandosbuildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage
plugin-sdk/secret-inputAnálise de entrada secretaAuxiliares de entrada secreta
plugin-sdk/webhook-ingressAuxiliares de solicitação de WebhookUtilitários de destino de Webhook
plugin-sdk/webhook-request-guardsAuxiliares de proteção de corpo de WebhookAuxiliares de leitura/limite de corpo de solicitação
plugin-sdk/reply-runtimeRuntime compartilhado de respostaDespacho de entrada, Heartbeat, planejador de resposta, divisão em partes
plugin-sdk/reply-dispatch-runtimeAuxiliares restritos de despacho de respostaFinalização, despacho de provedor e auxiliares de rótulo de conversa
plugin-sdk/reply-historyAuxiliares de histórico de respostascreateChannelHistoryWindow; exportações obsoletas de compatibilidade de auxiliares de map, como buildPendingHistoryContextFromMap, recordPendingHistoryEntry e clearHistoryEntriesIfEnabled
plugin-sdk/reply-referencePlanejamento de referência de respostacreateReplyReferencePlanner
plugin-sdk/reply-chunkingAuxiliares de divisão de resposta em partesAuxiliares de divisão de texto/markdown em partes
plugin-sdk/session-store-runtimeAuxiliares de armazenamento de sessãoCaminho de armazenamento + auxiliares de atualizado-em
plugin-sdk/state-pathsAuxiliares de caminho de estadoAuxiliares de diretório de estado e OAuth
plugin-sdk/routingAuxiliares de roteamento/chave de sessãoresolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, auxiliares de normalização de chave de sessão
plugin-sdk/status-helpersAuxiliares de status de canalConstrutores de resumo de status de canal/conta, padrões de estado de runtime, auxiliares de metadados de problema
plugin-sdk/target-resolver-runtimeAuxiliares de resolvedor de alvoAuxiliares compartilhados de resolvedor de alvo
plugin-sdk/string-normalization-runtimeAuxiliares de normalização de stringsAuxiliares de normalização de slug/string
plugin-sdk/request-urlAuxiliares de URL de requisiçãoExtrair URLs em string de entradas semelhantes a requisição
plugin-sdk/run-commandAuxiliares de comando com tempo limiteExecutor de comando com tempo limite e stdout/stderr normalizados
plugin-sdk/param-readersLeitores de parâmetrosLeitores comuns de parâmetros de ferramenta/CLI
plugin-sdk/tool-payloadExtração de payload de ferramentaExtrair payloads normalizados de objetos de resultado de ferramenta
plugin-sdk/tool-sendExtração de envio de ferramentaExtrair campos canônicos de alvo de envio dos argumentos de ferramenta
plugin-sdk/temp-pathAuxiliares de caminho temporárioAuxiliares compartilhados de caminho de download temporário
plugin-sdk/logging-coreAuxiliares de loggingLogger de subsistema e auxiliares de redação
plugin-sdk/markdown-table-runtimeAuxiliares de tabela MarkdownAuxiliares de modo de tabela Markdown
plugin-sdk/reply-payloadTipos de resposta de mensagemTipos de payload de resposta
plugin-sdk/provider-setupAuxiliares selecionados de configuração de provedor local/auto-hospedadoAuxiliares de descoberta/configuração de provedor auto-hospedado
plugin-sdk/self-hosted-provider-setupAuxiliares focados de configuração de provedor auto-hospedado compatível com OpenAIMesmos auxiliares de descoberta/configuração de provedor auto-hospedado
plugin-sdk/provider-auth-runtimeAuxiliares de autenticação de runtime de provedorAuxiliares de resolução de chave de API de runtime
plugin-sdk/provider-auth-api-keyAuxiliares de configuração de chave de API de provedorAuxiliares de onboarding/gravação de perfil de chave de API
plugin-sdk/provider-auth-resultAuxiliares de resultado de autenticação de provedorConstrutor padrão de resultado de autenticação OAuth
plugin-sdk/provider-selection-runtimeAuxiliares de seleção de provedorSeleção de provedor configurada ou automática e mesclagem de configuração bruta de provedor
plugin-sdk/provider-env-varsAuxiliares de variáveis de ambiente de provedorAuxiliares de consulta de variável de ambiente de autenticação de provedor
plugin-sdk/provider-model-sharedAuxiliares compartilhados de modelo/replay de provedorProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, construtores compartilhados de política de replay, auxiliares de endpoint de provedor e auxiliares de normalização de ID de modelo
plugin-sdk/provider-catalog-sharedAuxiliares compartilhados de catálogo de provedorfindCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat
plugin-sdk/provider-onboardPatches de onboarding de provedorAuxiliares de configuração de onboarding
plugin-sdk/provider-httpAuxiliares HTTP de provedorAuxiliares genéricos de capacidade HTTP/endpoint de provedor, incluindo auxiliares de formulário multipart para transcrição de áudio
plugin-sdk/provider-web-fetchAuxiliares de web-fetch de provedorAuxiliares de registro/cache de provedor de web-fetch
plugin-sdk/provider-web-search-config-contractAuxiliares de configuração de web-search de provedorAuxiliares restritos de configuração/credencial de web-search para provedores que não precisam de ligação de habilitação de Plugin
plugin-sdk/provider-web-search-contractAuxiliares de contrato de web-search de provedorAuxiliares restritos de contrato de configuração/credencial de web-search, como createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig e setters/getters de credenciais com escopo
plugin-sdk/provider-web-searchAuxiliares de web-search de provedorAuxiliares de registro/cache/runtime de provedor de web-search
plugin-sdk/provider-toolsAuxiliares de compatibilidade de ferramenta/esquema de provedorProviderToolCompatFamily, buildProviderToolCompatFamilyHooks e limpeza de esquema + diagnósticos de DeepSeek/Gemini/OpenAI
plugin-sdk/provider-usageAuxiliares de uso de provedorfetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage e outros auxiliares de uso de provedor
plugin-sdk/provider-streamAuxiliares de wrapper de stream de provedorProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, tipos de wrapper de stream e auxiliares compartilhados de wrapper de Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot
plugin-sdk/provider-transport-runtimeAuxiliares de transporte de provedorAuxiliares de transporte nativo de provedor, como fetch protegido, extração de texto de resultado de ferramenta, transformações de mensagem de transporte e streams graváveis de eventos de transporte
plugin-sdk/keyed-async-queueFila assíncrona ordenadaKeyedAsyncQueue
plugin-sdk/media-runtimeAuxiliares compartilhados de mídiaAuxiliares de busca/transformação/armazenamento de mídia, sondagem de dimensões de vídeo baseada em ffprobe e construtores de payload de mídia
plugin-sdk/media-generation-runtimeAuxiliares compartilhados de geração de mídiaAuxiliares compartilhados de failover, seleção de candidatos e mensagem de modelo ausente para geração de imagem/vídeo/música
plugin-sdk/media-understandingAuxiliares de compreensão de mídiaTipos de provedor de compreensão de mídia mais exports de auxiliares de imagem/áudio voltados a provedores
plugin-sdk/text-runtimeExportação ampla obsoleta de compatibilidade de textoUse string-coerce-runtime, text-chunking, text-utility-runtime e logging-core
plugin-sdk/text-chunkingAuxiliares de fragmentação de textoAuxiliar de fragmentação de texto de saída
plugin-sdk/speechAuxiliares de falaTipos de provedor de fala mais auxiliares voltados a provedores para diretiva, registro e validação, e construtor de TTS compatível com OpenAI
plugin-sdk/speech-coreNúcleo compartilhado de falaTipos de provedor de fala, registro, diretivas, normalização
plugin-sdk/realtime-transcriptionAuxiliares de transcrição em tempo realTipos de provedor, auxiliares de registro e auxiliar compartilhado de sessão WebSocket
plugin-sdk/realtime-voiceAuxiliares de voz em tempo realTipos de provedor, auxiliares de registro/resolução, auxiliares de sessão de ponte, filas compartilhadas de resposta falada do agente, controle de voz de execução ativa, integridade de transcrição/evento, supressão de eco, correspondência de pergunta de consulta, coordenação de consulta forçada, rastreamento de contexto de turno, rastreamento de atividade de saída e auxiliares de consulta rápida de contexto
plugin-sdk/image-generationAuxiliares de geração de imagemTipos de provedor de geração de imagem mais auxiliares de asset de imagem/URL de dados e o construtor de provedor de imagem compatível com OpenAI
plugin-sdk/image-generation-coreNúcleo compartilhado de geração de imagemTipos de geração de imagem, failover, autenticação e auxiliares de registro
plugin-sdk/music-generationAuxiliares de geração de músicaTipos de provedor/requisição/resultado de geração de música
plugin-sdk/music-generation-coreNúcleo compartilhado de geração de músicaTipos de geração de música, auxiliares de failover, busca de provedor e parsing de referência de modelo
plugin-sdk/video-generationAuxiliares de geração de vídeoTipos de provedor/requisição/resultado de geração de vídeo
plugin-sdk/video-generation-coreNúcleo compartilhado de geração de vídeoTipos de geração de vídeo, auxiliares de failover, busca de provedor e parsing de referência de modelo
plugin-sdk/interactive-runtimeAuxiliares de resposta interativaNormalização/redução de payload de resposta interativa
plugin-sdk/channel-config-primitivesPrimitivas de configuração de canalPrimitivas restritas de esquema de configuração de canal
plugin-sdk/channel-config-writesAuxiliares de gravação de configuração de canalAuxiliares de autorização de gravação de configuração de canal
plugin-sdk/channel-plugin-commonPrelúdio compartilhado de canalExports de prelúdio compartilhado de Plugin de canal
plugin-sdk/channel-statusAuxiliares de status de canalAuxiliares compartilhados de snapshot/resumo de status de canal
plugin-sdk/allowlist-config-editAuxiliares de configuração de lista de permissõesAuxiliares de edição/leitura de configuração de lista de permissões
plugin-sdk/group-accessAuxiliares de acesso de grupoAuxiliares compartilhados de decisão de acesso de grupo
plugin-sdk/direct-dm, plugin-sdk/direct-dm-accessFacades de compatibilidade obsoletasUse plugin-sdk/channel-inbound
plugin-sdk/direct-dm-guard-policyAuxiliares de proteção de DM diretaAuxiliares restritos de política de proteção pré-criptografia
plugin-sdk/extension-sharedAuxiliares compartilhados de extensãoPrimitivas de auxiliares de canal passivo/status e proxy de ambiente
plugin-sdk/webhook-targetsAuxiliares de alvo de WebhookRegistro de alvo de Webhook e auxiliares de instalação de rota
plugin-sdk/webhook-pathAlias obsoleto de caminho de WebhookUse plugin-sdk/webhook-ingress
plugin-sdk/web-mediaAuxiliares compartilhados de mídia webAuxiliares de carregamento de mídia remota/local
plugin-sdk/zodReexportação obsoleta de compatibilidade com ZodImporte zod de zod diretamente
plugin-sdk/memory-coreAuxiliares de memory-core agrupadosSuperfície auxiliar de gerenciador/configuração/arquivo/CLI de memória
plugin-sdk/memory-core-engine-runtimeFacade de runtime do mecanismo de memóriaFacade de runtime de índice/busca de memória
plugin-sdk/memory-core-host-embedding-registryRegistro de embeddings de memóriaAuxiliares leves de registro de provedor de embeddings de memória
plugin-sdk/memory-core-host-engine-foundationMecanismo de fundação do host de memóriaExports do mecanismo de fundação do host de memória
plugin-sdk/memory-core-host-engine-embeddingsMecanismo de embedding do host de memóriaContratos de embedding de memória, acesso ao registro, provedor local e auxiliares genéricos de lote/remoto; provedores remotos concretos ficam em seus plugins proprietários
plugin-sdk/memory-core-host-engine-qmdMecanismo QMD do host de memóriaExports do mecanismo QMD do host de memória
plugin-sdk/memory-core-host-engine-storageMecanismo de armazenamento do host de memóriaExports do mecanismo de armazenamento do host de memória
plugin-sdk/memory-core-host-multimodalAuxiliares multimodais do host de memóriaAuxiliares multimodais do host de memória
plugin-sdk/memory-core-host-queryAuxiliares de consulta do host de memóriaAuxiliares de consulta do host de memória
plugin-sdk/memory-core-host-secretAuxiliares de segredo do host de memóriaAuxiliares de segredo do host de memória
plugin-sdk/memory-core-host-eventsAlias obsoleto de eventos de memóriaUse plugin-sdk/memory-host-events
plugin-sdk/memory-core-host-statusAuxiliares de status do host de memóriaAuxiliares de status do host de memória
plugin-sdk/memory-core-host-runtime-cliRuntime de CLI do host de memóriaAuxiliares de runtime de CLI do host de memória
plugin-sdk/memory-core-host-runtime-coreRuntime central do host de memóriaAuxiliares de runtime central do host de memória
plugin-sdk/memory-core-host-runtime-filesAuxiliares de arquivo/runtime do host de memóriaAuxiliares de arquivo/runtime do host de memória
plugin-sdk/memory-host-coreAlias de runtime central do host de memóriaAlias neutro de fornecedor para auxiliares de runtime central do host de memória
plugin-sdk/memory-host-eventsAlias de diário de eventos do host de memóriaAlias neutro de fornecedor para auxiliares de diário de eventos do host de memória
plugin-sdk/memory-host-filesAlias obsoleto de arquivo/runtime de memóriaUse plugin-sdk/memory-core-host-runtime-files
plugin-sdk/memory-host-markdownAuxiliares de markdown gerenciadoAuxiliares compartilhados de markdown gerenciado para plugins adjacentes à memória
plugin-sdk/memory-host-searchFacade de busca de memória ativaFacade preguiçosa de runtime do gerenciador de busca de memória ativa
plugin-sdk/memory-host-statusAlias obsoleto de status do host de memóriaUse plugin-sdk/memory-core-host-status
plugin-sdk/testingUtilitários de testeBarrel obsoleto de compatibilidade local do repositório; use subcaminhos de teste focados e locais do repositório, como plugin-sdk/plugin-test-runtime, plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing, plugin-sdk/test-env e plugin-sdk/test-fixtures
Esta tabela é intencionalmente o subconjunto comum de migração, não a superfície completa do SDK. O inventário do ponto de entrada do compilador fica em scripts/lib/plugin-sdk-entrypoints.json; as exportações de pacote são geradas a partir do subconjunto público. Seams auxiliares reservados de plugins empacotados foram removidos do mapa de exportações do SDK público, exceto por fachadas de compatibilidade documentadas explicitamente, como o shim obsoleto plugin-sdk/discord mantido para o pacote publicado @openclaw/discord@2026.3.13. Auxiliares específicos do proprietário ficam dentro do pacote do plugin proprietário; o comportamento compartilhado do host deve passar por contratos genéricos do SDK, como plugin-sdk/gateway-runtime, plugin-sdk/security-runtime e plugin-sdk/plugin-config-runtime. Use a importação mais estreita que corresponda à tarefa. Se você não encontrar uma exportação, verifique o código-fonte em src/plugin-sdk/ ou pergunte aos mantenedores qual contrato genérico deve ser o proprietário dela.

Descontinuações ativas

Descontinuações mais estreitas que se aplicam ao SDK de plugins, ao contrato de provedor, à superfície de runtime e ao manifesto. Cada uma ainda funciona hoje, mas será removida em uma futura versão principal. A entrada abaixo de cada item mapeia a API antiga para sua substituição canônica.
Antigo (openclaw/plugin-sdk/command-auth): buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage.Novo (openclaw/plugin-sdk/command-status): mesmas assinaturas, mesmas exportações - apenas importadas do subcaminho mais estreito. command-auth as reexporta como stubs de compatibilidade.
// Before
import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth";

// After
import { buildHelpMessage } from "openclaw/plugin-sdk/command-status";
Antigo: resolveInboundMentionRequirement({ facts, policy }) e shouldDropInboundForMention(...) de openclaw/plugin-sdk/channel-inbound ou openclaw/plugin-sdk/channel-mention-gating.Novo: resolveInboundMentionDecision({ facts, policy }) - retorna um único objeto de decisão em vez de duas chamadas separadas.Plugins de canal downstream (Slack, Discord, Matrix, Microsoft Teams) já migraram.
openclaw/plugin-sdk/channel-runtime é um shim de compatibilidade para plugins de canal mais antigos. Não o importe em código novo; use openclaw/plugin-sdk/channel-runtime-context para registrar objetos de runtime.Auxiliares channelActions* em openclaw/plugin-sdk/channel-actions estão obsoletos junto com exportações brutas de canal de “actions”. Exponha capacidades pela superfície semântica presentation em vez disso - plugins de canal declaram o que renderizam (cartões, botões, seleções) em vez dos nomes de ação brutos que aceitam.
Antigo: fábrica tool() de openclaw/plugin-sdk/provider-web-search.Novo: implemente createTool(...) diretamente no plugin de provedor. O OpenClaw não precisa mais do auxiliar do SDK para registrar o wrapper da ferramenta.
Antigo: formatInboundEnvelope(...) (e ChannelMessageForAgent.channelEnvelope) para criar um envelope de prompt em texto simples e plano a partir de mensagens de canal recebidas.Novo: BodyForAgent mais blocos estruturados de contexto do usuário. Plugins de canal anexam metadados de roteamento (thread, tópico, resposta a, reações) como campos tipados em vez de concatená-los em uma string de prompt. O auxiliar formatAgentEnvelope(...) ainda é compatível com envelopes sintetizados voltados ao assistente, mas envelopes recebidos em texto simples estão em processo de remoção.Áreas afetadas: inbound_claim, message_received e qualquer plugin de canal personalizado que pós-processava o texto de channelEnvelope.
Antigo: api.on("deactivate", handler).Novo: api.on("gateway_stop", handler). O evento e o contexto são o mesmo contrato de limpeza de desligamento; apenas o nome do hook muda.
// 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 compatibilidade obsoleto até depois de 2026-08-16.
Antigo: api.on("subagent_spawning", handler) retornando threadBindingReady ou deliveryOrigin.Novo: deixe o core preparar associações de subagente thread: true por meio do adaptador de associação de sessão de canal. Use api.on("subagent_spawned", handler) apenas para observação pós-lançamento.
// 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 e SubagentLifecycleHookRunner.runSubagentSpawning(...) permanecem apenas como superfícies de compatibilidade obsoletas enquanto plugins externos migram.
Quatro aliases de tipo de descoberta agora são wrappers finos sobre os tipos da era do catálogo:
Alias antigoNovo tipo
ProviderDiscoveryOrderProviderCatalogOrder
ProviderDiscoveryContextProviderCatalogContext
ProviderDiscoveryResultProviderCatalogResult
ProviderPluginDiscoveryProviderPluginCatalog
Mais o bag estático legado ProviderCapabilities - plugins de provedor devem usar hooks explícitos de provedor, como buildReplayPolicy, normalizeToolSchemas e wrapStreamFn, em vez de um objeto estático.
Antigo (três hooks separados em ProviderThinkingPolicy): isBinaryThinking(ctx), supportsXHighThinking(ctx) e resolveDefaultThinkingLevel(ctx).Novo: um único resolveThinkingProfile(ctx) que retorna um ProviderThinkingProfile com o id canônico, label opcional e lista ranqueada de níveis. O OpenClaw rebaixa automaticamente valores armazenados obsoletos pela classificação do perfil.O contexto inclui provider, modelId, reasoning mesclado opcional e fatos compat de modelo mesclados opcionais. Plugins de provedor podem usar esses fatos de catálogo para expor um perfil específico de modelo apenas quando o contrato de requisição configurado oferecer suporte a ele.Implemente um hook em vez de três. Os hooks legados continuam funcionando durante a janela de descontinuação, mas não são compostos com o resultado do perfil.
Antigo: implementar hooks de autenticação externa sem declarar o provedor no manifesto do plugin.Novo: declare contracts.externalAuthProviders no manifesto do plugin e implemente resolveExternalAuthProfiles(...).
{
  "contracts": {
    "externalAuthProviders": ["anthropic", "openai"]
  }
}
Campo de manifesto antigo: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.Novo: espelhe a mesma busca de variável de ambiente em setup.providers[].envVars no manifesto. Isso consolida metadados de variáveis de ambiente de configuração/status em um só lugar e evita inicializar o runtime do plugin apenas para responder a buscas de variáveis de ambiente.providerAuthEnvVars permanece compatível por meio de um adaptador de compatibilidade até o fechamento da janela de descontinuação.
Antigo: três chamadas separadas - api.registerMemoryPromptSection(...), api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).Novo: uma chamada na API de estado de memória - registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).Mesmos slots, chamada de registro única. Auxiliares aditivos de prompt e corpus (registerMemoryPromptSupplement, registerMemoryCorpusSupplement) não são afetados.
Antigo: api.registerMemoryEmbeddingProvider(...) mais contracts.memoryEmbeddingProviders.Novo: api.registerEmbeddingProvider(...) mais contracts.embeddingProviders.O contrato genérico de provedor de embeddings é reutilizável fora da memória e é o caminho compatível para novos provedores. A API de registro específica de memória permanece conectada como compatibilidade obsoleta enquanto provedores existentes migram. A inspeção de plugins relata uso não empacotado como dívida de compatibilidade.
Dois aliases de tipo legados ainda exportados de src/plugins/runtime/types.ts:
AntigoNovo
SubagentReadSessionParamsSubagentGetSessionMessagesParams
SubagentReadSessionResultSubagentGetSessionMessagesResult
O método de runtime readSession está obsoleto em favor de getSessionMessages. Mesma assinatura; o método antigo chama o novo.
Antigo: runtime.tasks.flow (singular) retornava um acessador de fluxo de tarefas ativo.Novo: runtime.tasks.managedFlows mantém o runtime de mutação TaskFlow gerenciado para plugins que criam, atualizam, cancelam ou executam tarefas filhas a partir de um fluxo. Use runtime.tasks.flows quando o plugin precisar apenas de leituras baseadas em DTO.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
Abordado em “Como migrar → Migrar extensões incorporadas de resultado de ferramenta para middleware” acima. Incluído aqui para completude: o caminho removido apenas do executor incorporado api.registerEmbeddedExtensionFactory(...) é substituído por api.registerAgentToolResultMiddleware(...) com uma lista explícita de runtimes em contracts.agentToolResultMiddleware.
OpenClawSchemaType reexportado de openclaw/plugin-sdk agora é um alias de uma linha para OpenClawConfig. Prefira o nome canônico.
// Before
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
// After
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
Descontinuações no nível de extensão (dentro de plugins empacotados de canal/provedor em extensions/) são rastreadas dentro de seus próprios barrels api.ts e runtime-api.ts. Elas não afetam contratos de plugins de terceiros e não estão listadas aqui. Se você consumir diretamente o barrel local de um plugin empacotado, leia os comentários de descontinuação nesse barrel antes de atualizar.

Cronograma de remoção

QuandoO que acontece
AgoraSuperfícies obsoletas emitem avisos em tempo de execução
Próxima versão majorSuperfícies obsoletas serão removidas; plugins que ainda as usam deixarão de funcionar
Todos os plugins principais já foram migrados. Plugins externos devem migrar antes da próxima versão major.

Suprimindo os avisos temporariamente

Defina estas variáveis de ambiente enquanto trabalha na migração:
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
Esta é uma saída temporária, não uma solução permanente.

Relacionados