ostacky 0.10.0 → 0.10.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 +15 -22
- package/assets/agents/ostacky.md +10 -9
- package/assets/commands/install-stack.md +1 -1
- package/assets/docs/ostacky-reference.md +41 -6
- package/assets/mcp/ostacky-controller/index.js +183 -31
- package/assets/plugins/ostacky-controller/index.ts +362 -45
- package/assets/skills/brainstorming/SKILL.md +2 -2
- package/assets/skills/execution-mode-evaluation/SKILL.md +11 -12
- package/assets/skills/openspec-propose/SKILL.md +2 -2
- package/assets/skills/tdd/SKILL.md +1 -1
- package/dist/cli.js +83 -72
- package/manifest.json +32 -32
- package/package.json +2 -1
package/dist/cli.js
CHANGED
|
@@ -641,31 +641,31 @@ var init_fs = __esm(() => {
|
|
|
641
641
|
var manifest_default;
|
|
642
642
|
var init_manifest = __esm(() => {
|
|
643
643
|
manifest_default = {
|
|
644
|
-
version: "0.10.
|
|
644
|
+
version: "0.10.2",
|
|
645
645
|
repo: "JaimeHoracio/Ostacky",
|
|
646
|
-
tag: "v0.10.
|
|
646
|
+
tag: "v0.10.2",
|
|
647
647
|
agents: [
|
|
648
648
|
{
|
|
649
649
|
name: "ostacky",
|
|
650
650
|
file: "assets/agents/ostacky.md",
|
|
651
|
-
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.10.
|
|
652
|
-
version: "0.10.
|
|
653
|
-
sha256: "
|
|
651
|
+
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.10.2: prune de skills obsoletas, lastHandoff, getAvailableTransitions, consecutiveFailures real, mem_session_summary automático al cierre.",
|
|
652
|
+
version: "0.10.2",
|
|
653
|
+
sha256: "b3db2a27d7b8249b4552d4f63353d893ec1b8c2abda44f375de65cd1d4364419"
|
|
654
654
|
}
|
|
655
655
|
],
|
|
656
656
|
commands: [
|
|
657
657
|
{
|
|
658
658
|
name: "install-stack",
|
|
659
659
|
file: "assets/commands/install-stack.md",
|
|
660
|
-
description: "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, controller plugin). v0.10.
|
|
661
|
-
version: "0.10.
|
|
662
|
-
sha256: "
|
|
660
|
+
description: "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, controller plugin). v0.10.2: controller plugin como alma hard-gate, Context7 removido del stack.",
|
|
661
|
+
version: "0.10.2",
|
|
662
|
+
sha256: "b4845d7b6306b1a8c4914a4cf5a4390a4d3e79f1226de72b0ef2e95157c1f58e"
|
|
663
663
|
},
|
|
664
664
|
{
|
|
665
665
|
name: "opsx-sync",
|
|
666
666
|
file: "assets/commands/opsx-sync.md",
|
|
667
667
|
description: "Sincroniza delta specs del change activo sin inicializar CodeGraph si ya existe índice",
|
|
668
|
-
version: "0.10.
|
|
668
|
+
version: "0.10.2",
|
|
669
669
|
sha256: "f883f9ad96f7d75778631d5cc13d8a1a9c3e6ec41396bbce8ce13cff2e66fca2"
|
|
670
670
|
}
|
|
671
671
|
],
|
|
@@ -673,15 +673,15 @@ var init_manifest = __esm(() => {
|
|
|
673
673
|
{
|
|
674
674
|
name: "ostacky-controller",
|
|
675
675
|
file: "assets/mcp/ostacky-controller/",
|
|
676
|
-
description: "Máquina de estados persistida con @modelcontextprotocol/server SDK. v0.10.
|
|
677
|
-
version: "0.10.
|
|
678
|
-
sha256: "
|
|
676
|
+
description: "Máquina de estados persistida con @modelcontextprotocol/server SDK. v0.10.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.",
|
|
677
|
+
version: "0.10.2",
|
|
678
|
+
sha256: "c78d2a8f7ce87d373cbac9135235ef1c90f45380fafc4135fe22c2b55c4423b6"
|
|
679
679
|
},
|
|
680
680
|
{
|
|
681
681
|
name: "openspec",
|
|
682
682
|
file: "assets/mcp/openspec/",
|
|
683
683
|
description: "MCP server local para OpenSpec - proposal, apply, archive, sync de cambios",
|
|
684
|
-
version: "0.10.
|
|
684
|
+
version: "0.10.2",
|
|
685
685
|
sha256: "bdb283fe8ec2dfcba2ec4f38191f4039e58cd7ae12e44e66310783b42c827638"
|
|
686
686
|
}
|
|
687
687
|
],
|
|
@@ -690,105 +690,105 @@ var init_manifest = __esm(() => {
|
|
|
690
690
|
name: "brainstorming",
|
|
691
691
|
file: "assets/skills/brainstorming/SKILL.md",
|
|
692
692
|
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)",
|
|
693
|
-
version: "0.10.
|
|
694
|
-
sha256: "
|
|
693
|
+
version: "0.10.2",
|
|
694
|
+
sha256: "ba76eff6fb5bea08d3b26622089ea4739b7b542b3677a46071b2576f3f2001c7"
|
|
695
695
|
},
|
|
696
696
|
{
|
|
697
697
|
name: "execution-mode-evaluation",
|
|
698
698
|
file: "assets/skills/execution-mode-evaluation/SKILL.md",
|
|
699
699
|
description: "Skill de análisis de modo de ejecución — output reconciliado con controller snapshot contract (recommendation field)",
|
|
700
|
-
version: "0.10.
|
|
701
|
-
sha256: "
|
|
700
|
+
version: "0.10.2",
|
|
701
|
+
sha256: "9090132ccfe31dcf34b6d5f399c1135dcb1044c504d4beb026e0c7d9e09e7c0d"
|
|
702
702
|
},
|
|
703
703
|
{
|
|
704
704
|
name: "tdd",
|
|
705
705
|
file: "assets/skills/tdd/SKILL.md",
|
|
706
706
|
description: "Skill de test-driven development (Superpowers)",
|
|
707
|
-
version: "0.10.
|
|
708
|
-
sha256: "
|
|
707
|
+
version: "0.10.2",
|
|
708
|
+
sha256: "cce54e81cce46ba973066f9b43e74994a7dbf21aa756146c27689241cf62704d"
|
|
709
709
|
},
|
|
710
710
|
{
|
|
711
711
|
name: "subagent-driven-development",
|
|
712
712
|
file: "assets/skills/subagent-driven-development/SKILL.md",
|
|
713
713
|
description: "Skill de ejecución con subagentes (Superpowers) — ejecuta solo después de confirmación del coordinador Ostacky",
|
|
714
|
-
version: "0.10.
|
|
714
|
+
version: "0.10.2",
|
|
715
715
|
sha256: "1a42d714a9a13faf05f0bf7b580e8d837c2e77a5633839542ccce603023419e8"
|
|
716
716
|
},
|
|
717
717
|
{
|
|
718
718
|
name: "dispatching-parallel-agents",
|
|
719
719
|
file: "assets/skills/dispatching-parallel-agents/SKILL.md",
|
|
720
720
|
description: "Skill de dispatch paralelo de agentes (Superpowers)",
|
|
721
|
-
version: "0.10.
|
|
721
|
+
version: "0.10.2",
|
|
722
722
|
sha256: "7e7b712ef742d5631e302e6a71583e2bbbd33094da9281abfb84b43505fc3ef1"
|
|
723
723
|
},
|
|
724
724
|
{
|
|
725
725
|
name: "review",
|
|
726
726
|
file: "assets/skills/review/SKILL.md",
|
|
727
727
|
description: "Skill de revisión de código (Superpowers)",
|
|
728
|
-
version: "0.10.
|
|
728
|
+
version: "0.10.2",
|
|
729
729
|
sha256: "b19650ed4d1d4d9857a4dd5b7e08e91328a1a1fc9c45bcc2fb600fa9d0213279"
|
|
730
730
|
},
|
|
731
731
|
{
|
|
732
732
|
name: "receiving-code-review",
|
|
733
733
|
file: "assets/skills/receiving-code-review/SKILL.md",
|
|
734
734
|
description: "Skill de recibir y procesar feedback de code review",
|
|
735
|
-
version: "0.10.
|
|
735
|
+
version: "0.10.2",
|
|
736
736
|
sha256: "d761e884e71d8d3476ac734d287cae403a4024506a7d12e7361a448217c0a831"
|
|
737
737
|
},
|
|
738
738
|
{
|
|
739
739
|
name: "openspec-propose",
|
|
740
740
|
file: "assets/skills/openspec-propose/SKILL.md",
|
|
741
741
|
description: "Skill de generación de proposal (OpenSpec)",
|
|
742
|
-
version: "0.10.
|
|
743
|
-
sha256: "
|
|
742
|
+
version: "0.10.2",
|
|
743
|
+
sha256: "9049b944cea88a5428fd5d77b411a0ed32d169ad68acda911b68365fac08f38f"
|
|
744
744
|
},
|
|
745
745
|
{
|
|
746
746
|
name: "openspec-apply-change",
|
|
747
747
|
file: "assets/skills/openspec-apply-change/SKILL.md",
|
|
748
748
|
description: "Skill de aplicación de change (OpenSpec)",
|
|
749
|
-
version: "0.10.
|
|
749
|
+
version: "0.10.2",
|
|
750
750
|
sha256: "dfc823bf89fc7505e91ab6dee9c1f004be38a410bd3d88fb67b211b1b6cbb1d0"
|
|
751
751
|
},
|
|
752
752
|
{
|
|
753
753
|
name: "openspec-archive-change",
|
|
754
754
|
file: "assets/skills/openspec-archive-change/SKILL.md",
|
|
755
755
|
description: "Skill de archivo de change (OpenSpec)",
|
|
756
|
-
version: "0.10.
|
|
756
|
+
version: "0.10.2",
|
|
757
757
|
sha256: "16e4b561de7747283663fed602e506abf502452c49a8d4b86d7a5539c40f0195"
|
|
758
758
|
},
|
|
759
759
|
{
|
|
760
760
|
name: "openspec-explore",
|
|
761
761
|
file: "assets/skills/openspec-explore/SKILL.md",
|
|
762
762
|
description: "Modo explore para OpenSpec — thinking partner para explorar ideas, investigar problemas y clarificar requisitos antes/durante un cambio",
|
|
763
|
-
version: "0.10.
|
|
763
|
+
version: "0.10.2",
|
|
764
764
|
sha256: "9eafc3a8c693b8d9916867ef764d49e5222da717fde501c957bb3f6c312d2415"
|
|
765
765
|
},
|
|
766
766
|
{
|
|
767
767
|
name: "using-git-worktrees",
|
|
768
768
|
file: "assets/skills/using-git-worktrees/SKILL.md",
|
|
769
769
|
description: "Skill de uso de git worktrees para aislamiento de trabajo",
|
|
770
|
-
version: "0.10.
|
|
770
|
+
version: "0.10.2",
|
|
771
771
|
sha256: "93341bc1b7c053618a8b6dc07e3615b77990d7b549a0201f5835d95fef67ce13"
|
|
772
772
|
},
|
|
773
773
|
{
|
|
774
774
|
name: "using-superpowers",
|
|
775
775
|
file: "assets/skills/using-superpowers/SKILL.md",
|
|
776
776
|
description: "Skill de orquestación de Superpowers skills",
|
|
777
|
-
version: "0.10.
|
|
777
|
+
version: "0.10.2",
|
|
778
778
|
sha256: "7e54536f96d2a379185a10bfc1e970850caa2561b6d8aca7080f0defea0381a4"
|
|
779
779
|
},
|
|
780
780
|
{
|
|
781
781
|
name: "writing-skills",
|
|
782
782
|
file: "assets/skills/writing-skills/SKILL.md",
|
|
783
783
|
description: "Skill de creación y edición de skills",
|
|
784
|
-
version: "0.10.
|
|
784
|
+
version: "0.10.2",
|
|
785
785
|
sha256: "3d76b906cee518a2b809febb70db95697a35b9f368986bb504b4120c3bfb437a"
|
|
786
786
|
},
|
|
787
787
|
{
|
|
788
788
|
name: "graceful-degradation",
|
|
789
789
|
file: "assets/skills/graceful-degradation/SKILL.md",
|
|
790
790
|
description: "Skill de degradación graceful cuando múltiples tools están indisponibles",
|
|
791
|
-
version: "0.10.
|
|
791
|
+
version: "0.10.2",
|
|
792
792
|
sha256: "363449bd9e6f800a0a3168667cf78f767fb105d86e4a4adadcc649d418139303"
|
|
793
793
|
}
|
|
794
794
|
]
|
|
@@ -1046,11 +1046,19 @@ function readOpenCodeConfig(configPath) {
|
|
|
1046
1046
|
return null;
|
|
1047
1047
|
}
|
|
1048
1048
|
}
|
|
1049
|
-
function writeOpenCodeConfig(configPath, config) {
|
|
1049
|
+
function writeOpenCodeConfig(configPath, config, options = {}) {
|
|
1050
|
+
const next = JSON.stringify(config, null, 2) + `
|
|
1051
|
+
`;
|
|
1052
|
+
try {
|
|
1053
|
+
if (options.backup !== false && existsSync4(configPath)) {
|
|
1054
|
+
const prev = readFileSync4(configPath, "utf-8");
|
|
1055
|
+
if (prev !== next)
|
|
1056
|
+
writeFileSync4(`${configPath}.bak`, prev, "utf-8");
|
|
1057
|
+
}
|
|
1058
|
+
} catch {}
|
|
1050
1059
|
const tmpPath = `${configPath}.tmp.${process.pid}.${Date.now()}`;
|
|
1051
1060
|
try {
|
|
1052
|
-
writeFileSync4(tmpPath,
|
|
1053
|
-
`, "utf-8");
|
|
1061
|
+
writeFileSync4(tmpPath, next, "utf-8");
|
|
1054
1062
|
renameSync2(tmpPath, configPath);
|
|
1055
1063
|
} finally {
|
|
1056
1064
|
if (existsSync4(tmpPath))
|
|
@@ -1060,13 +1068,13 @@ function writeOpenCodeConfig(configPath, config) {
|
|
|
1060
1068
|
function ensureOpenCodeConfig(projectRoot) {
|
|
1061
1069
|
const existing = findOpenCodeConfig(projectRoot);
|
|
1062
1070
|
if (existing)
|
|
1063
|
-
return existing;
|
|
1071
|
+
return { path: existing, created: false };
|
|
1064
1072
|
const configPath = join5(projectRoot, "opencode.json");
|
|
1065
1073
|
writeOpenCodeConfig(configPath, {
|
|
1066
1074
|
$schema: "https://opencode.ai/config.json",
|
|
1067
1075
|
mcp: {}
|
|
1068
|
-
});
|
|
1069
|
-
return configPath;
|
|
1076
|
+
}, { backup: false });
|
|
1077
|
+
return { path: configPath, created: true };
|
|
1070
1078
|
}
|
|
1071
1079
|
function findOpenCodeConfig(projectRoot) {
|
|
1072
1080
|
const candidates = ["opencode.json", "opencode.jsonc"];
|
|
@@ -1078,7 +1086,7 @@ function findOpenCodeConfig(projectRoot) {
|
|
|
1078
1086
|
return null;
|
|
1079
1087
|
}
|
|
1080
1088
|
function setMcpEntryAtProjectRoot(projectRoot, name, entry) {
|
|
1081
|
-
const configPath = ensureOpenCodeConfig(projectRoot);
|
|
1089
|
+
const { path: configPath, created } = ensureOpenCodeConfig(projectRoot);
|
|
1082
1090
|
const config = readOpenCodeConfig(configPath);
|
|
1083
1091
|
if (!config)
|
|
1084
1092
|
throw new Error(`Error parseando ${configPath}`);
|
|
@@ -1090,7 +1098,7 @@ function setMcpEntryAtProjectRoot(projectRoot, name, entry) {
|
|
|
1090
1098
|
mcp.servers[name] = entry;
|
|
1091
1099
|
if (name in mcp && name !== "servers")
|
|
1092
1100
|
delete mcp[name];
|
|
1093
|
-
writeOpenCodeConfig(configPath, config);
|
|
1101
|
+
writeOpenCodeConfig(configPath, config, { backup: !created });
|
|
1094
1102
|
}
|
|
1095
1103
|
function patchOpenCodeConfig(projectRoot = findProjectRoot()) {
|
|
1096
1104
|
const configPath = findOpenCodeConfig(projectRoot);
|
|
@@ -1329,13 +1337,16 @@ async function installCodeGraph(toolsDir) {
|
|
|
1329
1337
|
message: indexWarning ? `CodeGraph instalado y configurado para OpenCode. ${indexWarning}` : "CodeGraph instalado localmente y configurado para OpenCode"
|
|
1330
1338
|
};
|
|
1331
1339
|
}
|
|
1332
|
-
function setupOpenSpec(projectRoot = findProjectRoot()) {
|
|
1333
|
-
const
|
|
1340
|
+
function setupOpenSpec(projectRoot = findProjectRoot(), deps = {}) {
|
|
1341
|
+
const execFile = deps.execFileSync ?? execFileSync3;
|
|
1342
|
+
const isAvailable = deps.isCommandAvailable ?? isCommandAvailable;
|
|
1343
|
+
const invocationFor = deps.getCommandInvocation ?? getCommandInvocation;
|
|
1344
|
+
const useBun = isAvailable("bun");
|
|
1334
1345
|
const fail = (msg) => ({ success: false, message: msg });
|
|
1335
1346
|
const tryDirect = () => {
|
|
1336
1347
|
try {
|
|
1337
|
-
const invocation =
|
|
1338
|
-
|
|
1348
|
+
const invocation = invocationFor(useBun ? "bunx" : "npx", useBun ? [OPENSPEC_NPM_PACKAGE, "init", "--tools", "opencode", "--force"] : ["--yes", OPENSPEC_NPM_PACKAGE, "init", "--tools", "opencode", "--force"]);
|
|
1349
|
+
execFile(invocation.command, invocation.args, {
|
|
1339
1350
|
stdio: "pipe",
|
|
1340
1351
|
timeout: 120000,
|
|
1341
1352
|
cwd: projectRoot
|
|
@@ -1346,20 +1357,20 @@ function setupOpenSpec(projectRoot = findProjectRoot()) {
|
|
|
1346
1357
|
}
|
|
1347
1358
|
};
|
|
1348
1359
|
const tryInstallGlobal = () => {
|
|
1349
|
-
if (!useBun && !
|
|
1360
|
+
if (!useBun && !isAvailable("npm")) {
|
|
1350
1361
|
return { ok: false, error: "Ni bun ni npm están disponibles para instalar OpenSpec globalmente" };
|
|
1351
1362
|
}
|
|
1352
1363
|
const pkgManager = useBun ? "bun" : "npm";
|
|
1353
1364
|
const installArgs = useBun ? ["add", "-g", OPENSPEC_NPM_PACKAGE] : ["install", "-g", OPENSPEC_NPM_PACKAGE];
|
|
1354
1365
|
try {
|
|
1355
|
-
const invocation =
|
|
1356
|
-
|
|
1366
|
+
const invocation = invocationFor(pkgManager, installArgs);
|
|
1367
|
+
execFile(invocation.command, invocation.args, { stdio: "pipe", timeout: 120000 });
|
|
1357
1368
|
} catch (installErr) {
|
|
1358
1369
|
return { ok: false, error: `Instalación global falló: ${installErr.message}` };
|
|
1359
1370
|
}
|
|
1360
1371
|
try {
|
|
1361
|
-
const retryInvocation =
|
|
1362
|
-
|
|
1372
|
+
const retryInvocation = invocationFor("openspec", ["init", "--tools", "opencode", "--force"]);
|
|
1373
|
+
execFile(retryInvocation.command, retryInvocation.args, {
|
|
1363
1374
|
stdio: "pipe",
|
|
1364
1375
|
timeout: 120000,
|
|
1365
1376
|
cwd: projectRoot
|
|
@@ -1727,7 +1738,7 @@ var init_doctor_v2 = __esm(() => {
|
|
|
1727
1738
|
// package.json
|
|
1728
1739
|
var package_default = {
|
|
1729
1740
|
name: "ostacky",
|
|
1730
|
-
version: "0.10.
|
|
1741
|
+
version: "0.10.2",
|
|
1731
1742
|
description: "Instalador interactivo de agentes y comandos para OpenCode",
|
|
1732
1743
|
type: "module",
|
|
1733
1744
|
bin: {
|
|
@@ -1764,6 +1775,7 @@ var package_default = {
|
|
|
1764
1775
|
},
|
|
1765
1776
|
devDependencies: {
|
|
1766
1777
|
"@types/bun": "latest",
|
|
1778
|
+
openspec: "^0.0.0",
|
|
1767
1779
|
typescript: "^5.0.0"
|
|
1768
1780
|
},
|
|
1769
1781
|
publishConfig: {
|
|
@@ -2906,7 +2918,7 @@ async function probeMcpServer(nodeExecutable, serverPath, cwd, statePath, option
|
|
|
2906
2918
|
params: {
|
|
2907
2919
|
protocolVersion: "2025-03-26",
|
|
2908
2920
|
capabilities: {},
|
|
2909
|
-
clientInfo: { name: "ostacky-installer", version: "0.10.
|
|
2921
|
+
clientInfo: { name: "ostacky-installer", version: "0.10.2" }
|
|
2910
2922
|
}
|
|
2911
2923
|
});
|
|
2912
2924
|
});
|
|
@@ -4147,25 +4159,25 @@ function getOpencodeVersion() {
|
|
|
4147
4159
|
function getOpencodeInstallCommand(platform = process.platform, _arch = process.arch) {
|
|
4148
4160
|
if (platform === "win32") {
|
|
4149
4161
|
return {
|
|
4150
|
-
display: "npm install -g opencode
|
|
4162
|
+
display: "npm install -g @opencode/cli",
|
|
4151
4163
|
command: "npm",
|
|
4152
|
-
args: ["install", "-g", "opencode
|
|
4153
|
-
note: "Alternativas Windows:
|
|
4164
|
+
args: ["install", "-g", "@opencode/cli"],
|
|
4165
|
+
note: "Alternativas Windows: binario suelto desde https://opencode.ai/download | WSL recomendado (OpenCode no soporta package managers de Windows)."
|
|
4154
4166
|
};
|
|
4155
4167
|
}
|
|
4156
4168
|
if (platform === "darwin") {
|
|
4157
4169
|
return {
|
|
4158
|
-
display: "curl -fsSL https://opencode.ai/install | bash",
|
|
4170
|
+
display: "curl -fsSL https://opencode.ai/v2/install | bash",
|
|
4159
4171
|
command: "bash",
|
|
4160
|
-
args: ["-c", "curl -fsSL https://opencode.ai/install | bash"],
|
|
4161
|
-
note: "Alternativa macOS: brew install anomalyco/tap/opencode (tap oficial
|
|
4172
|
+
args: ["-c", "curl -fsSL https://opencode.ai/v2/install | bash"],
|
|
4173
|
+
note: "Alternativa macOS: brew install anomalyco/tap/opencode-v2 (tap oficial) | npm install -g @opencode/cli"
|
|
4162
4174
|
};
|
|
4163
4175
|
}
|
|
4164
4176
|
return {
|
|
4165
|
-
display: "curl -fsSL https://opencode.ai/install | bash",
|
|
4177
|
+
display: "curl -fsSL https://opencode.ai/v2/install | bash",
|
|
4166
4178
|
command: "bash",
|
|
4167
|
-
args: ["-c", "curl -fsSL https://opencode.ai/install | bash"],
|
|
4168
|
-
note: "Alternativas Linux: npm install -g opencode
|
|
4179
|
+
args: ["-c", "curl -fsSL https://opencode.ai/v2/install | bash"],
|
|
4180
|
+
note: "Alternativas Linux: npm install -g @opencode/cli | bun install -g --trust @opencode/cli | brew install anomalyco/tap/opencode-v2 | paru -S opencode-beta (Arch)"
|
|
4169
4181
|
};
|
|
4170
4182
|
}
|
|
4171
4183
|
async function ensureOpencodeInstalled() {
|
|
@@ -4198,14 +4210,14 @@ ${info.note}` : ""}`, `Instalación requerida (${platform})`);
|
|
|
4198
4210
|
spin.start(`Instalando OpenCode (${info.display})...`);
|
|
4199
4211
|
try {
|
|
4200
4212
|
if (platform === "win32") {
|
|
4201
|
-
execSync("npm install -g opencode
|
|
4213
|
+
execSync("npm install -g @opencode/cli", { stdio: "inherit", shell: "cmd.exe" });
|
|
4202
4214
|
} else {
|
|
4203
4215
|
if (!isCommandAvailable("curl")) {
|
|
4204
4216
|
spin.stop("curl no disponible");
|
|
4205
4217
|
v2.warn("curl no está instalado — se intentará con npm como fallback.");
|
|
4206
|
-
execSync("npm install -g opencode
|
|
4218
|
+
execSync("npm install -g @opencode/cli", { stdio: "inherit", shell: "/bin/bash" });
|
|
4207
4219
|
} else {
|
|
4208
|
-
execSync("curl -fsSL https://opencode.ai/install | bash", { stdio: "inherit", shell: "/bin/bash" });
|
|
4220
|
+
execSync("curl -fsSL https://opencode.ai/v2/install | bash", { stdio: "inherit", shell: "/bin/bash" });
|
|
4209
4221
|
}
|
|
4210
4222
|
}
|
|
4211
4223
|
spin.stop("Instalación ejecutada, verificando...");
|
|
@@ -4216,10 +4228,10 @@ ${info.note}` : ""}`, `Instalación requerida (${platform})`);
|
|
|
4216
4228
|
if (platform === "win32") {
|
|
4217
4229
|
ye([
|
|
4218
4230
|
"Intentá manualmente una de estas opciones:",
|
|
4219
|
-
" npm install -g opencode
|
|
4220
|
-
"
|
|
4221
|
-
"
|
|
4222
|
-
" (WSL) curl -fsSL https://opencode.ai/install | bash",
|
|
4231
|
+
" npm install -g @opencode/cli",
|
|
4232
|
+
" bun install -g --trust @opencode/cli",
|
|
4233
|
+
" binario suelto: https://opencode.ai/download",
|
|
4234
|
+
" (WSL) curl -fsSL https://opencode.ai/v2/install | bash",
|
|
4223
4235
|
"Luego verificá: opencode --version",
|
|
4224
4236
|
"Docs: https://opencode.ai/download"
|
|
4225
4237
|
].join(`
|
|
@@ -4228,8 +4240,8 @@ ${info.note}` : ""}`, `Instalación requerida (${platform})`);
|
|
|
4228
4240
|
ye([
|
|
4229
4241
|
"Intentá manualmente:",
|
|
4230
4242
|
` ${info.display}`,
|
|
4231
|
-
" npm install -g opencode
|
|
4232
|
-
" brew install anomalyco/tap/opencode (macOS/Linux con brew)",
|
|
4243
|
+
" npm install -g @opencode/cli (si no tenés curl)",
|
|
4244
|
+
" brew install anomalyco/tap/opencode-v2 (macOS/Linux con brew)",
|
|
4233
4245
|
"Luego verificá: opencode --version",
|
|
4234
4246
|
"Docs: https://opencode.ai/download"
|
|
4235
4247
|
].join(`
|
|
@@ -4990,9 +5002,8 @@ async function runDoctorCommand() {
|
|
|
4990
5002
|
const pluginPath = join11(cwd, "assets", "plugins", "ostacky-controller", "index.ts");
|
|
4991
5003
|
if (existsSync9(pluginPath)) {
|
|
4992
5004
|
const plugin = readFileSync7(pluginPath, "utf-8");
|
|
4993
|
-
const
|
|
4994
|
-
|
|
4995
|
-
check("spec: no-overwrite guard", hasNoOverwrite, true);
|
|
5005
|
+
const hasNoOverwrite = plugin.includes("shouldBlockCodeRead") && plugin.includes("isCodeReadGated") && plugin.includes("isTaskTracked") && plugin.includes("isShellPathExempt");
|
|
5006
|
+
check("spec/tracked read-guard (shouldBlockCodeRead + exemptions)", hasNoOverwrite, true);
|
|
4996
5007
|
}
|
|
4997
5008
|
const hasSyncProactive = ostackyMd.includes("Noté que lo que acordamos");
|
|
4998
5009
|
check("sync: proactive WARN", hasSyncProactive, true);
|
package/manifest.json
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.10.
|
|
2
|
+
"version": "0.10.2",
|
|
3
3
|
"repo": "JaimeHoracio/Ostacky",
|
|
4
|
-
"tag": "v0.10.
|
|
4
|
+
"tag": "v0.10.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.10.
|
|
10
|
-
"version": "0.10.
|
|
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.10.2: prune de skills obsoletas, lastHandoff, getAvailableTransitions, consecutiveFailures real, mem_session_summary automático al cierre.",
|
|
10
|
+
"version": "0.10.2",
|
|
11
|
+
"sha256": "b3db2a27d7b8249b4552d4f63353d893ec1b8c2abda44f375de65cd1d4364419"
|
|
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.10.
|
|
19
|
-
"version": "0.10.
|
|
20
|
-
"sha256": "
|
|
18
|
+
"description": "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, controller plugin). v0.10.2: controller plugin como alma hard-gate, Context7 removido del stack.",
|
|
19
|
+
"version": "0.10.2",
|
|
20
|
+
"sha256": "b4845d7b6306b1a8c4914a4cf5a4390a4d3e79f1226de72b0ef2e95157c1f58e"
|
|
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.10.
|
|
26
|
+
"version": "0.10.2",
|
|
27
27
|
"sha256": "f883f9ad96f7d75778631d5cc13d8a1a9c3e6ec41396bbce8ce13cff2e66fca2"
|
|
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.10.
|
|
35
|
-
"version": "0.10.
|
|
36
|
-
"sha256": "
|
|
34
|
+
"description": "Máquina de estados persistida con @modelcontextprotocol/server SDK. v0.10.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.10.2",
|
|
36
|
+
"sha256": "c78d2a8f7ce87d373cbac9135235ef1c90f45380fafc4135fe22c2b55c4423b6"
|
|
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.10.
|
|
42
|
+
"version": "0.10.2",
|
|
43
43
|
"sha256": "bdb283fe8ec2dfcba2ec4f38191f4039e58cd7ae12e44e66310783b42c827638"
|
|
44
44
|
}
|
|
45
45
|
],
|
|
@@ -48,105 +48,105 @@
|
|
|
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.10.
|
|
52
|
-
"sha256": "
|
|
51
|
+
"version": "0.10.2",
|
|
52
|
+
"sha256": "ba76eff6fb5bea08d3b26622089ea4739b7b542b3677a46071b2576f3f2001c7"
|
|
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.10.
|
|
59
|
-
"sha256": "
|
|
58
|
+
"version": "0.10.2",
|
|
59
|
+
"sha256": "9090132ccfe31dcf34b6d5f399c1135dcb1044c504d4beb026e0c7d9e09e7c0d"
|
|
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.10.
|
|
66
|
-
"sha256": "
|
|
65
|
+
"version": "0.10.2",
|
|
66
|
+
"sha256": "cce54e81cce46ba973066f9b43e74994a7dbf21aa756146c27689241cf62704d"
|
|
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.10.
|
|
72
|
+
"version": "0.10.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.10.
|
|
79
|
+
"version": "0.10.2",
|
|
80
80
|
"sha256": "7e7b712ef742d5631e302e6a71583e2bbbd33094da9281abfb84b43505fc3ef1"
|
|
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.10.
|
|
86
|
+
"version": "0.10.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.10.
|
|
93
|
+
"version": "0.10.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.10.
|
|
101
|
-
"sha256": "
|
|
100
|
+
"version": "0.10.2",
|
|
101
|
+
"sha256": "9049b944cea88a5428fd5d77b411a0ed32d169ad68acda911b68365fac08f38f"
|
|
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.10.
|
|
107
|
+
"version": "0.10.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.10.
|
|
114
|
+
"version": "0.10.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.10.
|
|
121
|
+
"version": "0.10.2",
|
|
122
122
|
"sha256": "9eafc3a8c693b8d9916867ef764d49e5222da717fde501c957bb3f6c312d2415"
|
|
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.10.
|
|
128
|
+
"version": "0.10.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.10.
|
|
135
|
+
"version": "0.10.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.10.
|
|
142
|
+
"version": "0.10.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.10.
|
|
149
|
+
"version": "0.10.2",
|
|
150
150
|
"sha256": "363449bd9e6f800a0a3168667cf78f767fb105d86e4a4adadcc649d418139303"
|
|
151
151
|
}
|
|
152
152
|
]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ostacky",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"description": "Instalador interactivo de agentes y comandos para OpenCode",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/bun": "latest",
|
|
40
|
+
"openspec": "^0.0.0",
|
|
40
41
|
"typescript": "^5.0.0"
|
|
41
42
|
},
|
|
42
43
|
"publishConfig": {
|