ostacky 0.8.1 → 0.8.2
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 +14 -11
- package/assets/agents/ostacky.md +3 -3
- package/assets/commands/install-stack.md +15 -115
- package/assets/docs/ostacky-reference.md +0 -2
- package/assets/mcp/ostacky-controller/index.js +2 -2
- package/assets/mcp/ostacky-controller/package.json +1 -1
- package/assets/skills/brainstorming/SKILL.md +1 -1
- package/assets/skills/graceful-degradation/SKILL.md +0 -9
- package/dist/cli.js +83 -49
- package/manifest.json +30 -30
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -119,6 +119,7 @@ npx ostacky install --scope auto # local si existe .opencode/.git, si no glob
|
|
|
119
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
120
|
|
|
121
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
|
+
> **Windows — dónde se instala realmente:** `global` es `%APPDATA%\opencode` (`C:\Users\<vos>\AppData\Roaming\opencode`), **no** `C:\Users\<vos>\.opencode`. Si ves `C:\Users\...\ .opencode\tools\codegraph` y esperabas `D:\mi-proyecto\.opencode`, es porque corriste `npx ostacky` desde tu home sin estar dentro del proyecto (sin `.git`). Hacé `cd` al proyecto y re-ejecutá con `--scope local`; el log ahora muestra `projectRoot` y `toolsDir` explícitos para evitar confusión.
|
|
122
123
|
|
|
123
124
|
### Agregar agentes o commands individualmente
|
|
124
125
|
|
|
@@ -250,37 +251,37 @@ Tras instalar (`--scope local`), el proyecto queda así:
|
|
|
250
251
|
|
|
251
252
|
```json
|
|
252
253
|
{
|
|
253
|
-
"version": "0.8.
|
|
254
|
+
"version": "0.8.2",
|
|
254
255
|
"lockedAt": "2025-01-01T00:00:00.000Z",
|
|
255
256
|
"repo": "JaimeHoracio/Ostacky",
|
|
256
|
-
"tag": "v0.8.
|
|
257
|
+
"tag": "v0.8.2",
|
|
257
258
|
"agents": {
|
|
258
259
|
"ostacky": {
|
|
259
|
-
"version": "0.8.
|
|
260
|
+
"version": "0.8.2",
|
|
260
261
|
"installedAt": "2025-01-01T00:00:00.000Z",
|
|
261
262
|
"sha256": "abc123..."
|
|
262
263
|
}
|
|
263
264
|
},
|
|
264
265
|
"commands": {
|
|
265
266
|
"install-stack": {
|
|
266
|
-
"version": "0.8.
|
|
267
|
+
"version": "0.8.2",
|
|
267
268
|
"installedAt": "2025-01-01T00:00:00.000Z",
|
|
268
269
|
"sha256": "def456..."
|
|
269
270
|
},
|
|
270
271
|
"opsx-sync": {
|
|
271
|
-
"version": "0.8.
|
|
272
|
+
"version": "0.8.2",
|
|
272
273
|
"installedAt": "2025-01-01T00:00:00.000Z",
|
|
273
274
|
"sha256": "ghi789..."
|
|
274
275
|
}
|
|
275
276
|
},
|
|
276
277
|
"skills": {
|
|
277
|
-
"brainstorming": { "version": "0.8.
|
|
278
|
-
"execution-mode-evaluation": { "version": "0.8.
|
|
279
|
-
"openspec-propose": { "version": "0.8.
|
|
278
|
+
"brainstorming": { "version": "0.8.2", ... },
|
|
279
|
+
"execution-mode-evaluation": { "version": "0.8.2", ... },
|
|
280
|
+
"openspec-propose": { "version": "0.8.2", ... }
|
|
280
281
|
},
|
|
281
282
|
"mcpServers": {
|
|
282
|
-
"ostacky-controller": { "version": "0.8.
|
|
283
|
-
"openspec": { "version": "0.8.
|
|
283
|
+
"ostacky-controller": { "version": "0.8.2", ... },
|
|
284
|
+
"openspec": { "version": "0.8.2", ... }
|
|
284
285
|
}
|
|
285
286
|
}
|
|
286
287
|
```
|
|
@@ -312,7 +313,7 @@ Es opcional y solo necesario si algo falló durante la instalación o si querés
|
|
|
312
313
|
## Seguridad
|
|
313
314
|
|
|
314
315
|
- `opencode.jsonc` se versiona en el repo para compartir permisos y MCP de forma reproducible.
|
|
315
|
-
- Las URLs de descarga usan **tags de GitHub** (ej. `v0.8.
|
|
316
|
+
- Las URLs de descarga usan **tags de GitHub** (ej. `v0.8.2`), nunca `main` — instalaciones reproducibles
|
|
316
317
|
- Cada path de archivo descargado es validado para prevenir **path traversal**
|
|
317
318
|
- Los archivos incluyen **checksum SHA-256** opcional; si el manifest lo define, el contenido se verifica antes de escribir
|
|
318
319
|
- El cache local (`.opencode/cache/`) también valida integridad al servir archivos cacheados
|
|
@@ -369,6 +370,8 @@ CodeGraph está instalado en `.opencode/tools/codegraph/bin/codegraph` y se conf
|
|
|
369
370
|
| `.opencode/tools/codegraph/bin/codegraph status` | Muestra estado del index y archivos pendientes |
|
|
370
371
|
| `.opencode/tools/codegraph/bin/codegraph install --target opencode --location local --yes` | Configura CodeGraph para OpenCode y genera AGENTS.md |
|
|
371
372
|
|
|
373
|
+
> **Windows:** si ves `Command failed: cmd.exe /d /c call ... codegraph.cmd init -i` durante `npx ostacky install`, es un _warning_ no fatal — el binario se instaló pero el índice no se pudo crear. Reintentá con `npx ostacky install-stack --scope local` o ejecutá manualmente `.opencode\tools\codegraph\bin\codegraph.exe init -i` (o `codegraph.cmd` si no hay `.exe`) dentro del proyecto. Desde v0.8.2 el instalador usa el patrón resiliente de Engram (strip 0 + búsqueda recursiva) y loguea `projectRoot|toolsDir` para diagnosticar scope.
|
|
374
|
+
|
|
372
375
|
## Licencia
|
|
373
376
|
|
|
374
377
|
MIT
|
package/assets/agents/ostacky.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Orquestador principal — rutea por nivel, orquesta CodeGraph + OpenSpec + Superpowers.
|
|
3
3
|
mode: primary
|
|
4
|
-
version: 0.8.
|
|
4
|
+
version: 0.8.2
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Sos **Ostacky v0.8.
|
|
7
|
+
Sos **Ostacky v0.8.2**, orquestás, no implementás. Interpretás, clasificás (0/0+1/1+), ruteás y coordinás.
|
|
8
8
|
|
|
9
|
-
> **Versión:** `0.8.
|
|
9
|
+
> **Versión:** `0.8.2` (sincronizada desde `package.json` vía `scripts/sync-version.ts`). Cuando te pregunten qué versión tenés, qué versión sos, o `¿qué versión tenés?` / `version` / `¿en qué versión estás?`, respondé exactamente: **"Ostacky v0.8.2"** (o `v0.8.2` si te piden solo el número). No inventes otra versión.
|
|
10
10
|
|
|
11
11
|
## Reglas innegociables
|
|
12
12
|
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Instala CodeGraph, skills curadas, OpenSpec
|
|
2
|
+
description: Instala CodeGraph, skills curadas, OpenSpec y Engram localmente para OpenCode únicamente
|
|
3
3
|
agent: build
|
|
4
4
|
---
|
|
5
5
|
|
|
6
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
|
-
**Nota:** A partir de v0.8.
|
|
8
|
+
**Nota:** A partir de v0.8.2, `npx ostacky install` ya instala automáticamente el stack completo (CodeGraph, OpenSpec, Engram, MCPs bundleados) además del agente y skills. Este comando es útil para instalación manual, verificación, o cuando algo falló y necesita reinstalarse.
|
|
9
9
|
|
|
10
10
|
**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.
|
|
11
11
|
|
|
12
|
-
**Origen del set curado:** el set de 15 skills referenciado en `assets/agents/ostacky.md` está bundleado en `assets/skills/` dentro del paquete npm.
|
|
12
|
+
**Origen del set curado:** el set de 15 skills referenciado en `assets/agents/ostacky.md` está bundleado en `assets/skills/` dentro del paquete npm. La definición del set y su trazabilidad viven en `manifest.json` y `.opencode/ostacky-lock.json`.
|
|
13
13
|
|
|
14
|
-
## Scope de instalación — local vs global (desde v0.8.
|
|
14
|
+
## Scope de instalación — local vs global (desde v0.8.2)
|
|
15
15
|
|
|
16
16
|
`npx ostacky install` soporta `--scope local|global|auto` (también `--scope=...`):
|
|
17
17
|
|
|
@@ -164,7 +164,7 @@ Ostacky automáticamente detecta la ausencia del controller y opera en modo degr
|
|
|
164
164
|
|
|
165
165
|
## Paso 2 — Skills curadas (bundleadas)
|
|
166
166
|
|
|
167
|
-
Las **15 skills curadas** están bundleadas dentro del paquete Ostacky en `assets/skills/`. No se descargan ni clonan; ya vienen en el paquete npm.
|
|
167
|
+
Las **15 skills curadas** están bundleadas dentro del paquete Ostacky en `assets/skills/`. No se descargan ni clonan; ya vienen en el paquete npm.
|
|
168
168
|
|
|
169
169
|
Copiá cada skill bundleada a `.opencode/skills/<nombre>/` preservando la estructura interna (incluyendo `SKILL.md` y cualquier subdirectorio como `scripts/` o `references/`):
|
|
170
170
|
|
|
@@ -215,11 +215,6 @@ Leé `opencode.json` (o `opencode.jsonc`) en la raíz del proyecto.
|
|
|
215
215
|
"command": [".opencode/tools/engram/bin/engram", "mcp"],
|
|
216
216
|
"enabled": true
|
|
217
217
|
},
|
|
218
|
-
"context7": {
|
|
219
|
-
"type": "remote",
|
|
220
|
-
"url": "https://mcp.context7.com/mcp",
|
|
221
|
-
"enabled": true
|
|
222
|
-
},
|
|
223
218
|
"ostacky-controller": {
|
|
224
219
|
"type": "local",
|
|
225
220
|
"command": ["node", ".opencode/mcp/ostacky-controller/index.js"],
|
|
@@ -353,99 +348,6 @@ rm -rf ~/.engram/
|
|
|
353
348
|
|
|
354
349
|
---
|
|
355
350
|
|
|
356
|
-
## Paso 6 — Context7
|
|
357
|
-
|
|
358
|
-
[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).
|
|
359
|
-
|
|
360
|
-
**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.
|
|
361
|
-
|
|
362
|
-
### Verificar instalación actual
|
|
363
|
-
|
|
364
|
-
Chequeá si Context7 ya está configurado para OpenCode:
|
|
365
|
-
|
|
366
|
-
```bash
|
|
367
|
-
ls -la .opencode/skills/context7/ 2>/dev/null || echo "no-instalado"
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
También podés verificar si el MCP server de Context7 está en `opencode.json`:
|
|
371
|
-
|
|
372
|
-
```bash
|
|
373
|
-
grep -c "context7" opencode.json 2>/dev/null || echo "no-configurado"
|
|
374
|
-
```
|
|
375
|
-
|
|
376
|
-
### Instalar
|
|
377
|
-
|
|
378
|
-
**Opción recomendada — setup automático (CLI + skills):**
|
|
379
|
-
|
|
380
|
-
```bash
|
|
381
|
-
npx ctx7 setup --opencode
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
Este comando:
|
|
385
|
-
|
|
386
|
-
- Autentica vía OAuth y genera una API key
|
|
387
|
-
- Instala un skill en `.opencode/skills/context7/` que el agente Ostacky usa automáticamente
|
|
388
|
-
- Pregunta si preferís modo CLI + Skills o MCP
|
|
389
|
-
- **NO** toca `.claude/`, `.cursor/`, `.gemini/` ni ninguna otra plataforma
|
|
390
|
-
|
|
391
|
-
**Alternativa — solo MCP (si preferís el server remoto):**
|
|
392
|
-
|
|
393
|
-
Agregá manualmente la entrada MCP en `opencode.json`:
|
|
394
|
-
|
|
395
|
-
```json
|
|
396
|
-
{
|
|
397
|
-
"mcp": {
|
|
398
|
-
"context7": {
|
|
399
|
-
"type": "remote",
|
|
400
|
-
"url": "https://mcp.context7.com/mcp"
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
Si tenés una API key de Context7 (recomendado para mejores rate limits):
|
|
407
|
-
|
|
408
|
-
```json
|
|
409
|
-
{
|
|
410
|
-
"mcp": {
|
|
411
|
-
"context7": {
|
|
412
|
-
"type": "remote",
|
|
413
|
-
"url": "https://mcp.context7.com/mcp",
|
|
414
|
-
"headers": {
|
|
415
|
-
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
```
|
|
421
|
-
|
|
422
|
-
### Desinstalar
|
|
423
|
-
|
|
424
|
-
Para remover la configuración generada por `npx ctx7 setup`:
|
|
425
|
-
|
|
426
|
-
```bash
|
|
427
|
-
npx ctx7 remove
|
|
428
|
-
```
|
|
429
|
-
|
|
430
|
-
Esto elimina el skill y la configuración de Context7. Si instalaste el CLI globalmente con `npm install -g ctx7`, también necesitás:
|
|
431
|
-
|
|
432
|
-
```bash
|
|
433
|
-
npm uninstall -g ctx7
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
Para remover la entrada MCP manual, editá `opencode.json` y eliminá el bloque `mcp.context7`.
|
|
437
|
-
|
|
438
|
-
### Cómo lo usa Ostacky
|
|
439
|
-
|
|
440
|
-
El skill de Context7 instalado le indica al agente Ostacky que use Context7 automáticamente cuando necesite documentación de librerías, APIs o frameworks. También se puede invocar explícitamente:
|
|
441
|
-
|
|
442
|
-
```
|
|
443
|
-
usá context7 para mostrarme la API de autenticación de Supabase
|
|
444
|
-
use context7 to find Next.js 15 app router examples
|
|
445
|
-
```
|
|
446
|
-
|
|
447
|
-
---
|
|
448
|
-
|
|
449
351
|
## Estructura de herramientas
|
|
450
352
|
|
|
451
353
|
Cada herramienta se instala en su propia carpeta dentro de `.opencode/` para mantener una instalación limpia y aislada. El installer crea automáticamente `.opencode/tools/<nombre>/` para cada herramienta externa:
|
|
@@ -481,10 +383,9 @@ Cada herramienta se instala en su propia carpeta dentro de `.opencode/` para man
|
|
|
481
383
|
│ ├── using-superpowers/
|
|
482
384
|
│ ├── writing-skills/
|
|
483
385
|
│ └── graceful-degradation/
|
|
484
|
-
├── tools/ #
|
|
485
|
-
│ ├── codegraph/ #
|
|
486
|
-
│
|
|
487
|
-
│ └── context7/ # Config de Context7
|
|
386
|
+
├── tools/ # Binarios locales de herramientas externas
|
|
387
|
+
│ ├── codegraph/ # Binario local de CodeGraph
|
|
388
|
+
│ └── engram/ # Binario local de Engram
|
|
488
389
|
└── plugins/ # Plugins de OpenCode
|
|
489
390
|
```
|
|
490
391
|
|
|
@@ -493,24 +394,23 @@ Cada herramienta se instala en su propia carpeta dentro de `.opencode/` para man
|
|
|
493
394
|
- `.codegraph/` (índice de CodeGraph) vive en la raíz del proyecto — CodeGraph lo espera ahí.
|
|
494
395
|
- El binario de CodeGraph es **local al proyecto** en `.opencode/tools/codegraph/bin/`; en Windows puede ser `codegraph.cmd`. No se instala globalmente.
|
|
495
396
|
- El binario de Engram es **local al proyecto** en `.opencode/tools/engram/bin/engram` (o `engram.exe` en Windows). No se instala globalmente.
|
|
496
|
-
-
|
|
397
|
+
- El binary de CodeGraph y Engram vive siempre en `<proyecto>/.opencode/tools/` por reproducibilidad, nunca global.
|
|
497
398
|
- El controller publicado se bundlea como un único `index.js`; durante desarrollo el installer instala sus dependencias en staging y valida el servidor antes de activarlo.
|
|
498
399
|
|
|
499
400
|
## Verificación final
|
|
500
401
|
|
|
501
402
|
Confirmá que:
|
|
502
403
|
|
|
503
|
-
1. `.opencode/skills/` contiene las 15 skills curadas
|
|
404
|
+
1. `.opencode/skills/` contiene las 15 skills curadas
|
|
504
405
|
2. `.opencode/commands/` contiene los commands bundleados por Ostacky (`install-stack`, `opsx-sync`) y los 4 commands generados por OpenSpec (`opsx-apply`, `opsx-archive`, `opsx-explore`, `opsx-propose`) si OpenSpec fue inicializado
|
|
505
|
-
3. `opencode.json` (o `.jsonc`) tiene los bloques MCP: `codegraph`, `engram`, `
|
|
406
|
+
3. `opencode.json` (o `.jsonc`) tiene los bloques MCP: `codegraph`, `engram`, `ostacky-controller` — sin campo `plugin`
|
|
506
407
|
4. `.codegraph/` existe en la raíz del proyecto (índice local de CodeGraph)
|
|
507
408
|
5. El launcher local de CodeGraph funciona (`codegraph.cmd --version` en Windows o `codegraph --version` en Unix)
|
|
508
409
|
6. El binario local de Engram funciona (`engram.exe --version` en Windows o `engram --version` en Unix)
|
|
509
|
-
7.
|
|
510
|
-
8.
|
|
511
|
-
9.
|
|
512
|
-
10.
|
|
513
|
-
11. Un `AGENTS.md` preexistente en la raíz del proyecto se preserva sin cambios
|
|
410
|
+
7. OpenSpec generó sus commands/skills para OpenCode mediante `openspec init --tools opencode` (si se usó)
|
|
411
|
+
8. `.opencode/tools/` contiene subdirectorios para `codegraph/` y `engram/`
|
|
412
|
+
9. **NO existen** archivos generados en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/` ni ningún directorio de otra plataforma
|
|
413
|
+
10. Un `AGENTS.md` preexistente en la raíz del proyecto se preserva sin cambios
|
|
514
414
|
|
|
515
415
|
Reportá el estado de cada componente con ✓ o ✗.
|
|
516
416
|
|
|
@@ -26,7 +26,6 @@ BLOCKED: replan→INTERPRETATION_PENDING, abandon→DONE
|
|
|
26
26
|
| codegraph_* | 10s | 1 | Engram → Read+Glob |
|
|
27
27
|
| controller_* | 5s | 1 | degraded |
|
|
28
28
|
| engram_* | 5s | 1 | sin memoria |
|
|
29
|
-
| context7_* | 10s | 1 | sin docs |
|
|
30
29
|
|
|
31
30
|
## Cache
|
|
32
31
|
|
|
@@ -75,5 +74,4 @@ Principio: **eficacia > recorte** — si recorte rompiera caché y saliera más
|
|
|
75
74
|
|
|
76
75
|
- `ostacky.md` 109→72 líneas (diet estable cacheable). Tiered vía suffix, no reemplazo `system[0]`.
|
|
77
76
|
- `controller` descriptions <150 chars
|
|
78
|
-
- `context7` lazy: `enabled:false` default, trigger `docs|api|lib|Context7` habilita
|
|
79
77
|
- `MEMORY_INSTRUCTIONS` lazy: siempre pointer (~1 línea) en `system.transform`; full vive en `assets/docs/engram-protocol.md` on-demand via `Read` (ahorro ~1.2k en FULL, trivial ya era pointer)
|
|
@@ -2371,7 +2371,7 @@ function safeHandler(fn, options = {}) {
|
|
|
2371
2371
|
|
|
2372
2372
|
const server = new McpServer({
|
|
2373
2373
|
name: 'ostacky-controller',
|
|
2374
|
-
version: '0.8.
|
|
2374
|
+
version: '0.8.2',
|
|
2375
2375
|
});
|
|
2376
2376
|
|
|
2377
2377
|
server.registerTool(
|
|
@@ -2971,7 +2971,7 @@ function setupGracefulShutdown(ctrl) {
|
|
|
2971
2971
|
}
|
|
2972
2972
|
|
|
2973
2973
|
async function main() {
|
|
2974
|
-
log('Starting ostacky-controller MCP v0.8.
|
|
2974
|
+
log('Starting ostacky-controller MCP v0.8.2...');
|
|
2975
2975
|
log('State path:', { path: statePath });
|
|
2976
2976
|
// Clean up stale tmp/lock files from previous runs
|
|
2977
2977
|
cleanupTmpFiles(statePath);
|
|
@@ -38,7 +38,7 @@ Do NOT invoke any implementation skill, write any code, or scaffold any project
|
|
|
38
38
|
|
|
39
39
|
1. **Check discovery-cache first** — `src/discovery-cache.ts` `getDiscoverySnapshot(query)` + `getEngramDedup(query, requestId)`. Si hit válido (TTL+gitDiffHash), **reusar** sin llamar tools. Solo si miss → `engram_mem_search` + `codegraph_codegraph_explore` y **SHALL `putDiscoverySnapshot`** antes de avanzar. No re-llamar si área difiere <30% del snapshot.
|
|
40
40
|
2. **Ask clarifying questions** — one at a time, understand purpose/constraints/success criteria
|
|
41
|
-
4. **Propose 2-3 approaches (hardening-v2 — SHALL)** — con tabla trade-offs (coste|riesgo|complejidad) + evidencia CodeGraph+Engram
|
|
41
|
+
4. **Propose 2-3 approaches (hardening-v2 — SHALL)** — con tabla trade-offs (coste|riesgo|complejidad) + evidencia CodeGraph+Engram sin alucinar, YAGNI, y recomendación con razón; cada approach cita symbols existentes y mem_search hits verificables
|
|
42
42
|
5. **Present design** — in sections scaled to complexity, get user approval after each section. **Gate post-brainstorming (hardening-v2):** tras presentar diseño, preguntar "¿Procedo con este diseño o querés ajustar algo?" y esperar confirmación explícita antes de `record_discovery`, `openspec-propose` o implementación directa
|
|
43
43
|
6. **Write design doc (output path condicional — router exclusivo):**
|
|
44
44
|
- Si trigger + `level 1+` no-downgradeable (`estLines>30` o `fileCount>2` o API pública) y change activo → escribir `openspec/changes/<id>/design.md` sección `## Alternatives Considered` con 2-3 approaches (tabla coste|riesgo|complejidad + evidencia CodeGraph+Engram), no `docs/`. No invocar `openspec-propose` separado — este es el diseño.
|
|
@@ -20,7 +20,6 @@ When critical tools are unavailable, this skill provides a systematic approach t
|
|
|
20
20
|
| CodeGraph | MCP server | Engram → Read + Glob | No structural analysis, manual exploration |
|
|
21
21
|
| Engram | MCP server | Continue without memory | No persistence across sessions |
|
|
22
22
|
| Controller | MCP server | Inline validation + manual state | No state machine, no edit validation |
|
|
23
|
-
| Context7 | MCP server (remote) | Skip documentation | No external API docs |
|
|
24
23
|
|
|
25
24
|
## Detection
|
|
26
25
|
|
|
@@ -108,12 +107,6 @@ Incluso en degraded, el guard de credenciales sigue activo (hard gate incluso en
|
|
|
108
107
|
- No state persistence across crashes
|
|
109
108
|
- No pending state enforcement (check_pending_state unavailable)
|
|
110
109
|
|
|
111
|
-
### Without Context7
|
|
112
|
-
|
|
113
|
-
**Impact:** Minimal — only affects external API documentation lookups.
|
|
114
|
-
|
|
115
|
-
**Workflow:** Proceed normally. Use existing knowledge.
|
|
116
|
-
|
|
117
110
|
## Communication Protocol
|
|
118
111
|
|
|
119
112
|
### Status Report Format
|
|
@@ -141,7 +134,6 @@ Herramientas disponibles:
|
|
|
141
134
|
✅ Controller — ping OK
|
|
142
135
|
❌ CodeGraph — timeout 10s
|
|
143
136
|
✅ Engram — disponible
|
|
144
|
-
✅ Context7 — disponible
|
|
145
137
|
|
|
146
138
|
¿Continuar con lectura manual de archivos?
|
|
147
139
|
```
|
|
@@ -154,7 +146,6 @@ Herramientas disponibles:
|
|
|
154
146
|
❌ Controller — no responde
|
|
155
147
|
❌ CodeGraph — no instalado
|
|
156
148
|
❌ Engram — timeout 5s
|
|
157
|
-
✅ Context7 — disponible (pero sin docs relevantes)
|
|
158
149
|
|
|
159
150
|
Modo básico: sin validación de edits, sin memoria persistente, sin análisis estructural.
|
|
160
151
|
¿Continuar o cancelar?
|
package/dist/cli.js
CHANGED
|
@@ -744,31 +744,31 @@ var init_fs = __esm(() => {
|
|
|
744
744
|
var manifest_default;
|
|
745
745
|
var init_manifest = __esm(() => {
|
|
746
746
|
manifest_default = {
|
|
747
|
-
version: "0.8.
|
|
747
|
+
version: "0.8.2",
|
|
748
748
|
repo: "JaimeHoracio/Ostacky",
|
|
749
|
-
tag: "v0.8.
|
|
749
|
+
tag: "v0.8.2",
|
|
750
750
|
agents: [
|
|
751
751
|
{
|
|
752
752
|
name: "ostacky",
|
|
753
753
|
file: "assets/agents/ostacky.md",
|
|
754
|
-
description: "Orquestador con recuperación automática (nunca se congela), ruteo por nivel de impacto, controller MCP con SDK oficial, edición segura con fallback inline, y delegación en OpenSpec + Superpowers. v0.8.
|
|
755
|
-
version: "0.8.
|
|
756
|
-
sha256: "
|
|
754
|
+
description: "Orquestador con recuperación automática (nunca se congela), ruteo por nivel de impacto, controller MCP con SDK oficial, edición segura con fallback inline, y delegación en OpenSpec + Superpowers. v0.8.2: prune de skills obsoletas, lastHandoff, getAvailableTransitions, consecutiveFailures real, mem_session_summary automático al cierre.",
|
|
755
|
+
version: "0.8.2",
|
|
756
|
+
sha256: "7b2be94d05cd371fab5be5844ef7d82e542e84c2869d8171ccd63dc14e922dc3"
|
|
757
757
|
}
|
|
758
758
|
],
|
|
759
759
|
commands: [
|
|
760
760
|
{
|
|
761
761
|
name: "install-stack",
|
|
762
762
|
file: "assets/commands/install-stack.md",
|
|
763
|
-
description: "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, controller plugin). v0.8.
|
|
764
|
-
version: "0.8.
|
|
765
|
-
sha256: "
|
|
763
|
+
description: "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, controller plugin). v0.8.2: controller plugin como alma hard-gate, Context7 removido del stack.",
|
|
764
|
+
version: "0.8.2",
|
|
765
|
+
sha256: "24802dc29675a584dacf4d0ac8a944dd935ee0f96a4e804a9b1c5bdb3709438c"
|
|
766
766
|
},
|
|
767
767
|
{
|
|
768
768
|
name: "opsx-sync",
|
|
769
769
|
file: "assets/commands/opsx-sync.md",
|
|
770
770
|
description: "Sincroniza delta specs del change activo sin inicializar CodeGraph si ya existe índice",
|
|
771
|
-
version: "0.8.
|
|
771
|
+
version: "0.8.2",
|
|
772
772
|
sha256: "fe0158478f2ca63b315037a85fc1632b77868532e319af6c7384285441767d64"
|
|
773
773
|
}
|
|
774
774
|
],
|
|
@@ -776,15 +776,15 @@ var init_manifest = __esm(() => {
|
|
|
776
776
|
{
|
|
777
777
|
name: "ostacky-controller",
|
|
778
778
|
file: "assets/mcp/ostacky-controller/",
|
|
779
|
-
description: "Máquina de estados persistida con @modelcontextprotocol/server SDK. v0.8.
|
|
780
|
-
version: "0.8.
|
|
781
|
-
sha256: "
|
|
779
|
+
description: "Máquina de estados persistida con @modelcontextprotocol/server SDK. v0.8.2: 22 tools (incluye set_handoff, get_handoff, clear_handoff, get_available_transitions funcional). Bugfixes: consecutiveFailures real, lastHandoff state, defaultChoice persistido. Robustez: degraded mode automático tras 3 fallos, persistence condicional para Nivel 0, prune de skills obsoletas.",
|
|
780
|
+
version: "0.8.2",
|
|
781
|
+
sha256: "a9d45b027a88e8037a4e29704b84f78a1d03d41654ba7445a3091a0c6767d094"
|
|
782
782
|
},
|
|
783
783
|
{
|
|
784
784
|
name: "openspec",
|
|
785
785
|
file: "assets/mcp/openspec/",
|
|
786
786
|
description: "MCP server local para OpenSpec - proposal, apply, archive, sync de cambios",
|
|
787
|
-
version: "0.8.
|
|
787
|
+
version: "0.8.2",
|
|
788
788
|
sha256: "fa4be28bfc1e75db8f1a037e2580f04a60066c80e8e5934e90e1041020d04609"
|
|
789
789
|
}
|
|
790
790
|
],
|
|
@@ -793,106 +793,106 @@ var init_manifest = __esm(() => {
|
|
|
793
793
|
name: "brainstorming",
|
|
794
794
|
file: "assets/skills/brainstorming/SKILL.md",
|
|
795
795
|
description: "Skill unificado de pensamiento con dos modos: creative-design (producción de diseño → transición a implementación directa o openspec-propose) y open-exploration (exploración libre)",
|
|
796
|
-
version: "0.8.
|
|
797
|
-
sha256: "
|
|
796
|
+
version: "0.8.2",
|
|
797
|
+
sha256: "4c54604d4680bc695b7049c70cf8680296d8d2602e5790ddfc1cce7ba7c6f1fc"
|
|
798
798
|
},
|
|
799
799
|
{
|
|
800
800
|
name: "execution-mode-evaluation",
|
|
801
801
|
file: "assets/skills/execution-mode-evaluation/SKILL.md",
|
|
802
802
|
description: "Skill de análisis de modo de ejecución — output reconciliado con controller snapshot contract (recommendation field)",
|
|
803
|
-
version: "0.8.
|
|
803
|
+
version: "0.8.2",
|
|
804
804
|
sha256: "7b89dda29927c88f1eb13ffcea541a12423384c172f66c4f3d9b61efe0c7a163"
|
|
805
805
|
},
|
|
806
806
|
{
|
|
807
807
|
name: "tdd",
|
|
808
808
|
file: "assets/skills/tdd/SKILL.md",
|
|
809
809
|
description: "Skill de test-driven development (Superpowers)",
|
|
810
|
-
version: "0.8.
|
|
810
|
+
version: "0.8.2",
|
|
811
811
|
sha256: "aa412298980b7826165c211145c1b8e9135f68f36247bb3cb96d0a0eae274486"
|
|
812
812
|
},
|
|
813
813
|
{
|
|
814
814
|
name: "subagent-driven-development",
|
|
815
815
|
file: "assets/skills/subagent-driven-development/SKILL.md",
|
|
816
816
|
description: "Skill de ejecución con subagentes (Superpowers) — ejecuta solo después de confirmación del coordinador Ostacky",
|
|
817
|
-
version: "0.8.
|
|
817
|
+
version: "0.8.2",
|
|
818
818
|
sha256: "1a42d714a9a13faf05f0bf7b580e8d837c2e77a5633839542ccce603023419e8"
|
|
819
819
|
},
|
|
820
820
|
{
|
|
821
821
|
name: "dispatching-parallel-agents",
|
|
822
822
|
file: "assets/skills/dispatching-parallel-agents/SKILL.md",
|
|
823
823
|
description: "Skill de dispatch paralelo de agentes (Superpowers)",
|
|
824
|
-
version: "0.8.
|
|
824
|
+
version: "0.8.2",
|
|
825
825
|
sha256: "3c8a66d51ae2e719e877d02c3dac32bd804722c3bb9227c258ecae78252a20ab"
|
|
826
826
|
},
|
|
827
827
|
{
|
|
828
828
|
name: "review",
|
|
829
829
|
file: "assets/skills/review/SKILL.md",
|
|
830
830
|
description: "Skill de revisión de código (Superpowers)",
|
|
831
|
-
version: "0.8.
|
|
831
|
+
version: "0.8.2",
|
|
832
832
|
sha256: "b19650ed4d1d4d9857a4dd5b7e08e91328a1a1fc9c45bcc2fb600fa9d0213279"
|
|
833
833
|
},
|
|
834
834
|
{
|
|
835
835
|
name: "receiving-code-review",
|
|
836
836
|
file: "assets/skills/receiving-code-review/SKILL.md",
|
|
837
837
|
description: "Skill de recibir y procesar feedback de code review",
|
|
838
|
-
version: "0.8.
|
|
838
|
+
version: "0.8.2",
|
|
839
839
|
sha256: "d761e884e71d8d3476ac734d287cae403a4024506a7d12e7361a448217c0a831"
|
|
840
840
|
},
|
|
841
841
|
{
|
|
842
842
|
name: "openspec-propose",
|
|
843
843
|
file: "assets/skills/openspec-propose/SKILL.md",
|
|
844
844
|
description: "Skill de generación de proposal (OpenSpec)",
|
|
845
|
-
version: "0.8.
|
|
845
|
+
version: "0.8.2",
|
|
846
846
|
sha256: "bb59100b9fd3c9f9a1ec6509fa975ec55bf7fc737df4fe73bb3e9bbc217b83f7"
|
|
847
847
|
},
|
|
848
848
|
{
|
|
849
849
|
name: "openspec-apply-change",
|
|
850
850
|
file: "assets/skills/openspec-apply-change/SKILL.md",
|
|
851
851
|
description: "Skill de aplicación de change (OpenSpec)",
|
|
852
|
-
version: "0.8.
|
|
852
|
+
version: "0.8.2",
|
|
853
853
|
sha256: "dfc823bf89fc7505e91ab6dee9c1f004be38a410bd3d88fb67b211b1b6cbb1d0"
|
|
854
854
|
},
|
|
855
855
|
{
|
|
856
856
|
name: "openspec-archive-change",
|
|
857
857
|
file: "assets/skills/openspec-archive-change/SKILL.md",
|
|
858
858
|
description: "Skill de archivo de change (OpenSpec)",
|
|
859
|
-
version: "0.8.
|
|
859
|
+
version: "0.8.2",
|
|
860
860
|
sha256: "16e4b561de7747283663fed602e506abf502452c49a8d4b86d7a5539c40f0195"
|
|
861
861
|
},
|
|
862
862
|
{
|
|
863
863
|
name: "openspec-explore",
|
|
864
864
|
file: "assets/skills/openspec-explore/SKILL.md",
|
|
865
865
|
description: "Modo explore para OpenSpec — thinking partner para explorar ideas, investigar problemas y clarificar requisitos antes/durante un cambio",
|
|
866
|
-
version: "0.8.
|
|
866
|
+
version: "0.8.2",
|
|
867
867
|
sha256: "37ae4aaf17ea71a395bab6dc4d9d61b9a49d7910f6692535ae8553244c46880b"
|
|
868
868
|
},
|
|
869
869
|
{
|
|
870
870
|
name: "using-git-worktrees",
|
|
871
871
|
file: "assets/skills/using-git-worktrees/SKILL.md",
|
|
872
872
|
description: "Skill de uso de git worktrees para aislamiento de trabajo",
|
|
873
|
-
version: "0.8.
|
|
873
|
+
version: "0.8.2",
|
|
874
874
|
sha256: "93341bc1b7c053618a8b6dc07e3615b77990d7b549a0201f5835d95fef67ce13"
|
|
875
875
|
},
|
|
876
876
|
{
|
|
877
877
|
name: "using-superpowers",
|
|
878
878
|
file: "assets/skills/using-superpowers/SKILL.md",
|
|
879
879
|
description: "Skill de orquestación de Superpowers skills",
|
|
880
|
-
version: "0.8.
|
|
880
|
+
version: "0.8.2",
|
|
881
881
|
sha256: "7e54536f96d2a379185a10bfc1e970850caa2561b6d8aca7080f0defea0381a4"
|
|
882
882
|
},
|
|
883
883
|
{
|
|
884
884
|
name: "writing-skills",
|
|
885
885
|
file: "assets/skills/writing-skills/SKILL.md",
|
|
886
886
|
description: "Skill de creación y edición de skills",
|
|
887
|
-
version: "0.8.
|
|
887
|
+
version: "0.8.2",
|
|
888
888
|
sha256: "3d76b906cee518a2b809febb70db95697a35b9f368986bb504b4120c3bfb437a"
|
|
889
889
|
},
|
|
890
890
|
{
|
|
891
891
|
name: "graceful-degradation",
|
|
892
892
|
file: "assets/skills/graceful-degradation/SKILL.md",
|
|
893
893
|
description: "Skill de degradación graceful cuando múltiples tools están indisponibles",
|
|
894
|
-
version: "0.8.
|
|
895
|
-
sha256: "
|
|
894
|
+
version: "0.8.2",
|
|
895
|
+
sha256: "79d0eeb2116382cb5db5b753277a333b7ca5682f4a541170b4a6158125c2cb50"
|
|
896
896
|
}
|
|
897
897
|
]
|
|
898
898
|
};
|
|
@@ -1260,12 +1260,6 @@ function patchOpenCodeConfig(projectRoot = findProjectRoot()) {
|
|
|
1260
1260
|
delete config.plugin;
|
|
1261
1261
|
changed = true;
|
|
1262
1262
|
}
|
|
1263
|
-
if (config.mcp && typeof config.mcp === "object" && "context7" in config.mcp) {
|
|
1264
|
-
delete config.mcp.context7;
|
|
1265
|
-
if (Object.keys(config.mcp).length === 0)
|
|
1266
|
-
delete config.mcp;
|
|
1267
|
-
changed = true;
|
|
1268
|
-
}
|
|
1269
1263
|
if (changed) {
|
|
1270
1264
|
writeOpenCodeConfig(configPath, config);
|
|
1271
1265
|
return { success: true, message: "Config actualizada (plugin legacy eliminado)" };
|
|
@@ -1303,11 +1297,21 @@ function resolveToolInstallLocation(toolsDir) {
|
|
|
1303
1297
|
}
|
|
1304
1298
|
function runTool(binary, args, cwd, timeout = 30000) {
|
|
1305
1299
|
const invocation = getCommandInvocation(binary, args);
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1300
|
+
try {
|
|
1301
|
+
execFileSync3(invocation.command, invocation.args, {
|
|
1302
|
+
cwd,
|
|
1303
|
+
stdio: "pipe",
|
|
1304
|
+
timeout
|
|
1305
|
+
});
|
|
1306
|
+
} catch (error) {
|
|
1307
|
+
const err = error;
|
|
1308
|
+
const stdout = err.stdout ? Buffer.from(err.stdout).toString().trim() : "";
|
|
1309
|
+
const stderr = err.stderr ? Buffer.from(err.stderr).toString().trim() : "";
|
|
1310
|
+
const detail = [stderr, stdout].filter(Boolean).join(`
|
|
1311
|
+
`) || err.message;
|
|
1312
|
+
const invocationStr = `${invocation.command} ${invocation.args.join(" ")}`;
|
|
1313
|
+
throw new Error(`${detail} (invocación: ${invocationStr}, cwd: ${cwd ?? process.cwd()})`);
|
|
1314
|
+
}
|
|
1311
1315
|
}
|
|
1312
1316
|
function findToolBinary(toolDir, name) {
|
|
1313
1317
|
const binDir = join7(toolDir, "bin");
|
|
@@ -1396,18 +1400,36 @@ async function installCodeGraph(toolsDir) {
|
|
|
1396
1400
|
const ext = process.platform === "win32" ? "zip" : "tar.gz";
|
|
1397
1401
|
const url = `https://github.com/colbymchenry/codegraph/releases/download/${tag}/codegraph-${target}.${ext}`;
|
|
1398
1402
|
try {
|
|
1399
|
-
archivePromotion = await downloadAndExtractWithRetry(url, cgToolDir,
|
|
1403
|
+
archivePromotion = await downloadAndExtractWithRetry(url, cgToolDir, 0, 180000, 2);
|
|
1400
1404
|
} catch (e2) {
|
|
1401
1405
|
return {
|
|
1402
1406
|
success: false,
|
|
1403
1407
|
message: `Error descargando CodeGraph ${tag}: ${e2.message}`
|
|
1404
1408
|
};
|
|
1405
1409
|
}
|
|
1406
|
-
|
|
1407
|
-
|
|
1410
|
+
const expectedBin = join7(cgToolDir, "bin", getExecutableName("codegraph"));
|
|
1411
|
+
let found = findToolBinary(cgToolDir, "codegraph");
|
|
1412
|
+
if (!found)
|
|
1413
|
+
found = findBinaryInDir(cgToolDir, "codegraph");
|
|
1414
|
+
if (!found) {
|
|
1408
1415
|
return failAfterExtraction(`Descarga de CodeGraph ${tag} completada pero no se encontró el binario en ${join7(cgToolDir, "bin")}.`);
|
|
1409
1416
|
}
|
|
1410
|
-
|
|
1417
|
+
try {
|
|
1418
|
+
if (found !== expectedBin) {
|
|
1419
|
+
mkdirSync4(join7(cgToolDir, "bin"), { recursive: true });
|
|
1420
|
+
if (found.toLowerCase().endsWith(".cmd") && expectedBin.toLowerCase().endsWith(".exe")) {
|
|
1421
|
+
localBin = found;
|
|
1422
|
+
} else {
|
|
1423
|
+
copyFileSync3(found, expectedBin);
|
|
1424
|
+
localBin = expectedBin;
|
|
1425
|
+
}
|
|
1426
|
+
} else {
|
|
1427
|
+
localBin = found;
|
|
1428
|
+
}
|
|
1429
|
+
} catch (error) {
|
|
1430
|
+
return failAfterExtraction(`CodeGraph fue descargado pero no se pudo materializar el binario local: ${error.message}`);
|
|
1431
|
+
}
|
|
1432
|
+
if (process.platform !== "win32" && localBin) {
|
|
1411
1433
|
try {
|
|
1412
1434
|
chmodSync(localBin, 493);
|
|
1413
1435
|
} catch {}
|
|
@@ -1422,7 +1444,8 @@ async function installCodeGraph(toolsDir) {
|
|
|
1422
1444
|
try {
|
|
1423
1445
|
runTool(localBin, ["init", "-i"], projectRoot, 120000);
|
|
1424
1446
|
} catch (error) {
|
|
1425
|
-
|
|
1447
|
+
const msg = error.message;
|
|
1448
|
+
indexWarning = `El índice no se pudo inicializar todavía: ${msg}. Sugerencia: ejecutá manualmente \`${localBin} init -i\` en ${projectRoot} o \`npx ostacky install-stack --scope local\` para reintentar. Si el path del binario (${localBin}) apunta a ${cgToolDir} y esperabas otro proyecto, verificá que corriste el comando dentro del proyecto correcto (con .git) y con --scope local.`;
|
|
1426
1449
|
}
|
|
1427
1450
|
try {
|
|
1428
1451
|
configureLocalTool(projectRoot, "codegraph", buildLocalMcpCommand(localBin, ["serve", "--mcp"]));
|
|
@@ -1621,7 +1644,7 @@ function uninstallStackConfig(paths) {
|
|
|
1621
1644
|
const mcp = config.mcp;
|
|
1622
1645
|
let changed = false;
|
|
1623
1646
|
if (mcp) {
|
|
1624
|
-
for (const name of ["codegraph", "engram"
|
|
1647
|
+
for (const name of ["codegraph", "engram"]) {
|
|
1625
1648
|
if (name in mcp) {
|
|
1626
1649
|
delete mcp[name];
|
|
1627
1650
|
removed.push(`mcp.${name}`);
|
|
@@ -1691,7 +1714,7 @@ var init_stack = __esm(() => {
|
|
|
1691
1714
|
// package.json
|
|
1692
1715
|
var package_default = {
|
|
1693
1716
|
name: "ostacky",
|
|
1694
|
-
version: "0.8.
|
|
1717
|
+
version: "0.8.2",
|
|
1695
1718
|
description: "Instalador interactivo de agentes y comandos para OpenCode",
|
|
1696
1719
|
type: "module",
|
|
1697
1720
|
bin: {
|
|
@@ -2866,7 +2889,7 @@ async function probeMcpServer(nodeExecutable, serverPath, cwd, statePath, option
|
|
|
2866
2889
|
params: {
|
|
2867
2890
|
protocolVersion: "2025-03-26",
|
|
2868
2891
|
capabilities: {},
|
|
2869
|
-
clientInfo: { name: "ostacky-installer", version: "0.8.
|
|
2892
|
+
clientInfo: { name: "ostacky-installer", version: "0.8.2" }
|
|
2870
2893
|
}
|
|
2871
2894
|
});
|
|
2872
2895
|
});
|
|
@@ -3366,6 +3389,16 @@ async function doInstallStack(toolsDir, projectRoot) {
|
|
|
3366
3389
|
const spin = L2();
|
|
3367
3390
|
let allOk = true;
|
|
3368
3391
|
const resolvedProjectRoot = projectRoot ?? dirname6(dirname6(toolsDir ?? join8(process.cwd(), ".opencode", "tools")));
|
|
3392
|
+
const resolvedToolsDir = toolsDir ?? join8(resolvedProjectRoot, ".opencode", "tools");
|
|
3393
|
+
v2.info(`Stack → projectRoot: ${resolvedProjectRoot} | toolsDir: ${resolvedToolsDir}`);
|
|
3394
|
+
try {
|
|
3395
|
+
const { homedir: homedir2 } = await import("os");
|
|
3396
|
+
const home = homedir2();
|
|
3397
|
+
const inHome = resolvedProjectRoot.replace(/\\/g, "/") === home.replace(/\\/g, "/");
|
|
3398
|
+
if (inHome && !existsSync7(join8(home, ".git"))) {
|
|
3399
|
+
v2.warn(`Estás instalando el stack en tu home (${home}). Si esperabas instalar en un proyecto, hacé cd al proyecto y usá --scope local.`);
|
|
3400
|
+
}
|
|
3401
|
+
} catch {}
|
|
3369
3402
|
spin.start("Instalando CodeGraph...");
|
|
3370
3403
|
const cg = await installCodeGraph(toolsDir);
|
|
3371
3404
|
spin.stop(cg.success ? `✓ ${cg.message}` : `✗ ${cg.message}`);
|
|
@@ -3396,6 +3429,7 @@ async function doInstallAll(manifest, paths) {
|
|
|
3396
3429
|
const spin = L2();
|
|
3397
3430
|
let errors = 0;
|
|
3398
3431
|
const isGlobal = isGlobalScope(paths);
|
|
3432
|
+
v2.info(`Scope → ${isGlobal ? "global" : "local"} | opencodeDir: ${paths.root} | tools: ${paths.tools}`);
|
|
3399
3433
|
if (!isGlobal) {
|
|
3400
3434
|
ensureToolDirs(paths.tools, ["codegraph", "engram"]);
|
|
3401
3435
|
} else {
|
package/manifest.json
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.8.
|
|
2
|
+
"version": "0.8.2",
|
|
3
3
|
"repo": "JaimeHoracio/Ostacky",
|
|
4
|
-
"tag": "v0.8.
|
|
4
|
+
"tag": "v0.8.2",
|
|
5
5
|
"agents": [
|
|
6
6
|
{
|
|
7
7
|
"name": "ostacky",
|
|
8
8
|
"file": "assets/agents/ostacky.md",
|
|
9
|
-
"description": "Orquestador con recuperación automática (nunca se congela), ruteo por nivel de impacto, controller MCP con SDK oficial, edición segura con fallback inline, y delegación en OpenSpec + Superpowers. v0.8.
|
|
10
|
-
"version": "0.8.
|
|
11
|
-
"sha256": "
|
|
9
|
+
"description": "Orquestador con recuperación automática (nunca se congela), ruteo por nivel de impacto, controller MCP con SDK oficial, edición segura con fallback inline, y delegación en OpenSpec + Superpowers. v0.8.2: prune de skills obsoletas, lastHandoff, getAvailableTransitions, consecutiveFailures real, mem_session_summary automático al cierre.",
|
|
10
|
+
"version": "0.8.2",
|
|
11
|
+
"sha256": "7b2be94d05cd371fab5be5844ef7d82e542e84c2869d8171ccd63dc14e922dc3"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
14
14
|
"commands": [
|
|
15
15
|
{
|
|
16
16
|
"name": "install-stack",
|
|
17
17
|
"file": "assets/commands/install-stack.md",
|
|
18
|
-
"description": "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, controller plugin). v0.8.
|
|
19
|
-
"version": "0.8.
|
|
20
|
-
"sha256": "
|
|
18
|
+
"description": "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, controller plugin). v0.8.2: controller plugin como alma hard-gate, Context7 removido del stack.",
|
|
19
|
+
"version": "0.8.2",
|
|
20
|
+
"sha256": "24802dc29675a584dacf4d0ac8a944dd935ee0f96a4e804a9b1c5bdb3709438c"
|
|
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 sin inicializar CodeGraph si ya existe índice",
|
|
26
|
-
"version": "0.8.
|
|
26
|
+
"version": "0.8.2",
|
|
27
27
|
"sha256": "fe0158478f2ca63b315037a85fc1632b77868532e319af6c7384285441767d64"
|
|
28
28
|
}
|
|
29
29
|
],
|
|
@@ -31,15 +31,15 @@
|
|
|
31
31
|
{
|
|
32
32
|
"name": "ostacky-controller",
|
|
33
33
|
"file": "assets/mcp/ostacky-controller/",
|
|
34
|
-
"description": "Máquina de estados persistida con @modelcontextprotocol/server SDK. v0.8.
|
|
35
|
-
"version": "0.8.
|
|
36
|
-
"sha256": "
|
|
34
|
+
"description": "Máquina de estados persistida con @modelcontextprotocol/server SDK. v0.8.2: 22 tools (incluye set_handoff, get_handoff, clear_handoff, get_available_transitions funcional). Bugfixes: consecutiveFailures real, lastHandoff state, defaultChoice persistido. Robustez: degraded mode automático tras 3 fallos, persistence condicional para Nivel 0, prune de skills obsoletas.",
|
|
35
|
+
"version": "0.8.2",
|
|
36
|
+
"sha256": "a9d45b027a88e8037a4e29704b84f78a1d03d41654ba7445a3091a0c6767d094"
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"name": "openspec",
|
|
40
40
|
"file": "assets/mcp/openspec/",
|
|
41
41
|
"description": "MCP server local para OpenSpec - proposal, apply, archive, sync de cambios",
|
|
42
|
-
"version": "0.8.
|
|
42
|
+
"version": "0.8.2",
|
|
43
43
|
"sha256": "fa4be28bfc1e75db8f1a037e2580f04a60066c80e8e5934e90e1041020d04609"
|
|
44
44
|
}
|
|
45
45
|
],
|
|
@@ -48,106 +48,106 @@
|
|
|
48
48
|
"name": "brainstorming",
|
|
49
49
|
"file": "assets/skills/brainstorming/SKILL.md",
|
|
50
50
|
"description": "Skill unificado de pensamiento con dos modos: creative-design (producción de diseño → transición a implementación directa o openspec-propose) y open-exploration (exploración libre)",
|
|
51
|
-
"version": "0.8.
|
|
52
|
-
"sha256": "
|
|
51
|
+
"version": "0.8.2",
|
|
52
|
+
"sha256": "4c54604d4680bc695b7049c70cf8680296d8d2602e5790ddfc1cce7ba7c6f1fc"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"name": "execution-mode-evaluation",
|
|
56
56
|
"file": "assets/skills/execution-mode-evaluation/SKILL.md",
|
|
57
57
|
"description": "Skill de análisis de modo de ejecución — output reconciliado con controller snapshot contract (recommendation field)",
|
|
58
|
-
"version": "0.8.
|
|
58
|
+
"version": "0.8.2",
|
|
59
59
|
"sha256": "7b89dda29927c88f1eb13ffcea541a12423384c172f66c4f3d9b61efe0c7a163"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
"name": "tdd",
|
|
63
63
|
"file": "assets/skills/tdd/SKILL.md",
|
|
64
64
|
"description": "Skill de test-driven development (Superpowers)",
|
|
65
|
-
"version": "0.8.
|
|
65
|
+
"version": "0.8.2",
|
|
66
66
|
"sha256": "aa412298980b7826165c211145c1b8e9135f68f36247bb3cb96d0a0eae274486"
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
"name": "subagent-driven-development",
|
|
70
70
|
"file": "assets/skills/subagent-driven-development/SKILL.md",
|
|
71
71
|
"description": "Skill de ejecución con subagentes (Superpowers) — ejecuta solo después de confirmación del coordinador Ostacky",
|
|
72
|
-
"version": "0.8.
|
|
72
|
+
"version": "0.8.2",
|
|
73
73
|
"sha256": "1a42d714a9a13faf05f0bf7b580e8d837c2e77a5633839542ccce603023419e8"
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
76
|
"name": "dispatching-parallel-agents",
|
|
77
77
|
"file": "assets/skills/dispatching-parallel-agents/SKILL.md",
|
|
78
78
|
"description": "Skill de dispatch paralelo de agentes (Superpowers)",
|
|
79
|
-
"version": "0.8.
|
|
79
|
+
"version": "0.8.2",
|
|
80
80
|
"sha256": "3c8a66d51ae2e719e877d02c3dac32bd804722c3bb9227c258ecae78252a20ab"
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
"name": "review",
|
|
84
84
|
"file": "assets/skills/review/SKILL.md",
|
|
85
85
|
"description": "Skill de revisión de código (Superpowers)",
|
|
86
|
-
"version": "0.8.
|
|
86
|
+
"version": "0.8.2",
|
|
87
87
|
"sha256": "b19650ed4d1d4d9857a4dd5b7e08e91328a1a1fc9c45bcc2fb600fa9d0213279"
|
|
88
88
|
},
|
|
89
89
|
{
|
|
90
90
|
"name": "receiving-code-review",
|
|
91
91
|
"file": "assets/skills/receiving-code-review/SKILL.md",
|
|
92
92
|
"description": "Skill de recibir y procesar feedback de code review",
|
|
93
|
-
"version": "0.8.
|
|
93
|
+
"version": "0.8.2",
|
|
94
94
|
"sha256": "d761e884e71d8d3476ac734d287cae403a4024506a7d12e7361a448217c0a831"
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
"name": "openspec-propose",
|
|
98
98
|
"file": "assets/skills/openspec-propose/SKILL.md",
|
|
99
99
|
"description": "Skill de generación de proposal (OpenSpec)",
|
|
100
|
-
"version": "0.8.
|
|
100
|
+
"version": "0.8.2",
|
|
101
101
|
"sha256": "bb59100b9fd3c9f9a1ec6509fa975ec55bf7fc737df4fe73bb3e9bbc217b83f7"
|
|
102
102
|
},
|
|
103
103
|
{
|
|
104
104
|
"name": "openspec-apply-change",
|
|
105
105
|
"file": "assets/skills/openspec-apply-change/SKILL.md",
|
|
106
106
|
"description": "Skill de aplicación de change (OpenSpec)",
|
|
107
|
-
"version": "0.8.
|
|
107
|
+
"version": "0.8.2",
|
|
108
108
|
"sha256": "dfc823bf89fc7505e91ab6dee9c1f004be38a410bd3d88fb67b211b1b6cbb1d0"
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
111
|
"name": "openspec-archive-change",
|
|
112
112
|
"file": "assets/skills/openspec-archive-change/SKILL.md",
|
|
113
113
|
"description": "Skill de archivo de change (OpenSpec)",
|
|
114
|
-
"version": "0.8.
|
|
114
|
+
"version": "0.8.2",
|
|
115
115
|
"sha256": "16e4b561de7747283663fed602e506abf502452c49a8d4b86d7a5539c40f0195"
|
|
116
116
|
},
|
|
117
117
|
{
|
|
118
118
|
"name": "openspec-explore",
|
|
119
119
|
"file": "assets/skills/openspec-explore/SKILL.md",
|
|
120
120
|
"description": "Modo explore para OpenSpec — thinking partner para explorar ideas, investigar problemas y clarificar requisitos antes/durante un cambio",
|
|
121
|
-
"version": "0.8.
|
|
121
|
+
"version": "0.8.2",
|
|
122
122
|
"sha256": "37ae4aaf17ea71a395bab6dc4d9d61b9a49d7910f6692535ae8553244c46880b"
|
|
123
123
|
},
|
|
124
124
|
{
|
|
125
125
|
"name": "using-git-worktrees",
|
|
126
126
|
"file": "assets/skills/using-git-worktrees/SKILL.md",
|
|
127
127
|
"description": "Skill de uso de git worktrees para aislamiento de trabajo",
|
|
128
|
-
"version": "0.8.
|
|
128
|
+
"version": "0.8.2",
|
|
129
129
|
"sha256": "93341bc1b7c053618a8b6dc07e3615b77990d7b549a0201f5835d95fef67ce13"
|
|
130
130
|
},
|
|
131
131
|
{
|
|
132
132
|
"name": "using-superpowers",
|
|
133
133
|
"file": "assets/skills/using-superpowers/SKILL.md",
|
|
134
134
|
"description": "Skill de orquestación de Superpowers skills",
|
|
135
|
-
"version": "0.8.
|
|
135
|
+
"version": "0.8.2",
|
|
136
136
|
"sha256": "7e54536f96d2a379185a10bfc1e970850caa2561b6d8aca7080f0defea0381a4"
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
"name": "writing-skills",
|
|
140
140
|
"file": "assets/skills/writing-skills/SKILL.md",
|
|
141
141
|
"description": "Skill de creación y edición de skills",
|
|
142
|
-
"version": "0.8.
|
|
142
|
+
"version": "0.8.2",
|
|
143
143
|
"sha256": "3d76b906cee518a2b809febb70db95697a35b9f368986bb504b4120c3bfb437a"
|
|
144
144
|
},
|
|
145
145
|
{
|
|
146
146
|
"name": "graceful-degradation",
|
|
147
147
|
"file": "assets/skills/graceful-degradation/SKILL.md",
|
|
148
148
|
"description": "Skill de degradación graceful cuando múltiples tools están indisponibles",
|
|
149
|
-
"version": "0.8.
|
|
150
|
-
"sha256": "
|
|
149
|
+
"version": "0.8.2",
|
|
150
|
+
"sha256": "79d0eeb2116382cb5db5b753277a333b7ca5682f4a541170b4a6158125c2cb50"
|
|
151
151
|
}
|
|
152
152
|
]
|
|
153
153
|
}
|