@saulwade/swl-ses 2.0.0 → 2.2.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 +196 -196
- package/README.md +579 -579
- package/agentes/_propose-step.md +90 -0
- package/agentes/implementador-swl.md +2 -0
- package/agentes/orquestador-swl.md +2 -0
- package/agentes/perfilador-usuario-swl.md +14 -1
- package/bin/swl-ses.js +64 -1
- package/comandos/swl/adoptar-proyecto.md +258 -255
- package/comandos/swl/aprender.md +828 -840
- package/comandos/swl/aprobar-plan.md +26 -37
- package/comandos/swl/autoresearch.md +12 -14
- package/comandos/swl/briefing.md +119 -0
- package/comandos/swl/checkpoint.md +10 -15
- package/comandos/swl/claudemd.md +239 -234
- package/comandos/swl/compactar.md +29 -2
- package/comandos/swl/configurar-ci.md +20 -19
- package/comandos/swl/cron.md +10 -12
- package/comandos/swl/discutir-fase.md +8 -5
- package/comandos/swl/ejecutar-fase.md +15 -2
- package/comandos/swl/evolucionar.md +6 -11
- package/comandos/swl/inbox.md +10 -10
- package/comandos/swl/modelo.md +7 -9
- package/comandos/swl/notificaciones.md +19 -116
- package/comandos/swl/nuevo-proyecto.md +205 -205
- package/comandos/swl/planear-fase.md +5 -3
- package/comandos/swl/release.md +46 -0
- package/comandos/swl/status.md +333 -279
- package/comandos/swl/verificar.md +817 -812
- package/habilidades/changelog-generator/scripts/parse-commits.js +6 -4
- package/habilidades/ejecutar-fase/SKILL.md +541 -518
- package/habilidades/planear-fase/SKILL.md +3 -2
- package/habilidades/swl-claudemd/SKILL.md +10 -6
- package/habilidades/tdd-workflow/SKILL.md +715 -713
- package/habilidades/validacion-ci-sistema/SKILL.md +17 -1
- package/hooks/calidad-pre-commit.js +5 -1
- package/hooks/check-update.js +39 -1
- package/hooks/lib/autonomia.js +208 -0
- package/hooks/lib/briefing.js +474 -0
- package/hooks/lib/propose-step.js +358 -0
- package/hooks/session-briefing.js +98 -0
- package/hooks/telemetria-skill-routing.js +100 -0
- package/instintos/autonomia.yaml +27 -0
- package/llms.txt +4 -4
- package/manifiestos/hooks-config.json +18 -0
- package/manifiestos/modulos.json +25 -3
- package/manifiestos/skills-lock.json +17 -17
- package/package.json +93 -93
- package/plugin.json +371 -371
- package/reglas/analizar-directorios-antes-de-escribir.md +228 -0
- package/reglas/consultar-vault-primero.md +195 -0
- package/reglas/debatir-antes-de-aceptar.md +158 -0
- package/reglas/git-coauthor.md +100 -0
- package/reglas/monitor-ci.md +309 -0
- package/reglas/registro-componentes-nuevos.md +38 -10
- package/reglas/sesiones-paralelas.md +180 -0
- package/reglas/usar-code-review-graph.md +155 -0
- package/reglas/verificar-citas-normativas.md +548 -0
- package/scripts/auditar-claudemd.js +38 -0
- package/scripts/cli/aprobar-plan.js +73 -0
- package/scripts/cli/briefing.js +23 -0
- package/scripts/cli/ciclo-evolucion.js +26 -0
- package/scripts/cli/configurar-ci.js +40 -0
- package/scripts/cli/derivar-feature-list.js +25 -0
- package/scripts/cli/detectar-host.js +27 -0
- package/scripts/cli/diary-entry.js +69 -0
- package/scripts/cli/execution-state.js +18 -0
- package/scripts/cli/gateway-notify.js +41 -0
- package/scripts/cli/liberar-fase.js +42 -0
- package/scripts/cli/loop-telemetry.js +125 -0
- package/scripts/cli/mark-evolved.js +56 -0
- package/scripts/cli/metricas-dora.js +26 -0
- package/scripts/cli/near-duplicate.js +55 -0
- package/scripts/cli/notificaciones.js +123 -0
- package/scripts/cli/propose-step.js +29 -0
- package/scripts/cli/schedule-parse.js +19 -0
- package/scripts/cli/sugerir-modelo.js +20 -0
- package/scripts/cli/verificar-plan.js +36 -0
- package/scripts/cli/verificar-trazabilidad.js +35 -0
- package/scripts/derivar-feature-list.js +1 -0
- package/scripts/instalador.js +52 -6
- package/scripts/lib/auditar-invocaciones-comandos.js +104 -0
- package/scripts/lib/ci-reader.js +193 -0
- package/scripts/lib/detectar-host-swl.js +175 -0
- package/scripts/lib/evidencia-release.js +322 -0
- package/scripts/lib/gate-hooks-requires.js +249 -0
- package/scripts/lib/gate-licencias.js +212 -0
- package/scripts/lib/git-metricas.js +257 -0
- package/scripts/lib/metricas-dora.js +204 -0
- package/scripts/lib/resolver-plan-fase.js +37 -0
- package/scripts/tui/ejecutores.js +1 -1
- package/scripts/validar-manifest.js +92 -1
- package/scripts/validar.js +13 -0
- package/scripts/verificar-evolucion.js +54 -4
- package/scripts/verificar-release.js +102 -0
- package/scripts/verificar-trazabilidad.js +12 -6
- package/reglas/arquitectura.evolved.json +0 -7
- package/reglas/seguridad.evolved.json +0 -7
|
@@ -218,16 +218,19 @@ Estructura del archivo:
|
|
|
218
218
|
[descripción de pantallas]
|
|
219
219
|
|
|
220
220
|
## Criterios de aceptación (REQ)
|
|
221
|
-
[criterios binarios y verificables con ID estable
|
|
222
|
-
|
|
223
|
-
- **REQ-
|
|
221
|
+
[criterios binarios y verificables con ID estable namespaceado por fase
|
|
222
|
+
`REQ-<fase>-NN` (DT-IDS-NAMESPACE, fases ≥12) — trazabilidad G4:
|
|
223
|
+
- **REQ-12-01**: [criterio binario verificable]
|
|
224
|
+
- **REQ-12-02**: [criterio binario verificable]
|
|
225
|
+
Las fases 01-11 conservan el formato plano `REQ-NN` (gracia legacy permanente,
|
|
226
|
+
no se renumeran). `verificar-trazabilidad.js` acepta ambos formatos.
|
|
224
227
|
Un REQ emitido NUNCA se renumera ni se reusa: si un criterio se descarta, marcarlo
|
|
225
228
|
"RETIRADO — razón" conservando el número. planear-fase exige que cada tarea T-NN
|
|
226
229
|
declare qué REQ verifica (matriz REQ×T) y aprobar-plan rechaza planes con REQ
|
|
227
230
|
huérfanos. verificar-trazabilidad.js valida la cadena REQ→T→commit→test al cierre.
|
|
228
231
|
Método de verificación: por default cada REQ exige un test con marker
|
|
229
|
-
`verifica: REQ
|
|
230
|
-
anotación `(verificación: inspección)` en el criterio — exigen tarea y commit
|
|
232
|
+
`verifica: REQ-<fase>-NN`; los REQ satisfechos por prosa/docs/configuración llevan
|
|
233
|
+
la anotación `(verificación: inspección)` en el criterio — exigen tarea y commit
|
|
231
234
|
pero no test automatizado.]
|
|
232
235
|
|
|
233
236
|
## Riesgos identificados
|
|
@@ -13,6 +13,13 @@ evolved-note: "Paso 4.2 — cota dura 30k tokens al prompt del sub-agente para p
|
|
|
13
13
|
|
|
14
14
|
Eres el coordinador de ejecución SWL. Orquestas la implementación real del código para una fase, delegando al agente implementador-swl, verificando cada slice y manteniendo el estado del proyecto actualizado.
|
|
15
15
|
|
|
16
|
+
> **Invocación cross-scope** (ver `@docs/invocacion-cli-cross-scope.md`): los
|
|
17
|
+
> gates G0/G1 y el anexo propositivo viven en subcomandos del CLI. Usa la forma
|
|
18
|
+
> `swl-ses <sub>`; si estás en el repo madre usa `node scripts/cli/<sub>.js`; si
|
|
19
|
+
> no hay bin en PATH, `npx -y @saulwade/swl-ses@latest <sub>`. NUNCA invoques
|
|
20
|
+
> `node -e "require('./scripts/lib/...')"` ni `node hooks/lib/...` con ruta
|
|
21
|
+
> relativa al proyecto — no existen downstream.
|
|
22
|
+
|
|
16
23
|
## Uso
|
|
17
24
|
|
|
18
25
|
```
|
|
@@ -83,7 +90,7 @@ Verifica en orden:
|
|
|
83
90
|
6. **Gate G1 — verificación de integridad del plan firmado**: tras confirmar
|
|
84
91
|
`estado: aprobado`, recomputa el hash del PLAN y compáralo contra su lock:
|
|
85
92
|
```bash
|
|
86
|
-
|
|
93
|
+
swl-ses verificar-plan --fase=N
|
|
87
94
|
```
|
|
88
95
|
Interpreta el resultado:
|
|
89
96
|
- `ok: true, modo: "firmado"` → el plan no fue mutado tras su aprobación.
|
|
@@ -167,6 +174,12 @@ Según tipo de error:
|
|
|
167
174
|
|
|
168
175
|
Al completar todos los slices, genera `.planning/fases/0N-RESUMEN.md` con: slices implementados (commits, archivos), resultados de tests, desviaciones del plan, decisiones técnicas, deuda técnica, estado final, criterios de aceptación verificados, próximos pasos.
|
|
169
176
|
|
|
177
|
+
**Anexo propositivo (Fase 13, ADR-0037)**: antes de cerrar, ejecuta el propose-step
|
|
178
|
+
sobre el diff de la fase (`swl-ses propose-step --rango=<base>..HEAD`) e
|
|
179
|
+
incluye una sección "Anexo propositivo" en el RESUMEN.md **solo si hay ≥1 señal** de
|
|
180
|
+
adyacencia (auth/PII/pagos, migración de schema). Si no hay señal, omite la sección
|
|
181
|
+
(silencio, no sección vacía). El anexo propone, nunca bloquea. Opt-out `SWL_PROPOSE=0`.
|
|
182
|
+
|
|
170
183
|
## Paso 7 — Actualización de HOJA-RUTA.md y ESTADO.md
|
|
171
184
|
|
|
172
185
|
Marca fase completada en HOJA-RUTA.md con fecha. Actualiza ESTADO.md con estado general.
|
|
@@ -176,7 +189,7 @@ la fase ya no está en ejecución y `hooks/spec-gate.js` debe volver a advertir
|
|
|
176
189
|
escribe código sin una nueva fase aprobada:
|
|
177
190
|
|
|
178
191
|
```bash
|
|
179
|
-
|
|
192
|
+
swl-ses liberar-fase
|
|
180
193
|
```
|
|
181
194
|
|
|
182
195
|
NO eliminar el `.lock` del plan (`0N-PLAN.md.lock`) — ese es evidencia de
|
|
@@ -134,19 +134,14 @@ Aplica siguiendo las reglas de governance y safety checks del skill:
|
|
|
134
134
|
|
|
135
135
|
Respeta la governance: PARCHE auto-aplicable, MENOR requiere revisión, MAYOR requiere aprobación humana. Modificar agentes siempre requiere aprobación humana.
|
|
136
136
|
|
|
137
|
-
**OBLIGATORIO — Marcar como evolucionado
|
|
137
|
+
**OBLIGATORIO — Marcar como evolucionado** con el subcomando del CLI (resuelve
|
|
138
|
+
cross-scope; ver `docs/invocacion-cli-cross-scope.md`):
|
|
138
139
|
|
|
139
140
|
```bash
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
from: pkg.version,
|
|
145
|
-
by: 'evolucionar',
|
|
146
|
-
note: '[descripción breve del cambio]'
|
|
147
|
-
});
|
|
148
|
-
console.log(r.marked ? 'Marcado como evolucionado' : 'Error: ' + r.error);
|
|
149
|
-
"
|
|
141
|
+
swl-ses mark-evolved "[RUTA_ARCHIVO_MODIFICADO]" \
|
|
142
|
+
--by=evolucionar \
|
|
143
|
+
--note="[descripción breve del cambio]"
|
|
144
|
+
# fallback: npx -y @saulwade/swl-ses@latest mark-evolved "[RUTA]" --by=evolucionar --note="..."
|
|
150
145
|
```
|
|
151
146
|
|
|
152
147
|
Reemplazar los placeholders entre corchetes con los valores reales.
|
package/comandos/swl/inbox.md
CHANGED
|
@@ -58,16 +58,16 @@ node -e "const R = require('./gateway/command-relay'); const fs = require('fs');
|
|
|
58
58
|
|
|
59
59
|
### Paso 4 — Notificar de vuelta al usuario (opcional)
|
|
60
60
|
|
|
61
|
-
Si el comando merece respuesta al canal origen (Telegram, Discord), encolar un
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
texto
|
|
68
|
-
to
|
|
69
|
-
|
|
70
|
-
|
|
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
71
|
```
|
|
72
72
|
|
|
73
73
|
### Paso 5 — Auditar
|
package/comandos/swl/modelo.md
CHANGED
|
@@ -35,19 +35,17 @@ Si el usuario pasó una descripción entre comillas, usar esa descripción direc
|
|
|
35
35
|
|
|
36
36
|
## Paso 2 — Evaluar complejidad
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
Evaluar la complejidad con el subcomando del CLI (resuelve cross-scope: repo
|
|
39
|
+
madre / `swl-ses` en PATH / `npx`; ver `docs/invocacion-cli-cross-scope.md`):
|
|
39
40
|
|
|
40
41
|
```bash
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const result = sugerirModelo(desc);
|
|
45
|
-
console.log(JSON.stringify(result, null, 2));
|
|
46
|
-
" "DESCRIPCIÓN_DE_LA_TAREA"
|
|
42
|
+
swl-ses sugerir-modelo "DESCRIPCIÓN_DE_LA_TAREA"
|
|
43
|
+
# fallback si swl-ses no está en PATH:
|
|
44
|
+
# npx -y @saulwade/swl-ses@latest sugerir-modelo "DESCRIPCIÓN_DE_LA_TAREA"
|
|
47
45
|
```
|
|
48
46
|
|
|
49
|
-
Si el
|
|
50
|
-
|
|
47
|
+
Si el subcomando falla (CLI no disponible), aplicar la tabla de routing
|
|
48
|
+
manualmente (ver Paso 3).
|
|
51
49
|
|
|
52
50
|
## Paso 3 — Tabla de routing manual (fallback)
|
|
53
51
|
|
|
@@ -191,50 +191,21 @@ Subcomandos disponibles:
|
|
|
191
191
|
|
|
192
192
|
### Paso 2 — Ejecutar según subcomando
|
|
193
193
|
|
|
194
|
-
|
|
194
|
+
Todos los subcomandos usan el CLI cross-scope (resuelve repo madre / `swl-ses`
|
|
195
|
+
en PATH / `npx`; ver `docs/invocacion-cli-cross-scope.md`). El subcomando
|
|
196
|
+
encapsula el formato de salida y la detección de TTY.
|
|
195
197
|
|
|
196
|
-
|
|
197
|
-
node -e "
|
|
198
|
-
const { init } = require('./scripts/lib/notificaciones-telegram');
|
|
199
|
-
init({ esTty: true }).then(r => {
|
|
200
|
-
console.log('[resultado]', r.resultado, r.detalle || '');
|
|
201
|
-
process.exit(r.resultado === 'error' ? 1 : 0);
|
|
202
|
-
}).catch(e => { console.error(e.message); process.exit(1); });
|
|
203
|
-
"
|
|
204
|
-
```
|
|
198
|
+
**Para `init`** (requiere TTY; el subcomando detecta su ausencia y guía):
|
|
205
199
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
```
|
|
210
|
-
Este subcomando requiere entrada interactiva (TTY).
|
|
211
|
-
Ejecuta desde tu terminal:
|
|
212
|
-
node -e "require('./scripts/lib/notificaciones-telegram').init({ esTty: true })"
|
|
213
|
-
O usa el instalador:
|
|
214
|
-
npx @saulwade/swl-ses@latest install
|
|
200
|
+
```bash
|
|
201
|
+
swl-ses notificaciones init
|
|
202
|
+
# fallback: npx -y @saulwade/swl-ses@latest notificaciones init
|
|
215
203
|
```
|
|
216
204
|
|
|
217
205
|
**Para `status`**:
|
|
218
206
|
|
|
219
207
|
```bash
|
|
220
|
-
|
|
221
|
-
const { status } = require('./scripts/lib/notificaciones-telegram');
|
|
222
|
-
const s = status();
|
|
223
|
-
console.log('');
|
|
224
|
-
console.log('Notificaciones Telegram — estado actual');
|
|
225
|
-
console.log(' .env: ', s.envExiste ? 'existe' : 'no existe');
|
|
226
|
-
console.log(' token: ', s.tokenConfigurado ? 'configurado' : 'no configurado');
|
|
227
|
-
console.log(' chat_id: ', s.chatIdConfigurado ? ('configurado (' + s.chatIdParcial + ')') : 'no configurado');
|
|
228
|
-
const mudos = s.proyectosSilenciados.length
|
|
229
|
-
? s.proyectosSilenciados.join(', ')
|
|
230
|
-
: 'ninguno';
|
|
231
|
-
console.log(' proyectos mudos: ', mudos);
|
|
232
|
-
const botS = require('./scripts/lib/notificaciones-telegram').botStatus();
|
|
233
|
-
console.log(' bot daemon: ', botS.activo ? ('activo (PID ' + botS.pid + ')') : 'detenido');
|
|
234
|
-
const autostartLabel = process.platform === 'win32' ? 'Scheduled Task' : (process.platform === 'linux' ? 'systemd --user' : 'LaunchAgent');
|
|
235
|
-
console.log(' autostart: usar /swl:notificaciones bot enable-autostart (' + autostartLabel + ')');
|
|
236
|
-
console.log('');
|
|
237
|
-
"
|
|
208
|
+
swl-ses notificaciones status
|
|
238
209
|
```
|
|
239
210
|
|
|
240
211
|
**Para `disable`**:
|
|
@@ -247,122 +218,54 @@ Antes de invocar la lib, pedir confirmación al usuario:
|
|
|
247
218
|
|
|
248
219
|
Si responde `n` o vacío: cancelar sin tocar nada.
|
|
249
220
|
|
|
250
|
-
Si responde `s
|
|
221
|
+
Si responde `s` (agregar `--purge` para eliminar también las credenciales, tras
|
|
222
|
+
confirmación adicional del usuario):
|
|
251
223
|
|
|
252
224
|
```bash
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
const r = disable({ confirmar: true, conservarEnv: true });
|
|
256
|
-
console.log('[resultado]', r.resultado, r.detalle || '');
|
|
257
|
-
process.exit(r.resultado === 'error' ? 1 : 0);
|
|
258
|
-
"
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
Si se pasó `--purge`, pedir confirmación adicional:
|
|
262
|
-
```
|
|
263
|
-
¿Eliminar también las credenciales (~/.claude/notifications/.env)? [s/N]
|
|
225
|
+
swl-ses notificaciones disable # conserva ~/.claude/notifications/.env
|
|
226
|
+
swl-ses notificaciones disable --purge # elimina también las credenciales
|
|
264
227
|
```
|
|
265
|
-
Si confirma, llamar con `conservarEnv: false`.
|
|
266
228
|
|
|
267
229
|
**Para `repair`**:
|
|
268
230
|
|
|
269
231
|
```bash
|
|
270
|
-
|
|
271
|
-
const { repair } = require('./scripts/lib/notificaciones-telegram');
|
|
272
|
-
repair().then(r => {
|
|
273
|
-
console.log('[repair]', r.resultado, r.detalle || '');
|
|
274
|
-
process.exit(r.resultado === 'error' ? 1 : 0);
|
|
275
|
-
}).catch(e => { console.error(e.message); process.exit(1); });
|
|
276
|
-
"
|
|
232
|
+
swl-ses notificaciones repair
|
|
277
233
|
```
|
|
278
234
|
|
|
279
235
|
**Para `bot start`**:
|
|
280
236
|
|
|
281
237
|
```bash
|
|
282
|
-
|
|
283
|
-
const { botStart } = require('./scripts/lib/notificaciones-telegram');
|
|
284
|
-
const r = botStart();
|
|
285
|
-
if (r.ok) {
|
|
286
|
-
console.log('[bot]', r.mensaje || 'Bot iniciado.');
|
|
287
|
-
} else {
|
|
288
|
-
console.error('[bot] Error:', r.error);
|
|
289
|
-
process.exit(1);
|
|
290
|
-
}
|
|
291
|
-
"
|
|
238
|
+
swl-ses notificaciones bot-start
|
|
292
239
|
```
|
|
293
240
|
|
|
294
241
|
**Para `bot stop`**:
|
|
295
242
|
|
|
296
243
|
```bash
|
|
297
|
-
|
|
298
|
-
const { botStop } = require('./scripts/lib/notificaciones-telegram');
|
|
299
|
-
const r = botStop();
|
|
300
|
-
if (r.ok) {
|
|
301
|
-
console.log('[bot]', r.mensaje || 'Bot detenido.');
|
|
302
|
-
} else {
|
|
303
|
-
console.error('[bot] Error:', r.error);
|
|
304
|
-
process.exit(1);
|
|
305
|
-
}
|
|
306
|
-
"
|
|
244
|
+
swl-ses notificaciones bot-stop
|
|
307
245
|
```
|
|
308
246
|
|
|
309
247
|
**Para `bot status`**:
|
|
310
248
|
|
|
311
249
|
```bash
|
|
312
|
-
|
|
313
|
-
const { botStatus } = require('./scripts/lib/notificaciones-telegram');
|
|
314
|
-
const r = botStatus();
|
|
315
|
-
console.log('');
|
|
316
|
-
console.log('Bot daemon — estado actual');
|
|
317
|
-
console.log(' activo:', r.activo ? 'sí' : 'no');
|
|
318
|
-
console.log(' pid: ', r.pid !== null ? r.pid : 'n/a');
|
|
319
|
-
console.log('');
|
|
320
|
-
"
|
|
250
|
+
swl-ses notificaciones bot-status
|
|
321
251
|
```
|
|
322
252
|
|
|
323
253
|
**Para `bot restart`**:
|
|
324
254
|
|
|
325
255
|
```bash
|
|
326
|
-
|
|
327
|
-
const { botRestart } = require('./scripts/lib/notificaciones-telegram');
|
|
328
|
-
const r = botRestart();
|
|
329
|
-
if (r.ok) {
|
|
330
|
-
console.log('[bot]', r.mensaje || 'Bot reiniciado.');
|
|
331
|
-
} else {
|
|
332
|
-
console.error('[bot] Error:', r.error);
|
|
333
|
-
process.exit(1);
|
|
334
|
-
}
|
|
335
|
-
"
|
|
256
|
+
swl-ses notificaciones bot-restart
|
|
336
257
|
```
|
|
337
258
|
|
|
338
259
|
**Para `bot enable-autostart`**:
|
|
339
260
|
|
|
340
261
|
```bash
|
|
341
|
-
|
|
342
|
-
const { botEnableAutostart } = require('./scripts/lib/notificaciones-telegram');
|
|
343
|
-
const r = botEnableAutostart();
|
|
344
|
-
if (r.ok) {
|
|
345
|
-
console.log('[autostart]', r.mensaje || 'Autostart habilitado.');
|
|
346
|
-
} else {
|
|
347
|
-
console.error('[autostart] Error:', r.error);
|
|
348
|
-
process.exit(1);
|
|
349
|
-
}
|
|
350
|
-
"
|
|
262
|
+
swl-ses notificaciones bot-enable-autostart
|
|
351
263
|
```
|
|
352
264
|
|
|
353
265
|
**Para `bot disable-autostart`**:
|
|
354
266
|
|
|
355
267
|
```bash
|
|
356
|
-
|
|
357
|
-
const { botDisableAutostart } = require('./scripts/lib/notificaciones-telegram');
|
|
358
|
-
const r = botDisableAutostart();
|
|
359
|
-
if (r.ok) {
|
|
360
|
-
console.log('[autostart]', r.mensaje || 'Autostart deshabilitado.');
|
|
361
|
-
} else {
|
|
362
|
-
console.error('[autostart] Error:', r.error);
|
|
363
|
-
process.exit(1);
|
|
364
|
-
}
|
|
365
|
-
"
|
|
268
|
+
swl-ses notificaciones bot-disable-autostart
|
|
366
269
|
```
|
|
367
270
|
|
|
368
271
|
### Paso 3 — Reportar resultado
|