Genesis English Invítame un café Descargar

Avanzado

Plugins de Genesis

Un plugin añade herramientas nuevas a Genesis. Aparecen en Inicio (con formulario automático), en el Asistente, en la CLI (genesis run ext.<plugin>.<herramienta>) y en los trabajos con barra de progreso y botón de cancelar.

Técnicamente un plugin es un servidor MCP por stdio empaquetado con un manifiesto. Los SDK de Genesis implementan el protocolo en un solo archivo sin dependencias, así que tu código solo declara herramientas.

#Crear uno en un minuto

Terminal
genesis plugin new "Mis efectos"                  # JavaScript / TypeScript (Node 18+)
Terminal
genesis plugin new "Mis efectos" --lang python    # Python 3.8+

También desde Ajustes → Plugins → Crear plugin. Se crea una carpeta con el manifiesto, el SDK y una herramienta de ejemplo. Edítala e instálala:

Terminal
genesis plugin install ./mis-efectos
Terminal
genesis run ext.mis-efectos.saludar nombre=Ana

Reinstalar la misma carpeta actualiza el plugin.

#Manifiesto: genesis-plugin.json

JSON
{
  "id": "mis-efectos",
  "name": "Mis efectos",
  "version": "1.0.0",
  "description": "Qué hace, en una frase.",
  "author": "Tu nombre",
  "homepage": "https://…",
  "server": {
    "command": "node",
    "args": ["{plugin_dir}/index.mjs"],
    "env": { "MI_VARIABLE": "valor" }
  }
}
Campo
id Minúsculas, números y guiones. Las herramientas se llaman ext.<id>.<herramienta>.
server.command node, python3 (en Windows se usa python o py si hace falta), cualquier ejecutable del PATH, o una ruta relativa como ./bin/mi-servidor.
{plugin_dir} Se sustituye por la carpeta instalada del plugin en args y env. El proceso arranca con esa carpeta como directorio de trabajo.

#SDK de JavaScript / TypeScript

genesis-plugin.mjs (+ genesis-plugin.d.ts con los tipos):

JavaScript
import { definePlugin } from "./genesis-plugin.mjs";

definePlugin({
  name: "mis-efectos",
  version: "1.0.0",
  tools: [
    {
      name: "invertir",
      title: "Invertir texto",
      description: "Da la vuelta a un texto.",
      input: {
        type: "object",
        properties: { texto: { type: "string", format: "multiline" } },
        required: ["texto"],
      },
      async run({ texto }, { progress, signal }) {
        progress(0.5, "Invirtiendo…");
        if (signal.aborted) throw new Error("cancelado");
        return { resultado: [...texto].reverse().join("") };
      },
    },
  ],
});

#SDK de Python

genesis_plugin.py:

Python
from genesis_plugin import Plugin

plugin = Plugin("mis-efectos", "1.0.0")

@plugin.tool(
    description="Da la vuelta a un texto.",
    input={"type": "object", "properties": {"texto": {"type": "string"}}, "required": ["texto"]},
)
def invertir(args, ctx):
    ctx.progress(0.5, "Invirtiendo…")
    if ctx.cancelled:
        raise RuntimeError("cancelado")
    return {"resultado": args["texto"][::-1]}

plugin.run()

Cada llamada corre en su propio hilo, así que una herramienta lenta no bloquea a las demás.

#Entradas y resultados

  • input es un JSON Schema. Genesis dibuja el formulario a partir de él: enum crea un desplegable, boolean una casilla, number/integer un campo numérico y array de rutas un selector de archivos múltiple.
  • Pistas para cadenas: "format": "path" añade un botón para elegir archivo, "save-path" uno para elegir dónde guardar, y "multiline" un área de texto.
  • Devuelve un objeto (resultado estructurado, que el Asistente y otras herramientas pueden usar), un texto o nada. Lanzar un error lo muestra como fallo de la herramienta.
  • Para trabajar con archivos, recibe y devuelve rutas: Genesis abre los resultados en sus editores y la galería.
  • progress(fracción 0..1, mensaje) actualiza la barra del trabajo; cuando el usuario cancela, signal (JS) o ctx.cancelled (Python) lo indica.

#Distribuir

Comprime la carpeta en un .zip (con el manifiesto en la raíz o dentro de una única carpeta) y compártela. Se instala desde Ajustes → Plugins → Instalar .zip o con genesis plugin install mis-efectos.zip. Si tu plugin necesita dependencias (node_modules, paquetes de Python), inclúyelas en el zip o vendorízalas: Genesis no ejecuta instaladores de paquetes.

Los plugins se guardan en <datos>/plugins/<id>; genesis plugin list, enable, disable y remove los gestionan.

Seguridad: un plugin es un programa que se ejecuta en tu equipo con tus permisos. Instala solo los que vengan de fuentes de confianza.

#Ejemplos

  • examples/plugins/texto — JavaScript: estadísticas de texto y nombres de archivo seguros.
  • examples/plugins/checksum — Python: huellas SHA-256/MD5 de archivos con progreso y cancelación.