@saulwade/swl-ses 1.6.5 → 1.6.7
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 +1 -1
- package/README.md +1 -1
- package/hooks/check-update.js +4 -0
- package/hooks/lib/evolution-tracker.js +33 -2
- package/package.json +92 -92
- package/plugin.json +371 -371
- package/scripts/doctor.js +18 -6
- package/scripts/instalador.js +79 -4
- package/scripts/lib/notificaciones-telegram.js +14 -0
- package/scripts/lib/transformadores/codex.js +4 -0
- package/scripts/lib/transformadores/cursor.js +5 -0
package/CLAUDE.md
CHANGED
package/README.md
CHANGED
package/hooks/check-update.js
CHANGED
|
@@ -136,6 +136,10 @@ function esVersionNueva(local, remota) {
|
|
|
136
136
|
function debeVerificar() {
|
|
137
137
|
try {
|
|
138
138
|
const data = JSON.parse(fs.readFileSync(flagPath(), 'utf8'));
|
|
139
|
+
// FIX v1.6.7: si el flag fue escrito por el instalador (postInstall:
|
|
140
|
+
// true), forzar el primer check de operación normal. Sin esto, el flag
|
|
141
|
+
// post-install bloquearía el hook real durante 24h tras la instalación.
|
|
142
|
+
if (data.postInstall === true) return true;
|
|
139
143
|
const intervalo = data.remota ? CHECK_INTERVAL_MS : RETRY_INTERVAL_MS;
|
|
140
144
|
return (Date.now() - data.timestamp) > intervalo;
|
|
141
145
|
} catch {
|
|
@@ -46,6 +46,35 @@ const EVOLUTION_FIELDS = {
|
|
|
46
46
|
/** Nombre del archivo sidecar para componentes sin frontmatter (reglas). */
|
|
47
47
|
const SIDECAR_FILENAME = '.evolved.json';
|
|
48
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Patrones de nombre de archivo que NUNCA deben tratarse como componentes
|
|
51
|
+
* evolucionados aunque tengan extensión `.md` y frontmatter `evolved: true`.
|
|
52
|
+
* Cubren residuos de herramientas externas (Syncthing, merge tools, editores).
|
|
53
|
+
*
|
|
54
|
+
* Cuando un dispositivo sincroniza vía Syncthing y hay un conflicto, se crea
|
|
55
|
+
* `SKILL.sync-conflict-YYYYMMDD-HHMMSS-XXXX.md` que es copia del original con
|
|
56
|
+
* el mismo frontmatter. Sin este filtro, scanEvolved los reportaba como
|
|
57
|
+
* "evoluciones" independientes y el output mostraba 4 SKILL.md duplicados sin
|
|
58
|
+
* forma de distinguirlos (v1.6.5 release sesión 2026-05-21).
|
|
59
|
+
*/
|
|
60
|
+
const EXCLUDED_FILENAME_PATTERNS = [
|
|
61
|
+
/\.sync-conflict-/, // Syncthing
|
|
62
|
+
/\.orig$/, // git merge backup
|
|
63
|
+
/\.bak$/, // backups varios
|
|
64
|
+
/\.rej$/, // patch reject
|
|
65
|
+
/\.merge_file_/, // merge tools (kdiff3, etc.)
|
|
66
|
+
/~$/, // editores tipo Emacs/Vim
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Decide si un nombre de archivo debe ignorarse al escanear evoluciones.
|
|
71
|
+
* @param {string} filename
|
|
72
|
+
* @returns {boolean}
|
|
73
|
+
*/
|
|
74
|
+
function isExcludedFilename(filename) {
|
|
75
|
+
return EXCLUDED_FILENAME_PATTERNS.some((re) => re.test(filename));
|
|
76
|
+
}
|
|
77
|
+
|
|
49
78
|
/** Comandos que generan evoluciones. */
|
|
50
79
|
const EVOLUTION_SOURCES = [
|
|
51
80
|
'evolucionar',
|
|
@@ -560,7 +589,7 @@ function scanEvolved(dir, opts = {}) {
|
|
|
560
589
|
|
|
561
590
|
if (entry.isDirectory() && recursive) {
|
|
562
591
|
results.push(...scanEvolved(fullPath, opts));
|
|
563
|
-
} else if (entry.name.endsWith('.md')) {
|
|
592
|
+
} else if (entry.name.endsWith('.md') && !isExcludedFilename(entry.name)) {
|
|
564
593
|
const evo = readEvolutionMeta(fullPath);
|
|
565
594
|
if (evo.evolved) {
|
|
566
595
|
results.push({ path: fullPath, ...evo.metadata });
|
|
@@ -575,7 +604,7 @@ function scanEvolved(dir, opts = {}) {
|
|
|
575
604
|
try {
|
|
576
605
|
const data = JSON.parse(fs.readFileSync(sidecarPath, 'utf8'));
|
|
577
606
|
for (const [filename, meta] of Object.entries(data)) {
|
|
578
|
-
if (meta.evolved) {
|
|
607
|
+
if (meta.evolved && !isExcludedFilename(filename)) {
|
|
579
608
|
results.push({ path: path.join(dir, filename), ...meta });
|
|
580
609
|
}
|
|
581
610
|
}
|
|
@@ -595,8 +624,10 @@ module.exports = {
|
|
|
595
624
|
decideUpdateStrategy,
|
|
596
625
|
mergeEvolved,
|
|
597
626
|
scanEvolved,
|
|
627
|
+
isExcludedFilename,
|
|
598
628
|
isPackageRoot,
|
|
599
629
|
EVOLUTION_FIELDS,
|
|
600
630
|
EVOLUTION_SOURCES,
|
|
631
|
+
EXCLUDED_FILENAME_PATTERNS,
|
|
601
632
|
SIDECAR_FILENAME,
|
|
602
633
|
};
|
package/package.json
CHANGED
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@saulwade/swl-ses",
|
|
3
|
-
"version": "1.6.
|
|
4
|
-
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot con 61 agentes, 177 habilidades, 44 comandos, 69 reglas y 42 hooks. Soporta 11 lenguajes y 7 runtimes: Claude Code, OpenClaude, OpenCode, Gemini CLI, Cursor, Codex CLI (soporte completo); GitHub Copilot (soporte parcial). 100% en espanol (Mexico). Multi-target install (--target CSV / --all-runtimes), autoconfig MCP en Cursor/Codex con --with-mcp, agentes Codex en TOML, hooks Cursor (17 eventos) y Codex (6 eventos). Gateway bidireccional con relay Telegram y auditoria profunda Nemesis con loop evaluator-optimizer opt-in (ADR-0021) y 8 tools ejecutables. v1.6.5 integra 3 patrones de awesome-codex-skills (ComposioHQ, MIT) — agent-deep-links + changelog-generator + gh-fix-ci-swl — ADR-0029, y promueve 3 evoluciones SIGAF al sistema global (D1 nemesis SendMessage + D2 verificar smoke frontend + L2 alineacion veredicto).",
|
|
5
|
-
"bin": {
|
|
6
|
-
"swl-ses": "bin/swl-ses.js",
|
|
7
|
-
"swl-telegram-bot": "bin/swl-telegram-bot.js",
|
|
8
|
-
"swl-mcp-server": "bin/swl-mcp-server.js",
|
|
9
|
-
"swl-webhook-server": "bin/swl-webhook-server.js"
|
|
10
|
-
},
|
|
11
|
-
"files": [
|
|
12
|
-
"bin",
|
|
13
|
-
"scripts",
|
|
14
|
-
"manifiestos",
|
|
15
|
-
"agentes",
|
|
16
|
-
"habilidades",
|
|
17
|
-
"comandos",
|
|
18
|
-
"reglas",
|
|
19
|
-
"hooks",
|
|
20
|
-
"gateway",
|
|
21
|
-
"plantillas",
|
|
22
|
-
"contextos",
|
|
23
|
-
"instintos",
|
|
24
|
-
"schemas",
|
|
25
|
-
"_userland",
|
|
26
|
-
"plugin.json",
|
|
27
|
-
"CLAUDE.md"
|
|
28
|
-
],
|
|
29
|
-
"scripts": {
|
|
30
|
-
"postinstall": "echo '\n swl-software-engineering-system instalado.\n Ejecuta: npx swl-ses init\n'",
|
|
31
|
-
"test": "node --test tests/lib/*.test.js tests/scripts/*.test.js tests/scripts/lib/*.test.js tests/scripts/tui/*.test.js tests/hooks/*.test.js tests/hooks/lib/*.test.js tests/habilidades/*.test.js tests/gateway/*.test.js tests/bin/*.test.js tests/transformadores/*.test.js tests/mcp-server/*.test.js",
|
|
32
|
-
"test:validate": "node scripts/validar.js",
|
|
33
|
-
"test:manifest": "node scripts/validar-manifest.js",
|
|
34
|
-
"test:docs": "node scripts/verificar-docs-vs-codigo.js",
|
|
35
|
-
"test:smoke": "node scripts/smoke-test.js",
|
|
36
|
-
"test:aislamiento": "node scripts/validar-tests-aislamiento.js",
|
|
37
|
-
"test:all": "npm test && node scripts/validar.js && node scripts/validar-manifest.js && node scripts/verificar-docs-vs-codigo.js && node scripts/derivar-feature-list.js --check",
|
|
38
|
-
"test:userland": "node scripts/validar-userland-vacio.js",
|
|
39
|
-
"test:release": "npm run test:all && npm run test:userland && npm run test:smoke",
|
|
40
|
-
"doctor": "node scripts/doctor.js",
|
|
41
|
-
"prepack": "node scripts/limpiar-artefactos-python.js && node scripts/validar-userland-vacio.js",
|
|
42
|
-
"prepublishOnly": "npm run test:release",
|
|
43
|
-
"publish:all": "node scripts/publicar.js",
|
|
44
|
-
"publish:github": "node scripts/publicar.js --solo-github",
|
|
45
|
-
"publish:npmjs": "node scripts/publicar.js --solo-npmjs",
|
|
46
|
-
"publish:dry": "node scripts/publicar.js --dry-run",
|
|
47
|
-
"generate:docs": "node scripts/generar-inventario.js",
|
|
48
|
-
"gen-checklists": "node scripts/generar-checklists-consolidados.js",
|
|
49
|
-
"gen-checklists:check": "node scripts/generar-checklists-consolidados.js --check",
|
|
50
|
-
"gen:feature-list": "node scripts/derivar-feature-list.js",
|
|
51
|
-
"gen:feature-list:check": "node scripts/derivar-feature-list.js --check",
|
|
52
|
-
"field-report": "node scripts/field-report.js",
|
|
53
|
-
"configure:branch-protection": "node scripts/configurar-branch-protection.js"
|
|
54
|
-
},
|
|
55
|
-
"engines": {
|
|
56
|
-
"node": ">=22.0.0"
|
|
57
|
-
},
|
|
58
|
-
"keywords": [
|
|
59
|
-
"claude-code",
|
|
60
|
-
"github-copilot",
|
|
61
|
-
"gemini-cli",
|
|
62
|
-
"opencode",
|
|
63
|
-
"codex-cli",
|
|
64
|
-
"agentes",
|
|
65
|
-
"skills",
|
|
66
|
-
"multi-runtime",
|
|
67
|
-
"spec-driven",
|
|
68
|
-
"orquestacion",
|
|
69
|
-
"ingenieria-software"
|
|
70
|
-
],
|
|
71
|
-
"author": "Saul Wade Leon",
|
|
72
|
-
"license": "MIT",
|
|
73
|
-
"repository": {
|
|
74
|
-
"type": "git",
|
|
75
|
-
"url": "git+https://github.com/saul-wade/swl-ses.git"
|
|
76
|
-
},
|
|
77
|
-
"homepage": "https://github.com/saul-wade/swl-ses#readme",
|
|
78
|
-
"bugs": {
|
|
79
|
-
"url": "https://github.com/saul-wade/swl-ses/issues"
|
|
80
|
-
},
|
|
81
|
-
"publishConfig": {
|
|
82
|
-
"registry": "https://registry.npmjs.org/",
|
|
83
|
-
"access": "public"
|
|
84
|
-
},
|
|
85
|
-
"dependencies": {
|
|
86
|
-
"docx": "^9.6.1"
|
|
87
|
-
},
|
|
88
|
-
"overrides": {
|
|
89
|
-
"pako": "^2.1.0",
|
|
90
|
-
"readable-stream": "^4.7.0"
|
|
91
|
-
}
|
|
92
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@saulwade/swl-ses",
|
|
3
|
+
"version": "1.6.7",
|
|
4
|
+
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot con 61 agentes, 177 habilidades, 44 comandos, 69 reglas y 42 hooks. Soporta 11 lenguajes y 7 runtimes: Claude Code, OpenClaude, OpenCode, Gemini CLI, Cursor, Codex CLI (soporte completo); GitHub Copilot (soporte parcial). 100% en espanol (Mexico). Multi-target install (--target CSV / --all-runtimes), autoconfig MCP en Cursor/Codex con --with-mcp, agentes Codex en TOML, hooks Cursor (17 eventos) y Codex (6 eventos). Gateway bidireccional con relay Telegram y auditoria profunda Nemesis con loop evaluator-optimizer opt-in (ADR-0021) y 8 tools ejecutables. v1.6.5 integra 3 patrones de awesome-codex-skills (ComposioHQ, MIT) — agent-deep-links + changelog-generator + gh-fix-ci-swl — ADR-0029, y promueve 3 evoluciones SIGAF al sistema global (D1 nemesis SendMessage + D2 verificar smoke frontend + L2 alineacion veredicto).",
|
|
5
|
+
"bin": {
|
|
6
|
+
"swl-ses": "bin/swl-ses.js",
|
|
7
|
+
"swl-telegram-bot": "bin/swl-telegram-bot.js",
|
|
8
|
+
"swl-mcp-server": "bin/swl-mcp-server.js",
|
|
9
|
+
"swl-webhook-server": "bin/swl-webhook-server.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"bin",
|
|
13
|
+
"scripts",
|
|
14
|
+
"manifiestos",
|
|
15
|
+
"agentes",
|
|
16
|
+
"habilidades",
|
|
17
|
+
"comandos",
|
|
18
|
+
"reglas",
|
|
19
|
+
"hooks",
|
|
20
|
+
"gateway",
|
|
21
|
+
"plantillas",
|
|
22
|
+
"contextos",
|
|
23
|
+
"instintos",
|
|
24
|
+
"schemas",
|
|
25
|
+
"_userland",
|
|
26
|
+
"plugin.json",
|
|
27
|
+
"CLAUDE.md"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"postinstall": "echo '\n swl-software-engineering-system instalado.\n Ejecuta: npx swl-ses init\n'",
|
|
31
|
+
"test": "node --test tests/lib/*.test.js tests/scripts/*.test.js tests/scripts/lib/*.test.js tests/scripts/tui/*.test.js tests/hooks/*.test.js tests/hooks/lib/*.test.js tests/habilidades/*.test.js tests/gateway/*.test.js tests/bin/*.test.js tests/transformadores/*.test.js tests/mcp-server/*.test.js",
|
|
32
|
+
"test:validate": "node scripts/validar.js",
|
|
33
|
+
"test:manifest": "node scripts/validar-manifest.js",
|
|
34
|
+
"test:docs": "node scripts/verificar-docs-vs-codigo.js",
|
|
35
|
+
"test:smoke": "node scripts/smoke-test.js",
|
|
36
|
+
"test:aislamiento": "node scripts/validar-tests-aislamiento.js",
|
|
37
|
+
"test:all": "npm test && node scripts/validar.js && node scripts/validar-manifest.js && node scripts/verificar-docs-vs-codigo.js && node scripts/derivar-feature-list.js --check",
|
|
38
|
+
"test:userland": "node scripts/validar-userland-vacio.js",
|
|
39
|
+
"test:release": "npm run test:all && npm run test:userland && npm run test:smoke",
|
|
40
|
+
"doctor": "node scripts/doctor.js",
|
|
41
|
+
"prepack": "node scripts/limpiar-artefactos-python.js && node scripts/validar-userland-vacio.js",
|
|
42
|
+
"prepublishOnly": "npm run test:release",
|
|
43
|
+
"publish:all": "node scripts/publicar.js",
|
|
44
|
+
"publish:github": "node scripts/publicar.js --solo-github",
|
|
45
|
+
"publish:npmjs": "node scripts/publicar.js --solo-npmjs",
|
|
46
|
+
"publish:dry": "node scripts/publicar.js --dry-run",
|
|
47
|
+
"generate:docs": "node scripts/generar-inventario.js",
|
|
48
|
+
"gen-checklists": "node scripts/generar-checklists-consolidados.js",
|
|
49
|
+
"gen-checklists:check": "node scripts/generar-checklists-consolidados.js --check",
|
|
50
|
+
"gen:feature-list": "node scripts/derivar-feature-list.js",
|
|
51
|
+
"gen:feature-list:check": "node scripts/derivar-feature-list.js --check",
|
|
52
|
+
"field-report": "node scripts/field-report.js",
|
|
53
|
+
"configure:branch-protection": "node scripts/configurar-branch-protection.js"
|
|
54
|
+
},
|
|
55
|
+
"engines": {
|
|
56
|
+
"node": ">=22.0.0"
|
|
57
|
+
},
|
|
58
|
+
"keywords": [
|
|
59
|
+
"claude-code",
|
|
60
|
+
"github-copilot",
|
|
61
|
+
"gemini-cli",
|
|
62
|
+
"opencode",
|
|
63
|
+
"codex-cli",
|
|
64
|
+
"agentes",
|
|
65
|
+
"skills",
|
|
66
|
+
"multi-runtime",
|
|
67
|
+
"spec-driven",
|
|
68
|
+
"orquestacion",
|
|
69
|
+
"ingenieria-software"
|
|
70
|
+
],
|
|
71
|
+
"author": "Saul Wade Leon",
|
|
72
|
+
"license": "MIT",
|
|
73
|
+
"repository": {
|
|
74
|
+
"type": "git",
|
|
75
|
+
"url": "git+https://github.com/saul-wade/swl-ses.git"
|
|
76
|
+
},
|
|
77
|
+
"homepage": "https://github.com/saul-wade/swl-ses#readme",
|
|
78
|
+
"bugs": {
|
|
79
|
+
"url": "https://github.com/saul-wade/swl-ses/issues"
|
|
80
|
+
},
|
|
81
|
+
"publishConfig": {
|
|
82
|
+
"registry": "https://registry.npmjs.org/",
|
|
83
|
+
"access": "public"
|
|
84
|
+
},
|
|
85
|
+
"dependencies": {
|
|
86
|
+
"docx": "^9.6.1"
|
|
87
|
+
},
|
|
88
|
+
"overrides": {
|
|
89
|
+
"pako": "^2.1.0",
|
|
90
|
+
"readable-stream": "^4.7.0"
|
|
91
|
+
}
|
|
92
|
+
}
|
package/plugin.json
CHANGED
|
@@ -1,371 +1,371 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "swl-ses",
|
|
3
|
-
"version": "1.6.
|
|
4
|
-
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot. 61 agentes, 177 habilidades, 44 comandos, 69 reglas y 42 hooks. 62 librerias. 11 lenguajes. Soporta Claude Code, Copilot, OpenCode, Codex y Gemini CLI. Loop evaluator-optimizer en /swl:nemesis (ADR-0021). 3 patrones de awesome-codex-skills (ComposioHQ, MIT) adoptados (ADR-0029) — agent-deep-links + changelog-generator + gh-fix-ci-swl. Promueve 3 evoluciones SIGAF (D1 nemesis SendMessage, D2 verificar smoke frontend, L2 alineacion veredicto).",
|
|
5
|
-
"author": "Saul Wade Leon",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"repository": "https://github.com/saul-wade/swl-ses",
|
|
8
|
-
"skills": [
|
|
9
|
-
"habilidades/accesibilidad-a11y",
|
|
10
|
-
"habilidades/agent-browser",
|
|
11
|
-
"habilidades/agent-deep-links",
|
|
12
|
-
"habilidades/agentes-como-servicio",
|
|
13
|
-
"habilidades/ai-runtime-security",
|
|
14
|
-
"habilidades/angular-avanzado",
|
|
15
|
-
"habilidades/angular-moderno",
|
|
16
|
-
"habilidades/api-rest-diseno",
|
|
17
|
-
"habilidades/aprender-de-git-diff",
|
|
18
|
-
"habilidades/aprendizaje-continuo",
|
|
19
|
-
"habilidades/async-python",
|
|
20
|
-
"habilidades/auth-patrones",
|
|
21
|
-
"habilidades/auto-evolucion-protocolo",
|
|
22
|
-
"habilidades/autoresearch",
|
|
23
|
-
"habilidades/azure-cloud",
|
|
24
|
-
"habilidades/backend-async-postgres-testing",
|
|
25
|
-
"habilidades/backend-error-design",
|
|
26
|
-
"habilidades/backend-mcp-servidor",
|
|
27
|
-
"habilidades/backend-production-resilience",
|
|
28
|
-
"habilidades/benchmark-memoria",
|
|
29
|
-
"habilidades/brainstorming",
|
|
30
|
-
"habilidades/browser-interaction-patterns",
|
|
31
|
-
"habilidades/browser-research-domains",
|
|
32
|
-
"habilidades/build-errors-cpp",
|
|
33
|
-
"habilidades/build-errors-csharp",
|
|
34
|
-
"habilidades/build-errors-go",
|
|
35
|
-
"habilidades/build-errors-java",
|
|
36
|
-
"habilidades/build-errors-kotlin",
|
|
37
|
-
"habilidades/build-errors-nextjs",
|
|
38
|
-
"habilidades/build-errors-php",
|
|
39
|
-
"habilidades/build-errors-python",
|
|
40
|
-
"habilidades/build-errors-rust",
|
|
41
|
-
"habilidades/build-errors-swift",
|
|
42
|
-
"habilidades/build-errors-typescript",
|
|
43
|
-
"habilidades/changelog-generator",
|
|
44
|
-
"habilidades/checklist-calidad",
|
|
45
|
-
"habilidades/checklist-seguridad",
|
|
46
|
-
"habilidades/checkpoints-verificacion",
|
|
47
|
-
"habilidades/ci-cd-pipelines",
|
|
48
|
-
"habilidades/cloud-aws",
|
|
49
|
-
"habilidades/compactacion-contexto",
|
|
50
|
-
"habilidades/contenedores-docker",
|
|
51
|
-
"habilidades/context-builder",
|
|
52
|
-
"habilidades/control-profundidad",
|
|
53
|
-
"habilidades/csharp-experto",
|
|
54
|
-
"habilidades/csharp-patrones",
|
|
55
|
-
"habilidades/csharp-testing",
|
|
56
|
-
"habilidades/css-moderno",
|
|
57
|
-
"habilidades/datos-etl",
|
|
58
|
-
"habilidades/dbml-experto",
|
|
59
|
-
"habilidades/dependencias-auditoria",
|
|
60
|
-
"habilidades/deprecacion-migracion",
|
|
61
|
-
"habilidades/design-tokens",
|
|
62
|
-
"habilidades/devsecops-pipeline-security",
|
|
63
|
-
"habilidades/diagrama-arquitectura",
|
|
64
|
-
"habilidades/discutir-fase",
|
|
65
|
-
"habilidades/diseno-herramientas-agente",
|
|
66
|
-
"habilidades/diseno-responsivo",
|
|
67
|
-
"habilidades/django-experto",
|
|
68
|
-
"habilidades/doc-sync",
|
|
69
|
-
"habilidades/doubt-driven-review",
|
|
70
|
-
"habilidades/drift-detection",
|
|
71
|
-
"habilidades/ejecutar-fase",
|
|
72
|
-
"habilidades/ejecutar-task-iterativo",
|
|
73
|
-
"habilidades/estilo-sin-ai-isms",
|
|
74
|
-
"habilidades/estructura-proyecto-claude",
|
|
75
|
-
"habilidades/eval-framework",
|
|
76
|
-
"habilidades/evaluacion-agentes",
|
|
77
|
-
"habilidades/event-driven",
|
|
78
|
-
"habilidades/extraccion-documentos",
|
|
79
|
-
"habilidades/extractor-de-aprendizajes",
|
|
80
|
-
"habilidades/fastapi-experto",
|
|
81
|
-
"habilidades/feynman-auditor-swl",
|
|
82
|
-
"habilidades/filament-admin",
|
|
83
|
-
"habilidades/frontend-avanzado",
|
|
84
|
-
"habilidades/gcp-cloud",
|
|
85
|
-
"habilidades/generacion-mermaid",
|
|
86
|
-
"habilidades/git-worktrees-paralelo",
|
|
87
|
-
"habilidades/go-experto",
|
|
88
|
-
"habilidades/go-patrones",
|
|
89
|
-
"habilidades/go-testing",
|
|
90
|
-
"habilidades/graphql-experto",
|
|
91
|
-
"habilidades/guardrail-semantico",
|
|
92
|
-
"habilidades/harness-claude-code",
|
|
93
|
-
"habilidades/iam-secretos",
|
|
94
|
-
"habilidades/infra-github-actions",
|
|
95
|
-
"habilidades/instalar-sistema",
|
|
96
|
-
"habilidades/java-experto",
|
|
97
|
-
"habilidades/java-patrones",
|
|
98
|
-
"habilidades/java-testing",
|
|
99
|
-
"habilidades/kotlin-compose",
|
|
100
|
-
"habilidades/kotlin-experto",
|
|
101
|
-
"habilidades/kotlin-testing",
|
|
102
|
-
"habilidades/kubernetes-orquestacion",
|
|
103
|
-
"habilidades/langchain-langraph",
|
|
104
|
-
"habilidades/legacy-code-rescue",
|
|
105
|
-
"habilidades/likec4-experto",
|
|
106
|
-
"habilidades/manejo-errores",
|
|
107
|
-
"habilidades/mapear-codebase",
|
|
108
|
-
"habilidades/memoria-busqueda",
|
|
109
|
-
"habilidades/meta-skills-estandar",
|
|
110
|
-
"habilidades/microservicios",
|
|
111
|
-
"habilidades/mobile-flutter",
|
|
112
|
-
"habilidades/mobile-react-native",
|
|
113
|
-
"habilidades/mongodb-experto",
|
|
114
|
-
"habilidades/monitoring-alertas",
|
|
115
|
-
"habilidades/nemesis-evaluacion-json",
|
|
116
|
-
"habilidades/nemesis-redistribuir",
|
|
117
|
-
"habilidades/nestjs-experto",
|
|
118
|
-
"habilidades/nextjs-experto",
|
|
119
|
-
"habilidades/nextjs-patrones",
|
|
120
|
-
"habilidades/nextjs-testing",
|
|
121
|
-
"habilidades/node-experto",
|
|
122
|
-
"habilidades/notificaciones-multicanal",
|
|
123
|
-
"habilidades/nuevo-proyecto",
|
|
124
|
-
"habilidades/orquestacion-async",
|
|
125
|
-
"habilidades/paid-media-tracking",
|
|
126
|
-
"habilidades/patrones-python",
|
|
127
|
-
"habilidades/perfil-usuario",
|
|
128
|
-
"habilidades/performance-baseline",
|
|
129
|
-
"habilidades/php-experto",
|
|
130
|
-
"habilidades/php-patrones",
|
|
131
|
-
"habilidades/php-testing",
|
|
132
|
-
"habilidades/planear-fase",
|
|
133
|
-
"habilidades/postgresql-experto",
|
|
134
|
-
"habilidades/prevencion-racionalizacion",
|
|
135
|
-
"habilidades/prevencion-sobreingenieria",
|
|
136
|
-
"habilidades/privacy-memoria",
|
|
137
|
-
"habilidades/proceso-autoverificacion-evidencias",
|
|
138
|
-
"habilidades/proceso-confianza-pre-implementacion",
|
|
139
|
-
"habilidades/proceso-ddia-fundamentos",
|
|
140
|
-
"habilidades/proceso-ddia-streaming",
|
|
141
|
-
"habilidades/proceso-discovery-machote",
|
|
142
|
-
"habilidades/proceso-intent-engineering",
|
|
143
|
-
"habilidades/proceso-modular-split",
|
|
144
|
-
"habilidades/prompt-engineering",
|
|
145
|
-
"habilidades/protocolo-revision-swl",
|
|
146
|
-
"habilidades/rag-arquitectura",
|
|
147
|
-
"habilidades/rails-experto",
|
|
148
|
-
"habilidades/react-experto",
|
|
149
|
-
"habilidades/react-optimizacion",
|
|
150
|
-
"habilidades/redis-experto",
|
|
151
|
-
"habilidades/reducir-entropia",
|
|
152
|
-
"habilidades/release-semver",
|
|
153
|
-
"habilidades/rust-experto",
|
|
154
|
-
"habilidades/rust-patrones",
|
|
155
|
-
"habilidades/rust-testing",
|
|
156
|
-
"habilidades/seguridad-skills-ia",
|
|
157
|
-
"habilidades/sql-optimizacion",
|
|
158
|
-
"habilidades/sre-patrones",
|
|
159
|
-
"habilidades/state-inconsistency-auditor-swl",
|
|
160
|
-
"habilidades/stripe-pagos",
|
|
161
|
-
"habilidades/structured-outputs",
|
|
162
|
-
"habilidades/swift-experto",
|
|
163
|
-
"habilidades/swift-patrones",
|
|
164
|
-
"habilidades/swift-testing",
|
|
165
|
-
"habilidades/swl-claudemd",
|
|
166
|
-
"habilidades/swl-dashboard",
|
|
167
|
-
"habilidades/swl-markitdown",
|
|
168
|
-
"habilidades/swl-revisar-impacto",
|
|
169
|
-
"habilidades/tailwind-experto",
|
|
170
|
-
"habilidades/tdd-workflow",
|
|
171
|
-
"habilidades/terraform-experto",
|
|
172
|
-
"habilidades/testing-python",
|
|
173
|
-
"habilidades/threat-model-lite",
|
|
174
|
-
"habilidades/tracing-processor",
|
|
175
|
-
"habilidades/tracking-measurement",
|
|
176
|
-
"habilidades/typescript-avanzado",
|
|
177
|
-
"habilidades/typescript-diagnosticos",
|
|
178
|
-
"habilidades/ux-diseno",
|
|
179
|
-
"habilidades/validacion-ci-sistema",
|
|
180
|
-
"habilidades/verificacion-evidencia",
|
|
181
|
-
"habilidades/verificar-trabajo",
|
|
182
|
-
"habilidades/web-fetcher-routing",
|
|
183
|
-
"habilidades/wiki-conocimiento",
|
|
184
|
-
"habilidades/wireframes-flujos",
|
|
185
|
-
"habilidades/workflow-claude-code"
|
|
186
|
-
],
|
|
187
|
-
"agents": [
|
|
188
|
-
"agentes/accesibilidad-wcag-swl.md",
|
|
189
|
-
"agentes/arquitecto-swl.md",
|
|
190
|
-
"agentes/auto-evolucion-swl.md",
|
|
191
|
-
"agentes/backend-api-swl.md",
|
|
192
|
-
"agentes/backend-csharp-swl.md",
|
|
193
|
-
"agentes/backend-go-swl.md",
|
|
194
|
-
"agentes/backend-java-swl.md",
|
|
195
|
-
"agentes/backend-node-swl.md",
|
|
196
|
-
"agentes/backend-python-swl.md",
|
|
197
|
-
"agentes/backend-rust-swl.md",
|
|
198
|
-
"agentes/backend-workers-swl.md",
|
|
199
|
-
"agentes/cloud-infra-swl.md",
|
|
200
|
-
"agentes/consolidador-swl.md",
|
|
201
|
-
"agentes/datos-swl.md",
|
|
202
|
-
"agentes/depurador-swl.md",
|
|
203
|
-
"agentes/devops-ci-swl.md",
|
|
204
|
-
"agentes/disenador-ui-swl.md",
|
|
205
|
-
"agentes/documentador-swl.md",
|
|
206
|
-
"agentes/frontend-angular-swl.md",
|
|
207
|
-
"agentes/frontend-css-swl.md",
|
|
208
|
-
"agentes/frontend-react-swl.md",
|
|
209
|
-
"agentes/frontend-swl.md",
|
|
210
|
-
"agentes/frontend-tailwind-swl.md",
|
|
211
|
-
"agentes/gh-fix-ci-swl.md",
|
|
212
|
-
"agentes/implementador-swl.md",
|
|
213
|
-
"agentes/investigador-swl.md",
|
|
214
|
-
"agentes/investigador-ux-swl.md",
|
|
215
|
-
"agentes/llm-apps-swl.md",
|
|
216
|
-
"agentes/migrador-swl.md",
|
|
217
|
-
"agentes/mobile-android-swl.md",
|
|
218
|
-
"agentes/mobile-cross-swl.md",
|
|
219
|
-
"agentes/mobile-ios-swl.md",
|
|
220
|
-
"agentes/mobile-testing-swl.md",
|
|
221
|
-
"agentes/nemesis-auditor-swl.md",
|
|
222
|
-
"agentes/notificador-swl.md",
|
|
223
|
-
"agentes/observabilidad-swl.md",
|
|
224
|
-
"agentes/orquestador-swl.md",
|
|
225
|
-
"agentes/pagos-swl.md",
|
|
226
|
-
"agentes/perfilador-usuario-swl.md",
|
|
227
|
-
"agentes/planificador-swl.md",
|
|
228
|
-
"agentes/producto-prd-swl.md",
|
|
229
|
-
"agentes/red-team-swl.md",
|
|
230
|
-
"agentes/release-manager-swl.md",
|
|
231
|
-
"agentes/rendimiento-swl.md",
|
|
232
|
-
"agentes/resolutor-build-swl.md",
|
|
233
|
-
"agentes/revisor-angular-swl.md",
|
|
234
|
-
"agentes/revisor-codigo-swl.md",
|
|
235
|
-
"agentes/revisor-csharp-swl.md",
|
|
236
|
-
"agentes/revisor-go-swl.md",
|
|
237
|
-
"agentes/revisor-java-swl.md",
|
|
238
|
-
"agentes/revisor-kotlin-swl.md",
|
|
239
|
-
"agentes/revisor-nextjs-swl.md",
|
|
240
|
-
"agentes/revisor-php-swl.md",
|
|
241
|
-
"agentes/revisor-react-swl.md",
|
|
242
|
-
"agentes/revisor-rust-swl.md",
|
|
243
|
-
"agentes/revisor-seguridad-swl.md",
|
|
244
|
-
"agentes/revisor-swift-swl.md",
|
|
245
|
-
"agentes/revisor-typescript-swl.md",
|
|
246
|
-
"agentes/sre-swl.md",
|
|
247
|
-
"agentes/tdd-qa-swl.md",
|
|
248
|
-
"agentes/ux-disenador-swl.md"
|
|
249
|
-
],
|
|
250
|
-
"hooks": {
|
|
251
|
-
"PreToolUse": [
|
|
252
|
-
{
|
|
253
|
-
"matcher": "Write|Edit",
|
|
254
|
-
"type": "command",
|
|
255
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/escaneo-secretos.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
256
|
-
},
|
|
257
|
-
{
|
|
258
|
-
"matcher": "Write|Edit",
|
|
259
|
-
"type": "command",
|
|
260
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/proteccion-rutas.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
"matcher": "Bash",
|
|
264
|
-
"type": "command",
|
|
265
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/calidad-pre-commit.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
"type": "command",
|
|
269
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/risk-scoring.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
270
|
-
},
|
|
271
|
-
{
|
|
272
|
-
"matcher": "Bash",
|
|
273
|
-
"type": "command",
|
|
274
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/calidad-typescript.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
"matcher": "Glob|Grep|Read",
|
|
278
|
-
"type": "command",
|
|
279
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/grafo-contexto.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
280
|
-
},
|
|
281
|
-
{
|
|
282
|
-
"matcher": "Bash",
|
|
283
|
-
"type": "command",
|
|
284
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/auto-background.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
285
|
-
}
|
|
286
|
-
],
|
|
287
|
-
"PostToolUse": [
|
|
288
|
-
{
|
|
289
|
-
"type": "command",
|
|
290
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/linea-estado.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
291
|
-
},
|
|
292
|
-
{
|
|
293
|
-
"type": "command",
|
|
294
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/monitor-contexto.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
295
|
-
},
|
|
296
|
-
{
|
|
297
|
-
"matcher": "Bash|Write|Edit",
|
|
298
|
-
"type": "command",
|
|
299
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/extraccion-aprendizajes.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
300
|
-
},
|
|
301
|
-
{
|
|
302
|
-
"matcher": "Bash|Write|Edit",
|
|
303
|
-
"type": "command",
|
|
304
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/degradacion-instintos.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
305
|
-
},
|
|
306
|
-
{
|
|
307
|
-
"type": "command",
|
|
308
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/tracking-costos.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
309
|
-
},
|
|
310
|
-
{
|
|
311
|
-
"type": "command",
|
|
312
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/inyeccion-contexto.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
313
|
-
},
|
|
314
|
-
{
|
|
315
|
-
"matcher": "Write|Edit",
|
|
316
|
-
"type": "command",
|
|
317
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/graph-update.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
318
|
-
},
|
|
319
|
-
{
|
|
320
|
-
"type": "command",
|
|
321
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/auto-consolidacion.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
322
|
-
},
|
|
323
|
-
{
|
|
324
|
-
"matcher": "Agent",
|
|
325
|
-
"type": "command",
|
|
326
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/telemetria-agentes.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
327
|
-
},
|
|
328
|
-
{
|
|
329
|
-
"type": "command",
|
|
330
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/audit-trail.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
331
|
-
},
|
|
332
|
-
{
|
|
333
|
-
"matcher": "Agent",
|
|
334
|
-
"type": "command",
|
|
335
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/agente-lifecycle.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
336
|
-
}
|
|
337
|
-
],
|
|
338
|
-
"UserPromptSubmit": [
|
|
339
|
-
{
|
|
340
|
-
"type": "command",
|
|
341
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/clasificador-mensajes.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
342
|
-
}
|
|
343
|
-
],
|
|
344
|
-
"Stop": [
|
|
345
|
-
{
|
|
346
|
-
"type": "command",
|
|
347
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/resumen-sesion.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
348
|
-
},
|
|
349
|
-
{
|
|
350
|
-
"type": "command",
|
|
351
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/actualizar-perfil-usuario.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
352
|
-
},
|
|
353
|
-
{
|
|
354
|
-
"type": "command",
|
|
355
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/metricas-evolucion.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
356
|
-
}
|
|
357
|
-
],
|
|
358
|
-
"SubagentStop": [
|
|
359
|
-
{
|
|
360
|
-
"type": "command",
|
|
361
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/auto-evolucion.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
362
|
-
}
|
|
363
|
-
],
|
|
364
|
-
"PreCompact": [
|
|
365
|
-
{
|
|
366
|
-
"type": "command",
|
|
367
|
-
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/preservar-estado-pre-compact.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
368
|
-
}
|
|
369
|
-
]
|
|
370
|
-
}
|
|
371
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "swl-ses",
|
|
3
|
+
"version": "1.6.7",
|
|
4
|
+
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot. 61 agentes, 177 habilidades, 44 comandos, 69 reglas y 42 hooks. 62 librerias. 11 lenguajes. Soporta Claude Code, Copilot, OpenCode, Codex y Gemini CLI. Loop evaluator-optimizer en /swl:nemesis (ADR-0021). 3 patrones de awesome-codex-skills (ComposioHQ, MIT) adoptados (ADR-0029) — agent-deep-links + changelog-generator + gh-fix-ci-swl. Promueve 3 evoluciones SIGAF (D1 nemesis SendMessage, D2 verificar smoke frontend, L2 alineacion veredicto).",
|
|
5
|
+
"author": "Saul Wade Leon",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": "https://github.com/saul-wade/swl-ses",
|
|
8
|
+
"skills": [
|
|
9
|
+
"habilidades/accesibilidad-a11y",
|
|
10
|
+
"habilidades/agent-browser",
|
|
11
|
+
"habilidades/agent-deep-links",
|
|
12
|
+
"habilidades/agentes-como-servicio",
|
|
13
|
+
"habilidades/ai-runtime-security",
|
|
14
|
+
"habilidades/angular-avanzado",
|
|
15
|
+
"habilidades/angular-moderno",
|
|
16
|
+
"habilidades/api-rest-diseno",
|
|
17
|
+
"habilidades/aprender-de-git-diff",
|
|
18
|
+
"habilidades/aprendizaje-continuo",
|
|
19
|
+
"habilidades/async-python",
|
|
20
|
+
"habilidades/auth-patrones",
|
|
21
|
+
"habilidades/auto-evolucion-protocolo",
|
|
22
|
+
"habilidades/autoresearch",
|
|
23
|
+
"habilidades/azure-cloud",
|
|
24
|
+
"habilidades/backend-async-postgres-testing",
|
|
25
|
+
"habilidades/backend-error-design",
|
|
26
|
+
"habilidades/backend-mcp-servidor",
|
|
27
|
+
"habilidades/backend-production-resilience",
|
|
28
|
+
"habilidades/benchmark-memoria",
|
|
29
|
+
"habilidades/brainstorming",
|
|
30
|
+
"habilidades/browser-interaction-patterns",
|
|
31
|
+
"habilidades/browser-research-domains",
|
|
32
|
+
"habilidades/build-errors-cpp",
|
|
33
|
+
"habilidades/build-errors-csharp",
|
|
34
|
+
"habilidades/build-errors-go",
|
|
35
|
+
"habilidades/build-errors-java",
|
|
36
|
+
"habilidades/build-errors-kotlin",
|
|
37
|
+
"habilidades/build-errors-nextjs",
|
|
38
|
+
"habilidades/build-errors-php",
|
|
39
|
+
"habilidades/build-errors-python",
|
|
40
|
+
"habilidades/build-errors-rust",
|
|
41
|
+
"habilidades/build-errors-swift",
|
|
42
|
+
"habilidades/build-errors-typescript",
|
|
43
|
+
"habilidades/changelog-generator",
|
|
44
|
+
"habilidades/checklist-calidad",
|
|
45
|
+
"habilidades/checklist-seguridad",
|
|
46
|
+
"habilidades/checkpoints-verificacion",
|
|
47
|
+
"habilidades/ci-cd-pipelines",
|
|
48
|
+
"habilidades/cloud-aws",
|
|
49
|
+
"habilidades/compactacion-contexto",
|
|
50
|
+
"habilidades/contenedores-docker",
|
|
51
|
+
"habilidades/context-builder",
|
|
52
|
+
"habilidades/control-profundidad",
|
|
53
|
+
"habilidades/csharp-experto",
|
|
54
|
+
"habilidades/csharp-patrones",
|
|
55
|
+
"habilidades/csharp-testing",
|
|
56
|
+
"habilidades/css-moderno",
|
|
57
|
+
"habilidades/datos-etl",
|
|
58
|
+
"habilidades/dbml-experto",
|
|
59
|
+
"habilidades/dependencias-auditoria",
|
|
60
|
+
"habilidades/deprecacion-migracion",
|
|
61
|
+
"habilidades/design-tokens",
|
|
62
|
+
"habilidades/devsecops-pipeline-security",
|
|
63
|
+
"habilidades/diagrama-arquitectura",
|
|
64
|
+
"habilidades/discutir-fase",
|
|
65
|
+
"habilidades/diseno-herramientas-agente",
|
|
66
|
+
"habilidades/diseno-responsivo",
|
|
67
|
+
"habilidades/django-experto",
|
|
68
|
+
"habilidades/doc-sync",
|
|
69
|
+
"habilidades/doubt-driven-review",
|
|
70
|
+
"habilidades/drift-detection",
|
|
71
|
+
"habilidades/ejecutar-fase",
|
|
72
|
+
"habilidades/ejecutar-task-iterativo",
|
|
73
|
+
"habilidades/estilo-sin-ai-isms",
|
|
74
|
+
"habilidades/estructura-proyecto-claude",
|
|
75
|
+
"habilidades/eval-framework",
|
|
76
|
+
"habilidades/evaluacion-agentes",
|
|
77
|
+
"habilidades/event-driven",
|
|
78
|
+
"habilidades/extraccion-documentos",
|
|
79
|
+
"habilidades/extractor-de-aprendizajes",
|
|
80
|
+
"habilidades/fastapi-experto",
|
|
81
|
+
"habilidades/feynman-auditor-swl",
|
|
82
|
+
"habilidades/filament-admin",
|
|
83
|
+
"habilidades/frontend-avanzado",
|
|
84
|
+
"habilidades/gcp-cloud",
|
|
85
|
+
"habilidades/generacion-mermaid",
|
|
86
|
+
"habilidades/git-worktrees-paralelo",
|
|
87
|
+
"habilidades/go-experto",
|
|
88
|
+
"habilidades/go-patrones",
|
|
89
|
+
"habilidades/go-testing",
|
|
90
|
+
"habilidades/graphql-experto",
|
|
91
|
+
"habilidades/guardrail-semantico",
|
|
92
|
+
"habilidades/harness-claude-code",
|
|
93
|
+
"habilidades/iam-secretos",
|
|
94
|
+
"habilidades/infra-github-actions",
|
|
95
|
+
"habilidades/instalar-sistema",
|
|
96
|
+
"habilidades/java-experto",
|
|
97
|
+
"habilidades/java-patrones",
|
|
98
|
+
"habilidades/java-testing",
|
|
99
|
+
"habilidades/kotlin-compose",
|
|
100
|
+
"habilidades/kotlin-experto",
|
|
101
|
+
"habilidades/kotlin-testing",
|
|
102
|
+
"habilidades/kubernetes-orquestacion",
|
|
103
|
+
"habilidades/langchain-langraph",
|
|
104
|
+
"habilidades/legacy-code-rescue",
|
|
105
|
+
"habilidades/likec4-experto",
|
|
106
|
+
"habilidades/manejo-errores",
|
|
107
|
+
"habilidades/mapear-codebase",
|
|
108
|
+
"habilidades/memoria-busqueda",
|
|
109
|
+
"habilidades/meta-skills-estandar",
|
|
110
|
+
"habilidades/microservicios",
|
|
111
|
+
"habilidades/mobile-flutter",
|
|
112
|
+
"habilidades/mobile-react-native",
|
|
113
|
+
"habilidades/mongodb-experto",
|
|
114
|
+
"habilidades/monitoring-alertas",
|
|
115
|
+
"habilidades/nemesis-evaluacion-json",
|
|
116
|
+
"habilidades/nemesis-redistribuir",
|
|
117
|
+
"habilidades/nestjs-experto",
|
|
118
|
+
"habilidades/nextjs-experto",
|
|
119
|
+
"habilidades/nextjs-patrones",
|
|
120
|
+
"habilidades/nextjs-testing",
|
|
121
|
+
"habilidades/node-experto",
|
|
122
|
+
"habilidades/notificaciones-multicanal",
|
|
123
|
+
"habilidades/nuevo-proyecto",
|
|
124
|
+
"habilidades/orquestacion-async",
|
|
125
|
+
"habilidades/paid-media-tracking",
|
|
126
|
+
"habilidades/patrones-python",
|
|
127
|
+
"habilidades/perfil-usuario",
|
|
128
|
+
"habilidades/performance-baseline",
|
|
129
|
+
"habilidades/php-experto",
|
|
130
|
+
"habilidades/php-patrones",
|
|
131
|
+
"habilidades/php-testing",
|
|
132
|
+
"habilidades/planear-fase",
|
|
133
|
+
"habilidades/postgresql-experto",
|
|
134
|
+
"habilidades/prevencion-racionalizacion",
|
|
135
|
+
"habilidades/prevencion-sobreingenieria",
|
|
136
|
+
"habilidades/privacy-memoria",
|
|
137
|
+
"habilidades/proceso-autoverificacion-evidencias",
|
|
138
|
+
"habilidades/proceso-confianza-pre-implementacion",
|
|
139
|
+
"habilidades/proceso-ddia-fundamentos",
|
|
140
|
+
"habilidades/proceso-ddia-streaming",
|
|
141
|
+
"habilidades/proceso-discovery-machote",
|
|
142
|
+
"habilidades/proceso-intent-engineering",
|
|
143
|
+
"habilidades/proceso-modular-split",
|
|
144
|
+
"habilidades/prompt-engineering",
|
|
145
|
+
"habilidades/protocolo-revision-swl",
|
|
146
|
+
"habilidades/rag-arquitectura",
|
|
147
|
+
"habilidades/rails-experto",
|
|
148
|
+
"habilidades/react-experto",
|
|
149
|
+
"habilidades/react-optimizacion",
|
|
150
|
+
"habilidades/redis-experto",
|
|
151
|
+
"habilidades/reducir-entropia",
|
|
152
|
+
"habilidades/release-semver",
|
|
153
|
+
"habilidades/rust-experto",
|
|
154
|
+
"habilidades/rust-patrones",
|
|
155
|
+
"habilidades/rust-testing",
|
|
156
|
+
"habilidades/seguridad-skills-ia",
|
|
157
|
+
"habilidades/sql-optimizacion",
|
|
158
|
+
"habilidades/sre-patrones",
|
|
159
|
+
"habilidades/state-inconsistency-auditor-swl",
|
|
160
|
+
"habilidades/stripe-pagos",
|
|
161
|
+
"habilidades/structured-outputs",
|
|
162
|
+
"habilidades/swift-experto",
|
|
163
|
+
"habilidades/swift-patrones",
|
|
164
|
+
"habilidades/swift-testing",
|
|
165
|
+
"habilidades/swl-claudemd",
|
|
166
|
+
"habilidades/swl-dashboard",
|
|
167
|
+
"habilidades/swl-markitdown",
|
|
168
|
+
"habilidades/swl-revisar-impacto",
|
|
169
|
+
"habilidades/tailwind-experto",
|
|
170
|
+
"habilidades/tdd-workflow",
|
|
171
|
+
"habilidades/terraform-experto",
|
|
172
|
+
"habilidades/testing-python",
|
|
173
|
+
"habilidades/threat-model-lite",
|
|
174
|
+
"habilidades/tracing-processor",
|
|
175
|
+
"habilidades/tracking-measurement",
|
|
176
|
+
"habilidades/typescript-avanzado",
|
|
177
|
+
"habilidades/typescript-diagnosticos",
|
|
178
|
+
"habilidades/ux-diseno",
|
|
179
|
+
"habilidades/validacion-ci-sistema",
|
|
180
|
+
"habilidades/verificacion-evidencia",
|
|
181
|
+
"habilidades/verificar-trabajo",
|
|
182
|
+
"habilidades/web-fetcher-routing",
|
|
183
|
+
"habilidades/wiki-conocimiento",
|
|
184
|
+
"habilidades/wireframes-flujos",
|
|
185
|
+
"habilidades/workflow-claude-code"
|
|
186
|
+
],
|
|
187
|
+
"agents": [
|
|
188
|
+
"agentes/accesibilidad-wcag-swl.md",
|
|
189
|
+
"agentes/arquitecto-swl.md",
|
|
190
|
+
"agentes/auto-evolucion-swl.md",
|
|
191
|
+
"agentes/backend-api-swl.md",
|
|
192
|
+
"agentes/backend-csharp-swl.md",
|
|
193
|
+
"agentes/backend-go-swl.md",
|
|
194
|
+
"agentes/backend-java-swl.md",
|
|
195
|
+
"agentes/backend-node-swl.md",
|
|
196
|
+
"agentes/backend-python-swl.md",
|
|
197
|
+
"agentes/backend-rust-swl.md",
|
|
198
|
+
"agentes/backend-workers-swl.md",
|
|
199
|
+
"agentes/cloud-infra-swl.md",
|
|
200
|
+
"agentes/consolidador-swl.md",
|
|
201
|
+
"agentes/datos-swl.md",
|
|
202
|
+
"agentes/depurador-swl.md",
|
|
203
|
+
"agentes/devops-ci-swl.md",
|
|
204
|
+
"agentes/disenador-ui-swl.md",
|
|
205
|
+
"agentes/documentador-swl.md",
|
|
206
|
+
"agentes/frontend-angular-swl.md",
|
|
207
|
+
"agentes/frontend-css-swl.md",
|
|
208
|
+
"agentes/frontend-react-swl.md",
|
|
209
|
+
"agentes/frontend-swl.md",
|
|
210
|
+
"agentes/frontend-tailwind-swl.md",
|
|
211
|
+
"agentes/gh-fix-ci-swl.md",
|
|
212
|
+
"agentes/implementador-swl.md",
|
|
213
|
+
"agentes/investigador-swl.md",
|
|
214
|
+
"agentes/investigador-ux-swl.md",
|
|
215
|
+
"agentes/llm-apps-swl.md",
|
|
216
|
+
"agentes/migrador-swl.md",
|
|
217
|
+
"agentes/mobile-android-swl.md",
|
|
218
|
+
"agentes/mobile-cross-swl.md",
|
|
219
|
+
"agentes/mobile-ios-swl.md",
|
|
220
|
+
"agentes/mobile-testing-swl.md",
|
|
221
|
+
"agentes/nemesis-auditor-swl.md",
|
|
222
|
+
"agentes/notificador-swl.md",
|
|
223
|
+
"agentes/observabilidad-swl.md",
|
|
224
|
+
"agentes/orquestador-swl.md",
|
|
225
|
+
"agentes/pagos-swl.md",
|
|
226
|
+
"agentes/perfilador-usuario-swl.md",
|
|
227
|
+
"agentes/planificador-swl.md",
|
|
228
|
+
"agentes/producto-prd-swl.md",
|
|
229
|
+
"agentes/red-team-swl.md",
|
|
230
|
+
"agentes/release-manager-swl.md",
|
|
231
|
+
"agentes/rendimiento-swl.md",
|
|
232
|
+
"agentes/resolutor-build-swl.md",
|
|
233
|
+
"agentes/revisor-angular-swl.md",
|
|
234
|
+
"agentes/revisor-codigo-swl.md",
|
|
235
|
+
"agentes/revisor-csharp-swl.md",
|
|
236
|
+
"agentes/revisor-go-swl.md",
|
|
237
|
+
"agentes/revisor-java-swl.md",
|
|
238
|
+
"agentes/revisor-kotlin-swl.md",
|
|
239
|
+
"agentes/revisor-nextjs-swl.md",
|
|
240
|
+
"agentes/revisor-php-swl.md",
|
|
241
|
+
"agentes/revisor-react-swl.md",
|
|
242
|
+
"agentes/revisor-rust-swl.md",
|
|
243
|
+
"agentes/revisor-seguridad-swl.md",
|
|
244
|
+
"agentes/revisor-swift-swl.md",
|
|
245
|
+
"agentes/revisor-typescript-swl.md",
|
|
246
|
+
"agentes/sre-swl.md",
|
|
247
|
+
"agentes/tdd-qa-swl.md",
|
|
248
|
+
"agentes/ux-disenador-swl.md"
|
|
249
|
+
],
|
|
250
|
+
"hooks": {
|
|
251
|
+
"PreToolUse": [
|
|
252
|
+
{
|
|
253
|
+
"matcher": "Write|Edit",
|
|
254
|
+
"type": "command",
|
|
255
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/escaneo-secretos.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"matcher": "Write|Edit",
|
|
259
|
+
"type": "command",
|
|
260
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/proteccion-rutas.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"matcher": "Bash",
|
|
264
|
+
"type": "command",
|
|
265
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/calidad-pre-commit.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"type": "command",
|
|
269
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/risk-scoring.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"matcher": "Bash",
|
|
273
|
+
"type": "command",
|
|
274
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/calidad-typescript.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"matcher": "Glob|Grep|Read",
|
|
278
|
+
"type": "command",
|
|
279
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/grafo-contexto.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"matcher": "Bash",
|
|
283
|
+
"type": "command",
|
|
284
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/auto-background.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
285
|
+
}
|
|
286
|
+
],
|
|
287
|
+
"PostToolUse": [
|
|
288
|
+
{
|
|
289
|
+
"type": "command",
|
|
290
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/linea-estado.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"type": "command",
|
|
294
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/monitor-contexto.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"matcher": "Bash|Write|Edit",
|
|
298
|
+
"type": "command",
|
|
299
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/extraccion-aprendizajes.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"matcher": "Bash|Write|Edit",
|
|
303
|
+
"type": "command",
|
|
304
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/degradacion-instintos.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"type": "command",
|
|
308
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/tracking-costos.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"type": "command",
|
|
312
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/inyeccion-contexto.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"matcher": "Write|Edit",
|
|
316
|
+
"type": "command",
|
|
317
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/graph-update.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"type": "command",
|
|
321
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/auto-consolidacion.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"matcher": "Agent",
|
|
325
|
+
"type": "command",
|
|
326
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/telemetria-agentes.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"type": "command",
|
|
330
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/audit-trail.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"matcher": "Agent",
|
|
334
|
+
"type": "command",
|
|
335
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/agente-lifecycle.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
336
|
+
}
|
|
337
|
+
],
|
|
338
|
+
"UserPromptSubmit": [
|
|
339
|
+
{
|
|
340
|
+
"type": "command",
|
|
341
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/clasificador-mensajes.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
342
|
+
}
|
|
343
|
+
],
|
|
344
|
+
"Stop": [
|
|
345
|
+
{
|
|
346
|
+
"type": "command",
|
|
347
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/resumen-sesion.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"type": "command",
|
|
351
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/actualizar-perfil-usuario.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"type": "command",
|
|
355
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/metricas-evolucion.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
356
|
+
}
|
|
357
|
+
],
|
|
358
|
+
"SubagentStop": [
|
|
359
|
+
{
|
|
360
|
+
"type": "command",
|
|
361
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/auto-evolucion.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
362
|
+
}
|
|
363
|
+
],
|
|
364
|
+
"PreCompact": [
|
|
365
|
+
{
|
|
366
|
+
"type": "command",
|
|
367
|
+
"command": "PATH=\"/c/Program Files/nodejs:/c/Program Files (x86)/nodejs:$PATH\" node -e \"try{require('./hooks/preservar-estado-pre-compact.js')}catch(e){if(e.code!=='MODULE_NOT_FOUND')throw e}\""
|
|
368
|
+
}
|
|
369
|
+
]
|
|
370
|
+
}
|
|
371
|
+
}
|
package/scripts/doctor.js
CHANGED
|
@@ -61,13 +61,25 @@ async function doctor(opciones = {}) {
|
|
|
61
61
|
if (fs.existsSync(flagPath)) {
|
|
62
62
|
const flag = JSON.parse(fs.readFileSync(flagPath, 'utf8'));
|
|
63
63
|
const horas = ((Date.now() - flag.timestamp) / 3600000).toFixed(1);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
console.log(formatearPaso(
|
|
64
|
+
// FIX v1.6.7: distinguir flag escrito por el instalador (postInstall:
|
|
65
|
+
// true) de flag escrito por el hook check-update.js durante operación
|
|
66
|
+
// normal. El postInstall flag es "fresh" y NO indica que el hook haya
|
|
67
|
+
// corrido — solo que la instalación dejó el throttle limpio.
|
|
68
|
+
if (flag.postInstall) {
|
|
69
|
+
console.log(formatearPaso(
|
|
70
|
+
'Hook check-update',
|
|
71
|
+
`flag post-install fresco (local=${flag.local}, hace ${horas}h) — se regenerará en el primer PostToolUse del hook`
|
|
72
|
+
));
|
|
70
73
|
ok++;
|
|
74
|
+
} else {
|
|
75
|
+
const detalle = `local=${flag.local}, remota=${flag.remota || '?'}, hace ${horas}h`;
|
|
76
|
+
if (flag.hayNueva) {
|
|
77
|
+
console.log(formatearAdvertencia('Hook check-update', `${detalle} — hay versión nueva pendiente`));
|
|
78
|
+
advertencias++;
|
|
79
|
+
} else {
|
|
80
|
+
console.log(formatearPaso('Hook check-update', detalle));
|
|
81
|
+
ok++;
|
|
82
|
+
}
|
|
71
83
|
}
|
|
72
84
|
} else {
|
|
73
85
|
console.log(formatearAdvertencia('Hook check-update', 'Sin flag de throttle — el hook nunca se ejecutó en este equipo'));
|
package/scripts/instalador.js
CHANGED
|
@@ -42,6 +42,26 @@ const { actualizarGitignore, entradasParaRuntime, limpiarTracked, leerManifest,
|
|
|
42
42
|
const RAIZ_PKG = path.resolve(__dirname, '..');
|
|
43
43
|
const VERSION = require('../package.json').version;
|
|
44
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Devuelve un nombre legible para mostrar al usuario en la lista de
|
|
47
|
+
* componentes evolucionados. Cuando el archivo se llama "SKILL.md" (caso
|
|
48
|
+
* canónico de habilidades), usa el nombre del directorio padre para que
|
|
49
|
+
* el output muestre `tdd-workflow/SKILL.md` en lugar de `SKILL.md` repetido
|
|
50
|
+
* N veces sin identificación posible.
|
|
51
|
+
*
|
|
52
|
+
* FIX v1.6.6 — antes el output mostraba 49 `SKILL.md` indistinguibles.
|
|
53
|
+
*
|
|
54
|
+
* @param {string} rutaAbs - Ruta absoluta del archivo evolucionado.
|
|
55
|
+
* @returns {string}
|
|
56
|
+
*/
|
|
57
|
+
function nombreLegibleEvolucion(rutaAbs) {
|
|
58
|
+
const base = path.basename(rutaAbs);
|
|
59
|
+
if (base === 'SKILL.md') {
|
|
60
|
+
return path.basename(path.dirname(rutaAbs)) + '/SKILL.md';
|
|
61
|
+
}
|
|
62
|
+
return base;
|
|
63
|
+
}
|
|
64
|
+
|
|
45
65
|
/**
|
|
46
66
|
* Contrato adicional: `opciones.onProgress(evento)`
|
|
47
67
|
*
|
|
@@ -201,6 +221,18 @@ async function install(opciones) {
|
|
|
201
221
|
stackDetectado = detectarStack(process.cwd());
|
|
202
222
|
}
|
|
203
223
|
|
|
224
|
+
// FIX v1.6.6: si el usuario pasa --all-langs pero el perfil actual no incluye
|
|
225
|
+
// reglas/lenguajes/, el flag se ignora silenciosamente. Antes la única pista
|
|
226
|
+
// era el conteo final de archivos. Ahora emitimos warning explícito.
|
|
227
|
+
if (allLangs && !tieneReglasLenguaje) {
|
|
228
|
+
console.log(
|
|
229
|
+
'\n[stack] Aviso: --all-langs ignorado — el perfil actual (' +
|
|
230
|
+
(resolucion.perfil || 'core') +
|
|
231
|
+
') no incluye reglas de lenguajes. ' +
|
|
232
|
+
'Usa --perfil completo o --perfil polyglot para activar las reglas por lenguaje.'
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
|
|
204
236
|
if (tieneReglasLenguaje) {
|
|
205
237
|
if (allLangs) {
|
|
206
238
|
console.log('\n[stack] --all-langs activado: se instalan reglas de todos los lenguajes.');
|
|
@@ -454,9 +486,28 @@ async function install(opciones) {
|
|
|
454
486
|
if (evolved.length > 0) {
|
|
455
487
|
console.log(`[evolución] ${evolved.length} componente(s) evolucionado(s) detectado(s):`);
|
|
456
488
|
for (const e of evolved) {
|
|
457
|
-
console.log(` ★ ${
|
|
489
|
+
console.log(` ★ ${nombreLegibleEvolucion(e.path)} (por ${e.evolvedBy || 'auto-evolución'}, desde v${e.evolvedFrom || '?'})`);
|
|
458
490
|
}
|
|
459
491
|
console.log('');
|
|
492
|
+
|
|
493
|
+
// FIX v1.6.6: avisar al usuario cuando el target copia habilidades como
|
|
494
|
+
// directorio completo (Cursor, Codex). Ese path no pasa por
|
|
495
|
+
// decideUpdateStrategy a nivel de SKILL.md, así que las evoluciones se
|
|
496
|
+
// sobreescriben silenciosamente. Cierre completo del gap = DT-EVOL-DIR
|
|
497
|
+
// documentado en .planning/DEUDA-TECNICA.md.
|
|
498
|
+
const targetCopiaDirectorios = ['cursor', 'codex'].includes(target);
|
|
499
|
+
const tieneSkillEvolucionado = evolved.some((e) => path.basename(e.path) === 'SKILL.md');
|
|
500
|
+
if (targetCopiaDirectorios && tieneSkillEvolucionado) {
|
|
501
|
+
console.log(
|
|
502
|
+
` ⚠ Aviso: en target "${target}" las habilidades se copian como directorio. Las ` +
|
|
503
|
+
`evoluciones de SKILL.md serán sobreescritas. Backup de seguridad creado en ` +
|
|
504
|
+
`.planning/backups/v${versionAnterior || 'previa'}/.`
|
|
505
|
+
);
|
|
506
|
+
console.log(
|
|
507
|
+
' (Ver DT-EVOL-DIR en .planning/DEUDA-TECNICA.md para el plan de cierre.)'
|
|
508
|
+
);
|
|
509
|
+
console.log('');
|
|
510
|
+
}
|
|
460
511
|
}
|
|
461
512
|
}
|
|
462
513
|
|
|
@@ -741,10 +792,14 @@ async function install(opciones) {
|
|
|
741
792
|
console.log(' ~ Notificaciones Telegram: omitido en modo no-interactivo (usar /swl:notificaciones init para activarlo después).');
|
|
742
793
|
} else {
|
|
743
794
|
// TTY → flujo interactivo
|
|
795
|
+
// FIX v1.6.6: si el install corre con --force, pasar asumirReusar
|
|
796
|
+
// para que el prompt "¿Reusar credenciales?" se salte automáticamente.
|
|
797
|
+
// Antes el flujo multi-target generaba un prompt por cada target.
|
|
744
798
|
const resInteractivo = await notif.init({
|
|
745
|
-
esTty:
|
|
746
|
-
hooksDir:
|
|
747
|
-
dryRun:
|
|
799
|
+
esTty: true,
|
|
800
|
+
hooksDir: rutas.hooks || null,
|
|
801
|
+
dryRun: dryRun,
|
|
802
|
+
asumirReusar: force === true,
|
|
748
803
|
});
|
|
749
804
|
if (resInteractivo.resultado === 'completado') {
|
|
750
805
|
console.log(' + Notificaciones Telegram configuradas.');
|
|
@@ -831,6 +886,26 @@ async function install(opciones) {
|
|
|
831
886
|
}
|
|
832
887
|
}
|
|
833
888
|
|
|
889
|
+
// FIX v1.6.7 (refina v1.6.6): escribir un flag de throttle "post-install
|
|
890
|
+
// fresh" con la versión recién instalada en lugar de borrarlo. El v1.6.6
|
|
891
|
+
// borraba el flag — eso evitaba el mensaje stale "local=X, remota=Y, hace
|
|
892
|
+
// 2.8h" pero el doctor reportaba luego "el hook nunca se ejecutó" porque
|
|
893
|
+
// la ausencia del flag se interpretaba como "primera vez". Ahora dejamos
|
|
894
|
+
// un flag explícitamente marcado postInstall: true para que el doctor
|
|
895
|
+
// distinga "post-install reciente" vs "hook nunca corrió".
|
|
896
|
+
try {
|
|
897
|
+
const os = require('os');
|
|
898
|
+
const flagPath = process.env.SWL_UPDATE_FLAG_PATH || path.join(os.tmpdir(), 'swl-ses-update-check.json');
|
|
899
|
+
const flagFresh = {
|
|
900
|
+
local: VERSION,
|
|
901
|
+
remota: VERSION,
|
|
902
|
+
hayNueva: false,
|
|
903
|
+
timestamp: Date.now(),
|
|
904
|
+
postInstall: true,
|
|
905
|
+
};
|
|
906
|
+
fs.writeFileSync(flagPath, JSON.stringify(flagFresh, null, 2), 'utf8');
|
|
907
|
+
} catch { /* nunca bloquear install por esto */ }
|
|
908
|
+
|
|
834
909
|
console.log('\nSiguiente paso:');
|
|
835
910
|
console.log(' npx @saulwade/swl-ses@latest doctor');
|
|
836
911
|
console.log('');
|
|
@@ -446,6 +446,11 @@ async function init(opciones = {}) {
|
|
|
446
446
|
sobreescribir: sobreescribir = false,
|
|
447
447
|
dryRun: dryRun = false,
|
|
448
448
|
hooksDir: hooksDir = null,
|
|
449
|
+
// FIX v1.6.6: si el caller pasa `asumirReusar: true` (típicamente cuando
|
|
450
|
+
// el install corre con --force), omitir el prompt interactivo "¿Reusar
|
|
451
|
+
// las credenciales existentes?" y asumir sí. Evita el cuelgue en CI y
|
|
452
|
+
// el prompt redundante en multi-target install (3 targets = 3 prompts).
|
|
453
|
+
asumirReusar: asumirReusar = false,
|
|
449
454
|
// Overrides para tests — permiten inyectar directorios temporales
|
|
450
455
|
_hooksOrigenOverride: _hooksOrigenOverride = null,
|
|
451
456
|
_hooksGlobalDirOverride: _hooksGlobalDirOverride = null,
|
|
@@ -483,6 +488,15 @@ async function init(opciones = {}) {
|
|
|
483
488
|
if (!modoHeadless && esTty) {
|
|
484
489
|
// Detectar .env preexistente
|
|
485
490
|
if (fs.existsSync(envPath) && !sobreescribir) {
|
|
491
|
+
// FIX v1.6.6: si el caller pasó asumirReusar=true (e.g. install --force),
|
|
492
|
+
// saltar el prompt y reusar directamente. Evita cuelgue en CI y prompt
|
|
493
|
+
// redundante en multi-target install.
|
|
494
|
+
if (asumirReusar) {
|
|
495
|
+
console.log('');
|
|
496
|
+
console.log(' [notificaciones] Reusando credenciales existentes en ~/.claude/notifications/.env (--force).');
|
|
497
|
+
return _soloMergeSettings(_hooksGlobalDirOverride, dryRun, _settingsPathOverride);
|
|
498
|
+
}
|
|
499
|
+
|
|
486
500
|
console.log('');
|
|
487
501
|
console.log(' [notificaciones] Ya existe ~/.claude/notifications/.env con credenciales.');
|
|
488
502
|
const rl2 = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
@@ -343,6 +343,10 @@ class TransformadorCodex extends TransformadorBase {
|
|
|
343
343
|
SWL_MCP_BASE_DIR: process.cwd(),
|
|
344
344
|
},
|
|
345
345
|
});
|
|
346
|
+
// FIX v1.6.6: confirmar al usuario que config.toml se actualizó. Antes
|
|
347
|
+
// el efecto de --with-mcp era invisible — sin lanzar Codex era imposible
|
|
348
|
+
// saber si el registro había ocurrido.
|
|
349
|
+
console.log(` + MCP server swl-memory registrado en ${configToml}`);
|
|
346
350
|
} catch (err) {
|
|
347
351
|
// No bloquear instalación si el registro del MCP falla — solo loggear
|
|
348
352
|
// El usuario verá el error y puede registrar manualmente con `codex mcp add`.
|
|
@@ -353,6 +353,11 @@ class TransformadorCursor extends TransformadorBase {
|
|
|
353
353
|
};
|
|
354
354
|
|
|
355
355
|
atomicWriteSync(rutaMcp, JSON.stringify(existente, null, 2) + '\n', 'utf8', { mode: 0o600 });
|
|
356
|
+
|
|
357
|
+
// FIX v1.6.6: confirmar al usuario que mcp.json se escribió. Antes el
|
|
358
|
+
// efecto de --with-mcp era invisible — sin abrir Cursor era imposible
|
|
359
|
+
// saber si el registro había ocurrido.
|
|
360
|
+
console.log(` + MCP server swl-memory registrado en ${rutaMcp}`);
|
|
356
361
|
}
|
|
357
362
|
}
|
|
358
363
|
|