@saulwade/swl-ses 2.5.3 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +192 -192
- package/README.md +600 -600
- package/agentes/auto-evolucion-swl.md +27 -3
- package/bin/swl-ses.js +32 -7
- package/comandos/swl/actualizar.md +174 -174
- package/comandos/swl/adoptar-proyecto.md +265 -265
- package/comandos/swl/aprender.md +836 -823
- package/comandos/swl/aprobar-plan.md +146 -146
- package/comandos/swl/auditar-deps.md +134 -134
- package/comandos/swl/autoresearch.md +264 -264
- package/comandos/swl/ayuda.md +224 -224
- package/comandos/swl/brainstorm.md +51 -51
- package/comandos/swl/briefing.md +119 -119
- package/comandos/swl/checkpoint.md +325 -325
- package/comandos/swl/claudemd.md +234 -234
- package/comandos/swl/compactar.md +310 -310
- package/comandos/swl/configurar-ci.md +235 -235
- package/comandos/swl/contexto.md +110 -110
- package/comandos/swl/contribuir.md +233 -233
- package/comandos/swl/crear-skill.md +292 -292
- package/comandos/swl/cron.md +194 -194
- package/comandos/swl/deuda-codigo.md +97 -97
- package/comandos/swl/discutir-fase.md +169 -169
- package/comandos/swl/ejecutar-fase.md +233 -233
- package/comandos/swl/evaluar-skill.md +520 -505
- package/comandos/swl/evolucion-continua.md +73 -0
- package/comandos/swl/evolucionar.md +267 -254
- package/comandos/swl/exportar-vault.md +583 -583
- package/comandos/swl/fix.md +118 -118
- package/comandos/swl/gateway.md +158 -158
- package/comandos/swl/inbox.md +116 -116
- package/comandos/swl/instalar.md +220 -220
- package/comandos/swl/instintos.md +86 -86
- package/comandos/swl/mapear-codebase.md +312 -312
- package/comandos/swl/mcp-status.md +175 -175
- package/comandos/swl/modelo.md +100 -100
- package/comandos/swl/nemesis.md +433 -433
- package/comandos/swl/notificaciones.md +299 -299
- package/comandos/swl/nuevo-proyecto.md +251 -251
- package/comandos/swl/planear-fase.md +263 -263
- package/comandos/swl/plugins.md +256 -256
- package/comandos/swl/predecir.md +169 -169
- package/comandos/swl/reflect-skills.md +125 -125
- package/comandos/swl/release.md +450 -450
- package/comandos/swl/revisar-impacto.md +201 -201
- package/comandos/swl/revisar.md +330 -330
- package/comandos/swl/seguridad.md +189 -189
- package/comandos/swl/sesiones.md +200 -200
- package/comandos/swl/skill-search.md +113 -113
- package/comandos/swl/status.md +343 -343
- package/comandos/swl/verificar.md +817 -817
- package/comandos/swl/wiki.md +620 -620
- package/gateway/cron/jobs.example.json +12 -0
- package/habilidades/auto-evolucion-protocolo/SKILL.md +294 -276
- package/habilidades/autoresearch/SKILL.md +3 -2
- package/habilidades/benchmark-memoria/SKILL.md +7 -7
- package/habilidades/changelog-generator/SKILL.md +174 -174
- package/habilidades/changelog-generator/scripts/parse-commits.js +2 -1
- package/habilidades/checkpoints-verificacion/SKILL.md +6 -0
- package/habilidades/context-builder/SKILL.md +4 -0
- package/habilidades/doubt-driven-review/SKILL.md +207 -191
- package/habilidades/drift-detection/SKILL.md +6 -1
- package/habilidades/ejecutar-fase/SKILL.md +6 -6
- package/habilidades/eval-framework/SKILL.md +8 -3
- package/habilidades/harness-claude-code/SKILL.md +312 -308
- package/habilidades/infra-github-actions/SKILL.md +4 -3
- package/habilidades/instalar-sistema/SKILL.md +227 -223
- package/habilidades/memoria-busqueda/SKILL.md +31 -39
- package/habilidades/planear-fase/SKILL.md +358 -350
- package/habilidades/proceso-ddia-fundamentos/SKILL.md +3 -2
- package/habilidades/swl-claudemd/SKILL.md +6 -7
- package/habilidades/swl-dashboard/SKILL.md +11 -43
- package/habilidades/tdd-workflow/SKILL.md +749 -744
- package/habilidades/validacion-ci-sistema/SKILL.md +1 -1
- package/hooks/agente-lifecycle.js +2 -1
- package/hooks/aiisms-detector.js +13 -4
- package/hooks/audit-trail.js +2 -1
- package/hooks/auto-consolidacion.js +2 -1
- package/hooks/captura-acciones-post.js +2 -1
- package/hooks/captura-acciones-session.js +2 -1
- package/hooks/captura-feedback-usuario.js +3 -2
- package/hooks/claudemd-bloat-detector.js +12 -3
- package/hooks/claudemd-duplicacion-detector.js +13 -3
- package/hooks/contexto-iteracion.js +2 -1
- package/hooks/degradacion-instintos.js +2 -1
- package/hooks/extraccion-aprendizajes.js +109 -15
- package/hooks/grafo-contexto.js +2 -1
- package/hooks/guardrail-modelo.js +2 -1
- package/hooks/inbox-aviso.js +2 -1
- package/hooks/inyeccion-contexto.js +2 -1
- package/hooks/lib/agent-matcher.js +2 -1
- package/hooks/lib/agent-routing.js +2 -1
- package/hooks/lib/autonomia.js +5 -3
- package/hooks/lib/captura-acciones.js +2 -1
- package/hooks/lib/consolidation-lock.js +21 -10
- package/hooks/lib/etapa-auto-evolucion.js +10 -4
- package/hooks/lib/etapa-metricas.js +2 -1
- package/hooks/lib/etapa-perfil-usuario.js +20 -4
- package/hooks/lib/evolution-tracker.js +2 -1
- package/hooks/lib/gateway-notify.js +193 -179
- package/hooks/lib/loop-telemetry.js +5 -4
- package/hooks/lib/mcp-health.js +2 -1
- package/hooks/lib/memory-search.js +4 -0
- package/hooks/lib/merkle-audit.js +58 -6
- package/hooks/lib/nudge-tracker.js +2 -1
- package/hooks/lib/otlp-exporter.js +2 -1
- package/hooks/lib/propose-step.js +3 -2
- package/hooks/lib/raiz-proyecto.js +102 -0
- package/hooks/lib/run-log.js +2 -1
- package/hooks/lib/singleton-guard.js +218 -27
- package/hooks/lib/telegram-cliente.js +17 -8
- package/hooks/preservar-estado-pre-compact.js +2 -1
- package/hooks/proteccion-rutas.js +59 -3
- package/hooks/registro-turnos.js +2 -1
- package/hooks/resumen-sesion.js +2 -1
- package/hooks/risk-scoring.js +2 -1
- package/hooks/rotar-audit-auto.js +46 -20
- package/hooks/session-briefing.js +127 -1
- package/hooks/spec-gate.js +2 -1
- package/hooks/sugerir-contribuir.js +6 -3
- package/hooks/sugerir-regenerar-inventario.js +3 -2
- package/hooks/tdd-gate.js +2 -1
- package/hooks/telemetria-agentes.js +2 -1
- package/hooks/telemetria-skill-routing.js +2 -1
- package/hooks/tracking-costos.js +4 -3
- package/hooks/validar-formato-post-subagente.js +2 -1
- package/hooks/validar-intent-spec.js +2 -1
- package/hooks/validar-memoria-hook.js +13 -3
- package/hooks/validar-planning-paths.js +2 -1
- package/instintos/.backups/perfil-usuario.yaml.2026-07-10-165128.bak +53 -0
- package/instintos/.backups/proyecto.yaml.2026-07-10-165128.bak +372 -0
- package/instintos/perfil-usuario.yaml +506 -3
- package/instintos/proyecto.yaml +78 -0
- package/llms.txt +2 -2
- package/manifiestos/canonical-hashes.json +335 -3
- package/manifiestos/modulos.json +19 -14
- package/manifiestos/planning-paths.json +1 -0
- package/manifiestos/skills-lock.json +50 -50
- package/package.json +2 -3
- package/plugin.json +2 -2
- package/scripts/actualizar.js +3 -0
- package/scripts/auditar-clases-conocidas.js +32 -4
- package/scripts/benchmark-memoria.js +1 -0
- package/scripts/cli/autonomia.js +23 -0
- package/scripts/cli/benchmark-memoria.js +37 -0
- package/scripts/cli/ciclo-autonomo.js +73 -0
- package/scripts/cli/ciclo-fase-b.js +102 -0
- package/scripts/cli/guardrail-metrics.js +39 -0
- package/scripts/cli/loop-telemetry.js +4 -2
- package/scripts/cli/memoria-search.js +69 -0
- package/scripts/cli/nudge-accionar.js +39 -0
- package/scripts/cli/run-eval.js +38 -0
- package/scripts/cli/run-skill-evals.js +13 -2
- package/scripts/derivar-feature-list.js +15 -14
- package/scripts/desinstalar.js +11 -0
- package/scripts/doctor.js +24 -10
- package/scripts/instalador.js +85 -7
- package/scripts/lib/activar-hooks-proyecto.js +12 -0
- package/scripts/lib/auditar-invocaciones-comandos.js +96 -6
- package/scripts/lib/ciclo-autonomo/candidatos.js +174 -0
- package/scripts/lib/ciclo-autonomo/config.js +165 -0
- package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -0
- package/scripts/lib/ciclo-autonomo/fallback.js +77 -0
- package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -0
- package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -0
- package/scripts/lib/ciclo-autonomo/index.js +301 -0
- package/scripts/lib/ciclo-autonomo/lock.js +124 -0
- package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -0
- package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -0
- package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -0
- package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -0
- package/scripts/lib/ciclo-autonomo/yaml-instintos.js +535 -0
- package/scripts/lib/estado.js +9 -0
- package/scripts/lib/gitignore-manifest.js +8 -1
- package/scripts/lib/hooks-settings.js +45 -0
- package/scripts/rotar-audit-logs.js +48 -2
- package/scripts/run-eval.js +1 -0
- package/scripts/run-skill-evals.js +287 -8
- package/scripts/smoke-test.js +16 -8
- package/scripts/tui/pantallas/install-wizard.js +403 -347
- package/scripts/validar.js +40 -1
package/comandos/swl/plugins.md
CHANGED
|
@@ -1,256 +1,256 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl:plugins
|
|
3
|
-
description: Gestiona plugins de usuario instalados en _userland/. Instala, desinstala, lista y valida plugins SWL desde directorios locales. Cargar cuando el usuario quiera instalar componentes externos (agentes, skills, reglas, hooks) sin modificar el sistema base.
|
|
4
|
-
allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# /swl:plugins — Gestión de plugins de usuario
|
|
8
|
-
|
|
9
|
-
Gestiona el ciclo de vida completo de plugins SWL instalados en `_userland/plugins/`.
|
|
10
|
-
Un plugin es un directorio con `plugin.json` que agrupa agentes, skills, reglas y/o
|
|
11
|
-
hooks de terceros o del equipo, sin tocar los componentes del sistema base.
|
|
12
|
-
|
|
13
|
-
## Cuándo usar
|
|
14
|
-
|
|
15
|
-
- Para instalar skills o agentes de dominio específico del proyecto
|
|
16
|
-
- Para incorporar extensiones de equipo sin mezclarlas con el sistema SWL base
|
|
17
|
-
- Para validar un plugin antes de distribuirlo
|
|
18
|
-
- Para limpiar plugins obsoletos
|
|
19
|
-
|
|
20
|
-
## Subcomandos
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
/swl:plugins — Lista plugins instalados (resumen)
|
|
24
|
-
/swl:plugins list — Lista plugins con detalle de componentes
|
|
25
|
-
/swl:plugins install <ruta> — Instala plugin desde directorio local
|
|
26
|
-
/swl:plugins remove <nombre> — Desinstala plugin
|
|
27
|
-
/swl:plugins validate <ruta> — Valida plugin.json contra schema
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## install — Instalar un plugin
|
|
33
|
-
|
|
34
|
-
### Paso 1 — Leer y validar el manifiesto
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
cat <ruta>/plugin.json
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
Verificar que `plugin.json` existe y leerlo. Luego validar contra el schema:
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
# Verificar campos obligatorios: name, version, description
|
|
44
|
-
# El name debe cumplir ^[a-z][a-z0-9-]+$ y no usar palabras reservadas:
|
|
45
|
-
# anthropic, claude, swl
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Si falta `plugin.json` o no cumple el schema en `schemas/plugin.schema.json`:
|
|
49
|
-
reportar los campos inválidos y abortar sin realizar cambios.
|
|
50
|
-
|
|
51
|
-
### Paso 2 — Verificar archivos referenciados
|
|
52
|
-
|
|
53
|
-
Recorrer los arrays `agents`, `skills`, `rules`, `hooks` del manifiesto y
|
|
54
|
-
verificar que cada ruta referenciada existe dentro del directorio del plugin:
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
ls <ruta>/<archivo-referenciado>
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
Si algún archivo referenciado no existe: reportar y abortar.
|
|
61
|
-
|
|
62
|
-
### Paso 2B — Verificación de seguridad del plugin
|
|
63
|
-
|
|
64
|
-
**Carga**: `Skill("seguridad-skills-ia")` — patrones de detección de amenazas.
|
|
65
|
-
|
|
66
|
-
Escanear el contenido completo del plugin antes de copiar al destino:
|
|
67
|
-
|
|
68
|
-
1. **Agentes del plugin**: verificar que ningún agente declara `nivelRiesgo: ALTO`
|
|
69
|
-
ni `permisosRed: irrestricto` sin documentación explícita en el manifiesto
|
|
70
|
-
2. **Hooks con `blocking: true`**: listar y advertir al usuario — requieren
|
|
71
|
-
aprobación explícita antes de activarse
|
|
72
|
-
3. **Skills del plugin**: aplicar los patrones de detección del skill
|
|
73
|
-
`seguridad-skills-ia` sobre cada SKILL.md y sus scripts/
|
|
74
|
-
4. **Reglas del plugin**: verificar que no contradicen reglas base del sistema
|
|
75
|
-
(precedencia de capas: reglas base > reglas de plugin)
|
|
76
|
-
|
|
77
|
-
Resultado del escaneo:
|
|
78
|
-
- **Score ≥ 8.0**: proceder con instalación
|
|
79
|
-
- **Score 5.0-7.9**: advertir hallazgos y pedir confirmación explícita
|
|
80
|
-
- **Score < 5.0**: BLOQUEAR instalación, reportar hallazgos detallados
|
|
81
|
-
|
|
82
|
-
Registrar el resultado del escaneo en `.planning/AUDITORIA.md`:
|
|
83
|
-
```markdown
|
|
84
|
-
## [YYYY-MM-DD HH:MM] plugin-security-scan
|
|
85
|
-
|
|
86
|
-
**Plugin**: nombre-plugin vX.Y.Z
|
|
87
|
-
**Score**: N.N/10.0
|
|
88
|
-
**Veredicto**: SEGURO | SOSPECHOSO | INSEGURO
|
|
89
|
-
**Hallazgos**: [lista o "ninguno"]
|
|
90
|
-
**Acción**: instalado | bloqueado | instalado con advertencias
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### Paso 3 — Resolver dependencias
|
|
94
|
-
|
|
95
|
-
Si `plugin.json` tiene `dependencies`:
|
|
96
|
-
1. Verificar que cada dependencia está instalada en `_userland/plugins/`
|
|
97
|
-
2. Si falta alguna: reportar nombre y versión requerida, abortar con instrucción:
|
|
98
|
-
`Instalar primero: /swl:plugins install <ruta-dependencia>`
|
|
99
|
-
|
|
100
|
-
### Paso 4 — Copiar al destino
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
mkdir -p _userland/plugins/<nombre>/
|
|
104
|
-
cp -r <ruta>/* _userland/plugins/<nombre>/
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### Paso 5 — Registrar en .claude/settings.json
|
|
108
|
-
|
|
109
|
-
Leer `.claude/settings.json`. Para cada componente del plugin:
|
|
110
|
-
|
|
111
|
-
- **skills**: agregar path en `mcpServers` o en la lista de skills según configuración activa
|
|
112
|
-
- **rules**: agregar path en `rules` si la configuración lo soporta
|
|
113
|
-
- **hooks**: agregar entrada en `hooks` con el evento correspondiente
|
|
114
|
-
|
|
115
|
-
Si `.claude/settings.json` no existe o no soporta registro dinámico, documentar
|
|
116
|
-
los paths en `.planning/PLUGINS.md` para referencia manual.
|
|
117
|
-
|
|
118
|
-
### Paso 6 — Verificar integridad post-instalación
|
|
119
|
-
|
|
120
|
-
```bash
|
|
121
|
-
echo "Plugin <nombre> v<version> instalado en _userland/plugins/<nombre>/"
|
|
122
|
-
echo "Componentes: agentes=$(count), skills=$(count), reglas=$(count), hooks=$(count)"
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
Indicar al usuario que ejecute `/swl:status salud` para verificar integridad global.
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## remove — Desinstalar un plugin
|
|
130
|
-
|
|
131
|
-
### Paso 1 — Verificar existencia
|
|
132
|
-
|
|
133
|
-
```bash
|
|
134
|
-
ls _userland/plugins/<nombre>/
|
|
135
|
-
cat _userland/plugins/<nombre>/plugin.json
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
Si no existe: reportar y terminar.
|
|
139
|
-
|
|
140
|
-
### Paso 2 — Verificar dependientes
|
|
141
|
-
|
|
142
|
-
Buscar otros plugins instalados que declaren `<nombre>` en sus `dependencies`:
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
grep -r '"<nombre>"' _userland/plugins/*/plugin.json
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
Si hay dependientes activos: advertir y pedir confirmación antes de continuar.
|
|
149
|
-
|
|
150
|
-
### Paso 3 — Des-registrar de settings.json
|
|
151
|
-
|
|
152
|
-
Revertir los registros realizados durante `install`:
|
|
153
|
-
- Remover skills del listado
|
|
154
|
-
- Remover reglas del listado
|
|
155
|
-
- Remover hooks del listado
|
|
156
|
-
|
|
157
|
-
### Paso 4 — Eliminar directorio
|
|
158
|
-
|
|
159
|
-
```bash
|
|
160
|
-
rm -rf _userland/plugins/<nombre>/
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
Confirmar: `Plugin <nombre> desinstalado correctamente.`
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## validate — Validar plugin sin instalar
|
|
168
|
-
|
|
169
|
-
### Paso 1 — Verificar estructura mínima
|
|
170
|
-
|
|
171
|
-
```bash
|
|
172
|
-
ls <ruta>/plugin.json
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
### Paso 2 — Validar campos del manifiesto
|
|
176
|
-
|
|
177
|
-
Leer `plugin.json` y verificar:
|
|
178
|
-
|
|
179
|
-
| Campo | Regla |
|
|
180
|
-
|-------|-------|
|
|
181
|
-
| `name` | presente, `^[a-z][a-z0-9-]+$`, máximo 64 chars |
|
|
182
|
-
| `version` | presente, `^\d+\.\d+\.\d+$` |
|
|
183
|
-
| `description` | presente, 10–500 chars |
|
|
184
|
-
| `agents[]` | cada ruta existe en el directorio |
|
|
185
|
-
| `skills[]` | cada ruta existe y contiene `SKILL.md` |
|
|
186
|
-
| `rules[]` | cada ruta existe y termina en `.md` |
|
|
187
|
-
| `hooks[]` | cada ruta existe y termina en `.js` |
|
|
188
|
-
| `dependencies` | cada valor es SemVer válido |
|
|
189
|
-
|
|
190
|
-
### Paso 3 — Reportar resultado
|
|
191
|
-
|
|
192
|
-
Si pasa todas las verificaciones:
|
|
193
|
-
```
|
|
194
|
-
✓ plugin.json válido
|
|
195
|
-
✓ X archivos referenciados verificados
|
|
196
|
-
✓ El plugin puede instalarse con: /swl:plugins install <ruta>
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
Si hay problemas: listar cada problema con campo y descripción del error.
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
## list — Listar plugins instalados
|
|
204
|
-
|
|
205
|
-
```bash
|
|
206
|
-
ls _userland/plugins/ 2>/dev/null || echo "(ningún plugin instalado)"
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
Para cada plugin encontrado, leer su `plugin.json` y mostrar:
|
|
210
|
-
|
|
211
|
-
```
|
|
212
|
-
nombre versión autor componentes
|
|
213
|
-
──────────────────────────────────────────────────────
|
|
214
|
-
mi-dominio 1.2.0 Equipo A 3 skills, 1 agente
|
|
215
|
-
otro-plugin 0.5.1 Dev externo 2 reglas, 1 hook
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
Si no hay plugins instalados: indicar cómo instalar uno.
|
|
219
|
-
|
|
220
|
-
---
|
|
221
|
-
|
|
222
|
-
## Estructura de un plugin
|
|
223
|
-
|
|
224
|
-
```
|
|
225
|
-
mi-plugin/
|
|
226
|
-
plugin.json — Manifiesto (requerido)
|
|
227
|
-
agentes/ — Agentes custom (.md con frontmatter YAML)
|
|
228
|
-
habilidades/ — Skills custom (directorios con SKILL.md)
|
|
229
|
-
reglas/ — Reglas custom (.md)
|
|
230
|
-
hooks/ — Hooks custom (.js)
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
### Ejemplo de plugin.json válido
|
|
234
|
-
|
|
235
|
-
```json
|
|
236
|
-
{
|
|
237
|
-
"name": "facturacion-sat",
|
|
238
|
-
"version": "1.0.0",
|
|
239
|
-
"description": "Skills y agentes para integración con el SAT mexicano.",
|
|
240
|
-
"author": "Equipo Fiscal",
|
|
241
|
-
"license": "MIT",
|
|
242
|
-
"skills": ["habilidades/cfdi-4"],
|
|
243
|
-
"agents": ["agentes/validador-sat.md"],
|
|
244
|
-
"rules": ["reglas/cumplimiento-sat.md"]
|
|
245
|
-
}
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
---
|
|
249
|
-
|
|
250
|
-
## Notas de gobernanza
|
|
251
|
-
|
|
252
|
-
- Los plugins instalados en `_userland/` nunca modifican los componentes del sistema base.
|
|
253
|
-
- Los hooks de plugins con `blocking: true` requieren aprobación antes de activarse
|
|
254
|
-
(ver `reglas/gobernanza.md`).
|
|
255
|
-
- Los plugins auto-generados por `/swl:evolucionar` se instalan primero aquí como
|
|
256
|
-
período de prueba antes de promoverse al sistema base.
|
|
1
|
+
---
|
|
2
|
+
name: swl:plugins
|
|
3
|
+
description: Gestiona plugins de usuario instalados en _userland/. Instala, desinstala, lista y valida plugins SWL desde directorios locales. Cargar cuando el usuario quiera instalar componentes externos (agentes, skills, reglas, hooks) sin modificar el sistema base.
|
|
4
|
+
allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:plugins — Gestión de plugins de usuario
|
|
8
|
+
|
|
9
|
+
Gestiona el ciclo de vida completo de plugins SWL instalados en `_userland/plugins/`.
|
|
10
|
+
Un plugin es un directorio con `plugin.json` que agrupa agentes, skills, reglas y/o
|
|
11
|
+
hooks de terceros o del equipo, sin tocar los componentes del sistema base.
|
|
12
|
+
|
|
13
|
+
## Cuándo usar
|
|
14
|
+
|
|
15
|
+
- Para instalar skills o agentes de dominio específico del proyecto
|
|
16
|
+
- Para incorporar extensiones de equipo sin mezclarlas con el sistema SWL base
|
|
17
|
+
- Para validar un plugin antes de distribuirlo
|
|
18
|
+
- Para limpiar plugins obsoletos
|
|
19
|
+
|
|
20
|
+
## Subcomandos
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
/swl:plugins — Lista plugins instalados (resumen)
|
|
24
|
+
/swl:plugins list — Lista plugins con detalle de componentes
|
|
25
|
+
/swl:plugins install <ruta> — Instala plugin desde directorio local
|
|
26
|
+
/swl:plugins remove <nombre> — Desinstala plugin
|
|
27
|
+
/swl:plugins validate <ruta> — Valida plugin.json contra schema
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## install — Instalar un plugin
|
|
33
|
+
|
|
34
|
+
### Paso 1 — Leer y validar el manifiesto
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
cat <ruta>/plugin.json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Verificar que `plugin.json` existe y leerlo. Luego validar contra el schema:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Verificar campos obligatorios: name, version, description
|
|
44
|
+
# El name debe cumplir ^[a-z][a-z0-9-]+$ y no usar palabras reservadas:
|
|
45
|
+
# anthropic, claude, swl
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Si falta `plugin.json` o no cumple el schema en `schemas/plugin.schema.json`:
|
|
49
|
+
reportar los campos inválidos y abortar sin realizar cambios.
|
|
50
|
+
|
|
51
|
+
### Paso 2 — Verificar archivos referenciados
|
|
52
|
+
|
|
53
|
+
Recorrer los arrays `agents`, `skills`, `rules`, `hooks` del manifiesto y
|
|
54
|
+
verificar que cada ruta referenciada existe dentro del directorio del plugin:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
ls <ruta>/<archivo-referenciado>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Si algún archivo referenciado no existe: reportar y abortar.
|
|
61
|
+
|
|
62
|
+
### Paso 2B — Verificación de seguridad del plugin
|
|
63
|
+
|
|
64
|
+
**Carga**: `Skill("seguridad-skills-ia")` — patrones de detección de amenazas.
|
|
65
|
+
|
|
66
|
+
Escanear el contenido completo del plugin antes de copiar al destino:
|
|
67
|
+
|
|
68
|
+
1. **Agentes del plugin**: verificar que ningún agente declara `nivelRiesgo: ALTO`
|
|
69
|
+
ni `permisosRed: irrestricto` sin documentación explícita en el manifiesto
|
|
70
|
+
2. **Hooks con `blocking: true`**: listar y advertir al usuario — requieren
|
|
71
|
+
aprobación explícita antes de activarse
|
|
72
|
+
3. **Skills del plugin**: aplicar los patrones de detección del skill
|
|
73
|
+
`seguridad-skills-ia` sobre cada SKILL.md y sus scripts/
|
|
74
|
+
4. **Reglas del plugin**: verificar que no contradicen reglas base del sistema
|
|
75
|
+
(precedencia de capas: reglas base > reglas de plugin)
|
|
76
|
+
|
|
77
|
+
Resultado del escaneo:
|
|
78
|
+
- **Score ≥ 8.0**: proceder con instalación
|
|
79
|
+
- **Score 5.0-7.9**: advertir hallazgos y pedir confirmación explícita
|
|
80
|
+
- **Score < 5.0**: BLOQUEAR instalación, reportar hallazgos detallados
|
|
81
|
+
|
|
82
|
+
Registrar el resultado del escaneo en `.planning/AUDITORIA.md`:
|
|
83
|
+
```markdown
|
|
84
|
+
## [YYYY-MM-DD HH:MM] plugin-security-scan
|
|
85
|
+
|
|
86
|
+
**Plugin**: nombre-plugin vX.Y.Z
|
|
87
|
+
**Score**: N.N/10.0
|
|
88
|
+
**Veredicto**: SEGURO | SOSPECHOSO | INSEGURO
|
|
89
|
+
**Hallazgos**: [lista o "ninguno"]
|
|
90
|
+
**Acción**: instalado | bloqueado | instalado con advertencias
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Paso 3 — Resolver dependencias
|
|
94
|
+
|
|
95
|
+
Si `plugin.json` tiene `dependencies`:
|
|
96
|
+
1. Verificar que cada dependencia está instalada en `_userland/plugins/`
|
|
97
|
+
2. Si falta alguna: reportar nombre y versión requerida, abortar con instrucción:
|
|
98
|
+
`Instalar primero: /swl:plugins install <ruta-dependencia>`
|
|
99
|
+
|
|
100
|
+
### Paso 4 — Copiar al destino
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
mkdir -p _userland/plugins/<nombre>/
|
|
104
|
+
cp -r <ruta>/* _userland/plugins/<nombre>/
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Paso 5 — Registrar en .claude/settings.json
|
|
108
|
+
|
|
109
|
+
Leer `.claude/settings.json`. Para cada componente del plugin:
|
|
110
|
+
|
|
111
|
+
- **skills**: agregar path en `mcpServers` o en la lista de skills según configuración activa
|
|
112
|
+
- **rules**: agregar path en `rules` si la configuración lo soporta
|
|
113
|
+
- **hooks**: agregar entrada en `hooks` con el evento correspondiente
|
|
114
|
+
|
|
115
|
+
Si `.claude/settings.json` no existe o no soporta registro dinámico, documentar
|
|
116
|
+
los paths en `.planning/PLUGINS.md` para referencia manual.
|
|
117
|
+
|
|
118
|
+
### Paso 6 — Verificar integridad post-instalación
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
echo "Plugin <nombre> v<version> instalado en _userland/plugins/<nombre>/"
|
|
122
|
+
echo "Componentes: agentes=$(count), skills=$(count), reglas=$(count), hooks=$(count)"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Indicar al usuario que ejecute `/swl:status salud` para verificar integridad global.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## remove — Desinstalar un plugin
|
|
130
|
+
|
|
131
|
+
### Paso 1 — Verificar existencia
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
ls _userland/plugins/<nombre>/
|
|
135
|
+
cat _userland/plugins/<nombre>/plugin.json
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Si no existe: reportar y terminar.
|
|
139
|
+
|
|
140
|
+
### Paso 2 — Verificar dependientes
|
|
141
|
+
|
|
142
|
+
Buscar otros plugins instalados que declaren `<nombre>` en sus `dependencies`:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
grep -r '"<nombre>"' _userland/plugins/*/plugin.json
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Si hay dependientes activos: advertir y pedir confirmación antes de continuar.
|
|
149
|
+
|
|
150
|
+
### Paso 3 — Des-registrar de settings.json
|
|
151
|
+
|
|
152
|
+
Revertir los registros realizados durante `install`:
|
|
153
|
+
- Remover skills del listado
|
|
154
|
+
- Remover reglas del listado
|
|
155
|
+
- Remover hooks del listado
|
|
156
|
+
|
|
157
|
+
### Paso 4 — Eliminar directorio
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
rm -rf _userland/plugins/<nombre>/
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Confirmar: `Plugin <nombre> desinstalado correctamente.`
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## validate — Validar plugin sin instalar
|
|
168
|
+
|
|
169
|
+
### Paso 1 — Verificar estructura mínima
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
ls <ruta>/plugin.json
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Paso 2 — Validar campos del manifiesto
|
|
176
|
+
|
|
177
|
+
Leer `plugin.json` y verificar:
|
|
178
|
+
|
|
179
|
+
| Campo | Regla |
|
|
180
|
+
|-------|-------|
|
|
181
|
+
| `name` | presente, `^[a-z][a-z0-9-]+$`, máximo 64 chars |
|
|
182
|
+
| `version` | presente, `^\d+\.\d+\.\d+$` |
|
|
183
|
+
| `description` | presente, 10–500 chars |
|
|
184
|
+
| `agents[]` | cada ruta existe en el directorio |
|
|
185
|
+
| `skills[]` | cada ruta existe y contiene `SKILL.md` |
|
|
186
|
+
| `rules[]` | cada ruta existe y termina en `.md` |
|
|
187
|
+
| `hooks[]` | cada ruta existe y termina en `.js` |
|
|
188
|
+
| `dependencies` | cada valor es SemVer válido |
|
|
189
|
+
|
|
190
|
+
### Paso 3 — Reportar resultado
|
|
191
|
+
|
|
192
|
+
Si pasa todas las verificaciones:
|
|
193
|
+
```
|
|
194
|
+
✓ plugin.json válido
|
|
195
|
+
✓ X archivos referenciados verificados
|
|
196
|
+
✓ El plugin puede instalarse con: /swl:plugins install <ruta>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Si hay problemas: listar cada problema con campo y descripción del error.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## list — Listar plugins instalados
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
ls _userland/plugins/ 2>/dev/null || echo "(ningún plugin instalado)"
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Para cada plugin encontrado, leer su `plugin.json` y mostrar:
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
nombre versión autor componentes
|
|
213
|
+
──────────────────────────────────────────────────────
|
|
214
|
+
mi-dominio 1.2.0 Equipo A 3 skills, 1 agente
|
|
215
|
+
otro-plugin 0.5.1 Dev externo 2 reglas, 1 hook
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Si no hay plugins instalados: indicar cómo instalar uno.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Estructura de un plugin
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
mi-plugin/
|
|
226
|
+
plugin.json — Manifiesto (requerido)
|
|
227
|
+
agentes/ — Agentes custom (.md con frontmatter YAML)
|
|
228
|
+
habilidades/ — Skills custom (directorios con SKILL.md)
|
|
229
|
+
reglas/ — Reglas custom (.md)
|
|
230
|
+
hooks/ — Hooks custom (.js)
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Ejemplo de plugin.json válido
|
|
234
|
+
|
|
235
|
+
```json
|
|
236
|
+
{
|
|
237
|
+
"name": "facturacion-sat",
|
|
238
|
+
"version": "1.0.0",
|
|
239
|
+
"description": "Skills y agentes para integración con el SAT mexicano.",
|
|
240
|
+
"author": "Equipo Fiscal",
|
|
241
|
+
"license": "MIT",
|
|
242
|
+
"skills": ["habilidades/cfdi-4"],
|
|
243
|
+
"agents": ["agentes/validador-sat.md"],
|
|
244
|
+
"rules": ["reglas/cumplimiento-sat.md"]
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Notas de gobernanza
|
|
251
|
+
|
|
252
|
+
- Los plugins instalados en `_userland/` nunca modifican los componentes del sistema base.
|
|
253
|
+
- Los hooks de plugins con `blocking: true` requieren aprobación antes de activarse
|
|
254
|
+
(ver `reglas/gobernanza.md`).
|
|
255
|
+
- Los plugins auto-generados por `/swl:evolucionar` se instalan primero aquí como
|
|
256
|
+
período de prueba antes de promoverse al sistema base.
|