@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/fix.md
CHANGED
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl:fix
|
|
3
|
-
description: >
|
|
4
|
-
Punto de entrada único para reparar fallas: recibe un síntoma (stack trace,
|
|
5
|
-
test rojo, build roto, CI en rojo, hallazgo de revisión) y hace triage para
|
|
6
|
-
rutear al fixer correcto — depurador-swl (bug runtime/lógica),
|
|
7
|
-
resolutor-build-swl (build local), gh-fix-ci-swl (GitHub Actions),
|
|
8
|
-
/swl:verificar --until-converge (hallazgos de review) o /swl:nemesis
|
|
9
|
-
--remediar (bugs de lógica profunda). Aplica la política de convergencia
|
|
10
|
-
común (caps de iteración + escalación) y el contrato transversal de
|
|
11
|
-
regresión obligatoria post-fix. Usar cuando algo falla y no sabes (o no
|
|
12
|
-
quieres decidir) qué componente de reparación invocar.
|
|
13
|
-
argument-hint: "[descripción del síntoma / pega el error] [--tipo bug|build|ci|hallazgos]"
|
|
14
|
-
allowed-tools: [Read, Grep, Glob, Bash, Agent, Skill]
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
# /swl:fix — Triage y despacho de reparaciones
|
|
18
|
-
|
|
19
|
-
Eres el despachador de reparaciones del sistema. El usuario te da un síntoma;
|
|
20
|
-
tú clasificas, ruteas al fixer especializado correcto y garantizas que el fix
|
|
21
|
-
cierre con regresión verificada. NO reparas directamente — despachas y
|
|
22
|
-
supervisas el contrato de cierre.
|
|
23
|
-
|
|
24
|
-
## Cuándo usar
|
|
25
|
-
|
|
26
|
-
- "Esto falla y no sé por qué" — cualquier falla sin fixer obvio.
|
|
27
|
-
- Tras `/swl:seguridad` o `/swl:verificar` con hallazgos CRÍTICOS a remediar.
|
|
28
|
-
- Cuando un push dejó el CI en rojo.
|
|
29
|
-
|
|
30
|
-
**Cuándo NO usar**: si ya sabes exactamente qué fixer necesitas, invócalo
|
|
31
|
-
directo (el triage es overhead); para features nuevas (→ flujo GSD
|
|
32
|
-
discutir→planear→ejecutar); para deuda técnica planificada (→ `/swl:deuda-codigo`).
|
|
33
|
-
|
|
34
|
-
## Paso 1 — Triage (clasificación del síntoma)
|
|
35
|
-
|
|
36
|
-
Recolectar la evidencia mínima ANTES de rutear — nunca clasificar por la
|
|
37
|
-
descripción sola:
|
|
38
|
-
|
|
39
|
-
| Señal observada | Verificación | Ruta |
|
|
40
|
-
|---|---|---|
|
|
41
|
-
| Stack trace en runtime, comportamiento inesperado, bug reportado | Reproducir el error una vez (o pedir pasos de repro) | **A — Bug** |
|
|
42
|
-
| `npm run build` / `tsc` / `cargo build` / compilación falla local | Correr el build y capturar el error real | **B — Build** |
|
|
43
|
-
| GitHub Actions en rojo tras push/PR | `gh run list --limit 3` y verificar SHA | **C — CI** |
|
|
44
|
-
| Reporte de verificación/auditoría con hallazgos (VERIFICACION.md, nemesis, postura de seguridad) | Leer el reporte y verificar 2-3 citas archivo:línea contra el código actual (Familia 2) | **D — Hallazgos** |
|
|
45
|
-
| Test rojo sin cambio de código reciente (flaky o regresión externa) | Correr el test 2 veces; revisar `git log` del área | **A — Bug** (si determinista) o reportar flakiness |
|
|
46
|
-
|
|
47
|
-
Síntomas mixtos (ej: CI rojo porque el build falla): rutear por la **causa más
|
|
48
|
-
local** primero (build local → B); el CI se re-verifica solo al pushear el fix.
|
|
49
|
-
|
|
50
|
-
## Paso 2 — Despacho
|
|
51
|
-
|
|
52
|
-
- **Ruta A — Bug**: `Agent(depurador-swl)` con la evidencia de repro. Su método
|
|
53
|
-
científico incluye la regresión obligatoria (Fase 7) y test de no-regresión
|
|
54
|
-
(Fase 8). Si el fix excede el diagnóstico (feature faltante, decisión de
|
|
55
|
-
producto), el depurador escala — no fuerces el fix por esta vía.
|
|
56
|
-
- **Ruta B — Build**: `Agent(resolutor-build-swl)` — detecta lenguaje, carga el
|
|
57
|
-
`build-errors-*` correspondiente, fix mínimo.
|
|
58
|
-
- **Ruta C — CI**: `Agent(gh-fix-ci-swl)` — loop fix→push→monitor con HITL
|
|
59
|
-
approval por fix y verificación por SHA.
|
|
60
|
-
- **Ruta D — Hallazgos**: según el origen del reporte:
|
|
61
|
-
- Hallazgos de código/seguridad de una fase → `/swl:verificar --aplicar-iteracion`
|
|
62
|
-
o `--until-converge` (delega la corrección a `implementador-swl` y re-verifica).
|
|
63
|
-
- Bugs de lógica profunda (estado acoplado, invariantes) → `/swl:nemesis --remediar`.
|
|
64
|
-
- Hallazgos de postura de seguridad (`/swl:seguridad`): los de código van por
|
|
65
|
-
`verificar --solo-seguridad`; secretos en historial y cambios de infra son
|
|
66
|
-
Hallazgo C (decisión del usuario, no automatizar).
|
|
67
|
-
|
|
68
|
-
## Política de convergencia común (aplica a todas las rutas)
|
|
69
|
-
|
|
70
|
-
Cada fixer conserva su cap interno; este es el mapa unificado y la regla de
|
|
71
|
-
escalación compartida:
|
|
72
|
-
|
|
73
|
-
| Fixer / loop | Cap | Al agotar el cap |
|
|
74
|
-
|---|---|---|
|
|
75
|
-
| depurador-swl | 3 intentos de fix | Escalar con hipótesis descartadas documentadas |
|
|
76
|
-
| resolutor-build-swl | 1 fix mínimo verificado | Si el fix rompe la suite: revertir y reportar bloqueado |
|
|
77
|
-
| gh-fix-ci-swl | 3 iteraciones fix→push→monitor (maxTurnos 12) | Escalar al usuario |
|
|
78
|
-
| /swl:verificar --until-converge | 5 iteraciones (default) | Salida por plateau/adversarial |
|
|
79
|
-
| /swl:nemesis --remediar | 3 iteraciones | Recovery Catalog (reprompt→reduce-autonomy→escalate) |
|
|
80
|
-
| verificar-trabajo (por claim) | 2 intentos | Escalar |
|
|
81
|
-
|
|
82
|
-
Reglas transversales:
|
|
83
|
-
|
|
84
|
-
1. **NUNCA re-despachar en círculo**: si la Ruta A escala y el síntoma "parece"
|
|
85
|
-
de build, NO relanzar Ruta B con el mismo síntoma sin evidencia nueva — eso
|
|
86
|
-
es el loop de reparación infinito que `gobernanza.md` prohíbe (máximo 2
|
|
87
|
-
despachos por síntoma, luego reporte al usuario con lo aprendido).
|
|
88
|
-
2. **Escalar ≠ fracasar**: el reporte de escalación incluye qué se intentó, qué
|
|
89
|
-
se descartó y la recomendación — nunca "no pude" a secas (anti-degradación
|
|
90
|
-
silenciosa, `seguridad-agentes.md`).
|
|
91
|
-
|
|
92
|
-
## Contrato de cierre — regresión obligatoria
|
|
93
|
-
|
|
94
|
-
Ningún fix se reporta como completado sin:
|
|
95
|
-
|
|
96
|
-
1. **La suite de tests del proyecto en verde** (no solo el build/step que
|
|
97
|
-
falló). Un fix de build que rompe lógica de negocio no está terminado.
|
|
98
|
-
Si el proyecto NO tiene suite: reportarlo como hallazgo del triage —
|
|
99
|
-
no como excusa.
|
|
100
|
-
2. **Test de no-regresión** cuando la ruta fue A (bug): el test que reproduce
|
|
101
|
-
el bug queda en la suite (lo garantiza el método del depurador).
|
|
102
|
-
3. **Commit atómico** del fix, separado de cualquier otra mejora.
|
|
103
|
-
|
|
104
|
-
## Cierre — captura de aprendizaje
|
|
105
|
-
|
|
106
|
-
Si el fix fue CRÍTICO o el bug era recurrente (≥2ª vez con el mismo patrón),
|
|
107
|
-
ofrecer `/swl:aprender` para capturar el anti-patrón en APRENDIZAJES.md — la
|
|
108
|
-
causa de la causa vale más que el fix.
|
|
109
|
-
|
|
110
|
-
## Reglas de comportamiento
|
|
111
|
-
|
|
112
|
-
- El triage verifica evidencia real (correr el build, reproducir el error,
|
|
113
|
-
leer el reporte) — clasificar por descripción textual produce despachos
|
|
114
|
-
erróneos.
|
|
115
|
-
- Este comando NO aplica fixes por sí mismo; el trabajo lo hacen los fixers
|
|
116
|
-
especializados con sus permisos declarados.
|
|
117
|
-
- Reportar siempre qué ruta se eligió y por qué — el usuario debe poder
|
|
118
|
-
invocar el fixer directo la próxima vez.
|
|
1
|
+
---
|
|
2
|
+
name: swl:fix
|
|
3
|
+
description: >
|
|
4
|
+
Punto de entrada único para reparar fallas: recibe un síntoma (stack trace,
|
|
5
|
+
test rojo, build roto, CI en rojo, hallazgo de revisión) y hace triage para
|
|
6
|
+
rutear al fixer correcto — depurador-swl (bug runtime/lógica),
|
|
7
|
+
resolutor-build-swl (build local), gh-fix-ci-swl (GitHub Actions),
|
|
8
|
+
/swl:verificar --until-converge (hallazgos de review) o /swl:nemesis
|
|
9
|
+
--remediar (bugs de lógica profunda). Aplica la política de convergencia
|
|
10
|
+
común (caps de iteración + escalación) y el contrato transversal de
|
|
11
|
+
regresión obligatoria post-fix. Usar cuando algo falla y no sabes (o no
|
|
12
|
+
quieres decidir) qué componente de reparación invocar.
|
|
13
|
+
argument-hint: "[descripción del síntoma / pega el error] [--tipo bug|build|ci|hallazgos]"
|
|
14
|
+
allowed-tools: [Read, Grep, Glob, Bash, Agent, Skill]
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# /swl:fix — Triage y despacho de reparaciones
|
|
18
|
+
|
|
19
|
+
Eres el despachador de reparaciones del sistema. El usuario te da un síntoma;
|
|
20
|
+
tú clasificas, ruteas al fixer especializado correcto y garantizas que el fix
|
|
21
|
+
cierre con regresión verificada. NO reparas directamente — despachas y
|
|
22
|
+
supervisas el contrato de cierre.
|
|
23
|
+
|
|
24
|
+
## Cuándo usar
|
|
25
|
+
|
|
26
|
+
- "Esto falla y no sé por qué" — cualquier falla sin fixer obvio.
|
|
27
|
+
- Tras `/swl:seguridad` o `/swl:verificar` con hallazgos CRÍTICOS a remediar.
|
|
28
|
+
- Cuando un push dejó el CI en rojo.
|
|
29
|
+
|
|
30
|
+
**Cuándo NO usar**: si ya sabes exactamente qué fixer necesitas, invócalo
|
|
31
|
+
directo (el triage es overhead); para features nuevas (→ flujo GSD
|
|
32
|
+
discutir→planear→ejecutar); para deuda técnica planificada (→ `/swl:deuda-codigo`).
|
|
33
|
+
|
|
34
|
+
## Paso 1 — Triage (clasificación del síntoma)
|
|
35
|
+
|
|
36
|
+
Recolectar la evidencia mínima ANTES de rutear — nunca clasificar por la
|
|
37
|
+
descripción sola:
|
|
38
|
+
|
|
39
|
+
| Señal observada | Verificación | Ruta |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| Stack trace en runtime, comportamiento inesperado, bug reportado | Reproducir el error una vez (o pedir pasos de repro) | **A — Bug** |
|
|
42
|
+
| `npm run build` / `tsc` / `cargo build` / compilación falla local | Correr el build y capturar el error real | **B — Build** |
|
|
43
|
+
| GitHub Actions en rojo tras push/PR | `gh run list --limit 3` y verificar SHA | **C — CI** |
|
|
44
|
+
| Reporte de verificación/auditoría con hallazgos (VERIFICACION.md, nemesis, postura de seguridad) | Leer el reporte y verificar 2-3 citas archivo:línea contra el código actual (Familia 2) | **D — Hallazgos** |
|
|
45
|
+
| Test rojo sin cambio de código reciente (flaky o regresión externa) | Correr el test 2 veces; revisar `git log` del área | **A — Bug** (si determinista) o reportar flakiness |
|
|
46
|
+
|
|
47
|
+
Síntomas mixtos (ej: CI rojo porque el build falla): rutear por la **causa más
|
|
48
|
+
local** primero (build local → B); el CI se re-verifica solo al pushear el fix.
|
|
49
|
+
|
|
50
|
+
## Paso 2 — Despacho
|
|
51
|
+
|
|
52
|
+
- **Ruta A — Bug**: `Agent(depurador-swl)` con la evidencia de repro. Su método
|
|
53
|
+
científico incluye la regresión obligatoria (Fase 7) y test de no-regresión
|
|
54
|
+
(Fase 8). Si el fix excede el diagnóstico (feature faltante, decisión de
|
|
55
|
+
producto), el depurador escala — no fuerces el fix por esta vía.
|
|
56
|
+
- **Ruta B — Build**: `Agent(resolutor-build-swl)` — detecta lenguaje, carga el
|
|
57
|
+
`build-errors-*` correspondiente, fix mínimo.
|
|
58
|
+
- **Ruta C — CI**: `Agent(gh-fix-ci-swl)` — loop fix→push→monitor con HITL
|
|
59
|
+
approval por fix y verificación por SHA.
|
|
60
|
+
- **Ruta D — Hallazgos**: según el origen del reporte:
|
|
61
|
+
- Hallazgos de código/seguridad de una fase → `/swl:verificar --aplicar-iteracion`
|
|
62
|
+
o `--until-converge` (delega la corrección a `implementador-swl` y re-verifica).
|
|
63
|
+
- Bugs de lógica profunda (estado acoplado, invariantes) → `/swl:nemesis --remediar`.
|
|
64
|
+
- Hallazgos de postura de seguridad (`/swl:seguridad`): los de código van por
|
|
65
|
+
`verificar --solo-seguridad`; secretos en historial y cambios de infra son
|
|
66
|
+
Hallazgo C (decisión del usuario, no automatizar).
|
|
67
|
+
|
|
68
|
+
## Política de convergencia común (aplica a todas las rutas)
|
|
69
|
+
|
|
70
|
+
Cada fixer conserva su cap interno; este es el mapa unificado y la regla de
|
|
71
|
+
escalación compartida:
|
|
72
|
+
|
|
73
|
+
| Fixer / loop | Cap | Al agotar el cap |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| depurador-swl | 3 intentos de fix | Escalar con hipótesis descartadas documentadas |
|
|
76
|
+
| resolutor-build-swl | 1 fix mínimo verificado | Si el fix rompe la suite: revertir y reportar bloqueado |
|
|
77
|
+
| gh-fix-ci-swl | 3 iteraciones fix→push→monitor (maxTurnos 12) | Escalar al usuario |
|
|
78
|
+
| /swl:verificar --until-converge | 5 iteraciones (default) | Salida por plateau/adversarial |
|
|
79
|
+
| /swl:nemesis --remediar | 3 iteraciones | Recovery Catalog (reprompt→reduce-autonomy→escalate) |
|
|
80
|
+
| verificar-trabajo (por claim) | 2 intentos | Escalar |
|
|
81
|
+
|
|
82
|
+
Reglas transversales:
|
|
83
|
+
|
|
84
|
+
1. **NUNCA re-despachar en círculo**: si la Ruta A escala y el síntoma "parece"
|
|
85
|
+
de build, NO relanzar Ruta B con el mismo síntoma sin evidencia nueva — eso
|
|
86
|
+
es el loop de reparación infinito que `gobernanza.md` prohíbe (máximo 2
|
|
87
|
+
despachos por síntoma, luego reporte al usuario con lo aprendido).
|
|
88
|
+
2. **Escalar ≠ fracasar**: el reporte de escalación incluye qué se intentó, qué
|
|
89
|
+
se descartó y la recomendación — nunca "no pude" a secas (anti-degradación
|
|
90
|
+
silenciosa, `seguridad-agentes.md`).
|
|
91
|
+
|
|
92
|
+
## Contrato de cierre — regresión obligatoria
|
|
93
|
+
|
|
94
|
+
Ningún fix se reporta como completado sin:
|
|
95
|
+
|
|
96
|
+
1. **La suite de tests del proyecto en verde** (no solo el build/step que
|
|
97
|
+
falló). Un fix de build que rompe lógica de negocio no está terminado.
|
|
98
|
+
Si el proyecto NO tiene suite: reportarlo como hallazgo del triage —
|
|
99
|
+
no como excusa.
|
|
100
|
+
2. **Test de no-regresión** cuando la ruta fue A (bug): el test que reproduce
|
|
101
|
+
el bug queda en la suite (lo garantiza el método del depurador).
|
|
102
|
+
3. **Commit atómico** del fix, separado de cualquier otra mejora.
|
|
103
|
+
|
|
104
|
+
## Cierre — captura de aprendizaje
|
|
105
|
+
|
|
106
|
+
Si el fix fue CRÍTICO o el bug era recurrente (≥2ª vez con el mismo patrón),
|
|
107
|
+
ofrecer `/swl:aprender` para capturar el anti-patrón en APRENDIZAJES.md — la
|
|
108
|
+
causa de la causa vale más que el fix.
|
|
109
|
+
|
|
110
|
+
## Reglas de comportamiento
|
|
111
|
+
|
|
112
|
+
- El triage verifica evidencia real (correr el build, reproducir el error,
|
|
113
|
+
leer el reporte) — clasificar por descripción textual produce despachos
|
|
114
|
+
erróneos.
|
|
115
|
+
- Este comando NO aplica fixes por sí mismo; el trabajo lo hacen los fixers
|
|
116
|
+
especializados con sus permisos declarados.
|
|
117
|
+
- Reportar siempre qué ruta se eligió y por qué — el usuario debe poder
|
|
118
|
+
invocar el fixer directo la próxima vez.
|
package/comandos/swl/gateway.md
CHANGED
|
@@ -1,158 +1,158 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl:gateway
|
|
3
|
-
description: Gestiona el gateway multi-plataforma de SWL. Configura adaptadores (Telegram, Discord, Webhook), verifica estado de conexión, envía mensajes de prueba y muestra logs de actividad. Usa manifiestos/gateway-config.json para configuración.
|
|
4
|
-
allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
|
|
5
|
-
user-invocable: true
|
|
6
|
-
version: "1.0.0"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# /swl:gateway — Gestión del gateway multi-plataforma
|
|
10
|
-
|
|
11
|
-
Eres el gestor del gateway SWL. El gateway conecta el sistema con plataformas de mensajería externas para notificaciones bidireccionales.
|
|
12
|
-
|
|
13
|
-
## Subcomandos
|
|
14
|
-
|
|
15
|
-
| Subcomando | Descripción |
|
|
16
|
-
|-----------|-------------|
|
|
17
|
-
| `status` | Muestra estado de configuración y conexión de cada adaptador |
|
|
18
|
-
| `config` | Abre y guía la edición de `manifiestos/gateway-config.json` |
|
|
19
|
-
| `test <plataforma>` | Envía mensaje de prueba al adaptador especificado |
|
|
20
|
-
| `start` | Inicia el gateway daemon |
|
|
21
|
-
| `stop` | Detiene el gateway daemon |
|
|
22
|
-
| `logs [N]` | Muestra últimos N mensajes procesados |
|
|
23
|
-
| `relay-on <plataforma> <userId>` | Habilita recepción de comandos (relay bidireccional) y agrega usuario autorizado |
|
|
24
|
-
| `relay-off <plataforma>` | Deshabilita recepción de comandos de esa plataforma |
|
|
25
|
-
| `relay-status` | Muestra estado del relay y audit trail reciente |
|
|
26
|
-
|
|
27
|
-
## Paso 0 — Leer configuración
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
cat manifiestos/gateway-config.json
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Mostrar estado de cada adaptador:
|
|
34
|
-
```
|
|
35
|
-
=== Gateway SWL ===
|
|
36
|
-
Habilitado: [sí/no]
|
|
37
|
-
|
|
38
|
-
Adaptadores:
|
|
39
|
-
Telegram: [habilitado/deshabilitado] — Token: [configurado/falta]
|
|
40
|
-
Discord: [habilitado/deshabilitado] — Token: [configurado/falta]
|
|
41
|
-
Webhook: [habilitado/deshabilitado] — URL: [configurada/falta]
|
|
42
|
-
|
|
43
|
-
Notificaciones:
|
|
44
|
-
onSessionComplete: [sí/no]
|
|
45
|
-
onCheckpoint: [sí/no]
|
|
46
|
-
onError: [sí/no]
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Subcomando: status
|
|
50
|
-
|
|
51
|
-
Lee `manifiestos/gateway-config.json` y muestra el estado formateado arriba.
|
|
52
|
-
|
|
53
|
-
## Subcomando: config
|
|
54
|
-
|
|
55
|
-
Guía interactiva para configurar el gateway:
|
|
56
|
-
|
|
57
|
-
1. ¿Habilitar gateway? (sí/no)
|
|
58
|
-
2. ¿Qué plataformas? (telegram/discord/webhook)
|
|
59
|
-
3. Para Telegram: pide el token del bot (via BotFather)
|
|
60
|
-
4. Para Telegram: pide IDs de usuarios permitidos (opcional)
|
|
61
|
-
5. Para Discord: pide token del bot y guild/channel IDs
|
|
62
|
-
6. Para Webhook: pide URL y secret
|
|
63
|
-
7. Escribe la configuración en `manifiestos/gateway-config.json`
|
|
64
|
-
|
|
65
|
-
**NUNCA hardcodear tokens en el archivo** — usar referencias a variables de entorno: `${TELEGRAM_BOT_TOKEN}`.
|
|
66
|
-
|
|
67
|
-
## Subcomando: test <plataforma>
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
node -e "
|
|
71
|
-
const { GatewayRunner } = require('./gateway/index');
|
|
72
|
-
const gw = new GatewayRunner(process.cwd());
|
|
73
|
-
// enviar mensaje de prueba
|
|
74
|
-
"
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Envía un mensaje de prueba al adaptador indicado y reporta si se recibió.
|
|
78
|
-
|
|
79
|
-
## Subcomando: start
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
node gateway/index.js &
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
Inicia el gateway como proceso en background. Reporta PID.
|
|
86
|
-
|
|
87
|
-
## Subcomando: logs
|
|
88
|
-
|
|
89
|
-
Lee `.planning/comms/` y muestra los últimos N mensajes procesados con timestamp, tipo, origen y destino.
|
|
90
|
-
|
|
91
|
-
## Subcomando: relay-on \<plataforma\> \<userId\>
|
|
92
|
-
|
|
93
|
-
Habilita el modo relay bidireccional para una plataforma y autoriza a un usuario específico a enviar comandos desde ese canal hacia Claude Code.
|
|
94
|
-
|
|
95
|
-
Proceso:
|
|
96
|
-
1. Cargar `manifiestos/gateway-config.json`.
|
|
97
|
-
2. Setear `relay.enabled = true`.
|
|
98
|
-
3. Setear `relay.platforms.<plataforma>.enabled = true`.
|
|
99
|
-
4. Agregar `<userId>` a `relay.platforms.<plataforma>.allowedUsers` si no está.
|
|
100
|
-
5. Guardar con escritura atómica.
|
|
101
|
-
6. Informar al usuario que los mensajes entrantes se encolarán en `.planning/inbox/` y requieren ejecutar `/swl:inbox` para procesarlos.
|
|
102
|
-
|
|
103
|
-
**Importante**: antes de habilitar el relay, asegurar que el adaptador ya está funcionando (enabled + token válido). El relay no reemplaza al adaptador — lo extiende para recibir comandos.
|
|
104
|
-
|
|
105
|
-
## Subcomando: relay-off \<plataforma\>
|
|
106
|
-
|
|
107
|
-
Deshabilita el relay para esa plataforma (no desactiva el adaptador, solo la recepción de comandos). Los usuarios autorizados se preservan para re-habilitación rápida.
|
|
108
|
-
|
|
109
|
-
## Subcomando: relay-status
|
|
110
|
-
|
|
111
|
-
Muestra:
|
|
112
|
-
- Estado global del relay (enabled / disabled)
|
|
113
|
-
- Por plataforma: enabled, número de allowedUsers
|
|
114
|
-
- Rate limit configurado
|
|
115
|
-
- Últimas 10 entradas del audit trail (`.planning/inbox/audit.jsonl`)
|
|
116
|
-
- Cantidad de comandos pendientes en `.planning/inbox/`
|
|
117
|
-
|
|
118
|
-
```bash
|
|
119
|
-
# Audit trail reciente
|
|
120
|
-
tail -10 .planning/inbox/audit.jsonl 2>/dev/null
|
|
121
|
-
|
|
122
|
-
# Pendientes
|
|
123
|
-
ls .planning/inbox/cmd-*.json 2>/dev/null | wc -l
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## Modo relay: arquitectura bidireccional
|
|
127
|
-
|
|
128
|
-
```
|
|
129
|
-
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
130
|
-
│ Telegram │────▶│ Gateway │────▶│ .planning/ │
|
|
131
|
-
│ Bot │ │ (adapter + │ │ inbox/ │
|
|
132
|
-
└──────────────┘ │ CommandRelay)│ └──────┬───────┘
|
|
133
|
-
└──────────────┘ │
|
|
134
|
-
▲ ▼
|
|
135
|
-
│ ┌─────────────┐
|
|
136
|
-
└──────────────│ /swl:inbox │
|
|
137
|
-
(respuesta) │ (consumer) │
|
|
138
|
-
└─────────────┘
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
Validaciones del CommandRelay (todas obligatorias):
|
|
142
|
-
- Usuario en allowedUsers de esa plataforma
|
|
143
|
-
- Texto ≤ 4000 chars
|
|
144
|
-
- Sin patrones de payload injection (`<script>`, `.env`, `id_rsa`, etc.)
|
|
145
|
-
- Rate limit: 10 msg/min por usuario
|
|
146
|
-
- Dedup por hash en ventana de 30s
|
|
147
|
-
|
|
148
|
-
Todo evento (aceptado, rechazado, procesado) queda en `.planning/inbox/audit.jsonl`.
|
|
149
|
-
|
|
150
|
-
Para inyección directa a sesión tmux (solo Linux/macOS), ver `scripts/inbox-tmux-inject.js`.
|
|
151
|
-
|
|
152
|
-
## Reglas de comportamiento
|
|
153
|
-
|
|
154
|
-
- NUNCA almacenar tokens directamente en gateway-config.json — siempre usar `${VAR_ENV}`
|
|
155
|
-
- SIEMPRE verificar que el token existe como variable de entorno antes de habilitar un adaptador
|
|
156
|
-
- Si falta `node-telegram-bot-api` o `discord.js`, sugerir instalación con npm
|
|
157
|
-
- Para `relay-on`, confirmar con el usuario antes de agregar un userId a `allowedUsers`: esto autoriza a ese usuario a enviarte comandos remotos
|
|
158
|
-
- El relay NUNCA ejecuta comandos automáticamente: siempre requiere `/swl:inbox` con juicio humano. Explicar esto al usuario si activa el relay por primera vez
|
|
1
|
+
---
|
|
2
|
+
name: swl:gateway
|
|
3
|
+
description: Gestiona el gateway multi-plataforma de SWL. Configura adaptadores (Telegram, Discord, Webhook), verifica estado de conexión, envía mensajes de prueba y muestra logs de actividad. Usa manifiestos/gateway-config.json para configuración.
|
|
4
|
+
allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
|
|
5
|
+
user-invocable: true
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /swl:gateway — Gestión del gateway multi-plataforma
|
|
10
|
+
|
|
11
|
+
Eres el gestor del gateway SWL. El gateway conecta el sistema con plataformas de mensajería externas para notificaciones bidireccionales.
|
|
12
|
+
|
|
13
|
+
## Subcomandos
|
|
14
|
+
|
|
15
|
+
| Subcomando | Descripción |
|
|
16
|
+
|-----------|-------------|
|
|
17
|
+
| `status` | Muestra estado de configuración y conexión de cada adaptador |
|
|
18
|
+
| `config` | Abre y guía la edición de `manifiestos/gateway-config.json` |
|
|
19
|
+
| `test <plataforma>` | Envía mensaje de prueba al adaptador especificado |
|
|
20
|
+
| `start` | Inicia el gateway daemon |
|
|
21
|
+
| `stop` | Detiene el gateway daemon |
|
|
22
|
+
| `logs [N]` | Muestra últimos N mensajes procesados |
|
|
23
|
+
| `relay-on <plataforma> <userId>` | Habilita recepción de comandos (relay bidireccional) y agrega usuario autorizado |
|
|
24
|
+
| `relay-off <plataforma>` | Deshabilita recepción de comandos de esa plataforma |
|
|
25
|
+
| `relay-status` | Muestra estado del relay y audit trail reciente |
|
|
26
|
+
|
|
27
|
+
## Paso 0 — Leer configuración
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
cat manifiestos/gateway-config.json
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Mostrar estado de cada adaptador:
|
|
34
|
+
```
|
|
35
|
+
=== Gateway SWL ===
|
|
36
|
+
Habilitado: [sí/no]
|
|
37
|
+
|
|
38
|
+
Adaptadores:
|
|
39
|
+
Telegram: [habilitado/deshabilitado] — Token: [configurado/falta]
|
|
40
|
+
Discord: [habilitado/deshabilitado] — Token: [configurado/falta]
|
|
41
|
+
Webhook: [habilitado/deshabilitado] — URL: [configurada/falta]
|
|
42
|
+
|
|
43
|
+
Notificaciones:
|
|
44
|
+
onSessionComplete: [sí/no]
|
|
45
|
+
onCheckpoint: [sí/no]
|
|
46
|
+
onError: [sí/no]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Subcomando: status
|
|
50
|
+
|
|
51
|
+
Lee `manifiestos/gateway-config.json` y muestra el estado formateado arriba.
|
|
52
|
+
|
|
53
|
+
## Subcomando: config
|
|
54
|
+
|
|
55
|
+
Guía interactiva para configurar el gateway:
|
|
56
|
+
|
|
57
|
+
1. ¿Habilitar gateway? (sí/no)
|
|
58
|
+
2. ¿Qué plataformas? (telegram/discord/webhook)
|
|
59
|
+
3. Para Telegram: pide el token del bot (via BotFather)
|
|
60
|
+
4. Para Telegram: pide IDs de usuarios permitidos (opcional)
|
|
61
|
+
5. Para Discord: pide token del bot y guild/channel IDs
|
|
62
|
+
6. Para Webhook: pide URL y secret
|
|
63
|
+
7. Escribe la configuración en `manifiestos/gateway-config.json`
|
|
64
|
+
|
|
65
|
+
**NUNCA hardcodear tokens en el archivo** — usar referencias a variables de entorno: `${TELEGRAM_BOT_TOKEN}`.
|
|
66
|
+
|
|
67
|
+
## Subcomando: test <plataforma>
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
node -e "
|
|
71
|
+
const { GatewayRunner } = require('./gateway/index');
|
|
72
|
+
const gw = new GatewayRunner(process.cwd());
|
|
73
|
+
// enviar mensaje de prueba
|
|
74
|
+
"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Envía un mensaje de prueba al adaptador indicado y reporta si se recibió.
|
|
78
|
+
|
|
79
|
+
## Subcomando: start
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
node gateway/index.js &
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Inicia el gateway como proceso en background. Reporta PID.
|
|
86
|
+
|
|
87
|
+
## Subcomando: logs
|
|
88
|
+
|
|
89
|
+
Lee `.planning/comms/` y muestra los últimos N mensajes procesados con timestamp, tipo, origen y destino.
|
|
90
|
+
|
|
91
|
+
## Subcomando: relay-on \<plataforma\> \<userId\>
|
|
92
|
+
|
|
93
|
+
Habilita el modo relay bidireccional para una plataforma y autoriza a un usuario específico a enviar comandos desde ese canal hacia Claude Code.
|
|
94
|
+
|
|
95
|
+
Proceso:
|
|
96
|
+
1. Cargar `manifiestos/gateway-config.json`.
|
|
97
|
+
2. Setear `relay.enabled = true`.
|
|
98
|
+
3. Setear `relay.platforms.<plataforma>.enabled = true`.
|
|
99
|
+
4. Agregar `<userId>` a `relay.platforms.<plataforma>.allowedUsers` si no está.
|
|
100
|
+
5. Guardar con escritura atómica.
|
|
101
|
+
6. Informar al usuario que los mensajes entrantes se encolarán en `.planning/inbox/` y requieren ejecutar `/swl:inbox` para procesarlos.
|
|
102
|
+
|
|
103
|
+
**Importante**: antes de habilitar el relay, asegurar que el adaptador ya está funcionando (enabled + token válido). El relay no reemplaza al adaptador — lo extiende para recibir comandos.
|
|
104
|
+
|
|
105
|
+
## Subcomando: relay-off \<plataforma\>
|
|
106
|
+
|
|
107
|
+
Deshabilita el relay para esa plataforma (no desactiva el adaptador, solo la recepción de comandos). Los usuarios autorizados se preservan para re-habilitación rápida.
|
|
108
|
+
|
|
109
|
+
## Subcomando: relay-status
|
|
110
|
+
|
|
111
|
+
Muestra:
|
|
112
|
+
- Estado global del relay (enabled / disabled)
|
|
113
|
+
- Por plataforma: enabled, número de allowedUsers
|
|
114
|
+
- Rate limit configurado
|
|
115
|
+
- Últimas 10 entradas del audit trail (`.planning/inbox/audit.jsonl`)
|
|
116
|
+
- Cantidad de comandos pendientes en `.planning/inbox/`
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Audit trail reciente
|
|
120
|
+
tail -10 .planning/inbox/audit.jsonl 2>/dev/null
|
|
121
|
+
|
|
122
|
+
# Pendientes
|
|
123
|
+
ls .planning/inbox/cmd-*.json 2>/dev/null | wc -l
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Modo relay: arquitectura bidireccional
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
130
|
+
│ Telegram │────▶│ Gateway │────▶│ .planning/ │
|
|
131
|
+
│ Bot │ │ (adapter + │ │ inbox/ │
|
|
132
|
+
└──────────────┘ │ CommandRelay)│ └──────┬───────┘
|
|
133
|
+
└──────────────┘ │
|
|
134
|
+
▲ ▼
|
|
135
|
+
│ ┌─────────────┐
|
|
136
|
+
└──────────────│ /swl:inbox │
|
|
137
|
+
(respuesta) │ (consumer) │
|
|
138
|
+
└─────────────┘
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Validaciones del CommandRelay (todas obligatorias):
|
|
142
|
+
- Usuario en allowedUsers de esa plataforma
|
|
143
|
+
- Texto ≤ 4000 chars
|
|
144
|
+
- Sin patrones de payload injection (`<script>`, `.env`, `id_rsa`, etc.)
|
|
145
|
+
- Rate limit: 10 msg/min por usuario
|
|
146
|
+
- Dedup por hash en ventana de 30s
|
|
147
|
+
|
|
148
|
+
Todo evento (aceptado, rechazado, procesado) queda en `.planning/inbox/audit.jsonl`.
|
|
149
|
+
|
|
150
|
+
Para inyección directa a sesión tmux (solo Linux/macOS), ver `scripts/inbox-tmux-inject.js`.
|
|
151
|
+
|
|
152
|
+
## Reglas de comportamiento
|
|
153
|
+
|
|
154
|
+
- NUNCA almacenar tokens directamente en gateway-config.json — siempre usar `${VAR_ENV}`
|
|
155
|
+
- SIEMPRE verificar que el token existe como variable de entorno antes de habilitar un adaptador
|
|
156
|
+
- Si falta `node-telegram-bot-api` o `discord.js`, sugerir instalación con npm
|
|
157
|
+
- Para `relay-on`, confirmar con el usuario antes de agregar un userId a `allowedUsers`: esto autoriza a ese usuario a enviarte comandos remotos
|
|
158
|
+
- El relay NUNCA ejecuta comandos automáticamente: siempre requiere `/swl:inbox` con juicio humano. Explicar esto al usuario si activa el relay por primera vez
|