Ir al contenido

Scripts de repositorio

Los scripts de repositorio son scripts de shell que configuras por repositorio (Ajustes → Repositorios → el ícono de terminal en la fila de un repo) y que el servidor de Control Center ejecuta contra el worktree de un espacio de ese repo: el checkout aislado en <dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/ donde trabajan los agentes.

Hay dos tipos:

Script Cuándo se ejecuta Para qué usarlo
Configuración Justo después de aprovisionar un worktree para un espacio Instalar dependencias, generar archivos, copiar .env
Archivado Justo antes de que un worktree se destruya o se recolecte como basura Limpiar recursos fuera del worktree (redes de docker, túneles, estado externo)

Ambos scripts se ejecutan mediante bash -lc (un shell de inicio de sesión, de modo que las herramientas instaladas con Homebrew/nvm están en el PATH) con el worktree como directorio de trabajo y con estas variables de entorno definidas:

Variable Valor
CC_WORKSPACE_PATH El worktree (el cwd del script)
CC_ROOT_PATH El repo de origen registrado: tu propio checkout
CC_SPACE_ID El espacio al que pertenece el worktree
CC_SPACE_NAME El nombre para mostrar del espacio
CC_REPO_NAME El nombre para mostrar del repo

Por ejemplo, un script de configuración que instala dependencias y trae el .env ignorado por git del repo:

Ventana de terminal
pnpm install
cp "$CC_ROOT_PATH/.env" .env
pnpm run build
  • Un script de configuración que sale con un código distinto de cero (o que supera su tiempo de espera de 5 minutos) hace fallar el aprovisionamiento del espacio: el espacio muestra el estado de falla con un reintento y se registra la cola de salida de la ejecución. Un reintento aprovisiona desde un worktree limpio y vuelve a ejecutar el script; escribe los scripts de configuración de modo que una nueva ejecución tras una instalación parcial funcione (los gestores de paquetes ya se comportan así).
  • Un script de archivado se ejecuta con el mejor esfuerzo posible: si falla (o supera su tiempo de espera de 2 minutos), se registra, pero nunca bloquea la eliminación. El archivado se ejecuta en rutas de GC donde no hay nadie que responda a un aviso (espacio eliminado, PR fusionada, limpieza programada).

La configuración solo se ejecuta en un worktree nuevo: volver a despachar agentes a un espacio ya activo reutiliza el checkout existente y no vuelve a pagar la instalación.

Cada ejecución se registra con su estado, su duración, su código de salida y una cola de salida acotada, todo visible en el mismo cuadro de diálogo de ajustes, en «Ejecuciones recientes» (la suscripción repos.watchScriptRuns la transmite en vivo).

Los scripts son shell que ejecuta el servidor, así que escribirlos está restringido a los administradores del espacio de trabajo y está protegido por la clase de acción processSpawn, la misma red de barandillas que controla todas las demás operaciones que generan procesos.