Pular para o conteúdo principal

Permissões de Plugin

Permissões são o mecanismo que permite aos usuários decidir o que um plugin pode fazer, desde ler o histórico de chat até fazer requisições de rede.

O Modelo de Permissões​

Uma permissão é uma string que nomeia uma capacidade. Declará-la no manifesto é uma solicitação, não acesso automático: o usuário deve confirmar toda permissão solicitada antes de o plugin se tornar ativo, e o host aplica a concessão em cada ponto de uso.

O conjunto integrado é um contrato estável e versionado:

PermissãoO que concede
chat.readLer mensagens de chat e seus metadados
chat.writeCriar ou modificar mensagens de chat
characters.readLer personagens e fichas de personagem
characters.writeCriar ou modificar personagens
lorebook.readLer entradas de lorebook
lorebook.writeCriar ou modificar entradas de lorebook
prompt.inspectInspecionar o prompt montado
prompt.modifyModificar o prompt ou pós-processar a saída da geração
providers.registerRegistrar adaptadores e tokenizadores de provedores
ui.toolbarAdicionar ações de barra de ferramentas
ui.sidebarAdicionar painéis de barra lateral
ui.messageActionsAdicionar ações de mensagem
ui.shellAdicionar conteúdo a slots do shell
clipboard.readLer a área de transferência
clipboard.writeEscrever na área de transferência
notificationsMostrar notificações
server.routesMontar rotas de backend
legacy.trustedExecutar código legado SillyTavern documentado no contexto confiável

Permissões com Escopo​

Algumas permissões carregam um escopo, escrito como kind:scope:

  • network:<hostname> — permissão para buscar de um host específico, por exemplo network:api.example.com. Requisições a hosts não concedidos são rejeitadas.
  • network:* — um curinga que permite buscar de qualquer host. O host o trata como acesso total à rede e a interface de consentimento o mostra com um aviso reforçado. Prefira listar hosts concretos; publicar plugins que solicitam o curinga é desencorajado.
  • files:plugin — ler e escrever dentro do diretório de dados do próprio plugin.
  • files:user-selected — acesso a arquivos que o usuário selecionou explicitamente.

hasPermission verifica um conjunto concedido contra uma permissão necessária, e parsePermission divide uma string kind:scope em suas partes. A função validatePermissions rejeita strings malformadas como permissões vazias, duplicadas ou desconhecidas.

Como as Concessões São Aplicadas​

Declarar uma permissão não é suficiente; o host aplica a concessão no ponto de aplicação:

  • Registros de interface verificam permissões ui.* antes de montar.
  • Rotas verificam server.routes.
  • O fetch verificado por permissões verifica network:<host>.
  • O sistema de arquivos virtual verifica files:*.
  • APIs de provedores e de contexto verificam providers.register e prompt.modify.

O kernel de capacidades (namespace kernel de @neotavern/plugin-sdk) é a camada compartilhada que verifica concessões tanto no host web quanto no servidor, de modo que o navegador e o backend sempre veem os mesmos direitos efetivos. As concessões são armazenadas com uma revisão monotônica, entregues à sandbox durante o handshake de bootstrap e revogáveis em runtime. Operações em andamento são concluídas com um erro CAPABILITY_REVOKED e handles abertos são fechados pelo host.

Consentimento e Novo Consentimento em Atualizações​

A instalação mostra a lista completa de permissões solicitadas. O plugin permanece no estado needs-consent até você confirmar toda permissão, e a interface mostra a lista de dependências quando o pacote traz dependências npm.

Atualizar um plugin é uma nova instalação para a verificação de permissões: o host calcula a diferença entre o manifesto anterior e o novo com diffPermissions. Se a atualização adiciona permissões:

  • o runtime do plugin é desativado imediatamente;
  • o usuário é solicitado a consentir com as novas permissões;
  • o plugin permanece desativado até que o consentimento seja dado.

Remover permissões nunca exige consentimento. A regra geral: o conjunto de permissões concedidas nunca cresce sem uma decisão explícita do usuário. Para a lista completa de constantes e auxiliares de permissões, veja a Referência do Plugin SDK gerada.