ostacky 0.7.4 → 0.8.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 CHANGED
@@ -1,14 +1,13 @@
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 de mas.
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 **4 herramientas** trabajen en sinergia sin pisarse y sin quemar tokens de mas.
4
4
 
5
- | Herramienta | Rol | Define |
6
- | --------------------------------------------------------- | ------------------- | --------------------------------------------- |
7
- | [CodeGraph](https://github.com/colbymchenry/codegraph) | Grafo de código | DÓNDE está el código y a quién impacta |
8
- | [OpenSpec](https://github.com/Fission-AI/OpenSpec/) | Especificaciones | QUÉ hay que construir y POR QUÉ |
9
- | [Superpowers](https://github.com/obra/superpowers) | Ejecución | CÓMO se implementa, prueba y revisa |
10
- | [Engram](https://github.com/Gentleman-Programming/engram) | Memoria persistente | QUÉ aprendimos en sesiones anteriores |
11
- | [Context7](https://context7.com) | Documentación viva | Documentación actualizada de librerías y APIs |
5
+ | Herramienta | Rol | Define |
6
+ | --------------------------------------------------------- | ------------------- | -------------------------------------- |
7
+ | [CodeGraph](https://github.com/colbymchenry/codegraph) | Grafo de código | DÓNDE está el código y a quién impacta |
8
+ | [OpenSpec](https://github.com/Fission-AI/OpenSpec/) | Especificaciones | QUÉ hay que construir y POR QUÉ |
9
+ | [Superpowers](https://github.com/obra/superpowers) | Ejecución | CÓMO se implementa, prueba y revisa |
10
+ | [Engram](https://github.com/Gentleman-Programming/engram) | Memoria persistente | QUÉ aprendimos en sesiones anteriores |
12
11
 
13
12
  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
13
 
@@ -51,7 +50,7 @@ Opciones útiles:
51
50
 
52
51
  ## Stack
53
52
 
54
- Ostacky integra **5 herramientas** especializadas para que trabajen en conjunto sin pisarse:
53
+ Ostacky integra **4 herramientas** especializadas para que trabajen en conjunto sin pisarse:
55
54
 
56
55
  ### Cómo trabajan en sinergia
57
56
 
@@ -59,7 +58,6 @@ Ostacky integra **5 herramientas** especializadas para que trabajen en conjunto
59
58
  2. **OpenSpec** documenta requisitos, contratos y escenarios de aceptación (proposal → design → spec → tasks).
60
59
  3. **Superpowers** ejecuta con TDD, testing automatizado y review (brainstorming → plans → tdd → review).
61
60
  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
- 5. **Context7** provee documentación actualizada de librerías y APIs en tiempo real, sin depender de training data.
63
61
 
64
62
  Ostacky decide **cuándo y cómo** usar cada herramienta según el **nivel de impacto** del cambio:
65
63
 
@@ -118,7 +116,9 @@ npx ostacky install --scope global # ~/.config/opencode (XDG/APPDATA en Windows
118
116
  npx ostacky install --scope auto # local si existe .opencode/.git, si no global
119
117
  ```
120
118
 
121
- Descarga todos los agentes y commands definidos en el manifest y los escribe en `.opencode/` (scope `local`) o en `~/.config/opencode` (`global`). Herramientas (`tools/`) siempre quedan en `<proyecto>/.opencode/tools`.
119
+ Descarga todos los agentes y commands definidos en el manifest y los escribe en `.opencode/` (scope `local`) o en `~/.config/opencode` (`global`). Además copia los plugins **Ostacky-owned** `ostacky-plugin.ts` + `engram.ts` en `.opencode/plugins/` (el legacy `ostacky-guard.ts` fue fusionado en `ostacky-plugin.ts` y ya no se instala; `ostacky-controller.ts` legacy se limpia automáticamente si quedó de una instalación previa).
120
+
121
+ > **Coherencia local/global:** aunque elijas `global`, los plugins y herramientas (`tools/` con CodeGraph/Engram) permanecen siempre en `<proyecto>/.opencode` local para el hard-gate por worktree. En global solo se escribe el scope global + un espejo local de plugins. Para stack completo por proyecto ejecutá `npx ostacky install --scope local` dentro de cada repo.
122
122
 
123
123
  ### Agregar agentes o commands individualmente
124
124
 
@@ -150,15 +150,21 @@ Solo descarga los items que cambiaron de versión.
150
150
  ### Desinstalar
151
151
 
152
152
  ```bash
153
- npx ostacky uninstall
153
+ npx ostacky uninstall # pregunta local vs global, luego qué borrar
154
+ npx ostacky uninstall --scope local # fuerza scope local
155
+ npx ostacky uninstall --scope global # fuerza scope global
156
+ npx ostacky uninstall --scope auto # auto
154
157
  ```
155
158
 
156
- Borra todos los archivos instalados (los listados en `.opencode/ostacky-lock.json`). Antes de borrar, muestra un preview con los paths a eliminar y pide confirmación.
159
+ **Safe-delete:** solo borra lo trackeado en `.opencode/ostacky-lock.json` (agentes, commands, skills, MCPs) — nunca toca componentes previos del usuario que no estén en el lockfile. Antes de borrar muestra preview con `Scope: <ruta>` + lista de paths y pide confirmación. Los plugins Ostacky-owned (`ostacky-plugin.ts`, `engram.ts` + legacy `ostacky-guard.ts`/`ostacky-controller.ts` si quedaron) se limpian automáticamente via allowlist, nunca se borran plugins custom.
160
+
161
+ > Si el lockfile no existe o está vacío → `No hay nada instalado.` y no borra nada.
157
162
 
158
163
  #### Desinstalar un agente puntual
159
164
 
160
165
  ```bash
161
- npx ostacky uninstall agent <nombre>
166
+ npx ostacky uninstall agent <nombre> # también admite --scope local|global|auto
167
+ npx ostacky uninstall agent # sin nombre → selector de instalados
162
168
  ```
163
169
 
164
170
  Por ejemplo:
@@ -170,7 +176,8 @@ npx ostacky uninstall agent ostacky
170
176
  #### Desinstalar un command puntual
171
177
 
172
178
  ```bash
173
- npx ostacky uninstall command <nombre>
179
+ npx ostacky uninstall command <nombre> # también admite --scope
180
+ npx ostacky uninstall command # sin nombre → selector
174
181
  ```
175
182
 
176
183
  Por ejemplo:
@@ -181,6 +188,15 @@ npx ostacky uninstall command install-stack
181
188
 
182
189
  Si no especificás el nombre, el CLI te muestra un selector con los items instalados para que elijas cuáles desinstalar (puede ser uno o varios).
183
190
 
191
+ #### Desinstalar todo el stack (tools + config)
192
+
193
+ ```bash
194
+ npx ostacky uninstall-stack # pregunta scope, limpia mcp.codegraph/engram de opencode.json + .codegraph/ + .opencode/tools/
195
+ npx ostacky uninstall-stack --scope local
196
+ ```
197
+
198
+ No toca binarios globales ni datos de Engram, solo la configuración del proyecto.
199
+
184
200
  ### Otros
185
201
 
186
202
  ```bash
@@ -190,7 +206,7 @@ npx ostacky --help # muestra la ayuda
190
206
 
191
207
  ## Estructura generada
192
208
 
193
- Tras instalar, el proyecto queda así:
209
+ Tras instalar (`--scope local`), el proyecto queda así:
194
210
 
195
211
  ```
196
212
  .opencode/
@@ -214,44 +230,63 @@ Tras instalar, el proyecto queda así:
214
230
  │ ├── using-superpowers/
215
231
  │ ├── writing-skills/
216
232
  │ └── graceful-degradation/
217
- └── ostacky-lock.json ← versiones instaladas (agentes, commands y skills)
233
+ ├── plugins/
234
+ │ ├── ostacky-plugin.ts ← controller hard-gate (fusiona guard legacy)
235
+ │ └── engram.ts ← plugin Engram
236
+ ├── mcp/
237
+ │ ├── ostacky-controller/ ← MCP thin (observabilidad)
238
+ │ └── openspec/
239
+ ├── tools/
240
+ │ ├── codegraph/bin/codegraph
241
+ │ └── engram/bin/engram
242
+ ├── cache/codegraph/ ← cache local CodeGraph/Discovery
243
+ ├── ostacky-state.json ← estado por worktree (aislado)
244
+ └── ostacky-lock.json ← versiones instaladas (agentes, commands, skills, mcpServers)
218
245
  ```
219
246
 
247
+ > `assets/plugins/ostacky-guard.ts` fue **fusionado en `ostacky-plugin.ts` y eliminado** (re-export legacy). Fresh install solo escribe `ostacky-plugin.ts` + `engram.ts`; si venís de una versión previa con `ostacky-guard.ts` o `ostacky-controller.ts` legacy, el installer los elimina automáticamente.
248
+
220
249
  ### ostacky-lock.json
221
250
 
222
251
  ```json
223
252
  {
224
- "version": "0.7.4",
253
+ "version": "0.8.1",
225
254
  "lockedAt": "2025-01-01T00:00:00.000Z",
226
255
  "repo": "JaimeHoracio/Ostacky",
227
- "tag": "v0.7.4",
256
+ "tag": "v0.8.1",
228
257
  "agents": {
229
258
  "ostacky": {
230
- "version": "0.7.4",
259
+ "version": "0.8.1",
231
260
  "installedAt": "2025-01-01T00:00:00.000Z",
232
261
  "sha256": "abc123..."
233
262
  }
234
263
  },
235
264
  "commands": {
236
265
  "install-stack": {
237
- "version": "0.7.4",
266
+ "version": "0.8.1",
238
267
  "installedAt": "2025-01-01T00:00:00.000Z",
239
268
  "sha256": "def456..."
240
269
  },
241
270
  "opsx-sync": {
242
- "version": "0.7.4",
271
+ "version": "0.8.1",
243
272
  "installedAt": "2025-01-01T00:00:00.000Z",
244
273
  "sha256": "ghi789..."
245
274
  }
246
275
  },
247
276
  "skills": {
248
- "brainstorming": { "version": "0.7.4", ... },
249
- "execution-mode-evaluation": { "version": "0.7.4", ... },
250
- "openspec-propose": { "version": "0.7.4", ... }
277
+ "brainstorming": { "version": "0.8.1", ... },
278
+ "execution-mode-evaluation": { "version": "0.8.1", ... },
279
+ "openspec-propose": { "version": "0.8.1", ... }
280
+ },
281
+ "mcpServers": {
282
+ "ostacky-controller": { "version": "0.8.1", ... },
283
+ "openspec": { "version": "0.8.1", ... }
251
284
  }
252
285
  }
253
286
  ```
254
287
 
288
+ `plugins/` (`ostacky-plugin.ts`, `engram.ts`) y `tools/` **no** se trackean en el lockfile — son allowlist Ostacky-owned y se gestionan via `uninstall` (allowlist) y `uninstall-stack`.
289
+
255
290
  Se recomienda agregar `ostacky-lock.json` al control de versiones para que el equipo instale exactamente las mismas versiones.
256
291
 
257
292
  ## Después de la instalación
@@ -277,7 +312,7 @@ Es opcional y solo necesario si algo falló durante la instalación o si querés
277
312
  ## Seguridad
278
313
 
279
314
  - `opencode.jsonc` se versiona en el repo para compartir permisos y MCP de forma reproducible.
280
- - Las URLs de descarga usan **tags de GitHub** (ej. `v0.7.4`), nunca `main` — instalaciones reproducibles
315
+ - Las URLs de descarga usan **tags de GitHub** (ej. `v0.8.1`), nunca `main` — instalaciones reproducibles
281
316
  - Cada path de archivo descargado es validado para prevenir **path traversal**
282
317
  - Los archivos incluyen **checksum SHA-256** opcional; si el manifest lo define, el contenido se verifica antes de escribir
283
318
  - El cache local (`.opencode/cache/`) también valida integridad al servir archivos cacheados
@@ -293,7 +328,7 @@ Es opcional y solo necesario si algo falló durante la instalación o si querés
293
328
  - Variable `OSTACKY_SENSITIVE_PATTERNS` overridea los patrones por defecto (`**/.env*`, `**/.secrets/**`, `**/*.pem`, `**/*.key`, `**/.aws/**`, `**/.ssh/**`, `**/credentials.json`, `**/.npmrc`).
294
329
  - Ejemplo: `OSTACKY_SENSITIVE_PATTERNS="**/.env*,**/.secrets/**" bunx ostacky doctor` — `doctor` imprime el patrón efectivo.
295
330
  - Allowlist: `.env.example`, `.env.template`, `.env.sample` nunca se bloquean.
296
- - Fuente única: `src/security.ts` (`SENSITIVE_DEFAULT`, `isSensitive`, `BASH_SENSITIVE_RE`) — guard y controller usan la misma lógica (ver `doctor` para verificar).
331
+ - Fuente única: `src/security.ts` (`SENSITIVE_DEFAULT`, `isSensitive`, `BASH_SENSITIVE_RE`) — `ostacky-plugin.ts` importa de ahí (legacy `ostacky-guard.ts` eliminado, fusionado en el plugin). Ver `doctor` para verificar.
297
332
 
298
333
  #### Aislamiento de worktrees (harness-prod-hardening)
299
334