Pular para o conteúdo principal

Compatibilidade Legada

O NeoTavern preserva um conjunto de contratos documentados para extensões existentes da era SillyTavern, de modo que plugins escritos contra essas APIs possam continuar funcionando enquanto o Plugin SDK nativo é o caminho a seguir.

Globais de Janela

O pacote @neotavern/legacy-compat instala os globais de janela documentados que extensões mais antigas esperam:

  • window.SillyTavern — com getContext(), eventSource e event_types.
  • window.eventSource — a fonte de eventos legada.
  • window.event_types — as constantes de nomes de eventos.
  • window.extension_settings — o objeto compartilhado de configurações de extensão.
  • window.$ e window.jQuery — a instância do jQuery empacotado.

Esses globais são instalados de forma idempotente e conectados ao host por meio de uma ponte, para que o código legado leia o mesmo contexto e os mesmos eventos que o código nativo.

Ilhas de DOM Não Gerenciadas

Extensões de frontend legadas esperam possuir uma parte da página. O host fornece ilhas de DOM não gerenciadas para esse fim: um contêiner estável ao qual o código legado pode se anexar e manipular diretamente, fora da árvore React. As extensões recebem o contêiner, e o host cuida do resto do aplicativo ao redor dele.

Plugins de Servidor Legados

Plugins de servidor legados são executados por meio de um host de compatibilidade Express. Suas rotas são proxiadas sob /api/plugins/{pluginId}/..., correspondendo ao mesmo namespace usado pelos plugins de backend nativos. A integração @fastify/express é usada apenas dentro dessa camada de compatibilidade — o novo núcleo é nativo do Fastify e não roteia pelo Express.

A Fronteira de Confiança

Pontos de entrada legados são um modo de confiança, não uma forma de contornar a sandbox. Um pacote que os usa deve declarar legacy.frontend ou legacy.backend em seu manifesto e solicitar a permissão legacy.trusted, que a interface de consentimento exibe com um aviso reforçado. O código de frontend legado é executado na janela principal, e o código de backend legado recebe um roteador Express restrito ao seu próprio namespace de plugin. O modo de segurança não carrega pontos de entrada legados de forma alguma. Veja Sandbox de plugins e Manifesto de plugins para detalhes.

O Que Não É Suportado

Compatibilidade é um contrato documentado, não uma promessa de comportamento universal. Plugins que dependem de qualquer um dos itens a seguir não são suportados:

  • Nomes de classes CSS internas aleatórias.
  • Monkey patching de internals do aplicativo.
  • Imports privados de pacotes que não são deles.

Esses são detalhes de implementação e mudam entre versões. Quando uma API legada muda, a mudança acompanha um guia de migração e um teste de compatibilidade.

Migrando para Frente

Para funcionalidades novas, o Plugin SDK nativo é o caminho suportado: versionado, com verificação de permissões, em sandbox e com limpeza feita pelo host. A compatibilidade legada existe para manter extensões existentes vivas, não para crescer. Porte as extensões para o SDK para obter todas as garantias de segurança e ciclo de vida.