trackops 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +358 -0
- package/bin/trackops.js +103 -0
- package/lib/config.js +97 -0
- package/lib/control.js +575 -0
- package/lib/i18n.js +53 -0
- package/lib/init.js +200 -0
- package/lib/opera.js +202 -0
- package/lib/registry.js +182 -0
- package/lib/server.js +451 -0
- package/lib/skills.js +159 -0
- package/locales/en.json +142 -0
- package/locales/es.json +142 -0
- package/package.json +46 -0
- package/templates/etapa/agent.md +26 -0
- package/templates/etapa/genesis.md +94 -0
- package/templates/etapa/references/autonomy-and-recovery.md +117 -0
- package/templates/etapa/references/etapa-cycle.md +193 -0
- package/templates/etapa/registry.md +28 -0
- package/templates/etapa/router.md +39 -0
- package/templates/hooks/post-checkout +2 -0
- package/templates/hooks/post-commit +2 -0
- package/templates/hooks/post-merge +2 -0
- package/templates/opera/agent.md +26 -0
- package/templates/opera/genesis.md +94 -0
- package/templates/opera/references/autonomy-and-recovery.md +117 -0
- package/templates/opera/references/opera-cycle.md +193 -0
- package/templates/opera/registry.md +28 -0
- package/templates/opera/router.md +39 -0
- package/templates/skills/changelog-updater/SKILL.md +69 -0
- package/templates/skills/commiter/SKILL.md +99 -0
- package/templates/skills/project-starter-skill/SKILL.md +202 -0
- package/templates/skills/project-starter-skill/references/opera-cycle.md +193 -0
- package/ui/app.js +950 -0
- package/ui/index.html +356 -0
- package/ui/styles.css +688 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# El Ciclo O.P.E.R.A. — Referencia Completa
|
|
2
|
+
|
|
3
|
+
Este documento detalla cada fase del ciclo con sus reglas, procedimientos y Definitions of Done.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1️⃣ O — Orquestar (Visión y Lógica)
|
|
8
|
+
|
|
9
|
+
### Descubrimiento
|
|
10
|
+
|
|
11
|
+
Haz al usuario las 5 preguntas clave:
|
|
12
|
+
|
|
13
|
+
1. **Directriz Principal**: ¿Cuál es el resultado singular deseado?
|
|
14
|
+
2. **Integraciones**: ¿Qué servicios externos necesitamos? ¿Están listas las claves?
|
|
15
|
+
3. **Fuente de la Verdad**: ¿Dónde viven los datos primarios?
|
|
16
|
+
4. **Carga Útil (Payload)**: ¿Cómo y dónde debe entregarse el resultado final?
|
|
17
|
+
5. **Reglas de Comportamiento**: Restricciones o tono específico.
|
|
18
|
+
|
|
19
|
+
### Regla "Datos-Primero"
|
|
20
|
+
|
|
21
|
+
Antes de pasar a la siguiente fase, DEBES definir el **Esquema de Datos JSON** (Input/Output) en `genesis.md`.
|
|
22
|
+
|
|
23
|
+
Ejemplo de schema en genesis.md:
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"input": {
|
|
28
|
+
"source": "API externa",
|
|
29
|
+
"schema": {
|
|
30
|
+
"id": "string (UUID)",
|
|
31
|
+
"timestamp": "ISO 8601",
|
|
32
|
+
"data": "object"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"output": {
|
|
36
|
+
"destination": "webhook POST",
|
|
37
|
+
"schema": {
|
|
38
|
+
"processed_id": "string (UUID)",
|
|
39
|
+
"result": "object",
|
|
40
|
+
"status": "enum: success|error"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Definition of Done — Fase O
|
|
47
|
+
|
|
48
|
+
- [ ] Las 5 preguntas de descubrimiento están respondidas.
|
|
49
|
+
- [ ] Esquema JSON de Input/Output definido en `genesis.md`.
|
|
50
|
+
- [ ] Reglas de comportamiento documentadas en `genesis.md`.
|
|
51
|
+
- [ ] `task_plan.md` tiene plano aprobado por el usuario.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 2️⃣ P — Probar (Conectividad)
|
|
56
|
+
|
|
57
|
+
Verifica las tuberías antes de pasar el agua. El objetivo es confirmar que todos los servicios externos responden y devuelven datos con la forma esperada.
|
|
58
|
+
|
|
59
|
+
### Procedimiento
|
|
60
|
+
|
|
61
|
+
1. **Verificación de credenciales**: Lee `.env` y confirma que todas las claves necesarias existen y no están vacías.
|
|
62
|
+
2. **Handshake**: Construye scripts mínimos en `tools/` (ej: `test_api.py`) para verificar cada servicio.
|
|
63
|
+
3. **Validación de Shape**: No basta con un HTTP 200. Verifica que la respuesta coincide con el schema definido en `genesis.md`. Compara campos, tipos de datos y estructura.
|
|
64
|
+
4. **Bloqueo**: Si algún test falla, NO procedas a la fase de Estructurar. Documenta el fallo en `findings.md`.
|
|
65
|
+
|
|
66
|
+
### Ejemplo de test mínimo
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
# tools/test_api.py
|
|
70
|
+
import os
|
|
71
|
+
import requests
|
|
72
|
+
|
|
73
|
+
API_KEY = os.getenv("API_KEY")
|
|
74
|
+
BASE_URL = os.getenv("API_BASE_URL")
|
|
75
|
+
|
|
76
|
+
def test_connection():
|
|
77
|
+
"""Verifica conexión y shape de respuesta."""
|
|
78
|
+
response = requests.get(f"{BASE_URL}/health", headers={"Authorization": f"Bearer {API_KEY}"})
|
|
79
|
+
assert response.status_code == 200, f"Expected 200, got {response.status_code}"
|
|
80
|
+
data = response.json()
|
|
81
|
+
assert "id" in data, "Missing 'id' field in response"
|
|
82
|
+
assert "status" in data, "Missing 'status' field in response"
|
|
83
|
+
print("✅ API connection and shape validated")
|
|
84
|
+
|
|
85
|
+
if __name__ == "__main__":
|
|
86
|
+
test_connection()
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Definition of Done — Fase P
|
|
90
|
+
|
|
91
|
+
- [ ] Todas las credenciales `.env` verificadas (existen y no están vacías).
|
|
92
|
+
- [ ] Scripts `test_*.py` ejecutados y pasando.
|
|
93
|
+
- [ ] Respuestas de APIs validadas contra el schema de `genesis.md`.
|
|
94
|
+
- [ ] Resultados documentados en `findings.md`.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 3️⃣ E — Estructurar (La Construcción de 3 Capas)
|
|
99
|
+
|
|
100
|
+
### Capa 1: Arquitectura (`architecture/`)
|
|
101
|
+
|
|
102
|
+
SOPs (Standard Operating Procedures) técnicos en Markdown. Cada SOP define:
|
|
103
|
+
|
|
104
|
+
- Propósito del script.
|
|
105
|
+
- Entradas esperadas (con referencia al schema en `genesis.md`).
|
|
106
|
+
- Salidas producidas.
|
|
107
|
+
- Casos extremos y cómo manejarlos.
|
|
108
|
+
- Dependencias con otras herramientas.
|
|
109
|
+
|
|
110
|
+
**Regla**: Si la lógica cambia, actualiza el SOP **antes** que el código.
|
|
111
|
+
|
|
112
|
+
### Capa 2: Navegación (El Agente)
|
|
113
|
+
|
|
114
|
+
Capa de razonamiento. Enruta datos entre SOPs y herramientas. No ejecuta lógica de negocio directamente; delega a los scripts.
|
|
115
|
+
|
|
116
|
+
### Capa 3: Herramientas (`tools/`)
|
|
117
|
+
|
|
118
|
+
- Scripts atómicos y deterministas.
|
|
119
|
+
- Las variables de entorno van en `.env`.
|
|
120
|
+
- Usa `.tmp/` para todas las operaciones intermedias.
|
|
121
|
+
- Cada script hace UNA cosa bien.
|
|
122
|
+
|
|
123
|
+
### Regla de Idempotencia
|
|
124
|
+
|
|
125
|
+
Toda herramienta DEBE ser idempotente. Herramientas con side-effects irreversibles se marcan:
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
# META: side-effect: true
|
|
129
|
+
# META: idempotent: false
|
|
130
|
+
# META: requires-confirmation: true
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Grafo de Dependencias
|
|
134
|
+
|
|
135
|
+
Si una herramienta produce output que consume otra, documéntalo en `genesis.md` bajo `## Pipeline`:
|
|
136
|
+
|
|
137
|
+
```markdown
|
|
138
|
+
## Pipeline
|
|
139
|
+
### tool_fetch.py → tool_transform.py
|
|
140
|
+
- Output: `.tmp/raw_data.json`
|
|
141
|
+
- Formato: JSON array según schema X
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Definition of Done — Fase E
|
|
145
|
+
|
|
146
|
+
- [ ] SOPs escritos en `architecture/` para cada herramienta.
|
|
147
|
+
- [ ] Scripts implementados en `tools/`.
|
|
148
|
+
- [ ] Grafo de dependencias documentado en `genesis.md`.
|
|
149
|
+
- [ ] Tests de integración entre herramientas pasando.
|
|
150
|
+
- [ ] Herramientas con side-effects marcadas con META tags.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## 4️⃣ R — Refinar (Refinamiento)
|
|
155
|
+
|
|
156
|
+
### Templates de Output
|
|
157
|
+
|
|
158
|
+
Toda salida del sistema se valida contra una plantilla definida en `templates/`. Las plantillas se referencian desde `genesis.md` bajo `## Templates`.
|
|
159
|
+
|
|
160
|
+
El refinamiento no es subjetivo; es verificable contra una plantilla. Si el output no coincide con el template, no pasa.
|
|
161
|
+
|
|
162
|
+
### Refinamiento de Carga Útil
|
|
163
|
+
|
|
164
|
+
Formatea todas las salidas (Markdown, HTML, JSON limpio) para entrega profesional según lo definido en `genesis.md`.
|
|
165
|
+
|
|
166
|
+
### UX/UI
|
|
167
|
+
|
|
168
|
+
Si el proyecto tiene interfaz, aplica diseños limpios e intuitivos según las especificaciones.
|
|
169
|
+
|
|
170
|
+
### Definition of Done — Fase R
|
|
171
|
+
|
|
172
|
+
- [ ] Todas las salidas validadas contra sus templates en `templates/`.
|
|
173
|
+
- [ ] Formatos de entrega (Markdown, HTML, JSON) verificados.
|
|
174
|
+
- [ ] Si hay interfaz: revisión visual completada.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 5️⃣ A — Automatizar (Despliegue)
|
|
179
|
+
|
|
180
|
+
### Procedimiento
|
|
181
|
+
|
|
182
|
+
1. **Limpieza**: Elimina residuos de `.tmp/`.
|
|
183
|
+
2. **Transferencia**: Mueve la lógica finalizada a producción/nube.
|
|
184
|
+
3. **Configuración**: Establece los disparadores (Cron, Webhooks).
|
|
185
|
+
4. **Smoke Test**: Verificación mínima en el entorno de producción.
|
|
186
|
+
|
|
187
|
+
### Definition of Done — Fase A
|
|
188
|
+
|
|
189
|
+
- [ ] `.tmp/` limpio (sin archivos residuales).
|
|
190
|
+
- [ ] Código desplegado en destino final.
|
|
191
|
+
- [ ] Triggers configurados y verificados.
|
|
192
|
+
- [ ] Smoke test en producción pasando.
|
|
193
|
+
- [ ] `progress.md` actualizado con estado final.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Skills Registry — {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
> Índice de skills instaladas en este proyecto. Gestionado automáticamente por `trackops skill`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Skills Instaladas
|
|
8
|
+
|
|
9
|
+
_Sin skills instaladas. Usa `trackops skill install <nombre>` para añadir una._
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Cómo Usar una Skill
|
|
14
|
+
|
|
15
|
+
1. Identifica el contexto en `.agent/hub/router.md`.
|
|
16
|
+
2. Abre el archivo `SKILL.md` de la skill correspondiente.
|
|
17
|
+
3. Sigue las instrucciones del protocolo definido en la skill.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Gestión
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
trackops skill list # Ver skills instaladas
|
|
25
|
+
trackops skill catalog # Ver skills disponibles
|
|
26
|
+
trackops skill install <n> # Instalar una skill
|
|
27
|
+
trackops skill remove <n> # Desinstalar una skill
|
|
28
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Router de Skills
|
|
2
|
+
|
|
3
|
+
## Propósito
|
|
4
|
+
Este archivo define las reglas de enrutamiento entre el agente principal y las skills disponibles. Cuando el agente detecta un contexto específico, consulta estas reglas para decidir qué skill invocar.
|
|
5
|
+
|
|
6
|
+
## Reglas de Enrutamiento
|
|
7
|
+
|
|
8
|
+
### Contexto: Commit de código
|
|
9
|
+
- **Trigger**: El usuario pide hacer un commit o se completa un cambio de código.
|
|
10
|
+
- **Skill**: `commiter`
|
|
11
|
+
- **Acción**: Consulta la skill para formatear el mensaje de commit.
|
|
12
|
+
|
|
13
|
+
### Contexto: Post-commit
|
|
14
|
+
- **Trigger**: Se acaba de realizar un commit exitoso.
|
|
15
|
+
- **Skill**: `changelog-updater`
|
|
16
|
+
- **Acción**: Ejecuta el script de actualización del changelog.
|
|
17
|
+
|
|
18
|
+
### Contexto: Inicialización de proyecto
|
|
19
|
+
- **Trigger**: El usuario quiere crear un nuevo proyecto.
|
|
20
|
+
- **Skill**: `project-starter-skill` (global)
|
|
21
|
+
- **Acción**: Ejecutar el protocolo de inicialización completo.
|
|
22
|
+
|
|
23
|
+
### Contexto: Seguimiento operativo
|
|
24
|
+
- **Trigger**: Se va a empezar, retomar o cerrar un bloque de trabajo.
|
|
25
|
+
- **Skill**: No aplica skill externa.
|
|
26
|
+
- **Acción**: Ejecutar `trackops status`, tomar la siguiente tarea con `trackops next` y mantener `project_control.json` como fuente de verdad operativa.
|
|
27
|
+
|
|
28
|
+
## Cómo Añadir Nuevas Reglas
|
|
29
|
+
|
|
30
|
+
Cada regla sigue este formato:
|
|
31
|
+
|
|
32
|
+
```markdown
|
|
33
|
+
### Contexto: [descripción]
|
|
34
|
+
- **Trigger**: [qué activa la regla]
|
|
35
|
+
- **Skill**: [nombre de la skill]
|
|
36
|
+
- **Acción**: [qué debe hacer el agente]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Al instalar una nueva skill con `trackops skill install <nombre>`, añade su regla de enrutamiento aquí.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "changelog-updater"
|
|
3
|
+
description: "Herramienta automatizada para actualizar el archivo CHANGELOG.md basándose en el último commit realizado. Usa esta skill inmediatamente después de confirmar un commit para mantener el historial de cambios al día. Se activa con 'actualizar changelog', 'registrar cambio', 'update changelog', o automáticamente tras un commit exitoso cuando el router lo indique."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
type: "project"
|
|
7
|
+
triggers:
|
|
8
|
+
- "actualizar changelog"
|
|
9
|
+
- "registrar cambio"
|
|
10
|
+
- "update changelog"
|
|
11
|
+
- "post-commit"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Actualizador de Changelog
|
|
15
|
+
|
|
16
|
+
Esta skill mantiene actualizado el archivo `CHANGELOG.md` del proyecto de forma automática, leyendo la información directamente desde el historial de git.
|
|
17
|
+
|
|
18
|
+
## Cuándo Usar
|
|
19
|
+
|
|
20
|
+
Usa esta skill **inmediatamente después de realizar un commit** exitoso. El router debería activarla automáticamente tras detectar un commit, pero también puede invocarse manualmente.
|
|
21
|
+
|
|
22
|
+
## Qué Hace
|
|
23
|
+
|
|
24
|
+
1. Obtiene el último commit del repositorio via `git log`.
|
|
25
|
+
2. Analiza el mensaje buscando el patrón de **Conventional Commits** (con soporte para emojis al inicio).
|
|
26
|
+
3. Formatea una nueva entrada para `CHANGELOG.md` incluyendo:
|
|
27
|
+
- Emoji correspondiente al tipo de cambio.
|
|
28
|
+
- Ámbito (scope) si existe.
|
|
29
|
+
- Descripción del cambio.
|
|
30
|
+
- Hash corto del commit (7 caracteres).
|
|
31
|
+
4. Inserta la entrada en la sección correspondiente a la fecha actual (`YYYY-MM-DD`).
|
|
32
|
+
5. Si no existe `CHANGELOG.md`, lo crea con la estructura base.
|
|
33
|
+
|
|
34
|
+
## Mapeo de Emojis
|
|
35
|
+
|
|
36
|
+
El script reconoce estos tipos de commit y asigna sus emojis:
|
|
37
|
+
|
|
38
|
+
| Tipo | Emoji | Descripción |
|
|
39
|
+
| :--- | :---: | :--- |
|
|
40
|
+
| `feat` | ✨ | Nueva característica |
|
|
41
|
+
| `fix` | 🐛 | Corrección de errores |
|
|
42
|
+
| `docs` | 📚 | Documentación |
|
|
43
|
+
| `style` | 💄 | Estilos y formato |
|
|
44
|
+
| `refactor` | ♻️ | Refactorización de código |
|
|
45
|
+
| `perf` | ⚡ | Mejoras de rendimiento |
|
|
46
|
+
| `test` | ✅ | Tests |
|
|
47
|
+
| `build` | 📦 | Build y dependencias |
|
|
48
|
+
| `ci` | 👷 | Integración continua |
|
|
49
|
+
| `chore` | 🔧 | Tareas de mantenimiento |
|
|
50
|
+
| `revert` | ⏪ | Reversión de cambios |
|
|
51
|
+
|
|
52
|
+
Commits que no sigan el formato Conventional Commits se registran como "Misc".
|
|
53
|
+
|
|
54
|
+
## Flujo de Trabajo Recomendado
|
|
55
|
+
|
|
56
|
+
1. Realiza tus cambios en el código.
|
|
57
|
+
2. Haz el commit siguiendo las convenciones (usa la skill `commiter`).
|
|
58
|
+
3. Actualiza el changelog manualmente o via script si está configurado.
|
|
59
|
+
|
|
60
|
+
## Requisitos
|
|
61
|
+
|
|
62
|
+
- Repositorio git inicializado con al menos un commit.
|
|
63
|
+
- El script se ejecuta desde la raíz del proyecto.
|
|
64
|
+
|
|
65
|
+
## Manejo de Errores
|
|
66
|
+
|
|
67
|
+
- Si no hay commits en el repo, el script muestra un mensaje informativo y no modifica nada.
|
|
68
|
+
- Si `git` no está disponible, el script reporta el error y termina.
|
|
69
|
+
- Si el `CHANGELOG.md` tiene una estructura inesperada, añade la entrada al final como fallback.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "commiter"
|
|
3
|
+
description: "Guía para generar mensajes de commit en español siguiendo Conventional Commits estrictos con Emojis. Usa esta skill siempre que el usuario pida hacer un commit, generar un mensaje de commit, commitear cambios, o cuando se complete un cambio de código y sea momento de registrarlo en git. También se activa con 'commit', 'commitear', 'guardar cambios', 'registrar cambios' o cualquier intención de crear un punto en el historial de git."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
type: "project"
|
|
7
|
+
triggers:
|
|
8
|
+
- "commit"
|
|
9
|
+
- "commitear"
|
|
10
|
+
- "guardar cambios"
|
|
11
|
+
- "registrar cambios"
|
|
12
|
+
- "hacer commit"
|
|
13
|
+
- "git commit"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Generador de Commits
|
|
17
|
+
|
|
18
|
+
Cuando se te pida realizar un commit o generar un mensaje de commit, DEBES seguir estrictamente este formato.
|
|
19
|
+
|
|
20
|
+
## Estándar: Conventional Commits con Emojis
|
|
21
|
+
|
|
22
|
+
Utilizamos **Conventional Commits** enriquecidos con **Gitmoji** como base. Todo el contenido debe estar en **ESPAÑOL**.
|
|
23
|
+
|
|
24
|
+
## Formato
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
<emoji> <tipo>(<alcance>): <descripción corta>
|
|
28
|
+
|
|
29
|
+
<cuerpo detallado y extenso>
|
|
30
|
+
|
|
31
|
+
<footer>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Reglas Obligatorias
|
|
35
|
+
|
|
36
|
+
1. **Emoji**: El mensaje DEBE comenzar con el emoji correspondiente al tipo de cambio.
|
|
37
|
+
2. **Idioma**: Todo el contenido del commit (descripción y cuerpo) debe estar en **ESPAÑOL**.
|
|
38
|
+
3. **Límite del Título**: La primera línea (asunto) **NO debe exceder los 50 caracteres** (sin contar el emoji). Sé conciso.
|
|
39
|
+
4. **Descripción Extensa**: El cuerpo del mensaje es **OBLIGATORIO**. Debes explicar detalladamente:
|
|
40
|
+
- **Qué** se ha cambiado.
|
|
41
|
+
- **Por qué** se ha hecho el cambio.
|
|
42
|
+
- Detalles técnicos relevantes de la implementación.
|
|
43
|
+
5. **Tiempos Verbales**: Usa el modo imperativo en el asunto (ej: "agrega", "corrige", "cambia"), no en pasado.
|
|
44
|
+
|
|
45
|
+
## Tipos Permitidos y Emojis
|
|
46
|
+
|
|
47
|
+
| Emoji | Tipo | Descripción |
|
|
48
|
+
| :---: | :--- | :--- |
|
|
49
|
+
| ✨ | `feat` | Nueva característica (correlaciona con MINOR en SemVer). |
|
|
50
|
+
| 🐛 | `fix` | Corrección de un bug (correlaciona con PATCH en SemVer). |
|
|
51
|
+
| 📚 | `docs` | Cambios en la documentación. |
|
|
52
|
+
| 💄 | `style` | Cambios que no afectan el significado del código (espacios, formato, etc). |
|
|
53
|
+
| ♻️ | `refactor` | Cambio de código que no corrige bugs ni añade funcionalidades. |
|
|
54
|
+
| ⚡ | `perf` | Cambio de código que mejora el rendimiento. |
|
|
55
|
+
| ✅ | `test` | Añadir tests faltantes o corregir existentes. |
|
|
56
|
+
| 📦 | `build` | Cambios que afectan el sistema de construcción o dependencias externas. |
|
|
57
|
+
| 👷 | `ci` | Cambios en archivos de configuración y scripts de CI. |
|
|
58
|
+
| 🔧 | `chore` | Otros cambios que no modifican src o test files (ej. config de herramientas). |
|
|
59
|
+
| ⏪ | `revert` | Reversión de un commit anterior. |
|
|
60
|
+
|
|
61
|
+
## Procedimiento
|
|
62
|
+
|
|
63
|
+
Cuando el usuario pida hacer commit:
|
|
64
|
+
|
|
65
|
+
1. **Analiza los cambios**: Revisa qué archivos se modificaron y qué tipo de cambio representan.
|
|
66
|
+
2. **Selecciona el tipo**: Elige el tipo de commit más apropiado de la tabla.
|
|
67
|
+
3. **Define el alcance**: Identifica el módulo o componente afectado (opcional pero recomendado).
|
|
68
|
+
4. **Redacta el asunto**: Máximo 50 caracteres, imperativo, en español.
|
|
69
|
+
5. **Redacta el cuerpo**: Explica qué, por qué y detalles técnicos. Es obligatorio.
|
|
70
|
+
6. **Ejecuta el commit**: Usa `git commit -m` con el formato completo.
|
|
71
|
+
|
|
72
|
+
## Ejemplo Correcto
|
|
73
|
+
|
|
74
|
+
```text
|
|
75
|
+
✨ feat(auth): integra login social con Google
|
|
76
|
+
|
|
77
|
+
Se ha implementado la autenticación mediante OAuth2 con Google para facilitar
|
|
78
|
+
el acceso a nuevos usuarios.
|
|
79
|
+
|
|
80
|
+
Cambios principales:
|
|
81
|
+
- Agrega configuración de estrategia de Passport.js para Google.
|
|
82
|
+
- Crea nuevas rutas de callback en el controlador de autenticación.
|
|
83
|
+
- Actualiza el modelo de Usuario para almacenar el providerId.
|
|
84
|
+
- Ajusta la interfaz de login para incluir el botón de "Entrar con Google".
|
|
85
|
+
|
|
86
|
+
Motivación:
|
|
87
|
+
Reducir la fricción en el registro de usuarios y aumentar la conversión.
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Errores Comunes a Evitar
|
|
91
|
+
|
|
92
|
+
- `fix: error login` → Falta emoji, título vago, sin cuerpo.
|
|
93
|
+
- `🐛 Fix: arregla login` → Tipo en mayúscula, lo correcto es minúscula `fix`.
|
|
94
|
+
- `✨ feat(user): Update user logic` → En inglés, debe ser en español.
|
|
95
|
+
- Título que excede 50 caracteres → Acorta y mueve el detalle al cuerpo.
|
|
96
|
+
|
|
97
|
+
## Integración con el Workflow
|
|
98
|
+
|
|
99
|
+
Después de ejecutar un commit exitoso, el router debe activar la skill `changelog-updater` para registrar el cambio automáticamente en `CHANGELOG.md`.
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "project-starter-skill"
|
|
3
|
+
description: "Skill global para inicializar proyectos completos usando el protocolo O.P.E.R.A. (Orquestar, Probar, Estructurar, Refinar, Automatizar). Usa esta skill siempre que el usuario quiera crear un nuevo proyecto, inicializar una estructura de agente, configurar un repositorio, o arrancar cualquier automatización desde cero. También se activa cuando el usuario menciona 'nuevo proyecto', 'iniciar proyecto', 'configurar proyecto', 'opera', 'project starter', 'scaffold', o cualquier intención de comenzar algo nuevo que necesite estructura."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "3.0"
|
|
6
|
+
type: "global"
|
|
7
|
+
triggers:
|
|
8
|
+
- "iniciar proyecto"
|
|
9
|
+
- "nuevo proyecto"
|
|
10
|
+
- "configurar proyecto"
|
|
11
|
+
- "opera"
|
|
12
|
+
- "project starter"
|
|
13
|
+
- "scaffold"
|
|
14
|
+
- "inicializar"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# 🚀 ProjectStarterSkill — O.P.E.R.A. v3.0
|
|
18
|
+
|
|
19
|
+
## Identidad
|
|
20
|
+
|
|
21
|
+
Eres el **Piloto del Sistema**. Tu misión es construir automatización determinista y autorreparable usando el protocolo O.P.E.R.A.
|
|
22
|
+
|
|
23
|
+
## Filosofía
|
|
24
|
+
|
|
25
|
+
- Fiabilidad sobre velocidad. Nunca adivines lógica de negocio.
|
|
26
|
+
- Los LLMs son probabilísticos, pero tu código debe ser **determinista**.
|
|
27
|
+
- Cada fase tiene un **Definition of Done** verificable. No avanzas sin cumplirlo.
|
|
28
|
+
- `genesis.md` es la ley. Si un script la contradice, el script está mal.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Protocolo de Inicialización
|
|
33
|
+
|
|
34
|
+
Este protocolo se ejecuta secuencialmente y sin excepciones al crear un nuevo proyecto.
|
|
35
|
+
|
|
36
|
+
### Paso 1 — Descubrimiento
|
|
37
|
+
|
|
38
|
+
Antes de crear cualquier archivo, haz al usuario estas preguntas:
|
|
39
|
+
|
|
40
|
+
| # | Pregunta | Propósito |
|
|
41
|
+
|---|----------|-----------|
|
|
42
|
+
| 1 | ¿Cuál es el resultado singular deseado? | Directriz principal |
|
|
43
|
+
| 2 | ¿Qué servicios externos necesitamos? ¿Están listas las claves? | Integraciones |
|
|
44
|
+
| 3 | ¿Dónde viven los datos primarios? | Fuente de la verdad |
|
|
45
|
+
| 4 | ¿Cómo y dónde debe entregarse el resultado final? | Carga útil |
|
|
46
|
+
| 5 | ¿Restricciones, tono o reglas específicas? | Reglas de comportamiento |
|
|
47
|
+
|
|
48
|
+
También pregunta:
|
|
49
|
+
- ¿Repositorio **público o privado**?
|
|
50
|
+
- ¿Tipo de **licencia**? (MIT, Apache 2.0, GPL v3, Propietario)
|
|
51
|
+
|
|
52
|
+
### Paso 2 — Inicialización con Ops
|
|
53
|
+
|
|
54
|
+
Ejecuta la inicialización del sistema operativo:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx trackops init --with-opera
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Esto crea `project_control.json`, instala OPERA y registra el proyecto.
|
|
61
|
+
|
|
62
|
+
### Paso 3 — Poblar genesis.md
|
|
63
|
+
|
|
64
|
+
Con las respuestas del descubrimiento, completa `genesis.md` con:
|
|
65
|
+
|
|
66
|
+
1. **Esquema de Datos JSON** (Input/Output) — esto es obligatorio antes de escribir código.
|
|
67
|
+
2. **Reglas de comportamiento** — restricciones de negocio.
|
|
68
|
+
3. **Invariantes arquitectónicas** — decisiones técnicas inamovibles.
|
|
69
|
+
|
|
70
|
+
Esto es la regla "Datos-Primero": si el schema no está definido en `genesis.md`, no se escribe código.
|
|
71
|
+
|
|
72
|
+
### Paso 4 — Completar task_plan.md
|
|
73
|
+
|
|
74
|
+
Ejecuta `trackops sync` para regenerar `task_plan.md` y luego ajusta:
|
|
75
|
+
- Fases y objetivos.
|
|
76
|
+
- **Definition of Done** por cada fase (ver referencia `references/opera-cycle.md`).
|
|
77
|
+
- Checklist verificable.
|
|
78
|
+
|
|
79
|
+
### Paso 5 — Skills Base
|
|
80
|
+
|
|
81
|
+
1. Instala las skills obligatorias:
|
|
82
|
+
```bash
|
|
83
|
+
trackops skill install commiter
|
|
84
|
+
trackops skill install changelog-updater
|
|
85
|
+
```
|
|
86
|
+
2. Analiza la definición del proyecto en `genesis.md`.
|
|
87
|
+
3. Busca skills adicionales con `trackops skill catalog` y **recomienda** (no instales sin aprobación) las que apliquen.
|
|
88
|
+
|
|
89
|
+
### Paso 6 — Repositorio
|
|
90
|
+
|
|
91
|
+
1. Crea el repositorio en GitHub (público o privado según elección).
|
|
92
|
+
2. Genera `README.md` con la descripción del proyecto basada en `genesis.md`.
|
|
93
|
+
3. Crea `LICENSE` según la elección del usuario.
|
|
94
|
+
4. Inicializa `CHANGELOG.md` con entrada de creación.
|
|
95
|
+
5. Realiza el primer commit (usa la skill `commiter`).
|
|
96
|
+
|
|
97
|
+
### Paso 7 — Freno de Mano 🛑
|
|
98
|
+
|
|
99
|
+
Tienes **prohibido** escribir scripts en `tools/` hasta que:
|
|
100
|
+
|
|
101
|
+
- [ ] Las preguntas de descubrimiento estén respondidas.
|
|
102
|
+
- [ ] El esquema de datos esté definido en `genesis.md`.
|
|
103
|
+
- [ ] `task_plan.md` tenga un plano aprobado con Definition of Done.
|
|
104
|
+
- [ ] La estructura `.agent/` y `.agents/` esté creada.
|
|
105
|
+
- [ ] El repositorio esté inicializado.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## El Ciclo O.P.E.R.A.
|
|
110
|
+
|
|
111
|
+
Una vez completada la inicialización, el proyecto avanza a través de las fases definidas. Para el detalle completo de cada fase, lee:
|
|
112
|
+
```
|
|
113
|
+
references/opera-cycle.md
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Resumen de Fases OPERA
|
|
117
|
+
|
|
118
|
+
| Fase | Nombre | Foco | Entregable clave |
|
|
119
|
+
|------|--------|------|-------------------|
|
|
120
|
+
| **O** | Orquestar | Visión y lógica | Schema JSON en `genesis.md` |
|
|
121
|
+
| **P** | Probar | Conectividad | Scripts de test pasando |
|
|
122
|
+
| **E** | Estructurar | Construcción en 3 capas | SOPs + tools + tests de integración |
|
|
123
|
+
| **R** | Refinar | Refinamiento | Outputs validados contra templates |
|
|
124
|
+
| **A** | Automatizar | Despliegue | Triggers configurados + smoke test |
|
|
125
|
+
|
|
126
|
+
### La Arquitectura de 3 Capas
|
|
127
|
+
|
|
128
|
+
| Capa | Ubicación | Función |
|
|
129
|
+
|------|-----------|---------|
|
|
130
|
+
| Arquitectura | `architecture/` | SOPs técnicos en Markdown. Si la lógica cambia, actualiza el SOP **antes** que el código. |
|
|
131
|
+
| Navegación | El Agente | Capa de razonamiento. Enruta datos entre SOPs y herramientas. |
|
|
132
|
+
| Herramientas | `tools/` | Scripts atómicos y deterministas. Variables en `.env`. Temporales en `.tmp/`. |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Gobernanza y Recuperación
|
|
137
|
+
|
|
138
|
+
Para la matriz de autonomía (semáforo), el protocolo de auto-reparación y el sistema de rollback, lee:
|
|
139
|
+
```
|
|
140
|
+
references/autonomy-and-recovery.md
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Resumen Rápido
|
|
144
|
+
|
|
145
|
+
**🔴 NIVEL ROJO** (Pide permiso): Modificar `genesis.md`, eliminar datos persistentes, desplegar a producción, enviar comunicaciones externas, crear repos.
|
|
146
|
+
|
|
147
|
+
**🟢 NIVEL VERDE** (Avanza): Crear/editar scripts, leer archivos, ejecutar tests, actualizar logs, auto-reparar (máx. 3 intentos).
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Estructura de Archivos
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
proyecto/
|
|
155
|
+
├── .agent/
|
|
156
|
+
│ ├── hub/
|
|
157
|
+
│ │ ├── agent.md # Instrucciones del agente
|
|
158
|
+
│ │ └── router.md # Enrutamiento a skills
|
|
159
|
+
│ └── skills/
|
|
160
|
+
│ └── _registry.md # Índice de skills instaladas
|
|
161
|
+
├── .agents/
|
|
162
|
+
│ └── skills/
|
|
163
|
+
│ └── [skill-name]/
|
|
164
|
+
│ └── SKILL.md # Contenido de skills
|
|
165
|
+
├── genesis.md # 📜 La Constitución
|
|
166
|
+
├── task_plan.md # 🗺️ El Mapa (autogenerado)
|
|
167
|
+
├── progress.md # 📓 El Diario (autogenerado)
|
|
168
|
+
├── findings.md # 📖 La Biblioteca (autogenerado)
|
|
169
|
+
├── CHANGELOG.md # 📋 El Historial
|
|
170
|
+
├── architecture/ # 📘 El Manual (SOPs)
|
|
171
|
+
├── tools/ # ⚙️ Los Motores
|
|
172
|
+
├── templates/ # 📐 Las Plantillas
|
|
173
|
+
├── .tmp/ # 🔧 El Taller
|
|
174
|
+
├── .env # 🔑 Las Llaves
|
|
175
|
+
├── project_control.json # 🎛️ Control Operativo
|
|
176
|
+
├── README.md
|
|
177
|
+
├── LICENSE
|
|
178
|
+
└── .gitignore
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Checklist de Inicialización
|
|
184
|
+
|
|
185
|
+
```markdown
|
|
186
|
+
- [ ] Preguntas de descubrimiento respondidas
|
|
187
|
+
- [ ] trackops init ejecutado
|
|
188
|
+
- [ ] genesis.md poblado con schema y reglas
|
|
189
|
+
- [ ] task_plan.md con Definition of Done por fase
|
|
190
|
+
- [ ] progress.md generado
|
|
191
|
+
- [ ] findings.md generado
|
|
192
|
+
- [ ] .agent/hub/agent.md configurado
|
|
193
|
+
- [ ] .agent/hub/router.md configurado
|
|
194
|
+
- [ ] .agent/skills/_registry.md creado
|
|
195
|
+
- [ ] Skills base instaladas (commiter, changelog-updater)
|
|
196
|
+
- [ ] Repositorio GitHub creado
|
|
197
|
+
- [ ] README.md generado
|
|
198
|
+
- [ ] LICENSE creada
|
|
199
|
+
- [ ] CHANGELOG.md inicializado
|
|
200
|
+
- [ ] .gitignore configurado
|
|
201
|
+
- [ ] Primer commit realizado
|
|
202
|
+
```
|