ostacky 0.6.3 → 0.7.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/dist/cli.js CHANGED
@@ -520,31 +520,31 @@ var init_fs = __esm(() => {
520
520
  var manifest_default;
521
521
  var init_manifest = __esm(() => {
522
522
  manifest_default = {
523
- version: "0.6.3",
523
+ version: "0.7.1",
524
524
  repo: "JaimeHoracio/Ostacky",
525
- tag: "v0.6.3",
525
+ tag: "v0.7.1",
526
526
  agents: [
527
527
  {
528
528
  name: "ostacky",
529
529
  file: "assets/agents/ostacky.md",
530
- 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",
531
- version: "0.6.3",
532
- sha256: "9cd6f45339b897fe002775a3a54f570e47dedd1784fa474d6cd5113594d1bd85"
530
+ 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.7.1: prune de skills obsoletas, lastHandoff, getAvailableTransitions, consecutiveFailures real, mem_session_summary automático al cierre.",
531
+ version: "0.7.1",
532
+ sha256: "f833e69b6eaa3dfe24de9addf6455b3da55f829b51cba3c7c90c65c69cda34c2"
533
533
  }
534
534
  ],
535
535
  commands: [
536
536
  {
537
537
  name: "install-stack",
538
538
  file: "assets/commands/install-stack.md",
539
- description: "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, Context7, controller MCP con SDK oficial)",
540
- version: "0.6.3",
541
- sha256: "6002a342c3570a33c6f5d4bccf767d0c343b06c4a612cfaa8f744ffedd0de34d"
539
+ description: "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, Context7, controller MCP con SDK oficial). v0.7.1: Paso 1.5 controller expandido con verificación post-instalación y troubleshooting.",
540
+ version: "0.7.1",
541
+ sha256: "ef4244855cf733dfe50a2a8e7c436c5741f92574cc50f0fca49faed60480e013"
542
542
  },
543
543
  {
544
544
  name: "opsx-sync",
545
545
  file: "assets/commands/opsx-sync.md",
546
546
  description: "Sincroniza delta specs del change activo sin inicializar CodeGraph si ya existe índice",
547
- version: "0.6.3",
547
+ version: "0.7.1",
548
548
  sha256: "fe0158478f2ca63b315037a85fc1632b77868532e319af6c7384285441767d64"
549
549
  }
550
550
  ],
@@ -552,15 +552,15 @@ var init_manifest = __esm(() => {
552
552
  {
553
553
  name: "ostacky-controller",
554
554
  file: "assets/mcp/ostacky-controller/",
555
- description: "Máquina de estados persistida con @modelcontextprotocol/server SDK. 20 tools: start_request discovery route execution sync done + validate_edit + complete_task + ping + proceed_to_route + abandon integrado",
556
- version: "0.6.3",
557
- sha256: "144fb38a88f81a7657131bf416e59bf668c9eca5fd92a607ea94e32a41e1a36d"
555
+ description: "Máquina de estados persistida con @modelcontextprotocol/server SDK. v0.7.1: 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.",
556
+ version: "0.7.1",
557
+ sha256: "0e639fb1d5bedf8b93b4e259782b9b7de68cd4bb89875e2c546279d17131b7b7"
558
558
  },
559
559
  {
560
560
  name: "openspec",
561
561
  file: "assets/mcp/openspec/",
562
562
  description: "MCP server local para OpenSpec - proposal, apply, archive, sync de cambios",
563
- version: "0.6.3",
563
+ version: "0.7.1",
564
564
  sha256: "fa4be28bfc1e75db8f1a037e2580f04a60066c80e8e5934e90e1041020d04609"
565
565
  }
566
566
  ],
@@ -568,114 +568,107 @@ var init_manifest = __esm(() => {
568
568
  {
569
569
  name: "brainstorming",
570
570
  file: "assets/skills/brainstorming/SKILL.md",
571
- description: "Skill unificado de pensamiento con dos modos: creative-design (producción de diseño → transición a writing-plans o openspec-propose) y open-exploration (exploración libre)",
572
- version: "0.6.3",
573
- sha256: "602116fb37e5bc879d1a28815a5928c7bcd9563713907ea278669c1cd81fcde1"
571
+ 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)",
572
+ version: "0.7.1",
573
+ sha256: "333810ca63450e8ab795e8c5a58e645101e788d79210ca8ac36e10d11be39585"
574
574
  },
575
575
  {
576
576
  name: "execution-mode-evaluation",
577
577
  file: "assets/skills/execution-mode-evaluation/SKILL.md",
578
578
  description: "Skill de análisis de modo de ejecución — output reconciliado con controller snapshot contract (recommendation field)",
579
- version: "0.6.3",
580
- sha256: "2e21e69011a0d3cfc2abc4a42b93a616fa9dc7e416955d1f757f6d8e5b35f00b"
581
- },
582
- {
583
- name: "writing-plans",
584
- file: "assets/skills/writing-plans/SKILL.md",
585
- description: "Skill de planificación de implementación (Superpowers) — execution handoff removido, Ostacky decide modo de ejecución",
586
- version: "0.6.3",
587
- sha256: "9b14903231df96f54da08158c117801b18bba8f5a2e5a0c069854d059e99f294"
579
+ version: "0.7.1",
580
+ sha256: "edf6fca0af52cce83f8fd08e7db9b3d79cc130b53fca505e90d3fbaf4909338b"
588
581
  },
589
582
  {
590
583
  name: "tdd",
591
584
  file: "assets/skills/tdd/SKILL.md",
592
585
  description: "Skill de test-driven development (Superpowers)",
593
- version: "0.6.3",
586
+ version: "0.7.1",
594
587
  sha256: "aa412298980b7826165c211145c1b8e9135f68f36247bb3cb96d0a0eae274486"
595
588
  },
596
589
  {
597
590
  name: "subagent-driven-development",
598
591
  file: "assets/skills/subagent-driven-development/SKILL.md",
599
592
  description: "Skill de ejecución con subagentes (Superpowers) — ejecuta solo después de confirmación del coordinador Ostacky",
600
- version: "0.6.3",
601
- sha256: "6128a6cac60eadc11541ba2d37c3e395c6da3a0167767fbb9b7203b1a2a33ebc"
593
+ version: "0.7.1",
594
+ sha256: "1a42d714a9a13faf05f0bf7b580e8d837c2e77a5633839542ccce603023419e8"
602
595
  },
603
596
  {
604
597
  name: "dispatching-parallel-agents",
605
598
  file: "assets/skills/dispatching-parallel-agents/SKILL.md",
606
599
  description: "Skill de dispatch paralelo de agentes (Superpowers)",
607
- version: "0.6.3",
600
+ version: "0.7.1",
608
601
  sha256: "3c8a66d51ae2e719e877d02c3dac32bd804722c3bb9227c258ecae78252a20ab"
609
602
  },
610
603
  {
611
604
  name: "review",
612
605
  file: "assets/skills/review/SKILL.md",
613
606
  description: "Skill de revisión de código (Superpowers)",
614
- version: "0.6.3",
615
- sha256: "78914222c29306e479d24b09449e1b5a54b5a0482bd5e3e24faace792946a40a"
607
+ version: "0.7.1",
608
+ sha256: "b19650ed4d1d4d9857a4dd5b7e08e91328a1a1fc9c45bcc2fb600fa9d0213279"
616
609
  },
617
610
  {
618
611
  name: "receiving-code-review",
619
612
  file: "assets/skills/receiving-code-review/SKILL.md",
620
613
  description: "Skill de recibir y procesar feedback de code review",
621
- version: "0.6.3",
614
+ version: "0.7.1",
622
615
  sha256: "d761e884e71d8d3476ac734d287cae403a4024506a7d12e7361a448217c0a831"
623
616
  },
624
617
  {
625
618
  name: "openspec-propose",
626
619
  file: "assets/skills/openspec-propose/SKILL.md",
627
620
  description: "Skill de generación de proposal (OpenSpec)",
628
- version: "0.6.3",
629
- sha256: "a184a9e99c06860e1742a100336b1662b329c5d6b319301449ed0fa01545e1ac"
621
+ version: "0.7.1",
622
+ sha256: "bb59100b9fd3c9f9a1ec6509fa975ec55bf7fc737df4fe73bb3e9bbc217b83f7"
630
623
  },
631
624
  {
632
625
  name: "openspec-apply-change",
633
626
  file: "assets/skills/openspec-apply-change/SKILL.md",
634
627
  description: "Skill de aplicación de change (OpenSpec)",
635
- version: "0.6.3",
636
- sha256: "b12d80deb4f54f1ceb4792897dbd29fda9b15a71ddd98c30fb6501b085d8eee6"
628
+ version: "0.7.1",
629
+ sha256: "dfc823bf89fc7505e91ab6dee9c1f004be38a410bd3d88fb67b211b1b6cbb1d0"
637
630
  },
638
631
  {
639
632
  name: "openspec-archive-change",
640
633
  file: "assets/skills/openspec-archive-change/SKILL.md",
641
634
  description: "Skill de archivo de change (OpenSpec)",
642
- version: "0.6.3",
635
+ version: "0.7.1",
643
636
  sha256: "16e4b561de7747283663fed602e506abf502452c49a8d4b86d7a5539c40f0195"
644
637
  },
645
638
  {
646
639
  name: "openspec-explore",
647
640
  file: "assets/skills/openspec-explore/SKILL.md",
648
641
  description: "Modo explore para OpenSpec — thinking partner para explorar ideas, investigar problemas y clarificar requisitos antes/durante un cambio",
649
- version: "0.6.3",
642
+ version: "0.7.1",
650
643
  sha256: "37ae4aaf17ea71a395bab6dc4d9d61b9a49d7910f6692535ae8553244c46880b"
651
644
  },
652
645
  {
653
646
  name: "using-git-worktrees",
654
647
  file: "assets/skills/using-git-worktrees/SKILL.md",
655
648
  description: "Skill de uso de git worktrees para aislamiento de trabajo",
656
- version: "0.6.3",
649
+ version: "0.7.1",
657
650
  sha256: "11afa9123828fc5caa22137aff907cd99c751e99027fbd4c020751110a949281"
658
651
  },
659
652
  {
660
653
  name: "using-superpowers",
661
654
  file: "assets/skills/using-superpowers/SKILL.md",
662
655
  description: "Skill de orquestación de Superpowers skills",
663
- version: "0.6.3",
656
+ version: "0.7.1",
664
657
  sha256: "7e54536f96d2a379185a10bfc1e970850caa2561b6d8aca7080f0defea0381a4"
665
658
  },
666
659
  {
667
660
  name: "writing-skills",
668
661
  file: "assets/skills/writing-skills/SKILL.md",
669
662
  description: "Skill de creación y edición de skills",
670
- version: "0.6.3",
663
+ version: "0.7.1",
671
664
  sha256: "3d76b906cee518a2b809febb70db95697a35b9f368986bb504b4120c3bfb437a"
672
665
  },
673
666
  {
674
667
  name: "graceful-degradation",
675
668
  file: "assets/skills/graceful-degradation/SKILL.md",
676
669
  description: "Skill de degradación graceful cuando múltiples tools están indisponibles",
677
- version: "0.6.3",
678
- sha256: "91c52da5c72a866c5df388fc4d4a3dc317bc55be0040081cc7ae04d3c167a026"
670
+ version: "0.7.1",
671
+ sha256: "e5090e475729f21871bb25bce738000f3616955ed3edb3ba926dd740d3298948"
679
672
  }
680
673
  ]
681
674
  };
@@ -1052,7 +1045,8 @@ __export(exports_stack, {
1052
1045
  installEngram: () => installEngram,
1053
1046
  installCodeGraph: () => installCodeGraph,
1054
1047
  buildLocalMcpCommand: () => buildLocalMcpCommand,
1055
- buildEngramDownloadUrl: () => buildEngramDownloadUrl
1048
+ buildEngramDownloadUrl: () => buildEngramDownloadUrl,
1049
+ OPENSPEC_NPM_PACKAGE: () => OPENSPEC_NPM_PACKAGE
1056
1050
  });
1057
1051
  import { chmodSync, copyFileSync as copyFileSync3, existsSync as existsSync6, mkdirSync as mkdirSync4, rmSync as rmSync4, unlinkSync as unlinkSync3 } from "fs";
1058
1052
  import { basename as basename2, dirname as dirname5, join as join7, resolve as resolve2 } from "path";
@@ -1192,20 +1186,56 @@ async function installCodeGraph(toolsDir) {
1192
1186
  }
1193
1187
  function setupOpenSpec(projectRoot = findProjectRoot()) {
1194
1188
  const useBun = isCommandAvailable("bun");
1195
- try {
1196
- const invocation = getCommandInvocation(useBun ? "bunx" : "npx", useBun ? ["openspec", "init", "--tools", "opencode", "--force"] : ["--yes", "openspec", "init", "--tools", "opencode", "--force"]);
1197
- execFileSync3(invocation.command, invocation.args, {
1198
- stdio: "pipe",
1199
- timeout: 120000,
1200
- cwd: projectRoot
1201
- });
1189
+ const fail = (msg) => ({ success: false, message: msg });
1190
+ const tryDirect = () => {
1191
+ try {
1192
+ const invocation = getCommandInvocation(useBun ? "bunx" : "npx", useBun ? [OPENSPEC_NPM_PACKAGE, "init", "--tools", "opencode", "--force"] : ["--yes", OPENSPEC_NPM_PACKAGE, "init", "--tools", "opencode", "--force"]);
1193
+ execFileSync3(invocation.command, invocation.args, {
1194
+ stdio: "pipe",
1195
+ timeout: 120000,
1196
+ cwd: projectRoot
1197
+ });
1198
+ return true;
1199
+ } catch {
1200
+ return false;
1201
+ }
1202
+ };
1203
+ const tryInstallGlobal = () => {
1204
+ if (!useBun && !isCommandAvailable("npm")) {
1205
+ return { ok: false, error: "Ni bun ni npm están disponibles para instalar OpenSpec globalmente" };
1206
+ }
1207
+ const pkgManager = useBun ? "bun" : "npm";
1208
+ const installArgs = useBun ? ["add", "-g", OPENSPEC_NPM_PACKAGE] : ["install", "-g", OPENSPEC_NPM_PACKAGE];
1209
+ try {
1210
+ const invocation = getCommandInvocation(pkgManager, installArgs);
1211
+ execFileSync3(invocation.command, invocation.args, { stdio: "pipe", timeout: 120000 });
1212
+ } catch (installErr) {
1213
+ return { ok: false, error: `Instalación global falló: ${installErr.message}` };
1214
+ }
1215
+ try {
1216
+ const retryInvocation = getCommandInvocation("openspec", ["init", "--tools", "opencode", "--force"]);
1217
+ execFileSync3(retryInvocation.command, retryInvocation.args, {
1218
+ stdio: "pipe",
1219
+ timeout: 120000,
1220
+ cwd: projectRoot
1221
+ });
1222
+ return { ok: true };
1223
+ } catch (retryErr) {
1224
+ return { ok: false, error: `Reintento con binario global falló: ${retryErr.message}` };
1225
+ }
1226
+ };
1227
+ if (tryDirect()) {
1202
1228
  return { success: true, message: "OpenSpec configurado para OpenCode" };
1203
- } catch (e2) {
1229
+ }
1230
+ const fallback = tryInstallGlobal();
1231
+ if (fallback.ok) {
1204
1232
  return {
1205
- success: false,
1206
- message: `Error configurando OpenSpec: ${e2.message}`
1233
+ success: true,
1234
+ message: `OpenSpec configurado para OpenCode (binario instalado globalmente con ${useBun ? "bun" : "npm"})`
1207
1235
  };
1208
1236
  }
1237
+ const manualCmd = useBun ? `bun add -g ${OPENSPEC_NPM_PACKAGE}` : `npm install -g ${OPENSPEC_NPM_PACKAGE}`;
1238
+ return fail(`Error configurando OpenSpec: ni bunx/npx ni la instalación global resolvieron el binario. ` + `Solución manual: ejecuta \`${manualCmd}\` y luego corré /install-stack de nuevo. ` + `Detalle: ${fallback.error}`);
1209
1239
  }
1210
1240
  async function installEngram(toolsDir) {
1211
1241
  const location = resolveToolInstallLocation(toolsDir);
@@ -1429,6 +1459,7 @@ function verifyMcpServers(projectRoot) {
1429
1459
  }
1430
1460
  return result;
1431
1461
  }
1462
+ var OPENSPEC_NPM_PACKAGE = "@fission-ai/openspec";
1432
1463
  var init_stack = __esm(() => {
1433
1464
  init_fs();
1434
1465
  init_config();
@@ -1437,7 +1468,7 @@ var init_stack = __esm(() => {
1437
1468
  // package.json
1438
1469
  var package_default = {
1439
1470
  name: "ostacky",
1440
- version: "0.6.3",
1471
+ version: "0.7.1",
1441
1472
  description: "Instalador interactivo de agentes y comandos para OpenCode",
1442
1473
  type: "module",
1443
1474
  bin: {
@@ -2493,7 +2524,13 @@ function validateMcpModule(nodeExecutable, serverPath, cwd) {
2493
2524
  throw new Error(`El MCP no pasó la validación de carga: ${error.message}`);
2494
2525
  }
2495
2526
  }
2496
- async function probeMcpServer(nodeExecutable, serverPath, cwd, statePath) {
2527
+ var DEFAULT_PROBE_OPTIONS = {
2528
+ requiredTools: ["ping", "start_request"],
2529
+ exerciseWrite: true
2530
+ };
2531
+ async function probeMcpServer(nodeExecutable, serverPath, cwd, statePath, options = {}) {
2532
+ const requiredTools = options.requiredTools ?? DEFAULT_PROBE_OPTIONS.requiredTools;
2533
+ const exerciseWrite = options.exerciseWrite ?? requiredTools.includes("start_request");
2497
2534
  try {
2498
2535
  await new Promise((resolve2, reject) => {
2499
2536
  const child = spawn(nodeExecutable, [serverPath], {
@@ -2562,17 +2599,22 @@ async function probeMcpServer(nodeExecutable, serverPath, cwd, statePath) {
2562
2599
  }
2563
2600
  if (message.id === 2) {
2564
2601
  const tools = message.result?.tools ?? [];
2565
- if (!tools.some((tool) => tool.name === "ping") || !tools.some((tool) => tool.name === "start_request")) {
2566
- fail("El MCP inició pero no expuso las tools requeridas");
2602
+ const missing = requiredTools.filter((name) => !tools.some((tool) => tool.name === name));
2603
+ if (missing.length > 0) {
2604
+ fail(`El MCP inició pero no expuso las tools requeridas: ${missing.join(", ")}`);
2567
2605
  return;
2568
2606
  }
2569
- send({
2570
- jsonrpc: "2.0",
2571
- id: 3,
2572
- method: "tools/call",
2573
- params: { name: "start_request", arguments: { requestId: "installer-probe" } }
2574
- });
2575
- continue;
2607
+ if (exerciseWrite) {
2608
+ send({
2609
+ jsonrpc: "2.0",
2610
+ id: 3,
2611
+ method: "tools/call",
2612
+ params: { name: "start_request", arguments: { requestId: "installer-probe" } }
2613
+ });
2614
+ continue;
2615
+ }
2616
+ finish();
2617
+ return;
2576
2618
  }
2577
2619
  if (message.id === 3) {
2578
2620
  const result = message.result;
@@ -2591,7 +2633,7 @@ async function probeMcpServer(nodeExecutable, serverPath, cwd, statePath) {
2591
2633
  params: {
2592
2634
  protocolVersion: "2025-03-26",
2593
2635
  capabilities: {},
2594
- clientInfo: { name: "ostacky-installer", version: "0.6.3" }
2636
+ clientInfo: { name: "ostacky-installer", version: "0.7.1" }
2595
2637
  }
2596
2638
  });
2597
2639
  });
@@ -2691,6 +2733,29 @@ async function installSkill(item, manifest, paths) {
2691
2733
  copyDirRecursive(src, dest);
2692
2734
  upsertLockfile(paths, "skills", item, manifest, treeHash);
2693
2735
  }
2736
+ function pruneStaleSkills(paths, manifest) {
2737
+ const expected = new Set(manifest.skills.map((s) => s.name));
2738
+ const removed = [];
2739
+ if (!existsSync5(paths.skills))
2740
+ return removed;
2741
+ for (const entry of readdirSync2(paths.skills)) {
2742
+ const dir = join6(paths.skills, entry);
2743
+ try {
2744
+ if (!statSync2(dir).isDirectory())
2745
+ continue;
2746
+ } catch {
2747
+ continue;
2748
+ }
2749
+ if (!expected.has(entry)) {
2750
+ try {
2751
+ rmSync3(dir, { recursive: true, force: true });
2752
+ removeFromLockfile(paths.root, "skills", entry);
2753
+ removed.push(entry);
2754
+ } catch {}
2755
+ }
2756
+ }
2757
+ return removed;
2758
+ }
2694
2759
  async function installMcpServer(item, manifest, paths) {
2695
2760
  const src = getBundledMcpPath(item.name);
2696
2761
  if (!existsSync5(src)) {
@@ -2738,7 +2803,9 @@ async function installMcpServer(item, manifest, paths) {
2738
2803
  throw new Error(`El MCP ${item.name} no contiene index.js después de instalarse.`);
2739
2804
  }
2740
2805
  validateMcpModule(nodeExecutable, stagedServerPath, staging);
2741
- await probeMcpServer(nodeExecutable, stagedServerPath, staging, item.name === "ostacky-controller" ? join6(staging, ".probe-state.json") : undefined);
2806
+ const isController = item.name === "ostacky-controller";
2807
+ const probeOptions = isController ? { requiredTools: ["ping", "start_request"], exerciseWrite: true } : { requiredTools: [], exerciseWrite: false };
2808
+ await probeMcpServer(nodeExecutable, stagedServerPath, staging, isController ? join6(staging, ".probe-state.json") : undefined, probeOptions);
2742
2809
  const configPath = findOpenCodeConfig(projectRoot) ?? join6(projectRoot, "opencode.json");
2743
2810
  const configSnapshot = takeFileSnapshot(configPath);
2744
2811
  const lockfileSnapshot = takeFileSnapshot(getLockfilePath(paths.root));
@@ -3069,6 +3136,10 @@ async function doInstallAll(manifest, paths) {
3069
3136
  errors++;
3070
3137
  }
3071
3138
  }
3139
+ const pruned = pruneStaleSkills(paths, manifest);
3140
+ if (pruned.length > 0) {
3141
+ v2.info(`Skills obsoletas removidas: ${pruned.join(", ")}`);
3142
+ }
3072
3143
  for (const mcp of manifest.mcpServers ?? []) {
3073
3144
  spin.start(`Instalando MCP server: ${mcp.name} (${mcp.version})`);
3074
3145
  try {
@@ -3282,6 +3353,10 @@ async function doUpdate(manifest, paths) {
3282
3353
  }
3283
3354
  }
3284
3355
  v2.success(`${updated} recurso(s) actualizado(s).`);
3356
+ const pruned = pruneStaleSkills(paths, manifest);
3357
+ if (pruned.length > 0) {
3358
+ v2.info(`Skills obsoletas removidas del filesystem: ${pruned.join(", ")}`);
3359
+ }
3285
3360
  }
3286
3361
 
3287
3362
  // src/prompts/uninstall.ts
package/manifest.json CHANGED
@@ -1,29 +1,29 @@
1
1
  {
2
- "version": "0.6.3",
2
+ "version": "0.7.1",
3
3
  "repo": "JaimeHoracio/Ostacky",
4
- "tag": "v0.6.3",
4
+ "tag": "v0.7.1",
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",
10
- "version": "0.6.3",
11
- "sha256": "9cd6f45339b897fe002775a3a54f570e47dedd1784fa474d6cd5113594d1bd85"
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.7.1: prune de skills obsoletas, lastHandoff, getAvailableTransitions, consecutiveFailures real, mem_session_summary automático al cierre.",
10
+ "version": "0.7.1",
11
+ "sha256": "f833e69b6eaa3dfe24de9addf6455b3da55f829b51cba3c7c90c65c69cda34c2"
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, Context7, controller MCP con SDK oficial)",
19
- "version": "0.6.3",
20
- "sha256": "6002a342c3570a33c6f5d4bccf767d0c343b06c4a612cfaa8f744ffedd0de34d"
18
+ "description": "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, Context7, controller MCP con SDK oficial). v0.7.1: Paso 1.5 controller expandido con verificación post-instalación y troubleshooting.",
19
+ "version": "0.7.1",
20
+ "sha256": "ef4244855cf733dfe50a2a8e7c436c5741f92574cc50f0fca49faed60480e013"
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.6.3",
26
+ "version": "0.7.1",
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. 20 tools: start_request discovery route execution sync done + validate_edit + complete_task + ping + proceed_to_route + abandon integrado",
35
- "version": "0.6.3",
36
- "sha256": "144fb38a88f81a7657131bf416e59bf668c9eca5fd92a607ea94e32a41e1a36d"
34
+ "description": "Máquina de estados persistida con @modelcontextprotocol/server SDK. v0.7.1: 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.7.1",
36
+ "sha256": "0e639fb1d5bedf8b93b4e259782b9b7de68cd4bb89875e2c546279d17131b7b7"
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.6.3",
42
+ "version": "0.7.1",
43
43
  "sha256": "fa4be28bfc1e75db8f1a037e2580f04a60066c80e8e5934e90e1041020d04609"
44
44
  }
45
45
  ],
@@ -47,114 +47,107 @@
47
47
  {
48
48
  "name": "brainstorming",
49
49
  "file": "assets/skills/brainstorming/SKILL.md",
50
- "description": "Skill unificado de pensamiento con dos modos: creative-design (producción de diseño → transición a writing-plans o openspec-propose) y open-exploration (exploración libre)",
51
- "version": "0.6.3",
52
- "sha256": "602116fb37e5bc879d1a28815a5928c7bcd9563713907ea278669c1cd81fcde1"
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.7.1",
52
+ "sha256": "333810ca63450e8ab795e8c5a58e645101e788d79210ca8ac36e10d11be39585"
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.6.3",
59
- "sha256": "2e21e69011a0d3cfc2abc4a42b93a616fa9dc7e416955d1f757f6d8e5b35f00b"
60
- },
61
- {
62
- "name": "writing-plans",
63
- "file": "assets/skills/writing-plans/SKILL.md",
64
- "description": "Skill de planificación de implementación (Superpowers) — execution handoff removido, Ostacky decide modo de ejecución",
65
- "version": "0.6.3",
66
- "sha256": "9b14903231df96f54da08158c117801b18bba8f5a2e5a0c069854d059e99f294"
58
+ "version": "0.7.1",
59
+ "sha256": "edf6fca0af52cce83f8fd08e7db9b3d79cc130b53fca505e90d3fbaf4909338b"
67
60
  },
68
61
  {
69
62
  "name": "tdd",
70
63
  "file": "assets/skills/tdd/SKILL.md",
71
64
  "description": "Skill de test-driven development (Superpowers)",
72
- "version": "0.6.3",
65
+ "version": "0.7.1",
73
66
  "sha256": "aa412298980b7826165c211145c1b8e9135f68f36247bb3cb96d0a0eae274486"
74
67
  },
75
68
  {
76
69
  "name": "subagent-driven-development",
77
70
  "file": "assets/skills/subagent-driven-development/SKILL.md",
78
71
  "description": "Skill de ejecución con subagentes (Superpowers) — ejecuta solo después de confirmación del coordinador Ostacky",
79
- "version": "0.6.3",
80
- "sha256": "6128a6cac60eadc11541ba2d37c3e395c6da3a0167767fbb9b7203b1a2a33ebc"
72
+ "version": "0.7.1",
73
+ "sha256": "1a42d714a9a13faf05f0bf7b580e8d837c2e77a5633839542ccce603023419e8"
81
74
  },
82
75
  {
83
76
  "name": "dispatching-parallel-agents",
84
77
  "file": "assets/skills/dispatching-parallel-agents/SKILL.md",
85
78
  "description": "Skill de dispatch paralelo de agentes (Superpowers)",
86
- "version": "0.6.3",
79
+ "version": "0.7.1",
87
80
  "sha256": "3c8a66d51ae2e719e877d02c3dac32bd804722c3bb9227c258ecae78252a20ab"
88
81
  },
89
82
  {
90
83
  "name": "review",
91
84
  "file": "assets/skills/review/SKILL.md",
92
85
  "description": "Skill de revisión de código (Superpowers)",
93
- "version": "0.6.3",
94
- "sha256": "78914222c29306e479d24b09449e1b5a54b5a0482bd5e3e24faace792946a40a"
86
+ "version": "0.7.1",
87
+ "sha256": "b19650ed4d1d4d9857a4dd5b7e08e91328a1a1fc9c45bcc2fb600fa9d0213279"
95
88
  },
96
89
  {
97
90
  "name": "receiving-code-review",
98
91
  "file": "assets/skills/receiving-code-review/SKILL.md",
99
92
  "description": "Skill de recibir y procesar feedback de code review",
100
- "version": "0.6.3",
93
+ "version": "0.7.1",
101
94
  "sha256": "d761e884e71d8d3476ac734d287cae403a4024506a7d12e7361a448217c0a831"
102
95
  },
103
96
  {
104
97
  "name": "openspec-propose",
105
98
  "file": "assets/skills/openspec-propose/SKILL.md",
106
99
  "description": "Skill de generación de proposal (OpenSpec)",
107
- "version": "0.6.3",
108
- "sha256": "a184a9e99c06860e1742a100336b1662b329c5d6b319301449ed0fa01545e1ac"
100
+ "version": "0.7.1",
101
+ "sha256": "bb59100b9fd3c9f9a1ec6509fa975ec55bf7fc737df4fe73bb3e9bbc217b83f7"
109
102
  },
110
103
  {
111
104
  "name": "openspec-apply-change",
112
105
  "file": "assets/skills/openspec-apply-change/SKILL.md",
113
106
  "description": "Skill de aplicación de change (OpenSpec)",
114
- "version": "0.6.3",
115
- "sha256": "b12d80deb4f54f1ceb4792897dbd29fda9b15a71ddd98c30fb6501b085d8eee6"
107
+ "version": "0.7.1",
108
+ "sha256": "dfc823bf89fc7505e91ab6dee9c1f004be38a410bd3d88fb67b211b1b6cbb1d0"
116
109
  },
117
110
  {
118
111
  "name": "openspec-archive-change",
119
112
  "file": "assets/skills/openspec-archive-change/SKILL.md",
120
113
  "description": "Skill de archivo de change (OpenSpec)",
121
- "version": "0.6.3",
114
+ "version": "0.7.1",
122
115
  "sha256": "16e4b561de7747283663fed602e506abf502452c49a8d4b86d7a5539c40f0195"
123
116
  },
124
117
  {
125
118
  "name": "openspec-explore",
126
119
  "file": "assets/skills/openspec-explore/SKILL.md",
127
120
  "description": "Modo explore para OpenSpec — thinking partner para explorar ideas, investigar problemas y clarificar requisitos antes/durante un cambio",
128
- "version": "0.6.3",
121
+ "version": "0.7.1",
129
122
  "sha256": "37ae4aaf17ea71a395bab6dc4d9d61b9a49d7910f6692535ae8553244c46880b"
130
123
  },
131
124
  {
132
125
  "name": "using-git-worktrees",
133
126
  "file": "assets/skills/using-git-worktrees/SKILL.md",
134
127
  "description": "Skill de uso de git worktrees para aislamiento de trabajo",
135
- "version": "0.6.3",
128
+ "version": "0.7.1",
136
129
  "sha256": "11afa9123828fc5caa22137aff907cd99c751e99027fbd4c020751110a949281"
137
130
  },
138
131
  {
139
132
  "name": "using-superpowers",
140
133
  "file": "assets/skills/using-superpowers/SKILL.md",
141
134
  "description": "Skill de orquestación de Superpowers skills",
142
- "version": "0.6.3",
135
+ "version": "0.7.1",
143
136
  "sha256": "7e54536f96d2a379185a10bfc1e970850caa2561b6d8aca7080f0defea0381a4"
144
137
  },
145
138
  {
146
139
  "name": "writing-skills",
147
140
  "file": "assets/skills/writing-skills/SKILL.md",
148
141
  "description": "Skill de creación y edición de skills",
149
- "version": "0.6.3",
142
+ "version": "0.7.1",
150
143
  "sha256": "3d76b906cee518a2b809febb70db95697a35b9f368986bb504b4120c3bfb437a"
151
144
  },
152
145
  {
153
146
  "name": "graceful-degradation",
154
147
  "file": "assets/skills/graceful-degradation/SKILL.md",
155
148
  "description": "Skill de degradación graceful cuando múltiples tools están indisponibles",
156
- "version": "0.6.3",
157
- "sha256": "91c52da5c72a866c5df388fc4d4a3dc317bc55be0040081cc7ae04d3c167a026"
149
+ "version": "0.7.1",
150
+ "sha256": "e5090e475729f21871bb25bce738000f3616955ed3edb3ba926dd740d3298948"
158
151
  }
159
152
  ]
160
153
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ostacky",
3
- "version": "0.6.3",
3
+ "version": "0.7.1",
4
4
  "description": "Instalador interactivo de agentes y comandos para OpenCode",
5
5
  "type": "module",
6
6
  "bin": {