Deploy Guardian
README.md
# dsh-plugin-deploy-guardian — revisión y despliegue de VPS para DeepSeek Harness
Plugin MCP local para **revisar y desplegar un VPS por SSH** sin comandos
inventados: el modelo elige entre acciones **declaradas en tu configuración**
(restart, deploy, rollback), con confirmación explícita, auditoría y modo
read-only.
[English](README.en.md) · [Cómo funciona](docs/COMO-FUNCIONA.md) · MIT
## Herramientas (3)
| Tool | Qué hace |
|---|---|
| `mcp__deploy__status` | Conectividad SSH + checks declarados (servicios, disco) por host. |
| `mcp__deploy__logs` | Últimos logs de un servicio permitido (journalctl o comando configurado). |
| `mcp__deploy__action` | `restart`/`deploy`/`rollback` con `confirm:true` y comando de la config. |
## Configuración
Archivo: `<DSH_HOME>\deploy-guardian\config.json` (el `postinstall` crea uno base;
hay un ejemplo completo en `config.example.json`).
```json
{
"sshCommand": "ssh",
"sshArgs": ["-o", "BatchMode=yes", "-o", "ConnectTimeout=10"],
"hosts": [{
"name": "wendigo-vps",
"host": "root@203.0.113.10",
"port": 22,
"identityFile": "C:\\Users\\tu-usuario\\.ssh\\id_ed25519",
"checks": [
{ "name": "nginx", "command": "systemctl is-active nginx" },
{ "name": "bot", "command": "systemctl is-active wendigo-bot" },
{ "name": "disco", "command": "df -h / | tail -1" }
],
"services": ["nginx", "wendigo-bot"],
"logsCommand": "journalctl -u {service} -n {lines} --no-pager",
"restartCommand": "sudo systemctl restart {service}",
"deployCommand": "cd /opt/wendigo && ./deploy.sh",
"rollbackCommand": "cd /opt/wendigo && ./rollback.sh"
}]
}
```
- El plugin **solo ejecuta los comandos de esta config**; el modelo no puede
inyectar comandos ni servicios fuera de la lista.
- `sshCommand`/`sshArgs` permiten usar `ssh.exe` de Windows (OpenSSH) u otro
cliente; las claves viven en tu máquina, nunca en el repo.
## Instalación
Desde **DSH → Settings → Plugins** instala
`github:thegabopacheco-sudo/dsh-plugin-deploy-guardian` y permite el script de
instalación. El `postinstall` copia el runtime a
`<DSH_HOME>\plugins\deploy-guardian` y crea la config base.
CLI (perfiles no administrados por la app):
```
dsh plugin --profile <perfil> add github:thegabopacheco-sudo/dsh-plugin-deploy-guardian
```
Requisitos: Windows 10/11 con cliente **OpenSSH** (`ssh.exe`), Node ≥ 20 (lo
aporta el harness) y acceso SSH por clave al VPS.
## Seguridad
- **Read-only por defecto** en espíritu: `status`/`logs` solo leen.
- **Acciones con confirmación** (`confirm:true` + pedido explícito del usuario).
- **Comandos declarados**: nada de comandos arbitrarios del modelo.
- **Lista de servicios** por host para logs/restart.
- **Rate limit** de 6 acciones por minuto.
- **Auditoría** en `<DSH_HOME>\cache\deploy-guardian\audit.jsonl`.
- **Modo read-only**: `DSH_DEPLOY_MODE=read-only` desactiva las acciones.
- Sin contraseñas SSH ni claves en el repo: solo `identityFile` (ruta local).
## Variables de entorno
| Variable | Uso |
|---|---|
| `DSH_DEPLOY_MODE` | `read-only` desactiva acciones. |
| `DSH_DEPLOY_SKIP_POSTINSTALL` | `1` omite el despliegue. |
## Solución de problemas
- **“falta la configuración”**: copia `config.example.json` a
`<DSH_HOME>\deploy-guardian\config.json` y completa tus hosts.
- **SSH falla**: prueba `ssh -i <clave> usuario@host 'echo ok'` a mano; revisa
`BatchMode=yes` y `known_hosts`.
- **Servicio no permitido**: agrégalo a `services` del host.
- **Permiso de scripts en la instalación**: aprueba el `postinstall`; si el
cartel se repite, `allowBuilds: true` en `pnpm-workspace.yaml` del perfil.
## Desarrollo
```powershell
npm install
npm run build:bundle
cd test; npm install; node connect-test.mjs # SSH mock local
```
## Licencia
MIT © thegabopacheco-sudo
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo recent community issues