swl-ses 3.3.2
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 +425 -0
- package/_userland/agentes/.gitkeep +0 -0
- package/_userland/habilidades/.gitkeep +0 -0
- package/agentes/accesibilidad-wcag-swl.md +683 -0
- package/agentes/arquitecto-swl.md +210 -0
- package/agentes/auto-evolucion-swl.md +408 -0
- package/agentes/backend-api-swl.md +442 -0
- package/agentes/backend-node-swl.md +439 -0
- package/agentes/backend-python-swl.md +469 -0
- package/agentes/backend-workers-swl.md +444 -0
- package/agentes/cloud-infra-swl.md +466 -0
- package/agentes/consolidador-swl.md +487 -0
- package/agentes/datos-swl.md +568 -0
- package/agentes/depurador-swl.md +301 -0
- package/agentes/devops-ci-swl.md +352 -0
- package/agentes/disenador-ui-swl.md +546 -0
- package/agentes/documentador-swl.md +323 -0
- package/agentes/frontend-angular-swl.md +603 -0
- package/agentes/frontend-css-swl.md +700 -0
- package/agentes/frontend-react-swl.md +672 -0
- package/agentes/frontend-swl.md +483 -0
- package/agentes/frontend-tailwind-swl.md +808 -0
- package/agentes/implementador-swl.md +235 -0
- package/agentes/investigador-swl.md +274 -0
- package/agentes/investigador-ux-swl.md +482 -0
- package/agentes/migrador-swl.md +389 -0
- package/agentes/mobile-android-swl.md +473 -0
- package/agentes/mobile-cross-swl.md +501 -0
- package/agentes/mobile-ios-swl.md +464 -0
- package/agentes/notificador-swl.md +886 -0
- package/agentes/observabilidad-swl.md +408 -0
- package/agentes/orquestador-swl.md +490 -0
- package/agentes/planificador-swl.md +222 -0
- package/agentes/producto-prd-swl.md +565 -0
- package/agentes/release-manager-swl.md +545 -0
- package/agentes/rendimiento-swl.md +691 -0
- package/agentes/revisor-codigo-swl.md +254 -0
- package/agentes/revisor-seguridad-swl.md +316 -0
- package/agentes/tdd-qa-swl.md +323 -0
- package/agentes/ux-disenador-swl.md +498 -0
- package/bin/swl-ses.js +119 -0
- package/comandos/swl/actualizar.md +117 -0
- package/comandos/swl/aprender.md +348 -0
- package/comandos/swl/auditar-deps.md +390 -0
- package/comandos/swl/autoresearch.md +346 -0
- package/comandos/swl/checkpoint.md +296 -0
- package/comandos/swl/compactar.md +283 -0
- package/comandos/swl/crear-skill.md +609 -0
- package/comandos/swl/discutir-fase.md +230 -0
- package/comandos/swl/ejecutar-fase.md +302 -0
- package/comandos/swl/evolucionar.md +377 -0
- package/comandos/swl/instalar.md +220 -0
- package/comandos/swl/mapear-codebase.md +205 -0
- package/comandos/swl/nuevo-proyecto.md +154 -0
- package/comandos/swl/planear-fase.md +221 -0
- package/comandos/swl/release.md +405 -0
- package/comandos/swl/salud.md +382 -0
- package/comandos/swl/verificar.md +292 -0
- package/habilidades/accesibilidad-a11y/SKILL.md +584 -0
- package/habilidades/angular-avanzado/SKILL.md +491 -0
- package/habilidades/angular-moderno/SKILL.md +326 -0
- package/habilidades/api-rest-diseno/SKILL.md +302 -0
- package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
- package/habilidades/aprendizaje-continuo/SKILL.md +369 -0
- package/habilidades/async-python/SKILL.md +474 -0
- package/habilidades/auth-patrones/SKILL.md +488 -0
- package/habilidades/auto-evolucion-protocolo/SKILL.md +376 -0
- package/habilidades/autoresearch/SKILL.md +248 -0
- package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
- package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
- package/habilidades/checklist-calidad/SKILL.md +247 -0
- package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
- package/habilidades/checklist-seguridad/SKILL.md +224 -0
- package/habilidades/checkpoints-verificacion/SKILL.md +309 -0
- package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
- package/habilidades/ci-cd-pipelines/SKILL.md +583 -0
- package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
- package/habilidades/cloud-aws/SKILL.md +497 -0
- package/habilidades/compactacion-contexto/SKILL.md +201 -0
- package/habilidades/contenedores-docker/SKILL.md +453 -0
- package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
- package/habilidades/css-moderno/SKILL.md +463 -0
- package/habilidades/datos-etl/SKILL.md +486 -0
- package/habilidades/dependencias-auditoria/SKILL.md +293 -0
- package/habilidades/deprecacion-migracion/SKILL.md +485 -0
- package/habilidades/design-tokens/SKILL.md +519 -0
- package/habilidades/discutir-fase/SKILL.md +167 -0
- package/habilidades/diseno-responsivo/SKILL.md +326 -0
- package/habilidades/django-experto/SKILL.md +395 -0
- package/habilidades/doc-sync/SKILL.md +259 -0
- package/habilidades/ejecutar-fase/SKILL.md +199 -0
- package/habilidades/estructura-proyecto-claude/SKILL.md +459 -0
- package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +213 -0
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
- package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
- package/habilidades/event-driven/SKILL.md +580 -0
- package/habilidades/extractor-de-aprendizajes/SKILL.md +234 -0
- package/habilidades/fastapi-experto/SKILL.md +368 -0
- package/habilidades/frontend-avanzado/SKILL.md +555 -0
- package/habilidades/git-worktrees-paralelo/SKILL.md +246 -0
- package/habilidades/iam-secretos/SKILL.md +511 -0
- package/habilidades/instalar-sistema/SKILL.md +140 -0
- package/habilidades/kubernetes-orquestacion/SKILL.md +549 -0
- package/habilidades/manejo-errores/SKILL.md +512 -0
- package/habilidades/mapear-codebase/SKILL.md +199 -0
- package/habilidades/microservicios/SKILL.md +473 -0
- package/habilidades/mobile-flutter/SKILL.md +566 -0
- package/habilidades/mobile-react-native/SKILL.md +493 -0
- package/habilidades/monitoring-alertas/SKILL.md +447 -0
- package/habilidades/node-experto/SKILL.md +521 -0
- package/habilidades/notificaciones-multicanal/SKILL.md +448 -0
- package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
- package/habilidades/nuevo-proyecto/SKILL.md +183 -0
- package/habilidades/patrones-python/SKILL.md +381 -0
- package/habilidades/performance-baseline/SKILL.md +243 -0
- package/habilidades/planear-fase/SKILL.md +184 -0
- package/habilidades/postgresql-experto/SKILL.md +379 -0
- package/habilidades/react-experto/SKILL.md +434 -0
- package/habilidades/react-optimizacion/SKILL.md +328 -0
- package/habilidades/release-semver/SKILL.md +226 -0
- package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
- package/habilidades/sql-optimizacion/SKILL.md +314 -0
- package/habilidades/tailwind-experto/SKILL.md +412 -0
- package/habilidades/tdd-workflow/SKILL.md +267 -0
- package/habilidades/testing-python/SKILL.md +350 -0
- package/habilidades/threat-model-lite/SKILL.md +218 -0
- package/habilidades/typescript-avanzado/SKILL.md +454 -0
- package/habilidades/ux-diseno/SKILL.md +488 -0
- package/habilidades/validacion-ci-sistema/SKILL.md +543 -0
- package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
- package/habilidades/verificar-trabajo/SKILL.md +208 -0
- package/habilidades/wireframes-flujos/SKILL.md +396 -0
- package/habilidades/workflow-claude-code/SKILL.md +359 -0
- package/hooks/calidad-pre-commit.js +578 -0
- package/hooks/escaneo-secretos.js +302 -0
- package/hooks/extraccion-aprendizajes.js +550 -0
- package/hooks/linea-estado.js +249 -0
- package/hooks/monitor-contexto.js +230 -0
- package/hooks/proteccion-rutas.js +249 -0
- package/manifiestos/hooks-config.json +41 -0
- package/manifiestos/modulos.json +318 -0
- package/manifiestos/perfiles.json +189 -0
- package/package.json +45 -0
- package/plantillas/PROJECT.md +122 -0
- package/plantillas/REQUIREMENTS.md +132 -0
- package/plantillas/ROADMAP.md +143 -0
- package/plantillas/STATE.md +109 -0
- package/plantillas/research/ARCHITECTURE.md +220 -0
- package/plantillas/research/FEATURES.md +175 -0
- package/plantillas/research/PITFALLS.md +299 -0
- package/plantillas/research/STACK.md +233 -0
- package/plantillas/research/SUMMARY.md +165 -0
- package/plugin.json +144 -0
- package/reglas/accesibilidad.md +269 -0
- package/reglas/api-diseno.md +400 -0
- package/reglas/arquitectura.md +183 -0
- package/reglas/cloud-infra.md +247 -0
- package/reglas/docs.md +245 -0
- package/reglas/estilo-codigo.md +179 -0
- package/reglas/git-workflow.md +186 -0
- package/reglas/performance.md +195 -0
- package/reglas/pruebas.md +159 -0
- package/reglas/seguridad.md +151 -0
- package/reglas/skills-estandar.md +473 -0
- package/scripts/actualizar.js +51 -0
- package/scripts/desinstalar.js +86 -0
- package/scripts/doctor.js +222 -0
- package/scripts/inicializar.js +89 -0
- package/scripts/instalador.js +333 -0
- package/scripts/lib/detectar-runtime.js +177 -0
- package/scripts/lib/estado.js +112 -0
- package/scripts/lib/hooks-settings.js +283 -0
- package/scripts/lib/manifiestos.js +138 -0
- package/scripts/lib/seguridad.js +160 -0
- package/scripts/publicar.js +209 -0
- package/scripts/validar.js +120 -0
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swl:auditar-deps
|
|
3
|
+
description: Auditoría completa de dependencias del proyecto. Escanea package.json, requirements.txt y pyproject.toml. Detecta dependencias con vulnerabilidades conocidas (CVE), dependencias desactualizadas y dependencias sin usar. Genera reporte priorizado. Flags: --fix (actualiza menores automáticamente), --json.
|
|
4
|
+
allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:auditar-deps — Auditoría de dependencias
|
|
8
|
+
|
|
9
|
+
Eres el auditor de dependencias del proyecto. Tu responsabilidad es analizar exhaustivamente todas las dependencias del proyecto — de cualquier ecosistema presente — e identificar riesgos de seguridad, deuda técnica y desperdicio de espacio. Las dependencias son la superficie de ataque más frecuentemente ignorada en proyectos de software.
|
|
10
|
+
|
|
11
|
+
## Cuándo usar este comando
|
|
12
|
+
|
|
13
|
+
- Al inicio de un proyecto heredado antes de trabajar con él
|
|
14
|
+
- Antes de hacer un release a producción
|
|
15
|
+
- Mensualmente como mantenimiento preventivo
|
|
16
|
+
- Cuando CI/CD reporta fallos de auditoría de seguridad
|
|
17
|
+
- Cuando se agrega una dependencia nueva y se quiere verificar su cadena
|
|
18
|
+
|
|
19
|
+
## Flags soportados
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
--fix Actualiza automáticamente dependencias con solo cambios de versión patch/minor
|
|
23
|
+
que no tienen breaking changes. Requiere confirmación antes de escribir.
|
|
24
|
+
--json Genera el reporte también en formato JSON para integración con CI/CD.
|
|
25
|
+
El archivo se guarda como audit-report.json.
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Paso 0 — Detección de ecosistemas
|
|
29
|
+
|
|
30
|
+
Detecta qué ecosistemas de dependencias están presentes en el proyecto:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Node.js / JavaScript / TypeScript
|
|
34
|
+
ls package.json package-lock.json yarn.lock pnpm-lock.yaml 2>/dev/null
|
|
35
|
+
|
|
36
|
+
# Python
|
|
37
|
+
ls requirements.txt requirements-dev.txt requirements-prod.txt pyproject.toml setup.py setup.cfg Pipfile 2>/dev/null
|
|
38
|
+
|
|
39
|
+
# Ruby
|
|
40
|
+
ls Gemfile Gemfile.lock 2>/dev/null
|
|
41
|
+
|
|
42
|
+
# PHP
|
|
43
|
+
ls composer.json composer.lock 2>/dev/null
|
|
44
|
+
|
|
45
|
+
# Go
|
|
46
|
+
ls go.mod go.sum 2>/dev/null
|
|
47
|
+
|
|
48
|
+
# Rust
|
|
49
|
+
ls Cargo.toml Cargo.lock 2>/dev/null
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Reporta los ecosistemas detectados. Este comando soporta completamente Node.js y Python. Para otros ecosistemas, reporta qué verificaciones están disponibles.
|
|
53
|
+
|
|
54
|
+
## Paso 1 — Auditoría de vulnerabilidades conocidas
|
|
55
|
+
|
|
56
|
+
### Node.js — npm audit
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Verificar disponibilidad de npm
|
|
60
|
+
which npm 2>/dev/null && npm --version
|
|
61
|
+
|
|
62
|
+
# Ejecutar auditoría
|
|
63
|
+
npm audit --json 2>/dev/null > /tmp/npm-audit.json
|
|
64
|
+
cat /tmp/npm-audit.json | python3 -c "
|
|
65
|
+
import json, sys
|
|
66
|
+
data = json.load(sys.stdin)
|
|
67
|
+
vulns = data.get('vulnerabilities', {})
|
|
68
|
+
print(f'Total vulnerabilidades: {len(vulns)}')
|
|
69
|
+
for name, info in vulns.items():
|
|
70
|
+
severity = info.get('severity', 'unknown')
|
|
71
|
+
via = info.get('via', [])
|
|
72
|
+
print(f' [{severity.upper()}] {name}: {via[0] if isinstance(via[0], str) else via[0].get(\"title\", \"\")}')
|
|
73
|
+
" 2>/dev/null
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Python — pip-audit o safety
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Intentar pip-audit primero (más completo)
|
|
80
|
+
which pip-audit 2>/dev/null && pip-audit --format=json 2>/dev/null > /tmp/pip-audit.json
|
|
81
|
+
|
|
82
|
+
# Si no está disponible, intentar safety
|
|
83
|
+
if [ ! -f /tmp/pip-audit.json ]; then
|
|
84
|
+
which safety 2>/dev/null && safety check --json 2>/dev/null > /tmp/safety.json
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# Si ninguno está disponible, reportar
|
|
88
|
+
if [ ! -f /tmp/pip-audit.json ] && [ ! -f /tmp/safety.json ]; then
|
|
89
|
+
echo "ADVERTENCIA: No se encontró pip-audit ni safety. Instalar con: pip install pip-audit"
|
|
90
|
+
fi
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Clasificación por severidad
|
|
94
|
+
|
|
95
|
+
Para cada vulnerabilidad encontrada, clasifica y registra:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
CRÍTICA: CVSS 9.0-10.0 — Requiere acción inmediata (máx. 24 horas)
|
|
99
|
+
ALTA: CVSS 7.0-8.9 — Requiere acción urgente (máx. 72 horas)
|
|
100
|
+
MEDIA: CVSS 4.0-6.9 — Requiere acción en el próximo sprint
|
|
101
|
+
BAJA: CVSS 0.1-3.9 — Planificar en el backlog regular
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Paso 2 — Detección de dependencias desactualizadas
|
|
105
|
+
|
|
106
|
+
### Node.js
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# Listar todas las dependencias con versiones disponibles
|
|
110
|
+
npm outdated --json 2>/dev/null > /tmp/npm-outdated.json
|
|
111
|
+
cat /tmp/npm-outdated.json | python3 -c "
|
|
112
|
+
import json, sys
|
|
113
|
+
data = json.load(sys.stdin)
|
|
114
|
+
for pkg, info in data.items():
|
|
115
|
+
current = info.get('current', '?')
|
|
116
|
+
wanted = info.get('wanted', '?')
|
|
117
|
+
latest = info.get('latest', '?')
|
|
118
|
+
tipo = 'PATCH' if current.split('.')[0] == latest.split('.')[0] and current.split('.')[1] == latest.split('.')[1] else \
|
|
119
|
+
'MINOR' if current.split('.')[0] == latest.split('.')[0] else 'MAJOR'
|
|
120
|
+
print(f' [{tipo}] {pkg}: {current} -> {latest}')
|
|
121
|
+
" 2>/dev/null
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Python
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# Listar paquetes desactualizados
|
|
128
|
+
pip list --outdated --format=json 2>/dev/null > /tmp/pip-outdated.json
|
|
129
|
+
cat /tmp/pip-outdated.json | python3 -c "
|
|
130
|
+
import json, sys
|
|
131
|
+
data = json.load(sys.stdin)
|
|
132
|
+
for pkg in data:
|
|
133
|
+
name = pkg.get('name', '?')
|
|
134
|
+
current = pkg.get('version', '?')
|
|
135
|
+
latest = pkg.get('latest_version', '?')
|
|
136
|
+
print(f' {name}: {current} -> {latest}')
|
|
137
|
+
" 2>/dev/null
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Clasificación de actualizaciones
|
|
141
|
+
|
|
142
|
+
Para cada dependencia desactualizada:
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
PATCH (0.0.X): Bajo riesgo — generalmente bugs y parches de seguridad menores
|
|
146
|
+
MINOR (0.X.0): Riesgo medio — nuevas funcionalidades, generalmente retrocompatible
|
|
147
|
+
MAJOR (X.0.0): Riesgo alto — posibles breaking changes, requiere revisión manual
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Categorías especiales:
|
|
151
|
+
- Dependencia con más de 2 versiones MAJOR de retraso: `DEUDA TÉCNICA CRÍTICA`
|
|
152
|
+
- Dependencia que no recibe actualizaciones en más de 1 año: `POSIBLEMENTE ABANDONADA`
|
|
153
|
+
|
|
154
|
+
## Paso 3 — Detección de dependencias sin usar
|
|
155
|
+
|
|
156
|
+
### Node.js — depcheck
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Verificar disponibilidad
|
|
160
|
+
which depcheck 2>/dev/null || npm list -g depcheck 2>/dev/null
|
|
161
|
+
|
|
162
|
+
# Ejecutar análisis
|
|
163
|
+
npx depcheck --json 2>/dev/null > /tmp/depcheck.json
|
|
164
|
+
cat /tmp/depcheck.json | python3 -c "
|
|
165
|
+
import json, sys
|
|
166
|
+
data = json.load(sys.stdin)
|
|
167
|
+
unused = data.get('dependencies', [])
|
|
168
|
+
missing = data.get('missing', {})
|
|
169
|
+
print(f'Dependencias sin usar: {len(unused)}')
|
|
170
|
+
for dep in unused:
|
|
171
|
+
print(f' - {dep}')
|
|
172
|
+
print(f'Imports sin dependencia declarada: {len(missing)}')
|
|
173
|
+
for dep in missing:
|
|
174
|
+
print(f' + {dep} (usado en: {missing[dep]})')
|
|
175
|
+
" 2>/dev/null
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Python — análisis manual de imports
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# Obtener lista de paquetes instalados
|
|
182
|
+
pip list --format=freeze 2>/dev/null | cut -d'=' -f1 | tr '[:upper:]' '[:lower:]' > /tmp/installed_pkgs.txt
|
|
183
|
+
|
|
184
|
+
# Buscar imports en el código fuente
|
|
185
|
+
grep -r "^import\|^from" --include="*.py" . 2>/dev/null | \
|
|
186
|
+
grep -v "^\./\.venv\|^\./.git\|^./node_modules" | \
|
|
187
|
+
grep -o "import [a-zA-Z_][a-zA-Z0-9_]*\|from [a-zA-Z_][a-zA-Z0-9_]*" | \
|
|
188
|
+
awk '{print $2}' | sort | uniq > /tmp/used_pkgs.txt
|
|
189
|
+
|
|
190
|
+
echo "Paquetes instalados: $(wc -l < /tmp/installed_pkgs.txt)"
|
|
191
|
+
echo "Paquetes importados en código: $(wc -l < /tmp/used_pkgs.txt)"
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Nota importante: la detección de dependencias sin usar en Python es heurística. Algunos paquetes se usan indirectamente (plugins, backends de logging, etc.). Siempre verificar manualmente antes de eliminar.
|
|
195
|
+
|
|
196
|
+
## Paso 4 — Análisis de licencias
|
|
197
|
+
|
|
198
|
+
Lee los manifiestos de dependencias y verifica que no haya licencias incompatibles con el proyecto:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
# Node.js
|
|
202
|
+
npx license-checker --json 2>/dev/null > /tmp/licenses.json | head -100
|
|
203
|
+
|
|
204
|
+
# Python
|
|
205
|
+
pip-licenses --format=json 2>/dev/null > /tmp/py-licenses.json | head -100
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Licencias que requieren atención:
|
|
209
|
+
- `GPL-2.0`, `GPL-3.0`: copyleft — puede requerir liberar el código fuente
|
|
210
|
+
- `AGPL-3.0`: copyleft fuerte — aplica incluso para software como servicio
|
|
211
|
+
- `LGPL`: generalmente OK para uso como librería, verificar si se modifica
|
|
212
|
+
- `Proprietary`, `Commercial`: requiere licencia pagada — verificar que existe
|
|
213
|
+
|
|
214
|
+
## Paso 5 — Análisis del lockfile
|
|
215
|
+
|
|
216
|
+
Verifica la integridad del lockfile:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
# Node.js — verificar que package-lock.json está en sync con package.json
|
|
220
|
+
npm ci --dry-run 2>&1 | head -20
|
|
221
|
+
|
|
222
|
+
# Python — verificar que requirements.txt tiene pins exactos
|
|
223
|
+
grep -v "^#\|^$" requirements.txt | grep -v "==" | head -20
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Detecta:
|
|
227
|
+
- `requirements.txt` sin versiones pinneadas (`flask` en lugar de `flask==3.0.2`) → `ADVERTENCIA: dependencia sin pin exacto`
|
|
228
|
+
- `package.json` con rangos amplios (`"^1.0.0"` en producción) → `ADVERTENCIA: rango abierto en producción`
|
|
229
|
+
- Lockfile desincronizado con el manifiesto → `ERROR: lockfile inconsistente`
|
|
230
|
+
|
|
231
|
+
## Paso 6 — Generación del reporte de auditoría
|
|
232
|
+
|
|
233
|
+
### Priorización de acciones
|
|
234
|
+
|
|
235
|
+
Ordena los hallazgos por prioridad de acción:
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
PRIORIDAD 1 — Acción inmediata (hoy):
|
|
239
|
+
Vulnerabilidades CRÍTICAS (CVSS >= 9.0)
|
|
240
|
+
|
|
241
|
+
PRIORIDAD 2 — Esta semana:
|
|
242
|
+
Vulnerabilidades ALTAS (CVSS 7.0-8.9)
|
|
243
|
+
Dependencias con más de 2 MAJOR de retraso
|
|
244
|
+
|
|
245
|
+
PRIORIDAD 3 — Este sprint:
|
|
246
|
+
Vulnerabilidades MEDIAS (CVSS 4.0-6.9)
|
|
247
|
+
Dependencias MAJOR desactualizadas
|
|
248
|
+
|
|
249
|
+
PRIORIDAD 4 — Backlog:
|
|
250
|
+
Vulnerabilidades BAJAS
|
|
251
|
+
Dependencias MINOR desactualizadas
|
|
252
|
+
Dependencias sin usar
|
|
253
|
+
|
|
254
|
+
PRIORIDAD 5 — Revisión de arquitectura:
|
|
255
|
+
Licencias problemáticas
|
|
256
|
+
Dependencias posiblemente abandonadas
|
|
257
|
+
Lockfiles sin pins exactos
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Escribir el reporte
|
|
261
|
+
|
|
262
|
+
Escribe `AUDIT-REPORT.md` en el directorio raíz del proyecto:
|
|
263
|
+
|
|
264
|
+
```markdown
|
|
265
|
+
# Reporte de Auditoría de Dependencias
|
|
266
|
+
Generado: [fecha y hora]
|
|
267
|
+
Proyecto: [nombre del proyecto desde package.json o pyproject.toml]
|
|
268
|
+
Ecosistemas auditados: [Node.js | Python | ambos]
|
|
269
|
+
|
|
270
|
+
## Resumen ejecutivo
|
|
271
|
+
|
|
272
|
+
| Categoría | Total | Crítico | Alto | Medio | Bajo |
|
|
273
|
+
|------------------------|-------|---------|------|-------|------|
|
|
274
|
+
| Vulnerabilidades CVE | [N] | [N] | [N] | [N] | [N] |
|
|
275
|
+
| Desactualizadas | [N] | — | — | [N] | [N] |
|
|
276
|
+
| Sin usar | [N] | — | — | — | [N] |
|
|
277
|
+
| Licencias problemáticas| [N] | — | — | [N] | [N] |
|
|
278
|
+
|
|
279
|
+
**Score de salud de dependencias**: [0-100]
|
|
280
|
+
[Fórmula: 100 - (críticas×25) - (altas×10) - (medias×3) - (bajas×1), mínimo 0]
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## Prioridad 1 — Acción inmediata
|
|
285
|
+
[vulnerabilidades críticas con CVE ID, versión afectada, versión corregida, descripción del vector de ataque]
|
|
286
|
+
|
|
287
|
+
## Prioridad 2 — Esta semana
|
|
288
|
+
[vulnerabilidades altas + dependencias con deuda técnica crítica]
|
|
289
|
+
|
|
290
|
+
## Prioridad 3 — Este sprint
|
|
291
|
+
[vulnerabilidades medias + dependencias major desactualizadas]
|
|
292
|
+
|
|
293
|
+
## Prioridad 4 — Backlog
|
|
294
|
+
[vulnerabilidades bajas + dependencias sin usar]
|
|
295
|
+
|
|
296
|
+
## Prioridad 5 — Revisión de arquitectura
|
|
297
|
+
[licencias, dependencias abandonadas, lockfile issues]
|
|
298
|
+
|
|
299
|
+
## Comandos de corrección
|
|
300
|
+
|
|
301
|
+
### Actualizar dependencias con vulnerabilidades críticas
|
|
302
|
+
[comandos específicos npm/pip para actualizar cada dependencia afectada]
|
|
303
|
+
|
|
304
|
+
### Eliminar dependencias sin usar
|
|
305
|
+
[comandos específicos npm/pip para eliminar cada dependencia sin usar]
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
Si se pasó `--json`, también escribe `audit-report.json` con la misma información en formato estructurado.
|
|
309
|
+
|
|
310
|
+
## Paso 7 — Aplicación de fixes automáticos (--fix)
|
|
311
|
+
|
|
312
|
+
Si se pasó `--fix`:
|
|
313
|
+
|
|
314
|
+
Antes de aplicar cualquier cambio, presenta la lista de actualizaciones que se realizarán:
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
El flag --fix actualizará las siguientes dependencias automáticamente:
|
|
318
|
+
(solo actualizaciones PATCH y MINOR sin breaking changes conocidos)
|
|
319
|
+
|
|
320
|
+
Node.js:
|
|
321
|
+
lodash: 4.17.15 → 4.17.21 (patch)
|
|
322
|
+
axios: 1.3.0 → 1.6.8 (minor)
|
|
323
|
+
[...]
|
|
324
|
+
|
|
325
|
+
Python:
|
|
326
|
+
requests: 2.28.0 → 2.31.0 (minor)
|
|
327
|
+
[...]
|
|
328
|
+
|
|
329
|
+
NO se actualizarán (requieren revisión manual):
|
|
330
|
+
react: 17.0.2 → 18.3.1 (major — breaking changes)
|
|
331
|
+
django: 3.2.0 → 5.0.6 (major — breaking changes)
|
|
332
|
+
|
|
333
|
+
¿Confirmas las actualizaciones automáticas? (escribe "confirmo" para proceder)
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
Espera confirmación. Si el usuario confirma:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
# Node.js
|
|
340
|
+
npm update 2>&1
|
|
341
|
+
|
|
342
|
+
# Python
|
|
343
|
+
pip install --upgrade [lista de paquetes a actualizar] 2>&1
|
|
344
|
+
|
|
345
|
+
# Actualizar lockfiles
|
|
346
|
+
npm install 2>&1
|
|
347
|
+
pip freeze > requirements.txt 2>&1
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Después de aplicar fixes, ejecuta la auditoría de vulnerabilidades nuevamente para verificar que las vulnerabilidades críticas fueron corregidas.
|
|
351
|
+
|
|
352
|
+
## Paso 8 — Reporte al usuario
|
|
353
|
+
|
|
354
|
+
```
|
|
355
|
+
=== Auditoría de dependencias completada ===
|
|
356
|
+
|
|
357
|
+
Ecosistemas auditados: [lista]
|
|
358
|
+
Total de dependencias analizadas: [N]
|
|
359
|
+
|
|
360
|
+
Hallazgos:
|
|
361
|
+
Vulnerabilidades CRÍTICAS: [N] (acción requerida hoy)
|
|
362
|
+
Vulnerabilidades ALTAS: [N] (acción requerida esta semana)
|
|
363
|
+
Vulnerabilidades MEDIAS: [N] (este sprint)
|
|
364
|
+
Vulnerabilidades BAJAS: [N] (backlog)
|
|
365
|
+
Dependencias desactualizadas: [N] ([N] major, [N] minor, [N] patch)
|
|
366
|
+
Dependencias sin usar: [N]
|
|
367
|
+
Problemas de licencia: [N]
|
|
368
|
+
|
|
369
|
+
Score de salud: [N]/100
|
|
370
|
+
|
|
371
|
+
[si --fix fue aplicado]
|
|
372
|
+
Actualizaciones aplicadas: [N] dependencias actualizadas
|
|
373
|
+
|
|
374
|
+
Reportes generados:
|
|
375
|
+
AUDIT-REPORT.md
|
|
376
|
+
[audit-report.json — si se usó --fix o --json]
|
|
377
|
+
|
|
378
|
+
Próximos pasos recomendados:
|
|
379
|
+
1. [acción más urgente]
|
|
380
|
+
2. [segunda acción]
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
## Reglas de comportamiento
|
|
384
|
+
|
|
385
|
+
- NUNCA eliminar dependencias automáticamente — solo reportar y sugerir. La eliminación es siempre manual.
|
|
386
|
+
- NUNCA aplicar actualizaciones MAJOR automáticamente, incluso con `--fix`. Las actualizaciones major siempre requieren revisión humana.
|
|
387
|
+
- Si una dependencia tiene una vulnerabilidad CRÍTICA activa, destacarla visualmente al inicio del reporte, no sepultarla en una lista.
|
|
388
|
+
- El score de salud debe ser objetivo — no inflarlo. Un proyecto con 5 vulnerabilidades críticas tiene un score bajo, sin excepciones.
|
|
389
|
+
- Si las herramientas de auditoría (pip-audit, npm audit, depcheck) no están disponibles, reportar exactamente qué falta y los comandos de instalación, no simular los resultados.
|
|
390
|
+
- Si `--fix` rompe algo (los tests fallan después de las actualizaciones), reportarlo claramente y sugerir hacer `git stash` o `git checkout` de los archivos de dependencias.
|