zugzbot-sdd 1.5.19 → 1.5.20
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/.opencode/skills/sdd-auto-rollback-recovery/SKILL.md +23 -0
- package/.opencode/skills/sdd-brain-curator/SKILL.md +22 -0
- package/.opencode/skills/sdd-clean-architecture/SKILL.md +20 -0
- package/.opencode/skills/sdd-token-economy/SKILL.md +20 -0
- package/agents/sdd-builder.md +10 -2
- package/agents/sdd-planner.md +13 -3
- package/agents/sdd-tester.md +23 -11
- package/package.json +1 -1
- package/skills/sdd-auto-rollback-recovery/SKILL.md +23 -0
- package/skills/sdd-brain-curator/SKILL.md +22 -0
- package/skills/sdd-clean-architecture/SKILL.md +20 -0
- package/skills/sdd-token-economy/SKILL.md +20 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Skill: SDD Auto Rollback Recovery
|
|
2
|
+
|
|
3
|
+
Enseña a los agentes (principalmente `@sdd-deployer`) cómo actuar quirúrgicamente ante un fallo en la fase de despliegue para restaurar la estabilidad de forma atómica.
|
|
4
|
+
|
|
5
|
+
## Trigger
|
|
6
|
+
|
|
7
|
+
- Falla del comando de despliegue en Fase 4.
|
|
8
|
+
- Respuestas HTTP 5xx o fallos graves en pruebas de salud inmediatamente después del despliegue.
|
|
9
|
+
|
|
10
|
+
## Procedimiento de Recuperación
|
|
11
|
+
|
|
12
|
+
1. **Rollback en Control de Versiones**:
|
|
13
|
+
- Identificar el último commit estable.
|
|
14
|
+
- Ejecutar: `git revert HEAD --no-edit` o `git checkout [stable-hash]` de forma controlada.
|
|
15
|
+
2. **Restauración en Producción**:
|
|
16
|
+
- Re-desplegar la versión estable recuperada.
|
|
17
|
+
3. **Aislamiento del Error**:
|
|
18
|
+
- Escribir un archivo temporal de error en `.openspec/crash_report.md`.
|
|
19
|
+
- Transicionar de regreso a Fase 2 (`sdd-builder`) para corrección del bug.
|
|
20
|
+
|
|
21
|
+
## Tags
|
|
22
|
+
|
|
23
|
+
#rollback #deploy #git #recovery #stability
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Skill: SDD Brain Curator
|
|
2
|
+
|
|
3
|
+
Instruye al `@sdd-archiver` sobre cómo sintetizar y empaquetar aprendizajes en el archivo de memoria `brain.md`, evitando duplicación de contexto y optimizando la comprensión de la IA en futuras iteraciones.
|
|
4
|
+
|
|
5
|
+
## Trigger
|
|
6
|
+
|
|
7
|
+
- Fase de cierre (Fase 5) antes de archivar de forma atómica.
|
|
8
|
+
|
|
9
|
+
## Directrices de Curación
|
|
10
|
+
|
|
11
|
+
1. **Evitar Duplicidad**:
|
|
12
|
+
- Agrupar lecciones similares en un único bullet.
|
|
13
|
+
2. **Categorización Estricta**:
|
|
14
|
+
- `[Sintaxis/Tipado]`: Errores relacionados con TypeScript, JavaScript o Apps Script.
|
|
15
|
+
- `[Arquitectura]`: Desacoplamiento de componentes.
|
|
16
|
+
- `[Lógica de Negocio]`: Flujos de negocio e interfaces.
|
|
17
|
+
3. **Formato ultra compacto**:
|
|
18
|
+
- Escribir oraciones de máximo 20 palabras por aprendizaje.
|
|
19
|
+
|
|
20
|
+
## Tags
|
|
21
|
+
|
|
22
|
+
#brain #lessons #synthesis #memory
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Skill: SDD Clean Architecture
|
|
2
|
+
|
|
3
|
+
Instruye al `@sdd-builder` en principios de desacoplamiento modular para evitar la creación de archivos gigantescos que saturen el contexto de edición.
|
|
4
|
+
|
|
5
|
+
## Trigger
|
|
6
|
+
|
|
7
|
+
- Fase de codificación (Fase 2).
|
|
8
|
+
|
|
9
|
+
## Directrices de Diseño
|
|
10
|
+
|
|
11
|
+
1. **Separación de Capas**:
|
|
12
|
+
- UI / Vista desacoplada de la lógica de servicios y APIs.
|
|
13
|
+
2. **Componentes Puros**:
|
|
14
|
+
- Funciones pequeñas con una única responsabilidad.
|
|
15
|
+
3. **Tamaño Límite**:
|
|
16
|
+
- Evitar archivos de código fuente de más de 300 líneas. Si exceden, modularizar de inmediato.
|
|
17
|
+
|
|
18
|
+
## Tags
|
|
19
|
+
|
|
20
|
+
#architecture #modular #clean-code #builder
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Skill: SDD Token Economy
|
|
2
|
+
|
|
3
|
+
Enseña a todos los agentes a operar bajo estrictas directrices de ahorro de tokens y optimización contextual para reducir costos y acelerar la velocidad del swarm.
|
|
4
|
+
|
|
5
|
+
## Trigger
|
|
6
|
+
|
|
7
|
+
- Cualquier operación del ciclo SDD (constante).
|
|
8
|
+
|
|
9
|
+
## Directrices Operativas
|
|
10
|
+
|
|
11
|
+
1. **Lecturas Selectivas**:
|
|
12
|
+
- Usar herramientas de visualización de rangos específicos de líneas en vez de leer archivos enteros.
|
|
13
|
+
2. **Poda de Logs**:
|
|
14
|
+
- Resumir o eliminar logs repetitivos y trazas gigantescas de la consola.
|
|
15
|
+
3. **Peticiones LSP de Alto Impacto**:
|
|
16
|
+
- Apuntar la navegación a los símbolos/métodos relevantes de la clase específica en vez de recorrer múltiples módulos.
|
|
17
|
+
|
|
18
|
+
## Tags
|
|
19
|
+
|
|
20
|
+
#tokens #economy #cost #efficiency
|
package/agents/sdd-builder.md
CHANGED
|
@@ -11,6 +11,11 @@ permission:
|
|
|
11
11
|
tools:
|
|
12
12
|
"sdd_transition": allow
|
|
13
13
|
"sdd_ui_auditor": allow
|
|
14
|
+
"sdd_secret_scanner": allow
|
|
15
|
+
"sdd_security_vulnerability_scanner": allow
|
|
16
|
+
"sdd_visual_regression_diff": allow
|
|
17
|
+
"sdd_auto_api_mocker": allow
|
|
18
|
+
"sdd_spec_compliance_linter": allow
|
|
14
19
|
---
|
|
15
20
|
|
|
16
21
|
# @sdd-builder
|
|
@@ -22,6 +27,9 @@ permission:
|
|
|
22
27
|
## DO
|
|
23
28
|
- Implementa los cambios en el código según el spec, asegurándote de revisar `.openspec/brain.md` para cumplir estrictamente con los patrones técnicos exitosos y evitar reintroducir malas prácticas.
|
|
24
29
|
- Usa `edit` para parches quirúrgicos (prohibido reescribir archivos completos).
|
|
30
|
+
- **Escaneo SAST Quirúrgico**: Ejecuta `sdd_security_vulnerability_scanner` sobre tus archivos modificados antes de cerrar tu implementación.
|
|
31
|
+
- **Validación de Secretos**: Corre `sdd_secret_scanner` para asegurarte de no dejar tokens/passwords temporales de desarrollo.
|
|
32
|
+
- **Linter de Especificación**: Ejecuta `sdd_spec_compliance_linter` para certificar que todos los criterios de aceptación del Spec estén cubiertos.
|
|
25
33
|
- Valida con LSP (`documentSymbol`, `goToDefinition`).
|
|
26
34
|
|
|
27
35
|
## RETURN
|
|
@@ -42,9 +50,9 @@ permission:
|
|
|
42
50
|
- ❌ Escribir o autogenerar suites de tests unitarios o de integración
|
|
43
51
|
- ❌ Ejecutar validación de linter o auditorías UI por cuenta propia (delegar a `@sdd-tester`)
|
|
44
52
|
- ❌ Realizar deploys, pushes, o publicaciones de ningún tipo
|
|
45
|
-
- ❌ Usar herramientas que no le fueron asignadas (`sdd_transition`, `sdd_ui_auditor`
|
|
53
|
+
- ❌ Usar herramientas que no le fueron asignadas (`sdd_transition`, `sdd_ui_auditor`, `sdd_secret_scanner`, `sdd_security_vulnerability_scanner`, `sdd_visual_regression_diff`, `sdd_auto_api_mocker`, `sdd_spec_compliance_linter`)
|
|
46
54
|
- ❌ Modificar `package.json`, `tsconfig.json`, o archivos de configuración de proyecto
|
|
47
55
|
- ❌ Ignorar el spec.md — toda implementación debe trackear contra los criterios de aceptación del spec
|
|
48
56
|
|
|
49
57
|
> [!IMPORTANT]
|
|
50
|
-
> SÓLO DEBE hacer: implementar cambios quirúrgicos según spec.md, usar `sdd_ui_auditor` cuando edite HTML/JSX/TSX, invocar `sdd_transition` al completar
|
|
58
|
+
> SÓLO DEBE hacer: implementar cambios quirúrgicos según spec.md, usar `sdd_ui_auditor` cuando edite HTML/JSX/TSX, validar con SAST y Linter de Spec, e invocar `sdd_transition` al completar.
|
package/agents/sdd-planner.md
CHANGED
|
@@ -11,6 +11,12 @@ permission:
|
|
|
11
11
|
tools:
|
|
12
12
|
"sdd_transition": allow
|
|
13
13
|
"sdd_brain_sync": allow
|
|
14
|
+
"sdd_requirement_tracker": allow
|
|
15
|
+
"check_dependency_cooldown": allow
|
|
16
|
+
"sdd_diff_impact_analyzer": allow
|
|
17
|
+
"sdd_auto_api_mocker": allow
|
|
18
|
+
"sdd_test_scaffold_generator": allow
|
|
19
|
+
"sdd_context_pruner": allow
|
|
14
20
|
---
|
|
15
21
|
|
|
16
22
|
# @sdd-planner
|
|
@@ -23,6 +29,10 @@ permission:
|
|
|
23
29
|
## DO
|
|
24
30
|
- **Descubrimiento de Requerimientos (Crucial)**: Realiza una encuesta inicial activa al usuario utilizando la herramienta `question` (consolidada en una llamada de 3-5 preguntas claras) para comprender a fondo la causa raíz, el síntoma real de negocio/UX y sus preferencias antes de redactar el plano técnico.
|
|
25
31
|
- **Consultar el Cerebro**: Analiza `.openspec/brain.md` para asimilar fallas y aprendizajes anteriores. Es obligatorio diseñar una solución técnica que **evite cometer el mismo error o comportamiento incorrecto dos veces**.
|
|
32
|
+
- **Analizar el Impacto del Cambio**: Ejecuta `sdd_diff_impact_analyzer` para determinar el radio de impacto estructural del requerimiento.
|
|
33
|
+
- **Scaffolding de Pruebas TDD**: Usa `sdd_test_scaffold_generator` para autogenerar la suite de pruebas unitarias en base a las especificaciones del `spec.md` diseñado.
|
|
34
|
+
- **Mock de Servicios de Terceros**: Usa `sdd_auto_api_mocker` para extraer endpoints y generar mocks rápidos si el cambio interactúa con APIs externas.
|
|
35
|
+
- **Optimizar Contexto**: Usa `sdd_context_pruner` para limpiar logs o historial redundante de context activo.
|
|
26
36
|
- Analiza el requerimiento e identifica los archivos y funciones a modificar (indicando rangos de líneas exactos).
|
|
27
37
|
- Detecta si hay funciones duplicadas en múltiples archivos.
|
|
28
38
|
|
|
@@ -70,11 +80,11 @@ Feature: [Breve descripción]
|
|
|
70
80
|
- ❌ Escribir, modificar o eliminar ningún archivo de código fuente (.ts, .js, .tsx, .jsx, .css, .html)
|
|
71
81
|
- ❌ Ejecutar comandos bash de ejecución (npm install, git push, npx, etc.) — solo `bash: ask` para lecturas
|
|
72
82
|
- ❌ Realizar deploys, pushes o publicaciones
|
|
73
|
-
- ❌ Crear tests, suites de validación, o archivos de reporte fuera del spec.md
|
|
83
|
+
- ❌ Crear tests, suites de validación, o archivos de reporte fuera del spec.md y el scaffold de pruebas
|
|
74
84
|
- ❌ Modificar archivos fuera de `.openspec/changes/<change-name>/specs/spec.md`
|
|
75
85
|
- ❌ Hacer preguntas por goteo (una por turno) — todas las preguntas van consolidadas en UNA sola llamada a `question` (máx 3-5)
|
|
76
|
-
- ❌ Usar herramientas más allá de las asignadas (`sdd_transition`, `sdd_brain_sync`)
|
|
86
|
+
- ❌ Usar herramientas más allá de las asignadas (`sdd_transition`, `sdd_brain_sync`, `sdd_requirement_tracker`, `check_dependency_cooldown`, `sdd_diff_impact_analyzer`, `sdd_auto_api_mocker`, `sdd_test_scaffold_generator`, `sdd_context_pruner`)
|
|
77
87
|
- ❌ Reabrir fases anteriores o retroceder el ciclo
|
|
78
88
|
|
|
79
89
|
> [!IMPORTANT]
|
|
80
|
-
> SÓLO DEBE hacer: analizar requerimiento, identificar archivos afectados, realizar encuesta consolidada, generar spec.md
|
|
90
|
+
> SÓLO DEBE hacer: analizar requerimiento, identificar archivos afectados, realizar encuesta consolidada, generar spec.md, y andamiar tests TDD.
|
package/agents/sdd-tester.md
CHANGED
|
@@ -11,6 +11,17 @@ permission:
|
|
|
11
11
|
"sdd_transition": allow
|
|
12
12
|
"sdd_ui_auditor": allow
|
|
13
13
|
"sdd_spec_validator": allow
|
|
14
|
+
"sdd_regression_detector": allow
|
|
15
|
+
"sdd_bdd_tester": allow
|
|
16
|
+
"sdd_requirement_tracker": allow
|
|
17
|
+
"sdd_diff_impact_analyzer": allow
|
|
18
|
+
"sdd_security_vulnerability_scanner": allow
|
|
19
|
+
"sdd_visual_regression_diff": allow
|
|
20
|
+
"sdd_performance_regress_profiler": allow
|
|
21
|
+
"sdd_auto_api_mocker": allow
|
|
22
|
+
"sdd_test_scaffold_generator": allow
|
|
23
|
+
"sdd_spec_compliance_linter": allow
|
|
24
|
+
"sdd_sandbox_patcher": allow
|
|
14
25
|
---
|
|
15
26
|
|
|
16
27
|
# @sdd-tester
|
|
@@ -23,14 +34,15 @@ permission:
|
|
|
23
34
|
## DO
|
|
24
35
|
1. **Detección de Regresiones Históricas**: Lee `.openspec/brain.md` para identificar qué fallas específicas o comportamientos errados ocurrieron en el pasado. Debes verificar de manera explícita y prioritaria que la nueva implementación **no reintroduzca ninguno de los bugs o comportamientos incorrectos registrados en el Cerebro**.
|
|
25
36
|
2. **Identificar Ecosistema Tecnológico**: Inspecciona la raíz del codebase (archivos como `package.json`, `requirements.txt`, `pyproject.toml`, `platformio.ini`, `CMakeLists.txt`, `go.mod`, etc.) para detectar el stack técnico del proyecto.
|
|
26
|
-
3. **
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
5. **Autocorrección**:
|
|
37
|
+
3. **Validación y Auditorías**:
|
|
38
|
+
- Ejecuta `sdd_spec_compliance_linter` para cruzar requerimientos.
|
|
39
|
+
- Ejecuta `sdd_security_vulnerability_scanner` para detectar vulnerabilidades en el código.
|
|
40
|
+
- Corre `sdd_visual_regression_diff` para auditar la interfaz y estilos.
|
|
41
|
+
- Ejecuta `sdd_performance_regress_profiler` para medir latencias y rendimiento.
|
|
42
|
+
- Usa `sdd_diff_impact_analyzer` para calcular el radio de impacto final.
|
|
43
|
+
4. **Ejecutar Suite de Pruebas**: Corre la suite de tests nativos del proyecto (ej: `npm run test` / `npx vitest run`).
|
|
44
|
+
5. **Autocorrección con Patcher**: Si detectas fallos unitarios simples, invoca `sdd_sandbox_patcher` para aplicar correcciones automáticas inmediatas sin retroceder de fase.
|
|
45
|
+
6. **Validación UI**: Ejecuta `sdd_ui_auditor` si el proyecto es una app web/frontend con visualización o HTML.
|
|
34
46
|
|
|
35
47
|
## WRITE
|
|
36
48
|
- `.openspec/changes/<change-name>/validation_report.md`
|
|
@@ -69,10 +81,10 @@ permission:
|
|
|
69
81
|
- ❌ Modificar lógica de negocio, funciones, componentes o cualquier código fuente
|
|
70
82
|
- ❌ Crear, modificar o eliminar specs o spec.md
|
|
71
83
|
- ❌ Realizar deploys, pushes, o publicaciones
|
|
72
|
-
- ❌ Reescribir archivos de código — solo autocorregir errores de sintaxis simples
|
|
84
|
+
- ❌ Reescribir archivos de código — solo autocorregir errores de sintaxis simples usando `sdd_sandbox_patcher`
|
|
73
85
|
- ❌ Escribir tests unitarios o de integración nuevos
|
|
74
86
|
- ❌ Modificar archivos fuera de `.openspec/changes/<change-name>/`
|
|
75
|
-
- ❌ Usar herramientas que no le fueron asignadas (`sdd_transition`, `sdd_ui_auditor`, `sdd_spec_validator`)
|
|
87
|
+
- ❌ Usar herramientas que no le fueron asignadas (`sdd_transition`, `sdd_ui_auditor`, `sdd_spec_validator`, `sdd_regression_detector`, `sdd_bdd_tester`, `sdd_requirement_tracker`, `sdd_diff_impact_analyzer`, `sdd_security_vulnerability_scanner`, `sdd_visual_regression_diff`, `sdd_performance_regress_profiler`, `sdd_auto_api_mocker`, `sdd_test_scaffold_generator`, `sdd_spec_compliance_linter`, `sdd_sandbox_patcher`)
|
|
76
88
|
|
|
77
89
|
> [!IMPORTANT]
|
|
78
|
-
> SÓLO DEBE hacer: ejecutar linter, auditorías UI, validaciones estáticas, generar `validation_report.md`, invocar `sdd_transition` al completar
|
|
90
|
+
> SÓLO DEBE hacer: ejecutar linter, auditorías UI, validaciones estáticas, generar `validation_report.md`, invocar `sdd_transition` al completar.
|
package/package.json
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Skill: SDD Auto Rollback Recovery
|
|
2
|
+
|
|
3
|
+
Enseña a los agentes (principalmente `@sdd-deployer`) cómo actuar quirúrgicamente ante un fallo en la fase de despliegue para restaurar la estabilidad de forma atómica.
|
|
4
|
+
|
|
5
|
+
## Trigger
|
|
6
|
+
|
|
7
|
+
- Falla del comando de despliegue en Fase 4.
|
|
8
|
+
- Respuestas HTTP 5xx o fallos graves en pruebas de salud inmediatamente después del despliegue.
|
|
9
|
+
|
|
10
|
+
## Procedimiento de Recuperación
|
|
11
|
+
|
|
12
|
+
1. **Rollback en Control de Versiones**:
|
|
13
|
+
- Identificar el último commit estable.
|
|
14
|
+
- Ejecutar: `git revert HEAD --no-edit` o `git checkout [stable-hash]` de forma controlada.
|
|
15
|
+
2. **Restauración en Producción**:
|
|
16
|
+
- Re-desplegar la versión estable recuperada.
|
|
17
|
+
3. **Aislamiento del Error**:
|
|
18
|
+
- Escribir un archivo temporal de error en `.openspec/crash_report.md`.
|
|
19
|
+
- Transicionar de regreso a Fase 2 (`sdd-builder`) para corrección del bug.
|
|
20
|
+
|
|
21
|
+
## Tags
|
|
22
|
+
|
|
23
|
+
#rollback #deploy #git #recovery #stability
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Skill: SDD Brain Curator
|
|
2
|
+
|
|
3
|
+
Instruye al `@sdd-archiver` sobre cómo sintetizar y empaquetar aprendizajes en el archivo de memoria `brain.md`, evitando duplicación de contexto y optimizando la comprensión de la IA en futuras iteraciones.
|
|
4
|
+
|
|
5
|
+
## Trigger
|
|
6
|
+
|
|
7
|
+
- Fase de cierre (Fase 5) antes de archivar de forma atómica.
|
|
8
|
+
|
|
9
|
+
## Directrices de Curación
|
|
10
|
+
|
|
11
|
+
1. **Evitar Duplicidad**:
|
|
12
|
+
- Agrupar lecciones similares en un único bullet.
|
|
13
|
+
2. **Categorización Estricta**:
|
|
14
|
+
- `[Sintaxis/Tipado]`: Errores relacionados con TypeScript, JavaScript o Apps Script.
|
|
15
|
+
- `[Arquitectura]`: Desacoplamiento de componentes.
|
|
16
|
+
- `[Lógica de Negocio]`: Flujos de negocio e interfaces.
|
|
17
|
+
3. **Formato ultra compacto**:
|
|
18
|
+
- Escribir oraciones de máximo 20 palabras por aprendizaje.
|
|
19
|
+
|
|
20
|
+
## Tags
|
|
21
|
+
|
|
22
|
+
#brain #lessons #synthesis #memory
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Skill: SDD Clean Architecture
|
|
2
|
+
|
|
3
|
+
Instruye al `@sdd-builder` en principios de desacoplamiento modular para evitar la creación de archivos gigantescos que saturen el contexto de edición.
|
|
4
|
+
|
|
5
|
+
## Trigger
|
|
6
|
+
|
|
7
|
+
- Fase de codificación (Fase 2).
|
|
8
|
+
|
|
9
|
+
## Directrices de Diseño
|
|
10
|
+
|
|
11
|
+
1. **Separación de Capas**:
|
|
12
|
+
- UI / Vista desacoplada de la lógica de servicios y APIs.
|
|
13
|
+
2. **Componentes Puros**:
|
|
14
|
+
- Funciones pequeñas con una única responsabilidad.
|
|
15
|
+
3. **Tamaño Límite**:
|
|
16
|
+
- Evitar archivos de código fuente de más de 300 líneas. Si exceden, modularizar de inmediato.
|
|
17
|
+
|
|
18
|
+
## Tags
|
|
19
|
+
|
|
20
|
+
#architecture #modular #clean-code #builder
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Skill: SDD Token Economy
|
|
2
|
+
|
|
3
|
+
Enseña a todos los agentes a operar bajo estrictas directrices de ahorro de tokens y optimización contextual para reducir costos y acelerar la velocidad del swarm.
|
|
4
|
+
|
|
5
|
+
## Trigger
|
|
6
|
+
|
|
7
|
+
- Cualquier operación del ciclo SDD (constante).
|
|
8
|
+
|
|
9
|
+
## Directrices Operativas
|
|
10
|
+
|
|
11
|
+
1. **Lecturas Selectivas**:
|
|
12
|
+
- Usar herramientas de visualización de rangos específicos de líneas en vez de leer archivos enteros.
|
|
13
|
+
2. **Poda de Logs**:
|
|
14
|
+
- Resumir o eliminar logs repetitivos y trazas gigantescas de la consola.
|
|
15
|
+
3. **Peticiones LSP de Alto Impacto**:
|
|
16
|
+
- Apuntar la navegación a los símbolos/métodos relevantes de la clase específica en vez de recorrer múltiples módulos.
|
|
17
|
+
|
|
18
|
+
## Tags
|
|
19
|
+
|
|
20
|
+
#tokens #economy #cost #efficiency
|