ostacky 0.3.4 → 0.4.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
@@ -1,6 +1,6 @@
1
1
  # Ostacky
2
2
 
3
- Ostacky es un **agent harness** para [OpenCode](https://opencode.ai). No es solo un agente más: es el orquestador que instalás en tu proyecto para que **5 herramientas** trabajen en sinergia sin pisarse y sin quemar tokens al pedo.
3
+ Ostacky es un **agent harness** para [OpenCode](https://opencode.ai). No es solo un agente más: es el orquestador que instalás en tu proyecto para que **5 herramientas** trabajen en sinergia sin pisarse y sin quemar tokens de mas.
4
4
 
5
5
  | Herramienta | Rol | Define |
6
6
  | --------------------------------------------------------- | ------------------- | --------------------------------------------- |
@@ -10,7 +10,7 @@ Ostacky es un **agent harness** para [OpenCode](https://opencode.ai). No es solo
10
10
  | [Engram](https://github.com/Gentleman-Programming/engram) | Memoria persistente | QUÉ aprendimos en sesiones anteriores |
11
11
  | [Context7](https://context7.com) | Documentación viva | Documentación actualizada de librerías y APIs |
12
12
 
13
- Ostacky las rutea según el **nivel de impacto del cambio** (Nivel 0, Nivel 0+1, Nivel 1+), priorizando siempre eficiencia de tokens y preguntándote antes de actuar.
13
+ Ostacky las rutea según el **nivel de impacto del cambio** (Nivel 0, Nivel 0+1, Nivel 1+), priorizando siempre eficiencia de tokens y preguntándote antes de actuar. Para cambios grandes usa OpenSpec (spec-driven development); para cambios chicos ejecuta directo con Superpowers skills.
14
14
 
15
15
  ## Cómo empezar
16
16
 
@@ -61,7 +61,15 @@ Ostacky integra **5 herramientas** especializadas para que trabajen en conjunto
61
61
  4. **Engram** persiste decisiones, bugs y descubrimientos con `mem_save` para que el agente no pierda contexto entre sesiones ni necesite re-ejecutar tool calls.
62
62
  5. **Context7** provee documentación actualizada de librerías y APIs en tiempo real, sin depender de training data.
63
63
 
64
- Ostacky decide **cuándo y cómo** usar cada herramienta según el nivel de impacto del cambio (Nivel 0, Nivel 0+1, Nivel 1+), priorizando siempre eficiencia de tokens.
64
+ Ostacky decide **cuándo y cómo** usar cada herramienta según el **nivel de impacto** del cambio:
65
+
66
+ | Nivel | Cuándo aplica | Flujo |
67
+ | ------- | ---------------------------------------- | ---------------------------------------------------------------------- |
68
+ | **0** | <5 líneas, 1 archivo, trivial | CodeGraph → directo a inline |
69
+ | **0+1** | 5-10 líneas, 1-2 archivos, sin API nueva | CodeGraph → usuario elige: spec o directo |
70
+ | **1+** | >10 líneas, API pública, refactors | CodeGraph → OpenSpec → execution-mode-evaluation → subagentes o inline |
71
+
72
+ Antes de ejecutar, Ostacky **muestra el análisis de archivos compartidos** (qué tasks tocan los mismos archivos) para que el usuario decida el modo de ejecución informado. Usa `execution-mode-evaluation` para recomendar inline o subagent-driven según clusters de archivos compartidos.
65
73
 
66
74
  ## ¿Para qué sirve?
67
75
 
@@ -70,6 +78,7 @@ Ostacky decide **cuándo y cómo** usar cada herramienta según el nivel de impa
70
78
  - Detectar y aplicar actualizaciones mostrando el diff de versiones antes de confirmar
71
79
  - Evitar descargas repetidas gracias al cache local en `~/.opencode/cache/`
72
80
  - Resolver tareas chicas sin overhead extra de coordinación.
81
+ - Ejecutar tareas independientes en paralelo con **subagentes** cuando no comparten archivos, o inline secuencial cuando se pisan.
73
82
 
74
83
  ## Requisitos
75
84
 
@@ -185,31 +194,54 @@ Tras instalar, el proyecto queda así:
185
194
  ├── agents/
186
195
  │ └── ostacky.md
187
196
  ├── commands/
188
- └── install-stack.md
189
- └── ostacky-lock.json ← versiones instaladas
197
+ ├── install-stack.md
198
+ └── opsx-sync.md
199
+ ├── skills/
200
+ │ ├── brainstorming/
201
+ │ ├── writing-plans/
202
+ │ ├── tdd/
203
+ │ ├── review/
204
+ │ ├── execution-mode-evaluation/
205
+ │ ├── subagent-driven-development/
206
+ │ ├── dispatching-parallel-agents/
207
+ │ ├── openspec-explore/
208
+ │ ├── openspec-propose/
209
+ │ ├── openspec-apply-change/
210
+ │ └── openspec-archive-change/
211
+ └── ostacky-lock.json ← versiones instaladas (agentes, commands y skills)
190
212
  ```
191
213
 
192
214
  ### ostacky-lock.json
193
215
 
194
216
  ```json
195
217
  {
196
- "version": "0.3.4",
218
+ "version": "0.4.0",
197
219
  "lockedAt": "2025-01-01T00:00:00.000Z",
198
220
  "repo": "JaimeHoracio/Ostacky",
199
- "tag": "v0.3.4",
221
+ "tag": "v0.4.0",
200
222
  "agents": {
201
223
  "ostacky": {
202
- "version": "0.3.4",
224
+ "version": "0.4.0",
203
225
  "installedAt": "2025-01-01T00:00:00.000Z",
204
226
  "sha256": "abc123..."
205
227
  }
206
228
  },
207
229
  "commands": {
208
230
  "install-stack": {
209
- "version": "0.3.4",
231
+ "version": "0.4.0",
210
232
  "installedAt": "2025-01-01T00:00:00.000Z",
211
233
  "sha256": "def456..."
234
+ },
235
+ "opsx-sync": {
236
+ "version": "0.4.0",
237
+ "installedAt": "2025-01-01T00:00:00.000Z",
238
+ "sha256": "ghi789..."
212
239
  }
240
+ },
241
+ "skills": {
242
+ "brainstorming": { "version": "0.4.0", ... },
243
+ "execution-mode-evaluation": { "version": "0.4.0", ... },
244
+ "openspec-propose": { "version": "0.4.0", ... }
213
245
  }
214
246
  }
215
247
  ```
@@ -239,7 +271,7 @@ Es opcional y solo necesario si algo falló durante la instalación o si querés
239
271
  ## Seguridad
240
272
 
241
273
  - `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.3.4`), nunca `main` — instalaciones reproducibles
274
+ - Las URLs de descarga usan **tags de GitHub** (ej. `v0.4.0`), nunca `main` — instalaciones reproducibles
243
275
  - Cada path de archivo descargado es validado para prevenir **path traversal**
244
276
  - Los archivos incluyen **checksum SHA-256** opcional; si el manifest lo define, el contenido se verifica antes de escribir
245
277
  - El cache local (`~/.opencode/cache/`) también valida integridad al servir archivos cacheados
@@ -19,7 +19,7 @@ Eres **Ostacky**, el orquestador de desarrollo del proyecto.
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á** — 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?"
22
+ 2. **Preguntá** — Según el nivel: para Nivel 0/0+1 → "¿Querés spec con OpenSpec o lo ejecuto directo?"; para Nivel 1+ → "Recomiendo spec para mantener trazabilidad, pero si preferís agilidad lo ejecuto directo. ¿Cómo lo hacemos?"
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
 
@@ -81,11 +81,14 @@ Un cambio es **Nivel 1+** cuando no entra en la definición de Nivel 0+1:
81
81
  - Requiere refactors amplios
82
82
  - Supera ~10 líneas
83
83
 
84
- Nivel 1+ **requiere OpenSpec** antes de ejecutar. Comunicáselo al usuario:
84
+ Nivel 1+ **requiere OpenSpec** para cambios que afectan la API pública o tienen dependencias entre módulos. Pero si el usuario prioriza agilidad, podés ofrecer ejecución directa sin artifacts.
85
85
 
86
- > "Esto es un cambio Nivel 1+ porque [razón]. Necesito generar spec con OpenSpec antes de implementar. ¿Procedo?"
86
+ Comunicáselo al usuario:
87
87
 
88
- Si el usuario acepta, seguí con Specification.
88
+ > "Esto es un cambio Nivel 1+ porque [razón]. Recomiendo generar spec con OpenSpec para mantener trazabilidad, pero si preferís agilidad puedo ejecutarlo directo sin artifacts. ¿Cómo lo hacemos?"
89
+
90
+ - Si elige `spec`, seguí con Specification.
91
+ - Si elige `directo`, ejecutá con el mismo rigor que Nivel 0+1 directo: CodeGraph + pre-edit guard, sin generar artifacts OpenSpec.
89
92
 
90
93
  #### Para todos los niveles
91
94
 
@@ -93,9 +96,17 @@ Si el usuario no responde, **detenete y esperá**. No asumas un camino.
93
96
 
94
97
  ### 2. Specification
95
98
 
96
- 1. Si el usuario eligio `spec` y faltan artefactos OpenSpec, generarlos con `/opsx:propose <idea>`.
97
- 2. Si el usuario eligio `directo` (Nivel 0 o Nivel 0+1), saltar esta etapa.
99
+ 1. Si el usuario eligio `spec`:
100
+ a. **Preguntá primero si quiere explorar requisitos:**
101
+ > "Este cambio requiere spec. ¿Ya tenés claros los requisitos o preferís que exploremos juntos con brainstorming primero?"
102
+ b. Si elige explorar → cargá el skill `brainstorming`, iterá con el usuario hasta tener claridad, y recién después pasá a openspec-propose.
103
+ c. Si elige directo a spec → `openspec-propose` sin brainstorming.
104
+ d. Si los requisitos se ven vagos o incompletos, sugerí exploración pero sin insistir si el usuario dice que no.
105
+
106
+ 2. Si el usuario eligio `directo` (Nivel 0, Nivel 0+1, o Nivel 1+ con opción directa), saltar esta etapa.
107
+
98
108
  3. OpenSpec es la fuente de verdad para requisitos, limites y contratos del camino con spec.
109
+
99
110
  4. No inventar comportamiento fuera de `proposal.md`, `design.md` y `tasks.md`.
100
111
 
101
112
  ### 3. Planning
@@ -132,44 +143,62 @@ Si el usuario no responde, **detenete y esperá**. No asumas un camino.
132
143
  * Despues las fases con `mode: "subagent-driven"`
133
144
  - Si el output no tiene `phaseRecommendations`, todo el cambio va en el modo global.
134
145
 
135
- 4. **Ejecutar cada task no completada aplicando pre-edit validation:**
136
- a. Aplicar la sección "Pre-edit validation" antes de cada llamada al edit tool.
137
- b. Si pre-edit devuelve "skip-and-mark" no editar. Ejecutar `mem_save` con topic_key del change.
138
- c. Si pre-edit devuelve "conflict" → reportar al usuario. No editar ni marcar.
139
- d. Después de completar exitosamente una task → `mem_save` con topic_key del change.
140
- e. Si una task falla → reportar al usuario. No reintentar automáticamente.
146
+ 4. **Mostrar el análisis al usuario y preguntar — ANTES de ejecutar:**
147
+
148
+ Antes de ejecutar cualquier task, mostrá al usuario el análisis que generó el skill:
149
+
150
+ a. **Mostrar el mapa de tareas y archivos:**
151
+ ```
152
+ Task A → src/archivo1.ts
153
+ Task B → src/archivo2.ts, src/archivo3.ts
154
+ ...
155
+ ```
156
+
157
+ b. **Mostrar archivos compartidos (sharedFiles) si los hay:**
158
+ ```
159
+ Archivos compartidos:
160
+ src/logging.ts → Task 2.2, Task 2.4
161
+ src/cli.ts → Task 2.3, Task 3.1
162
+ ```
163
+
164
+ c. **Mostrar clusters identificados (qué tasks comparten archivos):**
165
+ ```
166
+ Clusters:
167
+ Cluster A → [Task 2.2, Task 2.4, Task 2.5] (comparten logging.ts)
168
+ Cluster B → [Task 2.3, Task 3.1] (comparten cli.ts)
169
+ Cluster C → [Task 2.1] (independiente)
170
+ ```
171
+
172
+ d. **Mostrar dependencias secuenciales entre tasks si las hay.**
141
173
 
142
- 5. **Superpowers** es el unico orquestador de ejecucion, TDD, review y delegacion.
143
- 6. Los subagentes son **execution-only**.
144
- 7. Los subagentes heredan la sección "Pre-edit validation" (4a). Incluir esta sección en el brief de cada subagente para que aplique la misma validación antes de editar.
145
- 8. Los subagentes no se usan para "hacerlo mas rapido" por defecto: se usan para aislar complejidad cuando eso reduce contexto total.
146
- 9. Los subagentes no crean proposals, no planifican, no inician nueva delegacion y no repiten retrieval ya resuelto por el coordinador.
174
+ e. **Mostrar la recomendación del skill y su razón:**
175
+ > "Recomendación: [inline/subagent-driven] porque [razón del skill]."
176
+ > "Según este análisis, ¿cómo preferís ejecutar?"
147
177
 
148
- ### 4a. Pre-edit validation (obligatorio antes de cada edit)
178
+ f. **NO ejecutar nada sin la confirmación explícita del usuario.** Si el usuario no responde, detenete y esperá.
149
179
 
150
- Antes de cada llamada al `edit` tool, ejecutar esta validación **sobre el archivo fresco**:
180
+ 5. **Ejecutar cada task no completada aplicando estas 3 reglas antes de cada edit:**
151
181
 
152
- ```
153
- Paso 0: Leer el archivo actual con el Read tool. No confiar en lecturas previas
154
- del contexto (pueden estar stale por edits anteriores o subagentes).
182
+ ⚠️ **Antes de cada llamado al `edit` tool, ejecutá estas 3 reglas EN ORDEN. Si alguna falla → no edits, preguntá al usuario.**
155
183
 
156
- Input: filePath, oldString, newString + contenido fresco del archivo
157
- Output: "proceed", "skip-and-mark", "conflict"
184
+ **Regla 1 — Cambio real:** oldString debe ser diferente de newString.
185
+ - Si son iguales → skip: el cambio ya está aplicado. Ejecutá `mem_save` con topic_key del change. No edites.
186
+ - Preguntá al usuario: "Este cambio parece ya aplicado. ¿Verifico manualmente?"
158
187
 
159
- 1. oldString === newString?
160
- → "skip-and-mark": el cambio ya está aplicado.
161
- Ejecutar mem_save con topic_key del change. No editar.
188
+ **Regla 2 — Coincidencia exacta:** oldString debe existir exactamente (whitespace, indentación, saltos de línea) en el contenido actual del archivo.
189
+ - Leé el archivo con el `Read` tool justo antes de verificar. No uses lecturas previas del contexto (pueden estar stale).
190
+ - El `Read` tool devuelve el contenido CON prefijos de línea ("1: const foo"). El `edit` tool espera el contenido SIN esos prefijos ("const foo"). Extraé el texto raw.
191
+ - Si oldString NO existe exactamente → CONFLICTO: el archivo cambió inesperadamente.
192
+ - Reportá el conflicto al usuario. No edites. No marques nada.
162
193
 
163
- 2. oldString existe en el contenido fresco del archivo?
164
- "proceed": ejecutar edit normalmente.
194
+ **Regla 3 Post-edit:** después de cada `edit` exitoso, ejecutá `mem_save` con topic_key del change inmediatamente.
195
+ - Si una task falla reportá al usuario. No reintentes automáticamente.
165
196
 
166
- 3. oldString NO existe en el contenido fresco del archivo:
167
- a. ¿newString ya existe en el contenido fresco (exactamente, incluyendo whitespace)?
168
- Sí: "skip-and-mark": cambio ya aplicado (por otro paso/agente).
169
- Ejecutar mem_save con topic_key del change.
170
- No: "conflict": el archivo cambió inesperadamente.
171
- Reportar al usuario. No editar. No marcar nada.
172
- ```
197
+ 6. **Superpowers** es el unico orquestador de ejecucion, TDD, review y delegacion.
198
+ 7. Los subagentes son **execution-only**.
199
+ 8. **Subagentes heredan el mismo procedimiento.** Incluir las 3 reglas de validación (paso 5) completas en el brief de cada subagente para que aplique la misma validación antes de editar.
200
+ 9. Los subagentes no se usan para "hacerlo mas rapido" por defecto: se usan para aislar complejidad cuando eso reduce contexto total.
201
+ 10. Los subagentes no crean proposals, no planifican, no inician nueva delegacion y no repiten retrieval ya resuelto por el coordinador.
173
202
 
174
203
  ### 5. Sync y cierre
175
204
 
@@ -178,7 +207,7 @@ Output: "proceed", "skip-and-mark", "conflict"
178
207
  3. Si el proyecto no está inicializado, ejecutar primero `codegraph init -i`; después ejecutar `codegraph sync` para reflejar el estado real del codigo.
179
208
  4. Si el usuario eligio `spec`, ejecutar `/opsx:sync` para sincronizar los delta specs de OpenSpec.
180
209
  5. Si el usuario eligio `spec`, ejecutar `/opsx:archive` cuando el change este listo.
181
- 6. Si el usuario eligio `directo` (Nivel 0 o Nivel 0+1), no crear ni sincronizar un change OpenSpec.
210
+ 6. Si el usuario eligio `directo` (Nivel 0, Nivel 0+1 o Nivel 1+ con opción directa), no crear ni sincronizar un change OpenSpec.
182
211
  7. No marcar completo si falta tests, review, `codegraph sync` o, en el camino con spec, `opsx:sync`.
183
212
 
184
213
  ## Guardrails
@@ -196,6 +225,7 @@ Output: "proceed", "skip-and-mark", "conflict"
196
225
  - Browser/local URL use is never suggested proactively; it is only allowed when the user explicitly asks for browser/visual help, and the default is text-only to conserve tokens.
197
226
  - Context7 está disponible para consultas de documentación de librerías/APIs. No intentes responder de memoria sobre APIs externas; usá Context7.
198
227
  - Fase gate: si estás en Step 4 (Execution) o Step 5 (Sync), no volvás a Discovery, Planning o Specification automáticamente. Si encontrás un error que requiere re-planificar, reportalo al usuario y preguntá cómo proceder.
228
+ - Feedback loop de preferencias del usuario: si detectás un patrón recurrente en las decisiones del usuario (ej: siempre elige "directo" para Nivel 0+1, o siempre prefiere inline), podés sugerirlo amablemente. **NUNCA apliques un cambio de comportamiento sin consultar.** Ejemplo: "Noté que en las últimas N veces preferiste [opción]. ¿Querés que la próxima asuma esa preferencia y solo confirme?" La preferencia se puede persistir via `mem_save` con `topic_key: "user/preference/{tipo}"`.
199
229
 
200
230
  ## Memoria persistente (Engram)
201
231
 
@@ -49,6 +49,42 @@ Revisá el contexto actual de la sesión.
49
49
 
50
50
  ---
51
51
 
52
+ ### Paso 0.5: Early exit para cambios pequeños
53
+
54
+ Si el cambio tiene **≤2 tasks de implementación** Y **no comparten archivos entre sí** (según `tasks.md` o el contexto disponible):
55
+
56
+ → Devolver directamente este JSON sin ejecutar Pasos 1, 2, 3a, 3b:
57
+
58
+ ```json
59
+ {
60
+ "mode": "inline",
61
+ "confidence": 1.0,
62
+ "reasons": ["Cambio pequeño (≤2 tasks independientes sin archivos compartidos). Inline directo."],
63
+ "codegraphUsed": [],
64
+ "globalRuleTriggered": "early-exit",
65
+ "taskAnalysis": {
66
+ "taskCount": <N>,
67
+ "sharedFiles": {},
68
+ "fileClusters": [<cada task como cluster propio>],
69
+ "clusterCount": <taskCount>,
70
+ "sequentialDeps": [],
71
+ "estLines": <estimación>,
72
+ "hasExplicitContract": false
73
+ },
74
+ "phaseRecommendations": []
75
+ }
76
+ ```
77
+
78
+ **Qué considerar "archivos compartidos":** si dos tasks mencionan modificar el mismo archivo, NO aplicar early exit. El early exit solo es seguro cuando cada task toca archivos distintos.
79
+
80
+ **Si el cambio tiene 1 sola task:** early exit aplica siempre (no hay con quién compartir archivos).
81
+
82
+ **Si el cambio tiene 2 tasks:** verificar que no compartan archivos según tasks.md. Si comparten archivos, NO aplicar early exit — ejecutar el skill completo.
83
+
84
+ **Output esperado:** `globalRuleTriggered: "early-exit"` para trazabilidad de que la decisión vino de este atajo, no de las reglas principales.
85
+
86
+ ---
87
+
52
88
  ### Paso 1: Obtener datos de CodeGraph
53
89
 
54
90
  Ejecutá esta consulta:
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.3.4",
164
+ version: "0.4.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.3.4",
879
+ version: "0.4.0",
880
880
  repo: "JaimeHoracio/Ostacky",
881
- tag: "v0.3.4",
881
+ tag: "v0.4.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.3.4",
887
+ version: "0.4.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.3.4",
896
+ version: "0.4.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.3.4",
903
+ version: "0.4.0",
904
904
  sha256: null
905
905
  }
906
906
  ],
@@ -909,77 +909,77 @@ var manifest_default = {
909
909
  name: "execution-mode-evaluation",
910
910
  file: "assets/skills/execution-mode-evaluation/SKILL.md",
911
911
  description: "Skill de decision de modo de ejecucion inline vs subagent-driven con CodeGraph",
912
- version: "0.3.4",
912
+ version: "0.4.0",
913
913
  sha256: "eaa7cd3205b22c6db79a5d5f542ea554d5f1ca2d57127490011ba3abe4cb912b"
914
914
  },
915
915
  {
916
916
  name: "brainstorming",
917
917
  file: "assets/skills/brainstorming/SKILL.md",
918
918
  description: "Skill de descubrimiento y exploración (Superpowers)",
919
- version: "0.3.4",
919
+ version: "0.4.0",
920
920
  sha256: "ad15458c54912007ae3f708c698a11f0a4a58e2a7c7860a1ae8874db573c9e98"
921
921
  },
922
922
  {
923
923
  name: "writing-plans",
924
924
  file: "assets/skills/writing-plans/SKILL.md",
925
925
  description: "Skill de planificación de implementación (Superpowers)",
926
- version: "0.3.4",
926
+ version: "0.4.0",
927
927
  sha256: "4d675df944b9c846e9066ff971861ad1c9673cd2c88375081b00a75872ad621a"
928
928
  },
929
929
  {
930
930
  name: "tdd",
931
931
  file: "assets/skills/tdd/SKILL.md",
932
932
  description: "Skill de test-driven development (Superpowers)",
933
- version: "0.3.4",
933
+ version: "0.4.0",
934
934
  sha256: "7eacd8ee81dc5c0b85065c0392e37ee10314661f7edb59dd8e70a9e0dae8f371"
935
935
  },
936
936
  {
937
937
  name: "subagent-driven-development",
938
938
  file: "assets/skills/subagent-driven-development/SKILL.md",
939
939
  description: "Skill de ejecución con subagentes (Superpowers)",
940
- version: "0.3.4",
940
+ version: "0.4.0",
941
941
  sha256: "14e0f685b1dc1d7e02b7226d18f037fe4b6cba49b512a1fadf67cfad2a9dcc96"
942
942
  },
943
943
  {
944
944
  name: "dispatching-parallel-agents",
945
945
  file: "assets/skills/dispatching-parallel-agents/SKILL.md",
946
946
  description: "Skill de dispatch paralelo de agentes (Superpowers)",
947
- version: "0.3.4",
947
+ version: "0.4.0",
948
948
  sha256: "281edf0c38f358497c7e2066fa8217a2ba3e2a39b4205c4af0c41d328fc035a1"
949
949
  },
950
950
  {
951
951
  name: "review",
952
952
  file: "assets/skills/review/SKILL.md",
953
953
  description: "Skill de revisión de código (Superpowers)",
954
- version: "0.3.4",
954
+ version: "0.4.0",
955
955
  sha256: "c78d3beff45e9bb6b5e9e1d7155910f379e082d7aaf3c61b90d651d09e0d2e2a"
956
956
  },
957
957
  {
958
958
  name: "openspec-explore",
959
959
  file: "assets/skills/openspec-explore/SKILL.md",
960
960
  description: "Skill de exploración pre-spec (OpenSpec)",
961
- version: "0.3.4",
961
+ version: "0.4.0",
962
962
  sha256: "1c75cab8672c2eb8b12f27a0b31f0b7fdb73c21c72583c1e8a566e09fe4108a6"
963
963
  },
964
964
  {
965
965
  name: "openspec-propose",
966
966
  file: "assets/skills/openspec-propose/SKILL.md",
967
967
  description: "Skill de generación de proposal (OpenSpec)",
968
- version: "0.3.4",
968
+ version: "0.4.0",
969
969
  sha256: "ab88e9aa22db09559ccf7987d08adc0469b7c6fbe46498e63a3b64926f19e66b"
970
970
  },
971
971
  {
972
972
  name: "openspec-apply-change",
973
973
  file: "assets/skills/openspec-apply-change/SKILL.md",
974
974
  description: "Skill de aplicación de change (OpenSpec)",
975
- version: "0.3.4",
975
+ version: "0.4.0",
976
976
  sha256: "847c2f88a66e8d5946c1fec422a5367c89eca5340839b659bbaaeb6f0bdac487"
977
977
  },
978
978
  {
979
979
  name: "openspec-archive-change",
980
980
  file: "assets/skills/openspec-archive-change/SKILL.md",
981
981
  description: "Skill de archivo de change (OpenSpec)",
982
- version: "0.3.4",
982
+ version: "0.4.0",
983
983
  sha256: "3d35905ec40a081b8fd77b144426e540c67b1f50cc5801b655313a4fdfaa087a"
984
984
  }
985
985
  ]
@@ -1165,7 +1165,7 @@ function clearLockfile(opencodeRoot) {
1165
1165
  const lockfile = readLockfile(opencodeRoot);
1166
1166
  if (!lockfile) {
1167
1167
  writeLockfile(opencodeRoot, {
1168
- version: "0.3.4",
1168
+ version: "0.4.0",
1169
1169
  lockedAt: new Date().toISOString(),
1170
1170
  repo: "",
1171
1171
  tag: "",
package/manifest.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
- "version": "0.3.4",
2
+ "version": "0.4.0",
3
3
  "repo": "JaimeHoracio/Ostacky",
4
- "tag": "v0.3.4",
4
+ "tag": "v0.4.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.3.4",
10
+ "version": "0.4.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.3.4",
19
+ "version": "0.4.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.3.4",
26
+ "version": "0.4.0",
27
27
  "sha256": null
28
28
  }
29
29
  ],
@@ -32,77 +32,77 @@
32
32
  "name": "execution-mode-evaluation",
33
33
  "file": "assets/skills/execution-mode-evaluation/SKILL.md",
34
34
  "description": "Skill de decision de modo de ejecucion inline vs subagent-driven con CodeGraph",
35
- "version": "0.3.4",
35
+ "version": "0.4.0",
36
36
  "sha256": "eaa7cd3205b22c6db79a5d5f542ea554d5f1ca2d57127490011ba3abe4cb912b"
37
37
  },
38
38
  {
39
39
  "name": "brainstorming",
40
40
  "file": "assets/skills/brainstorming/SKILL.md",
41
41
  "description": "Skill de descubrimiento y exploración (Superpowers)",
42
- "version": "0.3.4",
42
+ "version": "0.4.0",
43
43
  "sha256": "ad15458c54912007ae3f708c698a11f0a4a58e2a7c7860a1ae8874db573c9e98"
44
44
  },
45
45
  {
46
46
  "name": "writing-plans",
47
47
  "file": "assets/skills/writing-plans/SKILL.md",
48
48
  "description": "Skill de planificación de implementación (Superpowers)",
49
- "version": "0.3.4",
49
+ "version": "0.4.0",
50
50
  "sha256": "4d675df944b9c846e9066ff971861ad1c9673cd2c88375081b00a75872ad621a"
51
51
  },
52
52
  {
53
53
  "name": "tdd",
54
54
  "file": "assets/skills/tdd/SKILL.md",
55
55
  "description": "Skill de test-driven development (Superpowers)",
56
- "version": "0.3.4",
56
+ "version": "0.4.0",
57
57
  "sha256": "7eacd8ee81dc5c0b85065c0392e37ee10314661f7edb59dd8e70a9e0dae8f371"
58
58
  },
59
59
  {
60
60
  "name": "subagent-driven-development",
61
61
  "file": "assets/skills/subagent-driven-development/SKILL.md",
62
62
  "description": "Skill de ejecución con subagentes (Superpowers)",
63
- "version": "0.3.4",
63
+ "version": "0.4.0",
64
64
  "sha256": "14e0f685b1dc1d7e02b7226d18f037fe4b6cba49b512a1fadf67cfad2a9dcc96"
65
65
  },
66
66
  {
67
67
  "name": "dispatching-parallel-agents",
68
68
  "file": "assets/skills/dispatching-parallel-agents/SKILL.md",
69
69
  "description": "Skill de dispatch paralelo de agentes (Superpowers)",
70
- "version": "0.3.4",
70
+ "version": "0.4.0",
71
71
  "sha256": "281edf0c38f358497c7e2066fa8217a2ba3e2a39b4205c4af0c41d328fc035a1"
72
72
  },
73
73
  {
74
74
  "name": "review",
75
75
  "file": "assets/skills/review/SKILL.md",
76
76
  "description": "Skill de revisión de código (Superpowers)",
77
- "version": "0.3.4",
77
+ "version": "0.4.0",
78
78
  "sha256": "c78d3beff45e9bb6b5e9e1d7155910f379e082d7aaf3c61b90d651d09e0d2e2a"
79
79
  },
80
80
  {
81
81
  "name": "openspec-explore",
82
82
  "file": "assets/skills/openspec-explore/SKILL.md",
83
83
  "description": "Skill de exploración pre-spec (OpenSpec)",
84
- "version": "0.3.4",
84
+ "version": "0.4.0",
85
85
  "sha256": "1c75cab8672c2eb8b12f27a0b31f0b7fdb73c21c72583c1e8a566e09fe4108a6"
86
86
  },
87
87
  {
88
88
  "name": "openspec-propose",
89
89
  "file": "assets/skills/openspec-propose/SKILL.md",
90
90
  "description": "Skill de generación de proposal (OpenSpec)",
91
- "version": "0.3.4",
91
+ "version": "0.4.0",
92
92
  "sha256": "ab88e9aa22db09559ccf7987d08adc0469b7c6fbe46498e63a3b64926f19e66b"
93
93
  },
94
94
  {
95
95
  "name": "openspec-apply-change",
96
96
  "file": "assets/skills/openspec-apply-change/SKILL.md",
97
97
  "description": "Skill de aplicación de change (OpenSpec)",
98
- "version": "0.3.4",
98
+ "version": "0.4.0",
99
99
  "sha256": "847c2f88a66e8d5946c1fec422a5367c89eca5340839b659bbaaeb6f0bdac487"
100
100
  },
101
101
  {
102
102
  "name": "openspec-archive-change",
103
103
  "file": "assets/skills/openspec-archive-change/SKILL.md",
104
104
  "description": "Skill de archivo de change (OpenSpec)",
105
- "version": "0.3.4",
105
+ "version": "0.4.0",
106
106
  "sha256": "3d35905ec40a081b8fd77b144426e540c67b1f50cc5801b655313a4fdfaa087a"
107
107
  }
108
108
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ostacky",
3
- "version": "0.3.4",
3
+ "version": "0.4.0",
4
4
  "description": "Instalador interactivo de agentes y comandos para OpenCode",
5
5
  "type": "module",
6
6
  "bin": {