ostacky 0.2.1 → 0.3.1
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/README.md +5 -5
- package/assets/agents/ostacky.md +18 -7
- package/assets/skills/execution-mode-evaluation/README.md +224 -0
- package/assets/skills/execution-mode-evaluation/SKILL.md +385 -0
- package/dist/cli.js +31 -22
- package/manifest.json +22 -15
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -193,20 +193,20 @@ Tras instalar, el proyecto queda así:
|
|
|
193
193
|
|
|
194
194
|
```json
|
|
195
195
|
{
|
|
196
|
-
"version": "0.
|
|
196
|
+
"version": "0.3.1",
|
|
197
197
|
"lockedAt": "2025-01-01T00:00:00.000Z",
|
|
198
198
|
"repo": "JaimeHoracio/Ostacky",
|
|
199
|
-
"tag": "v0.
|
|
199
|
+
"tag": "v0.3.1",
|
|
200
200
|
"agents": {
|
|
201
201
|
"ostacky": {
|
|
202
|
-
"version": "0.
|
|
202
|
+
"version": "0.3.1",
|
|
203
203
|
"installedAt": "2025-01-01T00:00:00.000Z",
|
|
204
204
|
"sha256": "abc123..."
|
|
205
205
|
}
|
|
206
206
|
},
|
|
207
207
|
"commands": {
|
|
208
208
|
"install-stack": {
|
|
209
|
-
"version": "0.
|
|
209
|
+
"version": "0.3.1",
|
|
210
210
|
"installedAt": "2025-01-01T00:00:00.000Z",
|
|
211
211
|
"sha256": "def456..."
|
|
212
212
|
}
|
|
@@ -239,7 +239,7 @@ Es opcional y solo necesario si algo falló durante la instalación o si querés
|
|
|
239
239
|
## Seguridad
|
|
240
240
|
|
|
241
241
|
- `opencode.jsonc` se versiona en el repo para compartir permisos y MCP de forma reproducible.
|
|
242
|
-
- Las URLs de descarga usan **tags de GitHub** (ej. `v0.
|
|
242
|
+
- Las URLs de descarga usan **tags de GitHub** (ej. `v0.3.1`), nunca `main` — instalaciones reproducibles
|
|
243
243
|
- Cada path de archivo descargado es validado para prevenir **path traversal**
|
|
244
244
|
- Los archivos incluyen **checksum SHA-256** opcional; si el manifest lo define, el contenido se verifica antes de escribir
|
|
245
245
|
- El cache local (`~/.opencode/cache/`) también valida integridad al servir archivos cacheados
|
package/assets/agents/ostacky.md
CHANGED
|
@@ -106,13 +106,23 @@ Si el usuario no responde, **detenete y esperá**. No asumas un camino.
|
|
|
106
106
|
|
|
107
107
|
### 4. Execution
|
|
108
108
|
|
|
109
|
-
1.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
109
|
+
1. **Cargar AHORA el skill `execution-mode-evaluation` usando el Skill tool.**
|
|
110
|
+
Seguir el procedimiento del skill (Paso 0 a Paso 4) estrictamente, con reglas en orden de precedencia.
|
|
111
|
+
**No continuar al paso 2 hasta tener el output JSON del skill en contexto.**
|
|
112
|
+
Si el output no está disponible o está incompleto, recargar el skill.
|
|
113
|
+
|
|
114
|
+
2. **Elegir el modo SEGUN el output del skill:**
|
|
115
|
+
- Si `mode` es `"inline"` → ejecutar inline (norma general)
|
|
116
|
+
- Si `mode` es `"subagent-driven"` → ejecutar con subagentes
|
|
117
|
+
- Usar `phaseRecommendations` para planificar el orden de ejecucion:
|
|
118
|
+
* Ejecutar primero las fases con `mode: "inline"`
|
|
119
|
+
* Despues las fases con `mode: "subagent-driven"`
|
|
120
|
+
- Si el output no tiene `phaseRecommendations`, todo el cambio va en el modo global.
|
|
121
|
+
|
|
122
|
+
3. **Superpowers** es el unico orquestador de ejecucion, TDD, review y delegacion.
|
|
123
|
+
4. Los subagentes son **execution-only**.
|
|
124
|
+
5. Los subagentes no se usan para "hacerlo mas rapido" por defecto: se usan para aislar complejidad cuando eso reduce contexto total.
|
|
125
|
+
6. Los subagentes no crean proposals, no planifican, no inician nueva delegacion y no repiten retrieval ya resuelto por el coordinador.
|
|
116
126
|
|
|
117
127
|
### 5. Sync y cierre
|
|
118
128
|
|
|
@@ -153,6 +163,7 @@ Engram es el sistema de memoria persistente del stack. Su uso es **obligatorio y
|
|
|
153
163
|
|
|
154
164
|
- Discovery: `brainstorming`
|
|
155
165
|
- Planning: `writing-plans`
|
|
166
|
+
- Decision de ejecucion: `execution-mode-evaluation` (usar antes de implementar)
|
|
156
167
|
- Ejecucion compleja: `subagent-driven-development` o `dispatching-parallel-agents`
|
|
157
168
|
- Calidad y tests: `tdd`, `review`
|
|
158
169
|
- OpenSpec: `openspec-explore`, `openspec-propose`, `openspec-apply-change`, `openspec-archive-change`
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# execution-mode-evaluation
|
|
2
|
+
|
|
3
|
+
Decide entre ejecución **inline** o **subagent-driven** según datos concretos de CodeGraph. Evaluación multicapa: modo global + recomendaciones por fase.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Contexto de uso
|
|
8
|
+
|
|
9
|
+
El skill se carga dentro del flujo del agente Ostacky, específicamente en la etapa **Execution** cuando el cambio requiere una decisión informada (Nivel 1+ o Nivel 0+1 con spec):
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
┌──────────────┐
|
|
13
|
+
│ USER REQUEST │
|
|
14
|
+
└──────┬───────┘
|
|
15
|
+
▼
|
|
16
|
+
┌──────────────┐
|
|
17
|
+
│ 1. DISCOVERY │
|
|
18
|
+
│ (CodeGraph) │
|
|
19
|
+
└──────┬───────┘
|
|
20
|
+
▼
|
|
21
|
+
┌────────────┴────────────┐
|
|
22
|
+
▼ ▼
|
|
23
|
+
┌────────────────┐ ┌──────────────────┐
|
|
24
|
+
│ Nivel 0 │ │ Nivel 0+1 │
|
|
25
|
+
│ trivial │ │ │
|
|
26
|
+
└───────┬────────┘ └────────┬──────────┘
|
|
27
|
+
▼ ▼
|
|
28
|
+
Inline directo ┌────┴────┐
|
|
29
|
+
▼ ▼
|
|
30
|
+
OpenSpec Directo
|
|
31
|
+
│ │
|
|
32
|
+
▼ ▼
|
|
33
|
+
┌──────────┐ Inline directo
|
|
34
|
+
│ Planning │ (sin skill)
|
|
35
|
+
└────┬─────┘
|
|
36
|
+
▼
|
|
37
|
+
┌──────────────┐
|
|
38
|
+
│ Nivel 1+ │
|
|
39
|
+
│ (OpenSpec) │
|
|
40
|
+
└──────┬───────┘
|
|
41
|
+
▼
|
|
42
|
+
┌────────────────────────┐
|
|
43
|
+
│ 4. EXECUTION │
|
|
44
|
+
│ │
|
|
45
|
+
│ ┌── 1. Cargar SKILL ──┐│
|
|
46
|
+
│ │ Skill tool -> ││ <- FORZOSO
|
|
47
|
+
│ │ execution-mode- ││
|
|
48
|
+
│ │ evaluation ││
|
|
49
|
+
│ └─────────────────────┘│
|
|
50
|
+
│ ┌ NO CONTINUAR ┐│
|
|
51
|
+
│ │ SIN OUTPUT JSON ││
|
|
52
|
+
│ └─────────────────────┘│
|
|
53
|
+
│ │
|
|
54
|
+
│ 2. Elegir modo segun │
|
|
55
|
+
│ output del skill │
|
|
56
|
+
│ │
|
|
57
|
+
│ 3. Ejecutar │
|
|
58
|
+
└────────────────────────┘
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Flujo completo del skill
|
|
64
|
+
|
|
65
|
+
Los pasos que ejecuta el skill una vez cargado:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
69
|
+
│ 1. GATILLO │
|
|
70
|
+
│ │
|
|
71
|
+
│ Agent definition (ostacky.md) dice: │
|
|
72
|
+
│ "Cargar AHORA el skill execution-mode-evaluation" │
|
|
73
|
+
│ "No continuar sin el output JSON" │
|
|
74
|
+
│ │
|
|
75
|
+
│ → Se invoca el Skill tool → se carga este SKILL.md │
|
|
76
|
+
└──────────────────────────┬───────────────────────────────────┘
|
|
77
|
+
▼
|
|
78
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
79
|
+
│ 2. PASO 0 — CHECK DE DATOS │
|
|
80
|
+
│ │
|
|
81
|
+
│ ¿Ya hay codegraph_context en el contexto de la sesión? │
|
|
82
|
+
│ ├── SÍ y tiene los archivos por task → saltar Paso 1 │
|
|
83
|
+
│ └── NO o incompleto → continuar a Paso 1 │
|
|
84
|
+
└──────────────────────────┬───────────────────────────────────┘
|
|
85
|
+
▼
|
|
86
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
87
|
+
│ 3. PASO 1 — CODEGRAPH (si necesario) │
|
|
88
|
+
│ │
|
|
89
|
+
│ Ejecutar codegraph_context sobre el área del cambio │
|
|
90
|
+
│ Buscar: archivos, símbolos, relaciones │
|
|
91
|
+
│ │
|
|
92
|
+
│ Si hace falta más precisión: codegraph_impact │
|
|
93
|
+
│ │
|
|
94
|
+
│ Si CodeGraph no disponible: fallback a inline con conf 0.3 │
|
|
95
|
+
│ │
|
|
96
|
+
│ Output: datos de archivos y símbolos involucrados │
|
|
97
|
+
└──────────────────────────┬───────────────────────────────────┘
|
|
98
|
+
▼
|
|
99
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
100
|
+
│ 4. PASO 2 — MAPA DE DEPENDENCIAS │
|
|
101
|
+
│ │
|
|
102
|
+
│ Se construye con tasks.md + datos de CodeGraph: │
|
|
103
|
+
│ │
|
|
104
|
+
│ ┌─────────────────────────────────────────────────────┐ │
|
|
105
|
+
│ │ taskCount: cantidad total de tasks │ │
|
|
106
|
+
│ │ sharedFiles: { archivo → [tasks que lo modifican] }│ │
|
|
107
|
+
│ │ sequentialDeps: [taskA → taskB] │ │
|
|
108
|
+
│ │ filesPerTask: { task → [archivos] } │ │
|
|
109
|
+
│ │ estLines: líneas estimadas de cambio │ │
|
|
110
|
+
│ │ hasExplicitContract: diseño explícita contratos? │ │
|
|
111
|
+
│ └─────────────────────────────────────────────────────┘ │
|
|
112
|
+
└──────────────────────────┬───────────────────────────────────┘
|
|
113
|
+
▼
|
|
114
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
115
|
+
│ 5. PASO 3a — MODO GLOBAL │
|
|
116
|
+
│ │
|
|
117
|
+
│ 5 reglas en orden. La PRIMERA que se cumple decide. │
|
|
118
|
+
│ │
|
|
119
|
+
│ 1. ¿sharedFiles > 0? → INLINE │
|
|
120
|
+
│ 2. ¿sequentialDeps sin contrato? → INLINE │
|
|
121
|
+
│ 3. ¿taskCount < 4? → INLINE │
|
|
122
|
+
│ 4. ¿estLines < 30? → INLINE │
|
|
123
|
+
│ 5. Ninguna de las anteriores → SUBAGENT-DRIVEN │
|
|
124
|
+
│ │
|
|
125
|
+
│ Si el usuario dio instrucciones explícitas: │
|
|
126
|
+
│ → anulan todas las reglas, todas las fases heredan el modo │
|
|
127
|
+
└──────────────────────────┬───────────────────────────────────┘
|
|
128
|
+
▼
|
|
129
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
130
|
+
│ 6. PASO 3b — EVALUACIÓN POR FASES │
|
|
131
|
+
│ (solo si el modo global es INLINE) │
|
|
132
|
+
│ │
|
|
133
|
+
│ Si el modo global es SUBAGENT-DRIVEN → saltar este paso │
|
|
134
|
+
│ │
|
|
135
|
+
│ Por cada fase en tasks.md: │
|
|
136
|
+
│ │
|
|
137
|
+
│ ┌─────────────────────────────────────────────────────┐ │
|
|
138
|
+
│ │ a. ¿sharedFiles DENTRO de la fase? → INLINE │ │
|
|
139
|
+
│ │ b. ¿sharedFiles con fases INLINE? → INLINE │ │
|
|
140
|
+
│ │ c. ¿sequentialDeps sin contrato? → INLINE │ │
|
|
141
|
+
│ │ d. ¿taskCount < 4? → INLINE │ │
|
|
142
|
+
│ │ e. ¿estLines < 30? → INLINE │ │
|
|
143
|
+
│ │ f. Ninguna de las anteriores → SUBAGENT-DRIVEN │ │
|
|
144
|
+
│ └─────────────────────────────────────────────────────┘ │
|
|
145
|
+
│ │
|
|
146
|
+
│ Output: un modo por fase (no modifica el modo global) │
|
|
147
|
+
└──────────────────────────┬───────────────────────────────────┘
|
|
148
|
+
▼
|
|
149
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
150
|
+
│ 7. PASO 4 — OUTPUT JSON │
|
|
151
|
+
│ │
|
|
152
|
+
│ { │
|
|
153
|
+
│ "mode": "inline" | "subagent-driven", │
|
|
154
|
+
│ "confidence": 0.95, │
|
|
155
|
+
│ "reasons": ["..."], │
|
|
156
|
+
│ "globalRuleTriggered": 1, │
|
|
157
|
+
│ "taskAnalysis": { ... }, │
|
|
158
|
+
│ "phaseRecommendations": [ │
|
|
159
|
+
│ { "phase": "2. Core", "mode": "inline", ... }, │
|
|
160
|
+
│ { "phase": "4. Tests", "mode": "subagent-driven", ... } │
|
|
161
|
+
│ ] │
|
|
162
|
+
│ } │
|
|
163
|
+
└──────────────────────────┬───────────────────────────────────┘
|
|
164
|
+
▼
|
|
165
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
166
|
+
│ 8. POST-DECISIÓN │
|
|
167
|
+
│ │
|
|
168
|
+
│ Agent definition usa el output: │
|
|
169
|
+
│ │
|
|
170
|
+
│ - mode "inline" → el agente ejecuta todo en su sesión │
|
|
171
|
+
│ - mode "subagent-driven" → carga subagent-driven-development│
|
|
172
|
+
│ - phaseRecommendations: inline PRIMERO, subagent DESPUÉS │
|
|
173
|
+
│ │
|
|
174
|
+
│ Orden de fases: │
|
|
175
|
+
│ 1º Fases inline (establecen contratos) │
|
|
176
|
+
│ 2º Fases subagent-driven (consumen contratos) │
|
|
177
|
+
└──────────────────────────────────────────────────────────────┘
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Reglas que gobiernan la decisión
|
|
183
|
+
|
|
184
|
+
### Modo global (Paso 3a)
|
|
185
|
+
|
|
186
|
+
| Regla | Condición | Decisión |
|
|
187
|
+
|-------|-----------|----------|
|
|
188
|
+
| 1 | Archivos compartidos entre tasks | INLINE |
|
|
189
|
+
| 2 | Dependencias secuenciales sin contrato explícito | INLINE |
|
|
190
|
+
| 3 | Menos de 4 tasks | INLINE |
|
|
191
|
+
| 4 | Menos de 30 líneas estimadas | INLINE |
|
|
192
|
+
| 5 | Ninguna condición anterior | SUBAGENT-DRIVEN |
|
|
193
|
+
|
|
194
|
+
### Modo por fase (Paso 3b)
|
|
195
|
+
|
|
196
|
+
| Regla | Condición | Decisión |
|
|
197
|
+
|-------|-----------|----------|
|
|
198
|
+
| a | Archivos compartidos dentro de la fase | INLINE |
|
|
199
|
+
| b | Comparte archivos con fases inline | INLINE |
|
|
200
|
+
| c | Dependencias secuenciales sin contrato | INLINE |
|
|
201
|
+
| d | Menos de 4 tasks en la fase | INLINE |
|
|
202
|
+
| e | Menos de 30 líneas en la fase | INLINE |
|
|
203
|
+
| f | Ninguna condición anterior | SUBAGENT-DRIVEN |
|
|
204
|
+
|
|
205
|
+
### Excepciones
|
|
206
|
+
|
|
207
|
+
- **Instrucción del usuario** anula todo el skill — si el usuario dice "hacé todo inline" o "usá subagentes", eso tiene prioridad absoluta.
|
|
208
|
+
- **CodeGraph no disponible** — fallback a inline con confianza baja, no bloquear.
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Orden de ejecución recomendado
|
|
213
|
+
|
|
214
|
+
1. **Primero** fases con `mode: "inline"` — establecen interfaces, tipos y módulos
|
|
215
|
+
2. **Después** fases con `mode: "subagent-driven"` — consumen lo establecido
|
|
216
|
+
3. Si hay dependencias entre fases subagent-driven, respetar el orden de `tasks.md`
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Limitaciones
|
|
221
|
+
|
|
222
|
+
- El skill depende de CodeGraph para los datos. Si CodeGraph no está disponible, decide inline por defecto.
|
|
223
|
+
- Si `tasks.md` no está organizado en fases, `phaseRecommendations` será un array vacío.
|
|
224
|
+
- La decisión es point-in-time: si se agregan tasks a mitad de cambio, re-ejecutar el skill.
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: execution-mode-evaluation
|
|
3
|
+
description: Decide entre ejecución inline o subagent-driven según el análisis de CodeGraph. Úsalo cuando tengas tasks de implementación y necesites determinar el modo de ejecución óptimo.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Requires CodeGraph MCP server and OpenSpec tasks.md
|
|
6
|
+
metadata:
|
|
7
|
+
author: Ostacky
|
|
8
|
+
version: "1.0"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Skill: execution-mode-evaluation
|
|
12
|
+
|
|
13
|
+
## Propósito
|
|
14
|
+
|
|
15
|
+
Determinar el modo de ejecución óptimo entre **inline** y **subagent-driven** para un cambio, usando datos concretos de CodeGraph (no especulación del modelo). La decisión sigue reglas estrictas en orden de precedencia.
|
|
16
|
+
|
|
17
|
+
## Input necesario
|
|
18
|
+
|
|
19
|
+
El modelo DEBE tener disponible en contexto (o accesible vía el procedimiento):
|
|
20
|
+
|
|
21
|
+
| Dato | Fuente | Obligatorio |
|
|
22
|
+
|------|--------|-------------|
|
|
23
|
+
| Tasks del change | `tasks.md` del cambio activo | ✅ Sí |
|
|
24
|
+
| Archivos que modifica cada task | `codegraph_context` o lectura directa de tasks | ✅ Sí |
|
|
25
|
+
| Relaciones entre símbolos | `codegraph_context` | Recomendado |
|
|
26
|
+
| Blast radius por símbolo | `codegraph_impact` | Para alta precisión |
|
|
27
|
+
| Contratos explícitos entre tasks | `design.md` | Para evaluar dependencias |
|
|
28
|
+
|
|
29
|
+
## Procedimiento
|
|
30
|
+
|
|
31
|
+
Seguir los pasos en orden. No saltear ni reordenar.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
### Paso 0: Verificar datos existentes en contexto
|
|
36
|
+
|
|
37
|
+
Revisá el contexto actual de la sesión.
|
|
38
|
+
|
|
39
|
+
**Si ya tenés disponible:**
|
|
40
|
+
- El output de `codegraph_context` para el área del cambio **Y**
|
|
41
|
+
- Ese output incluye los archivos específicos que cada task modifica
|
|
42
|
+
|
|
43
|
+
→ **Saltá el Paso 1.** Usá los datos que ya están en contexto.
|
|
44
|
+
|
|
45
|
+
**Si no los tenés, o tenés dudas sobre su completitud:**
|
|
46
|
+
→ Ejecutá el Paso 1.
|
|
47
|
+
|
|
48
|
+
**Regla:** si el `codegraph_context` que tenés solo dio una visión general pero no alcanza a distinguir archivos por task, no es suficiente. Ejecutá de nuevo.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### Paso 1: Obtener datos de CodeGraph
|
|
53
|
+
|
|
54
|
+
Ejecutá esta consulta:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
codegraph_context con task: "<descripción del cambio>"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Buscá específicamente en el output:
|
|
61
|
+
- Lista de archivos involucrados
|
|
62
|
+
- Símbolos principales y sus archivos
|
|
63
|
+
- Relaciones (quién importa a quién, quién extiende a quién)
|
|
64
|
+
|
|
65
|
+
**Si el output es muy general o no distingue archivos por task:**
|
|
66
|
+
|
|
67
|
+
Ejecutá `codegraph_impact` sobre los símbolos centrales que aparezcan en el output. Esto te da el blast radius preciso de cada símbolo (qué archivos se rompen si lo cambiás).
|
|
68
|
+
|
|
69
|
+
**Si CodeGraph reporta que el proyecto no está inicializado:**
|
|
70
|
+
|
|
71
|
+
→ DEVOLVÉ: `{ "mode": "inline", "confidence": 0.3, "reasons": ["CodeGraph no disponible - fallback a inline"], "codegraphUsed": [] }`
|
|
72
|
+
|
|
73
|
+
No bloquees. En proyectos sin CodeGraph, la decisión por defecto es inline.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
### Paso 2: Construir mapa de dependencias
|
|
78
|
+
|
|
79
|
+
Con tasks.md + datos de CodeGraph, construí este mapa:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
taskCount: número total de tasks (solo las de implementación)
|
|
83
|
+
sharedFiles: { archivo -> [tasks que lo modifican] }
|
|
84
|
+
sequentialDeps: [ [taskA, taskB], ... ] // B necesita que A esté hecho
|
|
85
|
+
filesPerTask: { task -> [archivos que modifica] }
|
|
86
|
+
estLines: estimación conservadora de líneas totales de cambio
|
|
87
|
+
hasExplicitContract: true/false // design.md especifica contratos entre tasks?
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Para detectar sharedFiles:**
|
|
91
|
+
- Si dos tasks mencionan modificar el mismo archivo → sharedFile.
|
|
92
|
+
- Usá `codegraph_impact` si hay dudas sobre qué archivos toca cada símbolo.
|
|
93
|
+
|
|
94
|
+
**Para detectar sequentialDeps:**
|
|
95
|
+
- Buscá en tasks.md frases como: "extender", "usar lo creado en", "modificar el [módulo] de la task anterior", "depende de".
|
|
96
|
+
- Si task B dice "Update [X] to handle [Y]" y task A dice "Add [Y] to [X]" → dependencia secuencial.
|
|
97
|
+
- Si el diseño (design.md) explicita contratos (interfaces, tipos compartidos), la dependencia es manejable con subagentes.
|
|
98
|
+
|
|
99
|
+
**Para estimar estLines:**
|
|
100
|
+
- Tasks de configuración/setup: ~2-3 líneas
|
|
101
|
+
- Tasks de implementación simple (agregar un enum, un flag): ~5-10 líneas
|
|
102
|
+
- Tasks de implementación compleja (nuevo módulo, lógica): ~15-30 líneas
|
|
103
|
+
- Tasks de tests: ~10-20 líneas
|
|
104
|
+
- Tasks de documentación: ~5-15 líneas
|
|
105
|
+
|
|
106
|
+
No es necesario ser exacto. Una estimación conservadora alcanza.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
### Paso 3a: Modo global del cambio
|
|
111
|
+
|
|
112
|
+
Aplicar ESTRICTAMENTE en este orden. Evaluar cada condición. En la PRIMERA que se cumpla, esa es la decisión global.
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
1. SI sharedFiles tiene 1+ archivos compartidos entre 2+ tasks
|
|
116
|
+
→ INLINE (global)
|
|
117
|
+
→ Razón: "Archivos compartidos: {archivos}. Subagentes causarían conflictos de merge."
|
|
118
|
+
|
|
119
|
+
2. SI sequentialDeps tiene 1+ dependencias Y hasExplicitContract == false
|
|
120
|
+
→ INLINE (global)
|
|
121
|
+
→ Razón: "Dependencias secuenciales sin contrato explícito en design.md.
|
|
122
|
+
Subagentes podrían definir contratos inconsistentes."
|
|
123
|
+
|
|
124
|
+
EXCEPCIÓN: sequentialDeps pero hasExplicitContract == true
|
|
125
|
+
→ NO aplicar esta regla. Continuar a la siguiente.
|
|
126
|
+
|
|
127
|
+
3. SI taskCount < 4
|
|
128
|
+
→ INLINE (global)
|
|
129
|
+
→ Razón: "{taskCount} tasks. El overhead de dispatchear subagentes supera el beneficio."
|
|
130
|
+
|
|
131
|
+
4. SI estLines < 30
|
|
132
|
+
→ INLINE (global)
|
|
133
|
+
→ Razón: "Cambio pequeño (~{estLines} líneas). Inline es más eficiente en tokens."
|
|
134
|
+
|
|
135
|
+
5. SI NINGUNA condición anterior se cumplió
|
|
136
|
+
→ SUBAGENT-DRIVEN (global)
|
|
137
|
+
→ Razón: "{taskCount} tasks independientes sin archivos compartidos.
|
|
138
|
+
Subagentes aíslan contexto y evitan saturación."
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Importante:** a diferencia de antes, NO saltear las reglas restantes al encontrar la primera. Anotar cuál regla se cumplió y por qué, pero CONTINUAR al Paso 3b para evaluar por fases. Solo si el modo global es SUBAGENT-DRIVEN (regla 5), saltear el Paso 3b porque no hay fases que optimizar.
|
|
142
|
+
|
|
143
|
+
**Excepción global:** si el usuario dio instrucciones EXPLÍCITAS sobre el modo de ejecución
|
|
144
|
+
("hacé todo inline", "usá subagentes"), esas instrucciones tienen PRIORIDAD TOTAL sobre estas reglas. En ese caso, todas las fases heredan el modo del usuario.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
### Paso 3b: Evaluación por fases (solo si el modo global es inline)
|
|
149
|
+
|
|
150
|
+
Si el modo global es SUBAGENT-DRIVEN (regla 5), saltear este paso — todas las fases van como subagentes.
|
|
151
|
+
|
|
152
|
+
Si el modo global es INLINE (reglas 1-4), evaluar CADA FASE de `tasks.md` por separado para determinar si alguna puede ejecutarse como subagentes independientes.
|
|
153
|
+
|
|
154
|
+
**Para cada fase en tasks.md:**
|
|
155
|
+
|
|
156
|
+
1. Extraer solo las tasks de esa fase.
|
|
157
|
+
2. Construir un mapa reducido: sharedFiles intra-fase, sequentialDeps intra-fase, taskCount de la fase, estLines de la fase.
|
|
158
|
+
3. Verificar si las tasks de esta fase comparten archivos con tasks de fases que van inline (usar el mapa global del Paso 2).
|
|
159
|
+
4. Aplicar estas reglas en orden. La PRIMERA que se cumpla decide el modo de la fase:
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
a. SI sharedFiles intra-fase > 0
|
|
163
|
+
→ INLINE para esta fase
|
|
164
|
+
→ Razón: "Archivos compartidos dentro de la fase: {archivos}."
|
|
165
|
+
|
|
166
|
+
b. SI sharedFiles con fases inline > 0
|
|
167
|
+
→ INLINE para esta fase
|
|
168
|
+
→ Razón: "Comparte archivos con fase inline: {archivos}. Riesgo de conflictos cross-fase."
|
|
169
|
+
|
|
170
|
+
c. SI sequentialDeps intra-fase > 0 Y hasExplicitContract == false
|
|
171
|
+
→ INLINE para esta fase
|
|
172
|
+
→ Razón: "Dependencias secuenciales sin contrato explícito."
|
|
173
|
+
|
|
174
|
+
d. SI taskCount de la fase < 4
|
|
175
|
+
→ INLINE para esta fase
|
|
176
|
+
→ Razón: "{N} tasks en la fase. Overhead de subagentes no se amortiza."
|
|
177
|
+
|
|
178
|
+
e. SI estLines de la fase < 30
|
|
179
|
+
→ INLINE para esta fase
|
|
180
|
+
→ Razón: "Fase pequeña (~{N} líneas). Inline más eficiente."
|
|
181
|
+
|
|
182
|
+
f. SI NINGUNA condición anterior se cumplió
|
|
183
|
+
→ SUBAGENT-DRIVEN para esta fase
|
|
184
|
+
→ Razón: "{N} tasks independientes sin archivos compartidos."
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Output del Paso 3b:** una recomendación por fase. No modifica el modo global, pero le da al coordinador un plan de ejecución granular.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
### Paso 4: Devolver decisión
|
|
192
|
+
|
|
193
|
+
El output DEBE ser un JSON válido en este formato:
|
|
194
|
+
|
|
195
|
+
```json
|
|
196
|
+
{
|
|
197
|
+
"mode": "inline" | "subagent-driven",
|
|
198
|
+
"confidence": 0.0 - 1.0,
|
|
199
|
+
"reasons": ["razón principal", "razón secundaria"],
|
|
200
|
+
"codegraphUsed": ["codegraph_context"],
|
|
201
|
+
"globalRuleTriggered": 1,
|
|
202
|
+
"taskAnalysis": {
|
|
203
|
+
"taskCount": 13,
|
|
204
|
+
"sharedFiles": {
|
|
205
|
+
"src/logging.ts": ["2.2", "2.4", "2.5"]
|
|
206
|
+
},
|
|
207
|
+
"sequentialDeps": [],
|
|
208
|
+
"estLines": 45,
|
|
209
|
+
"hasExplicitContract": false
|
|
210
|
+
},
|
|
211
|
+
"phaseRecommendations": [
|
|
212
|
+
{
|
|
213
|
+
"phase": "2. Core Implementation",
|
|
214
|
+
"mode": "inline",
|
|
215
|
+
"reason": "Archivos compartidos dentro de la fase: src/logging.ts"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"phase": "4. Testing",
|
|
219
|
+
"mode": "subagent-driven",
|
|
220
|
+
"reason": "4 tests independientes sin archivos compartidos"
|
|
221
|
+
}
|
|
222
|
+
]
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Campos:**
|
|
227
|
+
|
|
228
|
+
| Campo | Descripción |
|
|
229
|
+
|-------|-------------|
|
|
230
|
+
| `mode` | Modo global: `inline` o `subagent-driven` |
|
|
231
|
+
| `confidence` | Qué tan seguro estás de la decisión (0.0 = nada, 1.0 = totalmente). Bajar si CodeGraph no se pudo usar. |
|
|
232
|
+
| `reasons` | Array de strings. La primera razón es la principal (por qué se gatilló la regla global). |
|
|
233
|
+
| `codegraphUsed` | Lista de tool calls de CodeGraph que se ejecutaron. Vacío si el Paso 0 encontró datos suficientes. |
|
|
234
|
+
| `globalRuleTriggered` | Número de la regla que decidió el modo global (1-5). Para trazabilidad. |
|
|
235
|
+
| `taskAnalysis` | Mapa global construido en el Paso 2. Incluir siempre para trazabilidad. |
|
|
236
|
+
| `phaseRecommendations` | Array con el modo recomendado por fase. Cada entrada tiene `phase`, `mode` y `reason`. Vacío si el modo global es subagent-driven o si tasks.md no tiene fases separadas. |
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Ejemplos
|
|
241
|
+
|
|
242
|
+
### Ejemplo 1: Multicapa — archivos compartidos, fases independientes
|
|
243
|
+
|
|
244
|
+
**Input:** change `update-ostacky-5-levels`
|
|
245
|
+
- Fase 2: 5 tasks de implementación (algunas comparten `src/logging.ts`)
|
|
246
|
+
- Fase 4: 4 tests independientes en `tests/*.ts`
|
|
247
|
+
- ~143 líneas totales
|
|
248
|
+
|
|
249
|
+
**Decisión:**
|
|
250
|
+
|
|
251
|
+
```json
|
|
252
|
+
{
|
|
253
|
+
"mode": "inline",
|
|
254
|
+
"confidence": 0.95,
|
|
255
|
+
"reasons": [
|
|
256
|
+
"Archivos compartidos: src/logging.ts (tasks 2.2, 2.4, 2.5). Subagentes causarían conflictos de merge.",
|
|
257
|
+
"Dependencias secuenciales: 2.1→2.2→2.4/2.5 sin contrato explícito en design.md."
|
|
258
|
+
],
|
|
259
|
+
"codegraphUsed": ["codegraph_context", "codegraph_search"],
|
|
260
|
+
"globalRuleTriggered": 1,
|
|
261
|
+
"taskAnalysis": {
|
|
262
|
+
"taskCount": 13,
|
|
263
|
+
"sharedFiles": {
|
|
264
|
+
"src/logging.ts": ["2.2", "2.4", "2.5"],
|
|
265
|
+
"src/cli.ts": ["2.3", "3.1"]
|
|
266
|
+
},
|
|
267
|
+
"sequentialDeps": [["2.1", "2.2"], ["2.2", "2.4"], ["2.2", "2.5"], ["2.1", "2.3"]],
|
|
268
|
+
"estLines": 143,
|
|
269
|
+
"hasExplicitContract": false
|
|
270
|
+
},
|
|
271
|
+
"phaseRecommendations": [
|
|
272
|
+
{
|
|
273
|
+
"phase": "2. Core Implementation",
|
|
274
|
+
"mode": "inline",
|
|
275
|
+
"reason": "Archivos compartidos dentro de la fase: src/logging.ts, src/cli.ts"
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"phase": "3. Documentation",
|
|
279
|
+
"mode": "inline",
|
|
280
|
+
"reason": "2 tasks en la fase. Overhead de subagentes no se amortiza."
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"phase": "4. Testing",
|
|
284
|
+
"mode": "subagent-driven",
|
|
285
|
+
"reason": "4 tests independientes sin archivos compartidos entre sí ni con fase inline."
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"phase": "5. Release & Cleanup",
|
|
289
|
+
"mode": "inline",
|
|
290
|
+
"reason": "2 tasks en la fase. Overhead de subagentes no se amortiza."
|
|
291
|
+
}
|
|
292
|
+
]
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Ejemplo 2: Cambio chico sin fases
|
|
297
|
+
|
|
298
|
+
**Input:**
|
|
299
|
+
- 3 tasks
|
|
300
|
+
- Archivos diferentes
|
|
301
|
+
- Sin dependencias
|
|
302
|
+
|
|
303
|
+
**Decisión:**
|
|
304
|
+
|
|
305
|
+
```json
|
|
306
|
+
{
|
|
307
|
+
"mode": "inline",
|
|
308
|
+
"confidence": 0.85,
|
|
309
|
+
"reasons": [
|
|
310
|
+
"3 tasks. El overhead de dispatchear subagentes supera el beneficio."
|
|
311
|
+
],
|
|
312
|
+
"codegraphUsed": [],
|
|
313
|
+
"globalRuleTriggered": 3,
|
|
314
|
+
"taskAnalysis": {
|
|
315
|
+
"taskCount": 3,
|
|
316
|
+
"sharedFiles": {},
|
|
317
|
+
"sequentialDeps": [],
|
|
318
|
+
"estLines": 20,
|
|
319
|
+
"hasExplicitContract": false
|
|
320
|
+
},
|
|
321
|
+
"phaseRecommendations": []
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### Ejemplo 3: Tasks globalmente independientes
|
|
326
|
+
|
|
327
|
+
**Input:**
|
|
328
|
+
- 8 tasks, cada una en su propio archivo
|
|
329
|
+
- Sin dependencias secuenciales
|
|
330
|
+
- ~120 líneas totales
|
|
331
|
+
|
|
332
|
+
**Decisión:**
|
|
333
|
+
|
|
334
|
+
```json
|
|
335
|
+
{
|
|
336
|
+
"mode": "subagent-driven",
|
|
337
|
+
"confidence": 0.9,
|
|
338
|
+
"reasons": [
|
|
339
|
+
"8 tasks independientes sin archivos compartidos. Subagentes evitan saturación de contexto."
|
|
340
|
+
],
|
|
341
|
+
"codegraphUsed": ["codegraph_context"],
|
|
342
|
+
"globalRuleTriggered": 5,
|
|
343
|
+
"taskAnalysis": {
|
|
344
|
+
"taskCount": 8,
|
|
345
|
+
"sharedFiles": {},
|
|
346
|
+
"sequentialDeps": [],
|
|
347
|
+
"estLines": 120,
|
|
348
|
+
"hasExplicitContract": false
|
|
349
|
+
},
|
|
350
|
+
"phaseRecommendations": []
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## Reglas complementarias
|
|
357
|
+
|
|
358
|
+
- **Fases sin tasks de implementación:** si una fase solo tiene tasks de documentación, release o configuración, evaluar igual pero con sesgo a inline (regla 3 y 4 suelen gatillar para fases de 1-3 tasks).
|
|
359
|
+
|
|
360
|
+
- **Orden de ejecución:** las fases con modo inline deben ejecutarse PRIMERO que las fases subagent-driven, porque las fases inline establecen los contratos (interfaces, tipos, módulos) que las fases subagent-driven consumen. Documentar el orden en `phaseRecommendations` incluyendo un orden sugerido de ejecución.
|
|
361
|
+
|
|
362
|
+
- **CodeGraph no disponible:** si el proyecto target no tiene CodeGraph inicializado, la decisión por defecto es inline global con confianza baja (0.3). No bloquear. Saltar Paso 3b.
|
|
363
|
+
|
|
364
|
+
- **Prioridad del usuario:** si el usuario explicitó el modo ("usá subagentes", "hacé todo inline"), esa instrucción anula cualquier decisión de este skill. Todas las fases heredan ese modo.
|
|
365
|
+
|
|
366
|
+
- **Re-evaluación:** si se agregan tasks a mitad del cambio, re-ejecutar este skill. Las condiciones pueden cambiar (nuevas fases, sharedFiles que aparecen o desaparecen).
|
|
367
|
+
|
|
368
|
+
## Orden de ejecución recomendado
|
|
369
|
+
|
|
370
|
+
Cuando hay `phaseRecommendations`, seguir este orden:
|
|
371
|
+
|
|
372
|
+
1. Ejecutar todas las fases marcadas como **inline** primero (establecen la base)
|
|
373
|
+
2. Después ejecutar las fases marcadas como **subagent-driven** (consumen la base)
|
|
374
|
+
3. Si una fase subagent-driven depende de los resultados de otra fase subagent-driven, ejecutarlas secuencialmente respetando el orden de fases en tasks.md
|
|
375
|
+
|
|
376
|
+
## Checklist de verificación
|
|
377
|
+
|
|
378
|
+
- [ ] ¿Ejecuté o verifiqué `codegraph_context`?
|
|
379
|
+
- [ ] ¿Construí el mapa de dependencias GLOBAL (Paso 2)?
|
|
380
|
+
- [ ] ¿Apliqué las reglas globales en orden? (1 → 2 → 3 → 4 → 5)
|
|
381
|
+
- [ ] ¿Anoté cuál regla global se gatilló?
|
|
382
|
+
- [ ] ¿Si el modo global es inline, ejecuté el Paso 3b por cada fase?
|
|
383
|
+
- [ ] ¿Para cada fase evalué sharedFiles intra-fase Y cross-fase?
|
|
384
|
+
- [ ] ¿El usuario dio instrucciones explícitas que anulen las reglas?
|
|
385
|
+
- [ ] ¿El output es JSON válido con todos los campos incluyendo `phaseRecommendations`?
|
package/dist/cli.js
CHANGED
|
@@ -161,7 +161,7 @@ var require_picocolors = __commonJS((exports, module) => {
|
|
|
161
161
|
// package.json
|
|
162
162
|
var package_default = {
|
|
163
163
|
name: "ostacky",
|
|
164
|
-
version: "0.
|
|
164
|
+
version: "0.3.1",
|
|
165
165
|
description: "Instalador interactivo de agentes y comandos para OpenCode",
|
|
166
166
|
type: "module",
|
|
167
167
|
bin: {
|
|
@@ -876,15 +876,15 @@ var L2 = () => {
|
|
|
876
876
|
import { join as join5 } from "path";
|
|
877
877
|
// manifest.json
|
|
878
878
|
var manifest_default = {
|
|
879
|
-
version: "0.
|
|
879
|
+
version: "0.3.1",
|
|
880
880
|
repo: "JaimeHoracio/Ostacky",
|
|
881
|
-
tag: "v0.
|
|
881
|
+
tag: "v0.3.1",
|
|
882
882
|
agents: [
|
|
883
883
|
{
|
|
884
884
|
name: "ostacky",
|
|
885
885
|
file: "assets/agents/ostacky.md",
|
|
886
886
|
description: "Agente principal de desarrollo con ejecución inline-first y local-first",
|
|
887
|
-
version: "0.
|
|
887
|
+
version: "0.3.1",
|
|
888
888
|
sha256: null
|
|
889
889
|
}
|
|
890
890
|
],
|
|
@@ -893,86 +893,93 @@ var manifest_default = {
|
|
|
893
893
|
name: "install-stack",
|
|
894
894
|
file: "assets/commands/install-stack.md",
|
|
895
895
|
description: "Instala el stack tecnológico del proyecto",
|
|
896
|
-
version: "0.
|
|
896
|
+
version: "0.3.1",
|
|
897
897
|
sha256: null
|
|
898
898
|
},
|
|
899
899
|
{
|
|
900
900
|
name: "opsx-sync",
|
|
901
901
|
file: "assets/commands/opsx-sync.md",
|
|
902
902
|
description: "Sincroniza delta specs del change activo (wrapper de openspec update)",
|
|
903
|
-
version: "0.
|
|
903
|
+
version: "0.3.1",
|
|
904
904
|
sha256: null
|
|
905
905
|
}
|
|
906
906
|
],
|
|
907
907
|
skills: [
|
|
908
|
+
{
|
|
909
|
+
name: "execution-mode-evaluation",
|
|
910
|
+
file: "assets/skills/execution-mode-evaluation/SKILL.md",
|
|
911
|
+
description: "Skill de decision de modo de ejecucion inline vs subagent-driven con CodeGraph",
|
|
912
|
+
version: "0.3.1",
|
|
913
|
+
sha256: "eaa7cd3205b22c6db79a5d5f542ea554d5f1ca2d57127490011ba3abe4cb912b"
|
|
914
|
+
},
|
|
908
915
|
{
|
|
909
916
|
name: "brainstorming",
|
|
910
917
|
file: "assets/skills/brainstorming/SKILL.md",
|
|
911
918
|
description: "Skill de descubrimiento y exploración (Superpowers)",
|
|
912
|
-
version: "0.
|
|
919
|
+
version: "0.3.1",
|
|
913
920
|
sha256: "ad15458c54912007ae3f708c698a11f0a4a58e2a7c7860a1ae8874db573c9e98"
|
|
914
921
|
},
|
|
915
922
|
{
|
|
916
923
|
name: "writing-plans",
|
|
917
924
|
file: "assets/skills/writing-plans/SKILL.md",
|
|
918
925
|
description: "Skill de planificación de implementación (Superpowers)",
|
|
919
|
-
version: "0.
|
|
926
|
+
version: "0.3.1",
|
|
920
927
|
sha256: "4d675df944b9c846e9066ff971861ad1c9673cd2c88375081b00a75872ad621a"
|
|
921
928
|
},
|
|
922
929
|
{
|
|
923
930
|
name: "tdd",
|
|
924
931
|
file: "assets/skills/tdd/SKILL.md",
|
|
925
932
|
description: "Skill de test-driven development (Superpowers)",
|
|
926
|
-
version: "0.
|
|
933
|
+
version: "0.3.1",
|
|
927
934
|
sha256: "7eacd8ee81dc5c0b85065c0392e37ee10314661f7edb59dd8e70a9e0dae8f371"
|
|
928
935
|
},
|
|
929
936
|
{
|
|
930
937
|
name: "subagent-driven-development",
|
|
931
938
|
file: "assets/skills/subagent-driven-development/SKILL.md",
|
|
932
939
|
description: "Skill de ejecución con subagentes (Superpowers)",
|
|
933
|
-
version: "0.
|
|
940
|
+
version: "0.3.1",
|
|
934
941
|
sha256: "14e0f685b1dc1d7e02b7226d18f037fe4b6cba49b512a1fadf67cfad2a9dcc96"
|
|
935
942
|
},
|
|
936
943
|
{
|
|
937
944
|
name: "dispatching-parallel-agents",
|
|
938
945
|
file: "assets/skills/dispatching-parallel-agents/SKILL.md",
|
|
939
946
|
description: "Skill de dispatch paralelo de agentes (Superpowers)",
|
|
940
|
-
version: "0.
|
|
947
|
+
version: "0.3.1",
|
|
941
948
|
sha256: "281edf0c38f358497c7e2066fa8217a2ba3e2a39b4205c4af0c41d328fc035a1"
|
|
942
949
|
},
|
|
943
950
|
{
|
|
944
951
|
name: "review",
|
|
945
952
|
file: "assets/skills/review/SKILL.md",
|
|
946
953
|
description: "Skill de revisión de código (Superpowers)",
|
|
947
|
-
version: "0.
|
|
954
|
+
version: "0.3.1",
|
|
948
955
|
sha256: "c78d3beff45e9bb6b5e9e1d7155910f379e082d7aaf3c61b90d651d09e0d2e2a"
|
|
949
956
|
},
|
|
950
957
|
{
|
|
951
958
|
name: "openspec-explore",
|
|
952
959
|
file: "assets/skills/openspec-explore/SKILL.md",
|
|
953
960
|
description: "Skill de exploración pre-spec (OpenSpec)",
|
|
954
|
-
version: "0.
|
|
961
|
+
version: "0.3.1",
|
|
955
962
|
sha256: "1c75cab8672c2eb8b12f27a0b31f0b7fdb73c21c72583c1e8a566e09fe4108a6"
|
|
956
963
|
},
|
|
957
964
|
{
|
|
958
965
|
name: "openspec-propose",
|
|
959
966
|
file: "assets/skills/openspec-propose/SKILL.md",
|
|
960
967
|
description: "Skill de generación de proposal (OpenSpec)",
|
|
961
|
-
version: "0.
|
|
968
|
+
version: "0.3.1",
|
|
962
969
|
sha256: "ab88e9aa22db09559ccf7987d08adc0469b7c6fbe46498e63a3b64926f19e66b"
|
|
963
970
|
},
|
|
964
971
|
{
|
|
965
972
|
name: "openspec-apply-change",
|
|
966
973
|
file: "assets/skills/openspec-apply-change/SKILL.md",
|
|
967
974
|
description: "Skill de aplicación de change (OpenSpec)",
|
|
968
|
-
version: "0.
|
|
975
|
+
version: "0.3.1",
|
|
969
976
|
sha256: "847c2f88a66e8d5946c1fec422a5367c89eca5340839b659bbaaeb6f0bdac487"
|
|
970
977
|
},
|
|
971
978
|
{
|
|
972
979
|
name: "openspec-archive-change",
|
|
973
980
|
file: "assets/skills/openspec-archive-change/SKILL.md",
|
|
974
981
|
description: "Skill de archivo de change (OpenSpec)",
|
|
975
|
-
version: "0.
|
|
982
|
+
version: "0.3.1",
|
|
976
983
|
sha256: "3d35905ec40a081b8fd77b144426e540c67b1f50cc5801b655313a4fdfaa087a"
|
|
977
984
|
}
|
|
978
985
|
]
|
|
@@ -1158,7 +1165,7 @@ function clearLockfile(opencodeRoot) {
|
|
|
1158
1165
|
const lockfile = readLockfile(opencodeRoot);
|
|
1159
1166
|
if (!lockfile) {
|
|
1160
1167
|
writeLockfile(opencodeRoot, {
|
|
1161
|
-
version: "0.
|
|
1168
|
+
version: "0.3.1",
|
|
1162
1169
|
lockedAt: new Date().toISOString(),
|
|
1163
1170
|
repo: "",
|
|
1164
1171
|
tag: "",
|
|
@@ -1569,12 +1576,14 @@ async function loadLatestManifest() {
|
|
|
1569
1576
|
}
|
|
1570
1577
|
function printPostInstallSteps() {
|
|
1571
1578
|
ye([
|
|
1572
|
-
"
|
|
1573
|
-
"
|
|
1574
|
-
"
|
|
1575
|
-
"
|
|
1579
|
+
"Iniciá OpenCode (si no está corriendo):",
|
|
1580
|
+
" TUI → opencode",
|
|
1581
|
+
" Web → opencode web --port 4096",
|
|
1582
|
+
"Escribí @Ostacky en el chat (TUI o web) para invocar al agente",
|
|
1583
|
+
"Skills bundleadas en .opencode/skills/ — revisá cuáles activás",
|
|
1584
|
+
"¿Errores en el stack? Ejecutá /install-stack desde el chat de OpenCode"
|
|
1576
1585
|
].join(`
|
|
1577
|
-
|
|
1586
|
+
`), "Próximos pasos");
|
|
1578
1587
|
}
|
|
1579
1588
|
async function doInstallStack() {
|
|
1580
1589
|
const spin = L2();
|
package/manifest.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.3.1",
|
|
3
3
|
"repo": "JaimeHoracio/Ostacky",
|
|
4
|
-
"tag": "v0.
|
|
4
|
+
"tag": "v0.3.1",
|
|
5
5
|
"agents": [
|
|
6
6
|
{
|
|
7
7
|
"name": "ostacky",
|
|
8
8
|
"file": "assets/agents/ostacky.md",
|
|
9
9
|
"description": "Agente principal de desarrollo con ejecución inline-first y local-first",
|
|
10
|
-
"version": "0.
|
|
10
|
+
"version": "0.3.1",
|
|
11
11
|
"sha256": null
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -16,86 +16,93 @@
|
|
|
16
16
|
"name": "install-stack",
|
|
17
17
|
"file": "assets/commands/install-stack.md",
|
|
18
18
|
"description": "Instala el stack tecnológico del proyecto",
|
|
19
|
-
"version": "0.
|
|
19
|
+
"version": "0.3.1",
|
|
20
20
|
"sha256": null
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
"name": "opsx-sync",
|
|
24
24
|
"file": "assets/commands/opsx-sync.md",
|
|
25
25
|
"description": "Sincroniza delta specs del change activo (wrapper de openspec update)",
|
|
26
|
-
"version": "0.
|
|
26
|
+
"version": "0.3.1",
|
|
27
27
|
"sha256": null
|
|
28
28
|
}
|
|
29
29
|
],
|
|
30
30
|
"skills": [
|
|
31
|
+
{
|
|
32
|
+
"name": "execution-mode-evaluation",
|
|
33
|
+
"file": "assets/skills/execution-mode-evaluation/SKILL.md",
|
|
34
|
+
"description": "Skill de decision de modo de ejecucion inline vs subagent-driven con CodeGraph",
|
|
35
|
+
"version": "0.3.1",
|
|
36
|
+
"sha256": "eaa7cd3205b22c6db79a5d5f542ea554d5f1ca2d57127490011ba3abe4cb912b"
|
|
37
|
+
},
|
|
31
38
|
{
|
|
32
39
|
"name": "brainstorming",
|
|
33
40
|
"file": "assets/skills/brainstorming/SKILL.md",
|
|
34
41
|
"description": "Skill de descubrimiento y exploración (Superpowers)",
|
|
35
|
-
"version": "0.
|
|
42
|
+
"version": "0.3.1",
|
|
36
43
|
"sha256": "ad15458c54912007ae3f708c698a11f0a4a58e2a7c7860a1ae8874db573c9e98"
|
|
37
44
|
},
|
|
38
45
|
{
|
|
39
46
|
"name": "writing-plans",
|
|
40
47
|
"file": "assets/skills/writing-plans/SKILL.md",
|
|
41
48
|
"description": "Skill de planificación de implementación (Superpowers)",
|
|
42
|
-
"version": "0.
|
|
49
|
+
"version": "0.3.1",
|
|
43
50
|
"sha256": "4d675df944b9c846e9066ff971861ad1c9673cd2c88375081b00a75872ad621a"
|
|
44
51
|
},
|
|
45
52
|
{
|
|
46
53
|
"name": "tdd",
|
|
47
54
|
"file": "assets/skills/tdd/SKILL.md",
|
|
48
55
|
"description": "Skill de test-driven development (Superpowers)",
|
|
49
|
-
"version": "0.
|
|
56
|
+
"version": "0.3.1",
|
|
50
57
|
"sha256": "7eacd8ee81dc5c0b85065c0392e37ee10314661f7edb59dd8e70a9e0dae8f371"
|
|
51
58
|
},
|
|
52
59
|
{
|
|
53
60
|
"name": "subagent-driven-development",
|
|
54
61
|
"file": "assets/skills/subagent-driven-development/SKILL.md",
|
|
55
62
|
"description": "Skill de ejecución con subagentes (Superpowers)",
|
|
56
|
-
"version": "0.
|
|
63
|
+
"version": "0.3.1",
|
|
57
64
|
"sha256": "14e0f685b1dc1d7e02b7226d18f037fe4b6cba49b512a1fadf67cfad2a9dcc96"
|
|
58
65
|
},
|
|
59
66
|
{
|
|
60
67
|
"name": "dispatching-parallel-agents",
|
|
61
68
|
"file": "assets/skills/dispatching-parallel-agents/SKILL.md",
|
|
62
69
|
"description": "Skill de dispatch paralelo de agentes (Superpowers)",
|
|
63
|
-
"version": "0.
|
|
70
|
+
"version": "0.3.1",
|
|
64
71
|
"sha256": "281edf0c38f358497c7e2066fa8217a2ba3e2a39b4205c4af0c41d328fc035a1"
|
|
65
72
|
},
|
|
66
73
|
{
|
|
67
74
|
"name": "review",
|
|
68
75
|
"file": "assets/skills/review/SKILL.md",
|
|
69
76
|
"description": "Skill de revisión de código (Superpowers)",
|
|
70
|
-
"version": "0.
|
|
77
|
+
"version": "0.3.1",
|
|
71
78
|
"sha256": "c78d3beff45e9bb6b5e9e1d7155910f379e082d7aaf3c61b90d651d09e0d2e2a"
|
|
72
79
|
},
|
|
73
80
|
{
|
|
74
81
|
"name": "openspec-explore",
|
|
75
82
|
"file": "assets/skills/openspec-explore/SKILL.md",
|
|
76
83
|
"description": "Skill de exploración pre-spec (OpenSpec)",
|
|
77
|
-
"version": "0.
|
|
84
|
+
"version": "0.3.1",
|
|
78
85
|
"sha256": "1c75cab8672c2eb8b12f27a0b31f0b7fdb73c21c72583c1e8a566e09fe4108a6"
|
|
79
86
|
},
|
|
80
87
|
{
|
|
81
88
|
"name": "openspec-propose",
|
|
82
89
|
"file": "assets/skills/openspec-propose/SKILL.md",
|
|
83
90
|
"description": "Skill de generación de proposal (OpenSpec)",
|
|
84
|
-
"version": "0.
|
|
91
|
+
"version": "0.3.1",
|
|
85
92
|
"sha256": "ab88e9aa22db09559ccf7987d08adc0469b7c6fbe46498e63a3b64926f19e66b"
|
|
86
93
|
},
|
|
87
94
|
{
|
|
88
95
|
"name": "openspec-apply-change",
|
|
89
96
|
"file": "assets/skills/openspec-apply-change/SKILL.md",
|
|
90
97
|
"description": "Skill de aplicación de change (OpenSpec)",
|
|
91
|
-
"version": "0.
|
|
98
|
+
"version": "0.3.1",
|
|
92
99
|
"sha256": "847c2f88a66e8d5946c1fec422a5367c89eca5340839b659bbaaeb6f0bdac487"
|
|
93
100
|
},
|
|
94
101
|
{
|
|
95
102
|
"name": "openspec-archive-change",
|
|
96
103
|
"file": "assets/skills/openspec-archive-change/SKILL.md",
|
|
97
104
|
"description": "Skill de archivo de change (OpenSpec)",
|
|
98
|
-
"version": "0.
|
|
105
|
+
"version": "0.3.1",
|
|
99
106
|
"sha256": "3d35905ec40a081b8fd77b144426e540c67b1f50cc5801b655313a4fdfaa087a"
|
|
100
107
|
}
|
|
101
108
|
]
|