ostacky 0.2.0 → 0.3.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/README.md CHANGED
@@ -193,20 +193,20 @@ Tras instalar, el proyecto queda así:
193
193
 
194
194
  ```json
195
195
  {
196
- "version": "0.2.0",
196
+ "version": "0.3.0",
197
197
  "lockedAt": "2025-01-01T00:00:00.000Z",
198
198
  "repo": "JaimeHoracio/Ostacky",
199
- "tag": "v0.2.0",
199
+ "tag": "v0.3.0",
200
200
  "agents": {
201
201
  "ostacky": {
202
- "version": "0.2.0",
202
+ "version": "0.3.0",
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.2.0",
209
+ "version": "0.3.0",
210
210
  "installedAt": "2025-01-01T00:00:00.000Z",
211
211
  "sha256": "def456..."
212
212
  }
@@ -220,25 +220,26 @@ Se recomienda agregar `ostacky-lock.json` al control de versiones para que el eq
220
220
 
221
221
  Al terminar la instalación, el flujo normal es:
222
222
 
223
- 1. **Recargar OpenCode** para que detecte los nuevos archivos en `.opencode/`.
224
- 2. Ya puedes usar el agente:
225
- ```
226
- @Ostacky
227
- ```
228
- o seleccionarlo desde la interfaz de OpenCode según la configuración del proyecto. `@Ostacky` invoca al agente que el CLI instaló en `.opencode/agents/ostacky.md`.
223
+ 1. **Iniciar OpenCode** (si no está corriendo):
224
+ - **TUI:** `opencode` en tu terminal
225
+ - **Web:** `opencode web --port 4096` y abrí `http://localhost:4096`
226
+ 2. OpenCode detecta automáticamente los archivos nuevos en `.opencode/` al iniciar, no necesita recarga manual.
227
+ 3. Para usar el agente **escribí `@Ostacky`** en el chat de OpenCode (TUI o web) y enviá tu mensaje. También podés seleccionarlo desde el selector de agentes si tu versión de OpenCode lo soporta.
229
228
 
230
- Si por alguna razon querés ejecutar el bootstrap manualmente o regenerar el stack local, también está disponible el command:
229
+ ### Regenerar el stack manualmente
231
230
 
232
- ```bash
233
- /install-stack
231
+ El comando `/install-stack` también está disponible **dentro del chat de OpenCode** (TUI o web) por si querés regenerar el stack local sin salir de la sesión:
232
+
233
+ ```text
234
+ @Ostacky /install-stack
234
235
  ```
235
236
 
236
- Ese paso es opcional. Si no aparece en la terminal, recargá OpenCode y volvé a tipearlo.
237
+ Es opcional y solo necesario si algo falló durante la instalación o si querés verificar que todo esté en orden.
237
238
 
238
239
  ## Seguridad
239
240
 
240
241
  - `opencode.jsonc` se versiona en el repo para compartir permisos y MCP de forma reproducible.
241
- - Las URLs de descarga usan **tags de GitHub** (ej. `v0.2.0`), nunca `main` — instalaciones reproducibles
242
+ - Las URLs de descarga usan **tags de GitHub** (ej. `v0.3.0`), nunca `main` — instalaciones reproducibles
242
243
  - Cada path de archivo descargado es validado para prevenir **path traversal**
243
244
  - Los archivos incluyen **checksum SHA-256** opcional; si el manifest lo define, el contenido se verifica antes de escribir
244
245
  - El cache local (`~/.opencode/cache/`) también valida integridad al servir archivos cacheados
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Agente unico que orquesta OpenSpec + Superpowers + CodeGraph con ruteo inline-first por nivel de impacto y subagentes solo para trabajo realmente independiente.
2
+ description: Agente unico que orquesta CodeGraph + OpenSpec + Superpowers + Engram + Context7 con ruteo inline-first por nivel de impacto y subagentes solo para trabajo realmente independiente.
3
3
  mode: primary
4
4
  ---
5
5
 
@@ -15,11 +15,11 @@ Eres **Ostacky**, el orquestador de desarrollo del proyecto.
15
15
 
16
16
  ## Regla de oro (obligatoria)
17
17
 
18
- **Siempre describí tu interpretación del cambio al usuario ANTES de actuar.** No importa si te parece obvio o trivial. Mostrale qué entendés, a qué nivel de impacto corresponde y preguntale cómo proceder. Sin esa validación no ejecutes nada. El usuario es quien decide el camino.
18
+ **Siempre describí tu interpretación del cambio al usuario ANTES de actuar.** No importa si te parece obvio o trivial. Sin esa validación no ejecutes nada. El usuario es quien decide el camino.
19
19
 
20
20
  Patrón obligatorio en cada interacción:
21
21
  1. **Interpretá** — "Entendé que querés [X]. Esto afecta a [archivos/áreas]. Lo clasifico como Nivel [0/0+1/1+] porque [razón breve]."
22
- 2. **Preguntá** — "¿Estás de acuerdo? ¿Querés que genere spec con OpenSpec o lo ejecuto directo?"
22
+ 2. **Preguntá** — Según el nivel: para Nivel 0/0+1 → "¿Querés spec con OpenSpec o lo ejecuto directo?"; para Nivel 1+ → "Requiere spec con OpenSpec. ¿Procedo?"
23
23
  3. **Esperá** — No asumas respuesta. Si el usuario no responde, detenete y esperá.
24
24
  4. **Actuá** — Recién después de la confirmación, seguí el flujo correspondiente.
25
25
 
@@ -35,14 +35,9 @@ Patrón obligatorio en cada interacción:
35
35
 
36
36
  ## Flujo obligatorio
37
37
 
38
- ### 0. Presentación (siempre ejecutar primero)
38
+ ### 0. Presentación (antes de Discovery)
39
39
 
40
- Este paso es **obligatorio antes de cualquier consulta técnica**. Sin excepción.
41
-
42
- 1. Escuchá el pedido del usuario.
43
- 2. Describí tu interpretación: qué entendés que hay que hacer, qué archivos/áreas están involucrados y por qué clasificás el cambio en ese nivel.
44
- 3. Preguntá al usuario si está de acuerdo con la clasificación y si quiere spec o directo (adaptá la pregunta al nivel).
45
- 4. Recién después de recibir confirmación explícita, pasá a Discovery.
40
+ Aplicá la **Regla de oro** antes de cualquier consulta técnica. Escuchá el pedido, aplicá el patrón Interpretá → Preguntá → Esperá → Actuá, y recién después de recibir confirmación explícita pasá a Discovery.
46
41
 
47
42
  ### 1. Discovery
48
43
 
@@ -111,13 +106,23 @@ Si el usuario no responde, **detenete y esperá**. No asumas un camino.
111
106
 
112
107
  ### 4. Execution
113
108
 
114
- 1. Elegir el modo antes de ejecutar:
115
- - **Inline** para Nivel 0, la ruta `directo` de Nivel 0+1 y cambios contenidos de Nivel 1+.
116
- - **Subagent-driven** solo si la tarea se puede partir en slices autonomos con briefs mucho mas chicos que el contexto del coordinador y sin estado compartido.
117
- 2. **Superpowers** es el unico orquestador de ejecucion, TDD, review y delegacion.
118
- 3. Los subagentes son **execution-only**.
119
- 4. Los subagentes no se usan para "hacerlo mas rapido" por defecto: se usan para aislar complejidad cuando eso reduce contexto total.
120
- 5. Los subagentes no crean proposals, no planifican, no inician nueva delegacion y no repiten retrieval ya resuelto por el coordinador.
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.
121
126
 
122
127
  ### 5. Sync y cierre
123
128
 
@@ -158,10 +163,11 @@ Engram es el sistema de memoria persistente del stack. Su uso es **obligatorio y
158
163
 
159
164
  - Discovery: `brainstorming`
160
165
  - Planning: `writing-plans`
166
+ - Decision de ejecucion: `execution-mode-evaluation` (usar antes de implementar)
161
167
  - Ejecucion compleja: `subagent-driven-development` o `dispatching-parallel-agents`
162
168
  - Calidad y tests: `tdd`, `review`
163
169
  - OpenSpec: `openspec-explore`, `openspec-propose`, `openspec-apply-change`, `openspec-archive-change`
164
- - Documentacion viva de librerias/APIs: `context7` (skill instalado por `npx ctx7 setup --opencode`)
170
+ - Documentacion viva de librerias/APIs: `context7` (no incluida en el bundle; se instala por separado con `npx ctx7 setup --opencode`)
165
171
  - Comandos: `/opsx:propose`, `/opsx:apply`, `/opsx:sync`, `/opsx:archive`
166
172
 
167
173
  ### Cuándo usar Context7
@@ -3,7 +3,7 @@ description: Instala CodeGraph, skills curadas, OpenSpec, Engram y Context7 loca
3
3
  agent: build
4
4
  ---
5
5
 
6
- Instala el stack tecnológico de desarrollo. NOTA: `npx ostacky install` ahora instala automáticamente CodeGraph, OpenSpec, Engram y Context7. Este comando queda como referencia/documentación para instalación manual o verificación.
6
+ Instala el stack tecnológico de desarrollo para OpenCode. **IMPORTANTE:** las herramientas se instalan por separado (cada una con su propio CLI/comando). `npx ostacky install` solo instala el agente y commands de Ostacky en `.opencode/`. Este comando (`/install-stack`) es la guía de referencia para la instalación manual completa paso a paso.
7
7
 
8
8
  **RESTRICCIÓN ABSOLUTA:** instalar ÚNICAMENTE para OpenCode. Está terminantemente prohibido crear o modificar archivos en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/`, `.antigravity/`, `.windsurf/` o cualquier otro directorio de plataformas externas.
9
9
 
@@ -41,7 +41,7 @@ Verifica que el MCP server esté configurado en `opencode.json` (campo `mcpServe
41
41
 
42
42
  ## Paso 2 — Skills curadas (bundleadas)
43
43
 
44
- Las 10 skills curadas están bundleadas dentro del paquete Ostacky en `assets/skills/`. No se descargan ni clonan en tiempo de install; ya vienen en el paquete npm.
44
+ Las **10 skills curadas del set base** (6 Superpowers + 4 OpenSpec) están bundleadas dentro del paquete Ostacky en `assets/skills/`. No se descargan ni clonan; ya vienen en el paquete npm. Context7 agrega su propia skill aparte (Paso 6).
45
45
 
46
46
  Copiá cada skill bundleada a `.opencode/skills/<nombre>/` preservando la estructura interna (incluyendo `SKILL.md` y cualquier subdirectorio como `scripts/` o `references/`):
47
47
 
@@ -112,7 +112,7 @@ openspec update
112
112
 
113
113
  [Engram](https://github.com/Gentleman-Programming/engram) es el sistema de memoria persistente para agentes de IA. Se instala como un único binario Go con SQLite + FTS5, sin Node.js, Python ni Docker.
114
114
 
115
- **RESTRICCIÓN:** configurar ÚNICAMENTE para OpenCode. No crear archivos en `.claude/`, `.cursor/` ni otros directorios de otras plataformas.
115
+ **RESTRICCIÓN:** configurar ÚNICAMENTE para OpenCode. Está terminantemente prohibido crear archivos en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/`, `.antigravity/`, `.windsurf/` o cualquier otro directorio de plataformas externas.
116
116
 
117
117
  ### Verificar instalación actual
118
118
 
@@ -204,7 +204,7 @@ Corre en el puerto 7437 por defecto. Los datos se almacenan en `~/.engram/engram
204
204
 
205
205
  [Context7](https://context7.com) provee documentación actualizada de librerías y APIs directamente en el contexto del agente. Se instala como un CLI vía `npx`, sin dependencias globales ni MCP server necesario (aunque también soporta MCP).
206
206
 
207
- **RESTRICCIÓN:** configurar ÚNICAMENTE para OpenCode. No crear archivos en `.claude/`, `.cursor/` ni otros directorios de otras plataformas.
207
+ **RESTRICCIÓN:** configurar ÚNICAMENTE para OpenCode. Está terminantemente prohibido crear archivos en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/`, `.antigravity/`, `.windsurf/` o cualquier otro directorio de plataformas externas.
208
208
 
209
209
  ### Verificar instalación actual
210
210
 
@@ -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.2.0",
164
+ version: "0.3.0",
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.2.0",
879
+ version: "0.3.0",
880
880
  repo: "JaimeHoracio/Ostacky",
881
- tag: "v0.2.0",
881
+ tag: "v0.3.0",
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.2.0",
887
+ version: "0.3.0",
888
888
  sha256: null
889
889
  }
890
890
  ],
@@ -893,14 +893,14 @@ 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.2.0",
896
+ version: "0.3.0",
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.2.0",
903
+ version: "0.3.0",
904
904
  sha256: null
905
905
  }
906
906
  ],
@@ -909,70 +909,70 @@ var manifest_default = {
909
909
  name: "brainstorming",
910
910
  file: "assets/skills/brainstorming/SKILL.md",
911
911
  description: "Skill de descubrimiento y exploración (Superpowers)",
912
- version: "0.2.0",
912
+ version: "0.3.0",
913
913
  sha256: "ad15458c54912007ae3f708c698a11f0a4a58e2a7c7860a1ae8874db573c9e98"
914
914
  },
915
915
  {
916
916
  name: "writing-plans",
917
917
  file: "assets/skills/writing-plans/SKILL.md",
918
918
  description: "Skill de planificación de implementación (Superpowers)",
919
- version: "0.2.0",
919
+ version: "0.3.0",
920
920
  sha256: "4d675df944b9c846e9066ff971861ad1c9673cd2c88375081b00a75872ad621a"
921
921
  },
922
922
  {
923
923
  name: "tdd",
924
924
  file: "assets/skills/tdd/SKILL.md",
925
925
  description: "Skill de test-driven development (Superpowers)",
926
- version: "0.2.0",
926
+ version: "0.3.0",
927
927
  sha256: "7eacd8ee81dc5c0b85065c0392e37ee10314661f7edb59dd8e70a9e0dae8f371"
928
928
  },
929
929
  {
930
930
  name: "subagent-driven-development",
931
931
  file: "assets/skills/subagent-driven-development/SKILL.md",
932
932
  description: "Skill de ejecución con subagentes (Superpowers)",
933
- version: "0.2.0",
933
+ version: "0.3.0",
934
934
  sha256: "14e0f685b1dc1d7e02b7226d18f037fe4b6cba49b512a1fadf67cfad2a9dcc96"
935
935
  },
936
936
  {
937
937
  name: "dispatching-parallel-agents",
938
938
  file: "assets/skills/dispatching-parallel-agents/SKILL.md",
939
939
  description: "Skill de dispatch paralelo de agentes (Superpowers)",
940
- version: "0.2.0",
940
+ version: "0.3.0",
941
941
  sha256: "281edf0c38f358497c7e2066fa8217a2ba3e2a39b4205c4af0c41d328fc035a1"
942
942
  },
943
943
  {
944
944
  name: "review",
945
945
  file: "assets/skills/review/SKILL.md",
946
946
  description: "Skill de revisión de código (Superpowers)",
947
- version: "0.2.0",
947
+ version: "0.3.0",
948
948
  sha256: "c78d3beff45e9bb6b5e9e1d7155910f379e082d7aaf3c61b90d651d09e0d2e2a"
949
949
  },
950
950
  {
951
951
  name: "openspec-explore",
952
952
  file: "assets/skills/openspec-explore/SKILL.md",
953
953
  description: "Skill de exploración pre-spec (OpenSpec)",
954
- version: "0.2.0",
954
+ version: "0.3.0",
955
955
  sha256: "1c75cab8672c2eb8b12f27a0b31f0b7fdb73c21c72583c1e8a566e09fe4108a6"
956
956
  },
957
957
  {
958
958
  name: "openspec-propose",
959
959
  file: "assets/skills/openspec-propose/SKILL.md",
960
960
  description: "Skill de generación de proposal (OpenSpec)",
961
- version: "0.2.0",
961
+ version: "0.3.0",
962
962
  sha256: "ab88e9aa22db09559ccf7987d08adc0469b7c6fbe46498e63a3b64926f19e66b"
963
963
  },
964
964
  {
965
965
  name: "openspec-apply-change",
966
966
  file: "assets/skills/openspec-apply-change/SKILL.md",
967
967
  description: "Skill de aplicación de change (OpenSpec)",
968
- version: "0.2.0",
968
+ version: "0.3.0",
969
969
  sha256: "847c2f88a66e8d5946c1fec422a5367c89eca5340839b659bbaaeb6f0bdac487"
970
970
  },
971
971
  {
972
972
  name: "openspec-archive-change",
973
973
  file: "assets/skills/openspec-archive-change/SKILL.md",
974
974
  description: "Skill de archivo de change (OpenSpec)",
975
- version: "0.2.0",
975
+ version: "0.3.0",
976
976
  sha256: "3d35905ec40a081b8fd77b144426e540c67b1f50cc5801b655313a4fdfaa087a"
977
977
  }
978
978
  ]
@@ -1158,7 +1158,7 @@ function clearLockfile(opencodeRoot) {
1158
1158
  const lockfile = readLockfile(opencodeRoot);
1159
1159
  if (!lockfile) {
1160
1160
  writeLockfile(opencodeRoot, {
1161
- version: "0.2.0",
1161
+ version: "0.3.0",
1162
1162
  lockedAt: new Date().toISOString(),
1163
1163
  repo: "",
1164
1164
  tag: "",
@@ -1569,12 +1569,14 @@ async function loadLatestManifest() {
1569
1569
  }
1570
1570
  function printPostInstallSteps() {
1571
1571
  ye([
1572
- "Recargá OpenCode",
1573
- "Usá @Ostacky para invocar al agente",
1574
- "Las skills bundleadas viven en .opencode/skills/ revisá cuáles activás",
1575
- "Si ves errores en la instalación del stack, ejecutá /install-stack desde OpenCode como referencia"
1572
+ "Iniciá OpenCode (si no está corriendo):",
1573
+ " TUI opencode",
1574
+ " Web opencode web --port 4096",
1575
+ "Escribí @Ostacky en el chat (TUI o web) para invocar al agente",
1576
+ "Skills bundleadas en .opencode/skills/ — revisá cuáles activás",
1577
+ "¿Errores en el stack? Ejecutá /install-stack desde el chat de OpenCode"
1576
1578
  ].join(`
1577
- `), "Próximos pasos");
1579
+ `), "Próximos pasos");
1578
1580
  }
1579
1581
  async function doInstallStack() {
1580
1582
  const spin = L2();
package/manifest.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
- "version": "0.2.0",
2
+ "version": "0.3.0",
3
3
  "repo": "JaimeHoracio/Ostacky",
4
- "tag": "v0.2.0",
4
+ "tag": "v0.3.0",
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.2.0",
10
+ "version": "0.3.0",
11
11
  "sha256": null
12
12
  }
13
13
  ],
@@ -16,14 +16,14 @@
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.2.0",
19
+ "version": "0.3.0",
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.2.0",
26
+ "version": "0.3.0",
27
27
  "sha256": null
28
28
  }
29
29
  ],
@@ -32,70 +32,70 @@
32
32
  "name": "brainstorming",
33
33
  "file": "assets/skills/brainstorming/SKILL.md",
34
34
  "description": "Skill de descubrimiento y exploración (Superpowers)",
35
- "version": "0.2.0",
35
+ "version": "0.3.0",
36
36
  "sha256": "ad15458c54912007ae3f708c698a11f0a4a58e2a7c7860a1ae8874db573c9e98"
37
37
  },
38
38
  {
39
39
  "name": "writing-plans",
40
40
  "file": "assets/skills/writing-plans/SKILL.md",
41
41
  "description": "Skill de planificación de implementación (Superpowers)",
42
- "version": "0.2.0",
42
+ "version": "0.3.0",
43
43
  "sha256": "4d675df944b9c846e9066ff971861ad1c9673cd2c88375081b00a75872ad621a"
44
44
  },
45
45
  {
46
46
  "name": "tdd",
47
47
  "file": "assets/skills/tdd/SKILL.md",
48
48
  "description": "Skill de test-driven development (Superpowers)",
49
- "version": "0.2.0",
49
+ "version": "0.3.0",
50
50
  "sha256": "7eacd8ee81dc5c0b85065c0392e37ee10314661f7edb59dd8e70a9e0dae8f371"
51
51
  },
52
52
  {
53
53
  "name": "subagent-driven-development",
54
54
  "file": "assets/skills/subagent-driven-development/SKILL.md",
55
55
  "description": "Skill de ejecución con subagentes (Superpowers)",
56
- "version": "0.2.0",
56
+ "version": "0.3.0",
57
57
  "sha256": "14e0f685b1dc1d7e02b7226d18f037fe4b6cba49b512a1fadf67cfad2a9dcc96"
58
58
  },
59
59
  {
60
60
  "name": "dispatching-parallel-agents",
61
61
  "file": "assets/skills/dispatching-parallel-agents/SKILL.md",
62
62
  "description": "Skill de dispatch paralelo de agentes (Superpowers)",
63
- "version": "0.2.0",
63
+ "version": "0.3.0",
64
64
  "sha256": "281edf0c38f358497c7e2066fa8217a2ba3e2a39b4205c4af0c41d328fc035a1"
65
65
  },
66
66
  {
67
67
  "name": "review",
68
68
  "file": "assets/skills/review/SKILL.md",
69
69
  "description": "Skill de revisión de código (Superpowers)",
70
- "version": "0.2.0",
70
+ "version": "0.3.0",
71
71
  "sha256": "c78d3beff45e9bb6b5e9e1d7155910f379e082d7aaf3c61b90d651d09e0d2e2a"
72
72
  },
73
73
  {
74
74
  "name": "openspec-explore",
75
75
  "file": "assets/skills/openspec-explore/SKILL.md",
76
76
  "description": "Skill de exploración pre-spec (OpenSpec)",
77
- "version": "0.2.0",
77
+ "version": "0.3.0",
78
78
  "sha256": "1c75cab8672c2eb8b12f27a0b31f0b7fdb73c21c72583c1e8a566e09fe4108a6"
79
79
  },
80
80
  {
81
81
  "name": "openspec-propose",
82
82
  "file": "assets/skills/openspec-propose/SKILL.md",
83
83
  "description": "Skill de generación de proposal (OpenSpec)",
84
- "version": "0.2.0",
84
+ "version": "0.3.0",
85
85
  "sha256": "ab88e9aa22db09559ccf7987d08adc0469b7c6fbe46498e63a3b64926f19e66b"
86
86
  },
87
87
  {
88
88
  "name": "openspec-apply-change",
89
89
  "file": "assets/skills/openspec-apply-change/SKILL.md",
90
90
  "description": "Skill de aplicación de change (OpenSpec)",
91
- "version": "0.2.0",
91
+ "version": "0.3.0",
92
92
  "sha256": "847c2f88a66e8d5946c1fec422a5367c89eca5340839b659bbaaeb6f0bdac487"
93
93
  },
94
94
  {
95
95
  "name": "openspec-archive-change",
96
96
  "file": "assets/skills/openspec-archive-change/SKILL.md",
97
97
  "description": "Skill de archivo de change (OpenSpec)",
98
- "version": "0.2.0",
98
+ "version": "0.3.0",
99
99
  "sha256": "3d35905ec40a081b8fd77b144426e540c67b1f50cc5801b655313a4fdfaa087a"
100
100
  }
101
101
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ostacky",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Instalador interactivo de agentes y comandos para OpenCode",
5
5
  "type": "module",
6
6
  "bin": {