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 +62 -27
- package/assets/agents/ostacky.md +45 -512
- package/assets/commands/install-stack.md +2 -2
- package/assets/docs/engram-protocol.md +79 -0
- package/assets/docs/ostacky-reference.md +79 -0
- package/assets/mcp/ostacky-controller/index.js +169 -69
- package/assets/mcp/ostacky-controller/package.json +1 -1
- package/assets/plugins/engram.ts +47 -79
- package/assets/plugins/ostacky-plugin.ts +694 -0
- package/assets/skills/brainstorming/SKILL.md +14 -14
- package/assets/skills/execution-mode-evaluation/SKILL.md +9 -9
- package/dist/cli.js +388 -106
- package/manifest.json +30 -30
- package/package.json +1 -1
- package/assets/plugins/ostacky-guard.ts +0 -212
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 **
|
|
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 **
|
|
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`).
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
253
|
+
"version": "0.8.1",
|
|
225
254
|
"lockedAt": "2025-01-01T00:00:00.000Z",
|
|
226
255
|
"repo": "JaimeHoracio/Ostacky",
|
|
227
|
-
"tag": "v0.
|
|
256
|
+
"tag": "v0.8.1",
|
|
228
257
|
"agents": {
|
|
229
258
|
"ostacky": {
|
|
230
|
-
"version": "0.
|
|
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.
|
|
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.
|
|
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.
|
|
249
|
-
"execution-mode-evaluation": { "version": "0.
|
|
250
|
-
"openspec-propose": { "version": "0.
|
|
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.
|
|
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
|
|
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
|
|