/** * Monitor Estado Bootstrap — plugin GLOBAL de OpenCode * * Objetivo: que al arrancar OpenCode (en CUALQUIER repositorio) se asegure de que el * Monitor de estado esta corriendo, lanzando su vigilante en modo `-Once` (idempotente: * el propio monitor tiene un lock, asi que nunca habra dos instancias). * * No depende de ningun repositorio: vive en la config global de OpenCode * (~/.config/opencode/plugins/) y el vigilante canonico esta en el repo INFRAESTRUCTURA. * * Instalacion: `scripts/instalar_global.ps1`. * * Nota: el vigilante ya corre como tarea programada al iniciar sesion; este plugin es * la red de seguridad para cuando OpenCode arranca sin que el monitor este vivo. */ import type { Plugin } from "@opencode-ai/plugin" import { spawn } from "node:child_process" import { existsSync } from "node:fs" // --- Configuracion --------------------------------------------------------- // Vigilante canonico (repo INFRAESTRUCTURA). Se puede sobreescribir con MONITOR_ESTADO_WATCHDOG. const WATCHDOG = process.env.MONITOR_ESTADO_WATCHDOG ?? `${process.env.USERPROFILE}\\Documents\\Github\\INFRAESTRUCTURA\\scripts\\monitor_estado_watchdog.ps1` const POWERSHELL = process.env.SystemRoot ? `${process.env.SystemRoot}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe` : "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" // Evita lanzar el vigilante mas de una vez por proceso de OpenCode. let launched = false function ensureMonitor(): void { if (launched) return launched = true try { if (!existsSync(WATCHDOG)) return const child = spawn( POWERSHELL, [ "-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-WindowStyle", "Hidden", "-File", WATCHDOG, "-Once", ], { detached: true, stdio: "ignore", windowsHide: true }, ) child.unref() } catch { // Silencioso: el arranque de OpenCode no debe romperse por el monitor. } } // --- Plugin ---------------------------------------------------------------- export const MonitorEstadoBootstrap: Plugin = async () => { ensureMonitor() return {} }