Aceptación de la publicación del plugin
Un plugin de primera parte se acepta para una versión cuando un operador puede instalarlo por nombre en un binario zeroclaw publicado, sin cadena de herramientas de Rust en la máquina, y puede demostrar que el plugin, y no una función integrada, realiza el trabajo. Esta página es el manual de procedimiento para esa prueba y la plantilla para sus evidencias. Utiliza el plugin de canal de Discord como ejemplo resuelto. Para otro paquete, sustituya su nombre, su alias, sus claves requeridas y sus destinos.
Una ejecución demuestra una versión de paquete en una compilación publicada del host. No dice nada sobre otros destinos, otras versiones del host ni el comportamiento bajo carga.
Cuándo ejecutarlo
Ejecútelo después de publicar el lanzamiento y de que la versión del paquete esté en el registro, una vez por cada versión del paquete que el lanzamiento declara soportar. Vuelva a ejecutarlo cuando cambie cualquiera de los dos lados: una nueva versión del paquete o una versión del host que modifique la interfaz del plugin.
Antes de comenzar
- El artefacto. Un archivo comprimido publicado de la CLI
zeroclawpara un destino de 64 bits cuyo host de plugins compila componentes.wasm. Compruébalo primero con Verificación del artefacto de lanzamiento. Un archivo de x86_64 Linux en un contenedor nuevo es el lugar más sencillo para demostrar que no se usó ninguna cadena de herramientas. - Una máquina limpia. Sin cadena de herramientas de Rust y sin configuración sobrante de una ejecución anterior.
- Cuentas de prueba de la plataforma. Para Discord, una aplicación de bot dedicada en un servidor de pruebas pequeño, nunca un bot de producción, con el Message Content Intent activado y el bot invitado (consulta el inicio rápido de Discord), además de una segunda cuenta de Discord para el probador. Planifica restablecer el token del bot cuando termine la ejecución.
- Un proveedor de modelos. Funciona cualquier proveedor configurado. Un proveedor local con script hace que las respuestas del agente sean repetibles.
- Un archivo de evidencias. Copia la plantilla de evidencias y complétala a medida que avanzas.
Introduce el token del bot solo en el prompt enmascarado de zeroclaw config set. Nunca lo guardes en un archivo, en una línea de comandos, en el historial de la shell, en una captura de pantalla ni en las evidencias.
1. Registrar el entorno
command -v cargo rustc || echo "no Rust toolchain"
sha256sum zeroclaw-<target>.tar.gz
zeroclaw --version
zeroclaw plugin search discord
Registra el nombre y el digest del archivo, la cadena de versión y la entrada del registro que resuelve la instalación: su nombre, su versión, la URL del archivo y sha256.
2. Instalar por nombre y vincular una instancia
zeroclaw plugin install discord --channel-alias acceptance --egress declared
zeroclaw config set plugins.entries.zpi1_WyJkaXNjb3JkIiwiY2hhbm5lbCIsImFjY2VwdGFuY2UiXQ.config.bot_token
zeroclaw config set plugins.enabled true
zeroclaw plugin info discord
El instalador muestra el enlace y los hosts que concedió. plugin info debe indicar que el paquete se carga en este host y que la clave de instancia indicada arriba existe. Después, manualmente:
- Añade
plugin.acceptancea loschannelsde un agente habilitado; - Añade un grupo de pares con
channel = "plugin.acceptance"cuyoexternal_peerscontenga el ID numérico de usuario de Discord del probador.
La página de Discord muestra ambos. No configures ninguna tabla [channels.discord.<alias>] en ningún lugar y luego inicia el daemon. Guarda una copia de config.toml como evidencia; sus secretos permanecen cifrados.
3. Probar el plugin
Sigue la plantilla en orden y anota lo que observes, incluido cualquier imprevisto. Los registros de log que se nombran a continuación están en el log estructurado del daemon, que leen la página de Logs del panel y GET /api/logs (consulta Observabilidad). Usa texto de mensaje sintético en todo momento.
Plantilla de evidencia
| Reclamación | Acción | Evidencia | Resultado |
|---|---|---|---|
| Instalado por nombre sin toolchain | Pasos 1 y 2 | salida de command -v, salida de la instalación, entrada del registro, resumen criptográfico del archivo | |
| Se carga en este host | zeroclaw plugin info discord | Su veredicto de carga | |
| Lo entrante pasa por el plugin | The tester sends a message | Un registro channel inbound message con zeroclaw.channel = plugin.acceptance | |
| Las salidas pasan por el plugin | El agente responde | Un registro reply delivered para plugin.acceptance; una captura de pantalla censurada de la respuesta | |
| El canal integrado no gestionó nada | Lee la salida de inicio y /health | La lista de canales muestra plugin.acceptance y ningún discord.*; /health lista channel:plugin.acceptance y ningún channel:discord.*; la copia de la configuración no tiene la tabla [channels.discord] | |
| Control negativo | Establece channels.plugin.acceptance.enabled en false, reinicia y envía un mensaje | Sin registro entrante ni respuesta; vuelva a establecerlo en true y reinicie de nuevo antes de la siguiente fila | |
| Reconectar | Desconecta la red de la máquina durante al menos dos minutos y, después, restablécela. | El siguiente mensaje recibe respuesta; anota si el plugin reanudó su sesión o inició una nueva | |
| Apagado | Detener el daemon | El proceso termina limpiamente; anota cuánto tarda el bot en mostrarse como desconectado. | |
| Destino denegado | Elimina *.discord.gg de egress_hosts de la instancia y reinícia | El gateway no se conecta, el bot permanece sin conexión y no llega ningún mensaje entrante. Un host que registra las conexiones WebSocket rechazadas también escribe un registro plugin_egress_denied con transport = websocket, el host rechazado y un comando remedy; v0.8.6 no escribe ninguno. | |
| Concesión restaurada | Vuelve a poner *.discord.gg y aplícalo al daemon en ejecución con POST /admin/reload desde la misma máquina (consulta Recarga remota del daemon), sin reiniciarlo por completo. Guardar el cambio, ya sea con zeroclaw config set o editando config.toml, no llega por sí solo al daemon en ejecución. | El bot se reconecta; anota cuánto tiempo tardó. | |
| Remitente denegado | Enviar desde una cuenta fuera del grupo de pares | Un registro de plugin_channel_sender_denied y ninguna respuesta | |
| Permiso de plataforma faltante | Quita el permiso Enviar mensajes del bot en un canal y envíale un mensaje allí | Un fallo de envío en el registro, el daemon sigue en ejecución, sin bucle de reconexión | |
| Token no válido | Establece un token con sintaxis válida pero no válido o revocado mediante el aviso enmascarado de config set y, a continuación, reinicia. | El plugin informa del rechazo de autenticación de Discord y aplica backoff; no aparece ningún bucle de reconexión en el registro durante cinco minutos. Un token mal formado rechazado localmente por configure() no ejercita la autenticación de la plataforma ni el backoff. | |
| La política de confianza se mantiene | Establezca plugins.security.signature_mode en strict sin confiar en la clave del editor del paquete y reinicie | El demonio omite el paquete y registra el rechazo de la firma; plugin.acceptance no se inicia. La CLI informa del paquete rechazado como Plugin discord not found o No plugins installed, así que lea el registro del demonio para conocer el motivo. Restaure el modo anterior |
Censurar antes de publicar
Los registros channel inbound message y reply delivered contienen el texto del mensaje y el ID de usuario del remitente. Antes de publicar cualquier cosa:
- reemplazar los IDs de usuario, de servidor y de canal por marcadores de posición;
- conserva solo texto de mensaje sintético;
- sustituye cada valor
enc2:de la copia de la configuración por<encrypted>; - recorta las capturas de pantalla a los mensajes bajo prueba.
El token nunca aparece en la evidencia, ni censurado ni sin censurar.
Publicar la evidencia
Publica en la incidencia de seguimiento del lanzamiento: el nombre y el digest del artefacto, la salida de zeroclaw --version, la entrada del registro y la versión del paquete, los comandos exactos de los pasos 1 y 2, la tabla completada y enlaces a las pull requests que cambiaron el paquete o el host desde la última ejecución aceptada.
Limpiar
- Detén el daemon y ejecuta
zeroclaw plugin remove discord. La eliminación conserva la fila[[plugins.entries]]de la instancia y su vínculo[channels.plugin.acceptance], y muestra ambos; elimínalos. - Restablece el token del bot en el Portal para desarrolladores de Discord para que el token usado en la ejecución deje de funcionar.