Saltar al contenido principal

Permisos del plugin

Los permisos son el mecanismo que permite a los usuarios decidir qué puede hacer un plugin, desde leer el historial de chat hasta hacer solicitudes de red.

El Modelo de Permisos​

Un permiso es una cadena que nombra una capacidad. Declararlo en el manifiesto es una solicitud, no un acceso automático: el usuario debe confirmar cada permiso solicitado antes de que el plugin se active, y el host aplica la concesión en cada punto de uso.

El conjunto integrado es un contrato estable y versionado:

PermisoQué concede
chat.readLeer los mensajes del chat y sus metadatos
chat.writeCrear o modificar mensajes del chat
characters.readLeer personajes y fichas de personaje
characters.writeCrear o modificar personajes
lorebook.readLeer entradas de lorebook
lorebook.writeCrear o modificar entradas de lorebook
prompt.inspectInspeccionar el prompt ensamblado
prompt.modifyModificar el prompt o post-procesar la salida de generación
providers.registerRegistrar adaptadores y tokenizadores de proveedor
ui.toolbarAgregar acciones de barra de herramientas
ui.sidebarAgregar paneles laterales
ui.messageActionsAgregar acciones de mensaje
ui.shellAgregar contenido a las ranuras del shell
clipboard.readLeer el portapapeles
clipboard.writeEscribir en el portapapeles
notificationsMostrar notificaciones
server.routesMontar rutas de backend
legacy.trustedEjecutar código heredado documentado de SillyTavern en contexto de confianza

Permisos con Ámbito​

Algunos permisos llevan un ámbito, escrito como kind:scope:

  • network:<hostname> — permiso para hacer fetch desde un host específico, por ejemplo network:api.example.com. Las solicitudes a hosts no concedidos se rechazan.
  • network:* — un comodín que permite hacer fetch desde cualquier host. El host lo trata como acceso completo a la red y la interfaz de consentimiento lo muestra con una advertencia reforzada. Prefiere enumerar hosts concretos; publicar plugins que solicitan el comodín está desaconsejado.
  • files:plugin — leer y escribir dentro del propio directorio de datos del plugin.
  • files:user-selected — acceso a los archivos que el usuario seleccionó explícitamente.

hasPermission verifica un conjunto concedido contra un permiso requerido, y parsePermission divide una cadena kind:scope en sus partes. La función validatePermissions rechaza cadenas malformadas como vacías, duplicadas o desconocidas.

Cómo Se Aplican las Concesiones​

Declarar un permiso no es suficiente; el host aplica la concesión en el punto de aplicación:

  • Los registros de interfaz verifican los permisos ui.* antes de montarse.
  • Las rutas verifican server.routes.
  • El fetch verificado por permisos comprueba network:<host>.
  • El sistema de archivos virtual verifica files:*.
  • Las APIs de proveedor y contexto verifican providers.register y prompt.modify.

El kernel de capacidades (espacio de nombres kernel de @neotavern/plugin-sdk) es la capa compartida que verifica las concesiones tanto en el host web como en el servidor, por lo que el navegador y el backend siempre ven los mismos derechos efectivos. Las concesiones se guardan con una revisión monótona, se entregan al sandbox durante el protocolo de inicio (bootstrap handshake) y son revocables en el runtime. Las operaciones en curso completan con un error CAPABILITY_REVOKED y el host cierra los handles abiertos.

Consentimiento y Nuevo Consentimiento en la Actualización​

La instalación muestra la lista completa de permisos solicitados. El plugin permanece en un estado needs-consent hasta que confirmas cada permiso, y la interfaz muestra la lista de dependencias cuando el paquete incluye dependencias de npm.

Actualizar un plugin es una instalación nueva para la verificación de permisos: el host calcula la diferencia entre el manifiesto anterior y el nuevo con diffPermissions. Si la actualización agrega permisos:

  • el runtime del plugin se deshabilita de inmediato;
  • se le pide al usuario que consienta los permisos nuevos;
  • el plugin permanece deshabilitado hasta que se da el consentimiento.

Quitar permisos nunca requiere consentimiento. La regla general: el conjunto de permisos concedidos nunca crece sin una decisión explícita del usuario. Para la lista completa de constantes y helpers de permisos, consulta la referencia del Plugin SDK generada.