@saulwade/swl-ses 2.6.0 → 2.6.1
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 +197 -197
- package/README.md +600 -600
- package/agentes/_intent-spec.md +73 -73
- package/agentes/_propose-step.md +90 -90
- package/agentes/accesibilidad-wcag-swl.md +690 -690
- package/agentes/arquitecto-swl.md +267 -267
- package/agentes/auto-evolucion-swl.md +932 -932
- package/agentes/backend-csharp-swl.md +420 -420
- package/agentes/backend-go-swl.md +390 -390
- package/agentes/backend-java-swl.md +281 -281
- package/agentes/backend-rust-swl.md +364 -364
- package/agentes/backend-workers-swl.md +482 -482
- package/agentes/cloud-infra-swl.md +509 -509
- package/agentes/consolidador-swl.md +541 -541
- package/agentes/depurador-swl.md +352 -352
- package/agentes/devops-ci-swl.md +400 -400
- package/agentes/disenador-ui-swl.md +569 -569
- package/agentes/documentador-swl.md +345 -345
- package/agentes/frontend-angular-swl.md +621 -621
- package/agentes/frontend-css-swl.md +716 -716
- package/agentes/frontend-react-swl.md +692 -692
- package/agentes/frontend-swl.md +496 -496
- package/agentes/frontend-tailwind-swl.md +826 -826
- package/agentes/investigador-swl.md +432 -432
- package/agentes/investigador-ux-swl.md +505 -505
- package/agentes/migrador-swl.md +442 -442
- package/agentes/mobile-android-swl.md +511 -511
- package/agentes/mobile-cross-swl.md +541 -541
- package/agentes/mobile-ios-swl.md +502 -502
- package/agentes/mobile-testing-swl.md +302 -302
- package/agentes/nemesis-auditor-swl.md +285 -285
- package/agentes/observabilidad-swl.md +438 -438
- package/agentes/pagos-swl.md +310 -310
- package/agentes/perfilador-usuario-swl.md +321 -321
- package/agentes/planificador-swl.md +399 -399
- package/agentes/producto-prd-swl.md +589 -589
- package/agentes/red-team-swl.md +218 -218
- package/agentes/release-manager-swl.md +590 -590
- package/agentes/rendimiento-swl.md +713 -713
- package/agentes/revisor-angular-swl.md +278 -278
- package/agentes/revisor-csharp-swl.md +264 -264
- package/agentes/revisor-go-swl.md +259 -259
- package/agentes/revisor-java-swl.md +257 -257
- package/agentes/revisor-kotlin-swl.md +273 -273
- package/agentes/revisor-nextjs-swl.md +281 -281
- package/agentes/revisor-php-swl.md +271 -271
- package/agentes/revisor-react-swl.md +278 -278
- package/agentes/revisor-rust-swl.md +346 -346
- package/agentes/revisor-seguridad-swl.md +399 -399
- package/agentes/revisor-swift-swl.md +268 -268
- package/agentes/revisor-typescript-swl.md +346 -346
- package/agentes/tdd-qa-swl.md +393 -393
- package/comandos/swl/actualizar.md +174 -174
- package/comandos/swl/adoptar-proyecto.md +265 -265
- package/comandos/swl/aprender.md +836 -836
- 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/discutir-fase.md +169 -169
- package/comandos/swl/ejecutar-fase.md +233 -233
- package/comandos/swl/evaluar-skill.md +520 -520
- package/comandos/swl/evolucion-continua.md +73 -73
- package/comandos/swl/evolucionar.md +267 -267
- 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 +345 -345
- package/comandos/swl/verificar.md +817 -817
- package/comandos/swl/wiki.md +620 -620
- package/gateway/cron/jobs.example.json +12 -12
- package/habilidades/auto-evolucion-protocolo/SKILL.md +294 -294
- package/habilidades/backend-async-postgres-testing/SKILL.md +2 -1
- package/habilidades/changelog-generator/SKILL.md +174 -174
- package/habilidades/compactacion-contexto/SKILL.md +2 -1
- package/habilidades/contenedores-docker/SKILL.md +4 -2
- package/habilidades/doubt-driven-review/SKILL.md +207 -207
- package/habilidades/drift-detection/SKILL.md +1 -1
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/extractor-de-aprendizajes/SKILL.md +8 -2
- package/habilidades/git-worktrees-paralelo/SKILL.md +19 -1
- package/habilidades/harness-claude-code/SKILL.md +314 -314
- package/habilidades/instalar-sistema/SKILL.md +227 -227
- package/habilidades/planear-fase/SKILL.md +358 -358
- package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -166
- package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -85
- package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -147
- package/habilidades/release-semver/SKILL.md +2 -2
- package/habilidades/tdd-workflow/SKILL.md +749 -749
- package/hooks/agente-lifecycle.js +1 -1
- package/hooks/audit-trail.js +1 -1
- package/hooks/auto-consolidacion.js +1 -1
- package/hooks/captura-acciones-post.js +1 -1
- package/hooks/captura-acciones-session.js +1 -1
- package/hooks/captura-feedback-usuario.js +1 -1
- package/hooks/contexto-iteracion.js +1 -1
- package/hooks/contexto-subagente.js +68 -68
- package/hooks/degradacion-instintos.js +1 -1
- package/hooks/grafo-contexto.js +1 -1
- package/hooks/guardrail-modelo.js +1 -1
- package/hooks/inbox-aviso.js +1 -1
- package/hooks/inyeccion-contexto.js +1 -1
- package/hooks/lib/agent-matcher.js +1 -1
- package/hooks/lib/agent-routing.js +1 -1
- package/hooks/lib/captura-acciones.js +1 -1
- package/hooks/lib/etapa-metricas.js +1 -1
- package/hooks/lib/evolution-tracker.js +1 -1
- package/hooks/lib/gateway-notify.js +193 -193
- package/hooks/lib/mcp-health.js +1 -1
- package/hooks/lib/notificacion-formato.js +58 -0
- package/hooks/lib/nudge-tracker.js +1 -1
- package/hooks/lib/otlp-exporter.js +1 -1
- package/hooks/lib/propose-step.js +1 -1
- package/hooks/lib/raiz-proyecto.js +127 -102
- package/hooks/lib/run-log.js +1 -1
- package/hooks/lib/singleton-guard.js +20 -13
- package/hooks/lib/telegram-cliente.js +11 -3
- package/hooks/notificacion-telegram.js +13 -3
- package/hooks/preservar-estado-pre-compact.js +1 -1
- package/hooks/registro-turnos.js +1 -1
- package/hooks/resumen-sesion.js +1 -1
- package/hooks/risk-scoring.js +1 -1
- package/hooks/session-briefing.js +1 -1
- package/hooks/spec-gate.js +1 -1
- package/hooks/sugerir-regenerar-inventario.js +1 -1
- package/hooks/tdd-gate.js +1 -1
- package/hooks/telemetria-agentes.js +1 -1
- package/hooks/telemetria-skill-routing.js +1 -1
- package/hooks/tracking-costos.js +1 -1
- package/hooks/validar-formato-post-subagente.js +1 -1
- package/hooks/validar-intent-spec.js +1 -1
- package/hooks/validar-planning-paths.js +1 -1
- package/llms.txt +29 -29
- package/manifiestos/canonical-hashes.json +5588 -5257
- package/manifiestos/hooks-config.json +469 -469
- package/manifiestos/invariantes-criticos.json +30 -30
- package/manifiestos/modulos.json +1429 -1428
- package/manifiestos/skills-lock.json +1275 -1275
- package/package.json +94 -94
- package/plugin.json +369 -369
- package/scripts/auditar-clases-conocidas.js +134 -134
- package/scripts/bootstrap-instintos.js +85 -14
- package/scripts/canario-hooks.js +166 -166
- package/scripts/cli/autonomia.js +23 -23
- package/scripts/cli/benchmark-memoria.js +37 -37
- package/scripts/cli/ciclo-autonomo.js +73 -73
- package/scripts/cli/ciclo-fase-b.js +102 -102
- package/scripts/cli/guardrail-metrics.js +39 -39
- package/scripts/cli/memoria-search.js +69 -69
- package/scripts/cli/nudge-accionar.js +39 -39
- package/scripts/cli/run-eval.js +38 -38
- package/scripts/doctor.js +26 -3
- package/scripts/evidencia-valor.js +101 -101
- package/scripts/field-report.js +16 -16
- package/scripts/instalador.js +13 -0
- package/scripts/lib/activar-hooks-proyecto.js +116 -116
- package/scripts/lib/ciclo-autonomo/candidatos.js +174 -174
- package/scripts/lib/ciclo-autonomo/config.js +165 -165
- package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -174
- package/scripts/lib/ciclo-autonomo/fallback.js +77 -77
- package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -139
- package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -112
- package/scripts/lib/ciclo-autonomo/index.js +301 -301
- package/scripts/lib/ciclo-autonomo/lock.js +124 -124
- package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -122
- package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -240
- package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -248
- package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -190
- package/scripts/lib/ciclo-autonomo/yaml-instintos.js +535 -535
- package/scripts/lib/evidencia-valor.js +228 -228
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/limpiar-basura-global.js +161 -0
- package/scripts/lib/toml-merge.js +204 -204
- package/scripts/mcp-server/auth.js +105 -105
- package/scripts/mcp-server/cache.js +106 -106
- package/scripts/tui/pantallas/install-wizard.js +403 -403
- package/instintos/.backups/perfil-usuario.yaml.2026-07-10-165128.bak +0 -53
- package/instintos/.backups/proyecto.yaml.2026-07-10-165128.bak +0 -372
package/comandos/swl/inbox.md
CHANGED
|
@@ -1,116 +1,116 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl:inbox
|
|
3
|
-
description: Lee y procesa comandos entrantes del gateway multi-plataforma (Telegram, Discord, Webhook). Muestra mensajes pendientes encolados por el CommandRelay y permite ejecutarlos, descartarlos o diferirlos. Es el consumer del relay bidireccional que conecta canales externos con Claude Code.
|
|
4
|
-
allowed_tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# /swl:inbox — Consumo de comandos entrantes del gateway
|
|
8
|
-
|
|
9
|
-
Cuando el gateway SWL está configurado con `relay.enabled: true` (ver `/swl:gateway`), los mensajes que envías al bot de Telegram (o cualquier otro adaptador con relay habilitado) se encolan en `.planning/inbox/cmd-*.json`. Este comando es el consumer: lee la cola, te muestra los mensajes pendientes y te pregunta qué hacer con cada uno.
|
|
10
|
-
|
|
11
|
-
## Cuándo usar este comando
|
|
12
|
-
|
|
13
|
-
- Al inicio de una sesión, si esperas instrucciones enviadas desde tu móvil
|
|
14
|
-
- Cuando el hook `notificacion-sesion-stop` te envió una notificación desde otro sitio y respondiste desde el celular
|
|
15
|
-
- En lugar de pedirle a alguien que controle tu máquina para avanzar una tarea mientras estás fuera
|
|
16
|
-
|
|
17
|
-
## Cuándo NO usar
|
|
18
|
-
|
|
19
|
-
- Para notificaciones de salida (SWL → Telegram) → eso lo hace automáticamente `notificacion-sesion-stop.js`
|
|
20
|
-
- Para automatizar respuestas en tmux (Linux/macOS) → usar `scripts/inbox-tmux-inject.js` como daemon opt-in
|
|
21
|
-
- Para buscar en el historial de mensajes recibidos → revisar `.planning/inbox/audit.jsonl` directamente
|
|
22
|
-
|
|
23
|
-
## Flujo
|
|
24
|
-
|
|
25
|
-
### Paso 1 — Listar pendientes
|
|
26
|
-
|
|
27
|
-
Ejecutar en Bash:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
node -e "const R = require('./gateway/command-relay'); const fs = require('fs'); const cfg = JSON.parse(fs.readFileSync('manifiestos/gateway-config.json','utf8')); const r = new R(process.cwd(), cfg); const items = r.listarPendientes({ limit: 20 }); console.log(JSON.stringify(items, null, 2));"
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
O directamente leer el directorio:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
ls -la .planning/inbox/cmd-*.json 2>/dev/null
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Paso 2 — Clasificar cada comando pendiente
|
|
40
|
-
|
|
41
|
-
Por cada comando en la cola, decidir:
|
|
42
|
-
|
|
43
|
-
| Tipo de contenido | Acción |
|
|
44
|
-
|-------------------|--------|
|
|
45
|
-
| Instrucción de trabajo clara ("arregla el bug X", "ejecuta pruebas") | Procesar como prompt del usuario. Ejecutar la tarea siguiendo el flujo normal SWL. |
|
|
46
|
-
| Slash command (`/swl:status salud`, `/swl:status metricas`, etc.) | Invocar ese comando directamente. |
|
|
47
|
-
| Pregunta/consulta ("¿cómo va X?", "estado del release") | Responder con la información solicitada. Enviar respuesta al gateway si aplica. |
|
|
48
|
-
| Feedback/corrección ("no uses Y", "prefiero Z") | Escribir a `.planning/evolution/feedback-queue.jsonl` con tipo correspondiente y marcar como procesado. |
|
|
49
|
-
| Contenido ambiguo o sospechoso | Marcar como descartado con razón registrada. |
|
|
50
|
-
|
|
51
|
-
### Paso 3 — Procesar y marcar
|
|
52
|
-
|
|
53
|
-
Para cada comando procesado, marcarlo como `processed` escribiendo el resultado:
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
node -e "const R = require('./gateway/command-relay'); const fs = require('fs'); const cfg = JSON.parse(fs.readFileSync('manifiestos/gateway-config.json','utf8')); const r = new R(process.cwd(), cfg); r.marcarProcesado('<cmd-id>', { accion: 'ejecutado', resumen: '<breve resumen>' });"
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### Paso 4 — Notificar de vuelta al usuario (opcional)
|
|
60
|
-
|
|
61
|
-
Si el comando merece respuesta al canal origen (Telegram, Discord), encolar un
|
|
62
|
-
`gateway_notification` con el subcomando del CLI (resuelve cross-scope; ver
|
|
63
|
-
`docs/invocacion-cli-cross-scope.md`):
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
swl-ses gateway-notify \
|
|
67
|
-
--texto="✅ Comando procesado: <resumen>" \
|
|
68
|
-
--to=telegram \
|
|
69
|
-
--reply-to="<chatId>"
|
|
70
|
-
# fallback: npx -y @saulwade/swl-ses@latest gateway-notify --texto="..." --to=telegram --reply-to="<chatId>"
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### Paso 5 — Auditar
|
|
74
|
-
|
|
75
|
-
Todas las acciones del relay quedan en `.planning/inbox/audit.jsonl`. Si hay actividad inesperada (rechazos por rate limit, usuarios no autorizados), revisar el audit log para detectar abuso o misconfiguraciones.
|
|
76
|
-
|
|
77
|
-
## Seguridad
|
|
78
|
-
|
|
79
|
-
- El relay NUNCA ejecuta comandos automáticamente. Todo pasa por este comando con juicio humano.
|
|
80
|
-
- Solo usuarios listados en `platforms.<nombre>.allowedUsers` pueden enviar comandos.
|
|
81
|
-
- Textos > 4000 chars se rechazan.
|
|
82
|
-
- Patrones de payload injection (`<script>`, `.env`, `id_rsa`) se rechazan silenciosamente.
|
|
83
|
-
- Rate limit: 10 msg/min por usuario por defecto (configurable en `relay.rateLimit.maxPerMinute`).
|
|
84
|
-
- Dedup por hash en ventana de 30s.
|
|
85
|
-
|
|
86
|
-
## Modo avanzado: inyección directa a tmux (Linux/macOS)
|
|
87
|
-
|
|
88
|
-
Si tu sesión de Claude Code corre dentro de `tmux`, puedes usar el daemon opt-in:
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
# Correr en una terminal separada
|
|
92
|
-
npx -y @saulwade/swl-ses@latest inbox-tmux-inject --session=claude --poll=2
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Ese daemon monitorea `.planning/inbox/` y usa `tmux send-keys` para inyectar el comando a la sesión Claude. No funciona en Windows (no hay tmux).
|
|
96
|
-
|
|
97
|
-
## Configuración
|
|
98
|
-
|
|
99
|
-
Ver `manifiestos/gateway-config.json`:
|
|
100
|
-
|
|
101
|
-
```json
|
|
102
|
-
{
|
|
103
|
-
"enabled": true,
|
|
104
|
-
"adapters": { "telegram": { "enabled": true, "token": "..." } },
|
|
105
|
-
"relay": {
|
|
106
|
-
"enabled": true,
|
|
107
|
-
"platforms": {
|
|
108
|
-
"telegram": {
|
|
109
|
-
"enabled": true,
|
|
110
|
-
"allowedUsers": ["123456789"]
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
"rateLimit": { "maxPerMinute": 10 }
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: swl:inbox
|
|
3
|
+
description: Lee y procesa comandos entrantes del gateway multi-plataforma (Telegram, Discord, Webhook). Muestra mensajes pendientes encolados por el CommandRelay y permite ejecutarlos, descartarlos o diferirlos. Es el consumer del relay bidireccional que conecta canales externos con Claude Code.
|
|
4
|
+
allowed_tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:inbox — Consumo de comandos entrantes del gateway
|
|
8
|
+
|
|
9
|
+
Cuando el gateway SWL está configurado con `relay.enabled: true` (ver `/swl:gateway`), los mensajes que envías al bot de Telegram (o cualquier otro adaptador con relay habilitado) se encolan en `.planning/inbox/cmd-*.json`. Este comando es el consumer: lee la cola, te muestra los mensajes pendientes y te pregunta qué hacer con cada uno.
|
|
10
|
+
|
|
11
|
+
## Cuándo usar este comando
|
|
12
|
+
|
|
13
|
+
- Al inicio de una sesión, si esperas instrucciones enviadas desde tu móvil
|
|
14
|
+
- Cuando el hook `notificacion-sesion-stop` te envió una notificación desde otro sitio y respondiste desde el celular
|
|
15
|
+
- En lugar de pedirle a alguien que controle tu máquina para avanzar una tarea mientras estás fuera
|
|
16
|
+
|
|
17
|
+
## Cuándo NO usar
|
|
18
|
+
|
|
19
|
+
- Para notificaciones de salida (SWL → Telegram) → eso lo hace automáticamente `notificacion-sesion-stop.js`
|
|
20
|
+
- Para automatizar respuestas en tmux (Linux/macOS) → usar `scripts/inbox-tmux-inject.js` como daemon opt-in
|
|
21
|
+
- Para buscar en el historial de mensajes recibidos → revisar `.planning/inbox/audit.jsonl` directamente
|
|
22
|
+
|
|
23
|
+
## Flujo
|
|
24
|
+
|
|
25
|
+
### Paso 1 — Listar pendientes
|
|
26
|
+
|
|
27
|
+
Ejecutar en Bash:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
node -e "const R = require('./gateway/command-relay'); const fs = require('fs'); const cfg = JSON.parse(fs.readFileSync('manifiestos/gateway-config.json','utf8')); const r = new R(process.cwd(), cfg); const items = r.listarPendientes({ limit: 20 }); console.log(JSON.stringify(items, null, 2));"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
O directamente leer el directorio:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
ls -la .planning/inbox/cmd-*.json 2>/dev/null
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Paso 2 — Clasificar cada comando pendiente
|
|
40
|
+
|
|
41
|
+
Por cada comando en la cola, decidir:
|
|
42
|
+
|
|
43
|
+
| Tipo de contenido | Acción |
|
|
44
|
+
|-------------------|--------|
|
|
45
|
+
| Instrucción de trabajo clara ("arregla el bug X", "ejecuta pruebas") | Procesar como prompt del usuario. Ejecutar la tarea siguiendo el flujo normal SWL. |
|
|
46
|
+
| Slash command (`/swl:status salud`, `/swl:status metricas`, etc.) | Invocar ese comando directamente. |
|
|
47
|
+
| Pregunta/consulta ("¿cómo va X?", "estado del release") | Responder con la información solicitada. Enviar respuesta al gateway si aplica. |
|
|
48
|
+
| Feedback/corrección ("no uses Y", "prefiero Z") | Escribir a `.planning/evolution/feedback-queue.jsonl` con tipo correspondiente y marcar como procesado. |
|
|
49
|
+
| Contenido ambiguo o sospechoso | Marcar como descartado con razón registrada. |
|
|
50
|
+
|
|
51
|
+
### Paso 3 — Procesar y marcar
|
|
52
|
+
|
|
53
|
+
Para cada comando procesado, marcarlo como `processed` escribiendo el resultado:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
node -e "const R = require('./gateway/command-relay'); const fs = require('fs'); const cfg = JSON.parse(fs.readFileSync('manifiestos/gateway-config.json','utf8')); const r = new R(process.cwd(), cfg); r.marcarProcesado('<cmd-id>', { accion: 'ejecutado', resumen: '<breve resumen>' });"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Paso 4 — Notificar de vuelta al usuario (opcional)
|
|
60
|
+
|
|
61
|
+
Si el comando merece respuesta al canal origen (Telegram, Discord), encolar un
|
|
62
|
+
`gateway_notification` con el subcomando del CLI (resuelve cross-scope; ver
|
|
63
|
+
`docs/invocacion-cli-cross-scope.md`):
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
swl-ses gateway-notify \
|
|
67
|
+
--texto="✅ Comando procesado: <resumen>" \
|
|
68
|
+
--to=telegram \
|
|
69
|
+
--reply-to="<chatId>"
|
|
70
|
+
# fallback: npx -y @saulwade/swl-ses@latest gateway-notify --texto="..." --to=telegram --reply-to="<chatId>"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Paso 5 — Auditar
|
|
74
|
+
|
|
75
|
+
Todas las acciones del relay quedan en `.planning/inbox/audit.jsonl`. Si hay actividad inesperada (rechazos por rate limit, usuarios no autorizados), revisar el audit log para detectar abuso o misconfiguraciones.
|
|
76
|
+
|
|
77
|
+
## Seguridad
|
|
78
|
+
|
|
79
|
+
- El relay NUNCA ejecuta comandos automáticamente. Todo pasa por este comando con juicio humano.
|
|
80
|
+
- Solo usuarios listados en `platforms.<nombre>.allowedUsers` pueden enviar comandos.
|
|
81
|
+
- Textos > 4000 chars se rechazan.
|
|
82
|
+
- Patrones de payload injection (`<script>`, `.env`, `id_rsa`) se rechazan silenciosamente.
|
|
83
|
+
- Rate limit: 10 msg/min por usuario por defecto (configurable en `relay.rateLimit.maxPerMinute`).
|
|
84
|
+
- Dedup por hash en ventana de 30s.
|
|
85
|
+
|
|
86
|
+
## Modo avanzado: inyección directa a tmux (Linux/macOS)
|
|
87
|
+
|
|
88
|
+
Si tu sesión de Claude Code corre dentro de `tmux`, puedes usar el daemon opt-in:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Correr en una terminal separada
|
|
92
|
+
npx -y @saulwade/swl-ses@latest inbox-tmux-inject --session=claude --poll=2
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Ese daemon monitorea `.planning/inbox/` y usa `tmux send-keys` para inyectar el comando a la sesión Claude. No funciona en Windows (no hay tmux).
|
|
96
|
+
|
|
97
|
+
## Configuración
|
|
98
|
+
|
|
99
|
+
Ver `manifiestos/gateway-config.json`:
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"enabled": true,
|
|
104
|
+
"adapters": { "telegram": { "enabled": true, "token": "..." } },
|
|
105
|
+
"relay": {
|
|
106
|
+
"enabled": true,
|
|
107
|
+
"platforms": {
|
|
108
|
+
"telegram": {
|
|
109
|
+
"enabled": true,
|
|
110
|
+
"allowedUsers": ["123456789"]
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"rateLimit": { "maxPerMinute": 10 }
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|