ostacky 0.5.3 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -215,33 +215,33 @@ Tras instalar, el proyecto queda así:
215
215
 
216
216
  ```json
217
217
  {
218
- "version": "0.5.3",
218
+ "version": "0.5.4",
219
219
  "lockedAt": "2025-01-01T00:00:00.000Z",
220
220
  "repo": "JaimeHoracio/Ostacky",
221
221
  "tag": "v0.5.3",
222
222
  "agents": {
223
223
  "ostacky": {
224
- "version": "0.5.3",
224
+ "version": "0.5.4",
225
225
  "installedAt": "2025-01-01T00:00:00.000Z",
226
226
  "sha256": "abc123..."
227
227
  }
228
228
  },
229
229
  "commands": {
230
230
  "install-stack": {
231
- "version": "0.5.3",
231
+ "version": "0.5.4",
232
232
  "installedAt": "2025-01-01T00:00:00.000Z",
233
233
  "sha256": "def456..."
234
234
  },
235
235
  "opsx-sync": {
236
- "version": "0.5.3",
236
+ "version": "0.5.4",
237
237
  "installedAt": "2025-01-01T00:00:00.000Z",
238
238
  "sha256": "ghi789..."
239
239
  }
240
240
  },
241
241
  "skills": {
242
- "brainstorming": { "version": "0.5.3", ... },
243
- "execution-mode-evaluation": { "version": "0.5.3", ... },
244
- "openspec-propose": { "version": "0.5.3", ... }
242
+ "brainstorming": { "version": "0.5.4", ... },
243
+ "execution-mode-evaluation": { "version": "0.5.4", ... },
244
+ "openspec-propose": { "version": "0.5.4", ... }
245
245
  }
246
246
  }
247
247
  ```
@@ -19,9 +19,7 @@
19
19
  * }
20
20
  */
21
21
 
22
- import { createInterface } from 'readline';
23
- import { createReadStream, writeFileSync } from 'fs';
24
- import { open } from 'fs/promises';
22
+ import { openSync, readSync, writeSync, closeSync, readFileSync, readlinkSync } from 'fs';
25
23
 
26
24
  // ─── Helpers ──────────────────────────────────────────────────────────────────
27
25
 
@@ -50,37 +48,77 @@ function log(msg) {
50
48
  process.stderr.write(msg + '\n');
51
49
  }
52
50
 
53
- /** Reads a line of user input from /dev/tty (with fallback to process.stdin). */
51
+ /**
52
+ * Finds the controlling PTY by walking up the parent process chain.
53
+ * MCP child processes do NOT inherit /dev/tty (ENXIO), so we find
54
+ * the terminal device that OpenCode (the parent) is connected to
55
+ * and open it directly.
56
+ */
57
+ function findParentTTY() {
58
+ // Try own tty_nr from /proc/self/stat first
59
+ try {
60
+ const stat = readFileSync('/proc/self/stat', 'utf-8');
61
+ const parts = stat.split(' ');
62
+ const ttyNr = parseInt(parts[6], 10); // tty_nr field (7th field, 0-indexed 6)
63
+ if (ttyNr !== 0) {
64
+ const major = (ttyNr >> 8) & 0xfff;
65
+ const minor = (ttyNr & 0xff) | ((ttyNr >> 12) & 0xfff00);
66
+ if (major === 136) return `/dev/pts/${minor}`; // /dev/pts/N
67
+ if (major === 4) return `/dev/tty${minor}`; // /dev/ttyN
68
+ if (major === 3) return `/dev/tty`; // controlling tty
69
+ }
70
+ } catch {
71
+ /* fall through */
72
+ }
73
+
74
+ // Walk up parent chain looking for a process with a readable PTY on fd/0
75
+ let pid = process.ppid;
76
+ for (let i = 0; i < 10; i++) {
77
+ try {
78
+ const fd0 = readlinkSync(`/proc/${pid}/fd/0`);
79
+ if (fd0.startsWith('/dev/pts/') || fd0.startsWith('/dev/tty')) {
80
+ // Verify it's actually openable for r/w
81
+ try {
82
+ const testFd = openSync(fd0, 'r+');
83
+ closeSync(testFd);
84
+ return fd0;
85
+ } catch {
86
+ /* try next */
87
+ }
88
+ }
89
+ } catch {
90
+ /* try next */
91
+ }
92
+
93
+ // Move to parent's parent
94
+ try {
95
+ const stat = readFileSync(`/proc/${pid}/stat`, 'utf-8');
96
+ pid = parseInt(stat.split(' ')[3], 10); // ppid field
97
+ if (pid <= 1) break;
98
+ } catch {
99
+ break;
100
+ }
101
+ }
102
+
103
+ return null;
104
+ }
105
+
106
+ /** Reads a line of user input from the parent's PTY (synchronous, raw-mode safe). */
54
107
  async function readLineFromTTY(prompt) {
55
- // Try /dev/tty first
56
108
  if (process.platform !== 'win32') {
57
109
  try {
58
- const tty = createReadStream('/dev/tty');
59
- return await new Promise((resolve, reject) => {
60
- // If /dev/tty fails asynchronously, fall back immediately
61
- tty.on('error', () => {
62
- tty.destroy();
63
- resolve(null); // signal fallback
64
- });
65
- tty.on('open', () => {
66
- const rl = createInterface({ input: tty, output: process.stderr });
67
- rl.question(prompt || '> ', (answer) => {
68
- rl.close();
69
- tty.destroy();
70
- resolve(answer);
71
- });
72
- });
73
- });
74
- } catch {
75
- // Synchronous error (unlikely) → fallback
110
+ return readLineFromTTYSync(prompt || '> ');
111
+ } catch (err) {
112
+ log(`[ask-user] PTY read failed: ${err.message}`);
76
113
  }
77
114
  }
78
115
 
79
- // Fallback: if /dev/tty failed or Windows
116
+ // Fallback: read from stdin (Windows / no TTY available)
80
117
  log(
81
- '[ask-user] /dev/tty not available, reading from stdin. ' +
118
+ '[ask-user] No terminal available, reading from stdin. ' +
82
119
  "If the prompt doesn't appear, check terminal settings."
83
120
  );
121
+ const { createInterface } = await import('readline');
84
122
  const rl = createInterface({ input: process.stdin, output: process.stderr });
85
123
  return await new Promise((resolve) => {
86
124
  rl.question(prompt || '> ', (answer) => {
@@ -90,6 +128,79 @@ async function readLineFromTTY(prompt) {
90
128
  });
91
129
  }
92
130
 
131
+ /**
132
+ * Synchronous line read from the parent process PTY.
133
+ * Handles raw mode (no line buffering, no echo, no cooked processing)
134
+ * by reading byte-by-byte with manual echo and editing support.
135
+ */
136
+ function readLineFromTTYSync(prompt) {
137
+ const ttyPath = findParentTTY();
138
+ if (!ttyPath) throw new Error('No TTY found for parent process');
139
+ const fd = openSync(ttyPath, 'r+');
140
+ try {
141
+ // Write prompt
142
+ writeSync(fd, Buffer.from(prompt, 'utf-8'), 0, Buffer.byteLength(prompt, 'utf-8'), null);
143
+
144
+ const buf = Buffer.alloc(1);
145
+ let line = '';
146
+ while (true) {
147
+ const bytesRead = readSync(fd, buf, 0, 1, null);
148
+ if (bytesRead === 0) break; // EOF (Ctrl+D)
149
+ const byte = buf[0];
150
+
151
+ // Ctrl+C → abort
152
+ if (byte === 0x03) {
153
+ writeSync(fd, Buffer.from('^C\n'));
154
+ throw new Error('User interrupted (Ctrl+C)');
155
+ }
156
+
157
+ // Ctrl+D → EOF
158
+ if (byte === 0x04) break;
159
+
160
+ // Newline (LF or CR) → done
161
+ if (byte === 0x0a) {
162
+ writeSync(fd, Buffer.from('\n'));
163
+ break;
164
+ }
165
+ if (byte === 0x0d) {
166
+ // CR — could be CRLF; break and discard any trailing LF
167
+ // (fd will be closed so orphaned LF is harmless)
168
+ writeSync(fd, Buffer.from('\n'));
169
+ break;
170
+ }
171
+
172
+ // Backspace (BS 0x08 or DEL 0x7f)
173
+ if (byte === 0x08 || byte === 0x7f) {
174
+ if (line.length > 0) {
175
+ line = line.slice(0, -1);
176
+ writeSync(fd, Buffer.from('\b \b')); // erase on screen
177
+ }
178
+ continue;
179
+ }
180
+
181
+ // Ctrl+U → kill line
182
+ if (byte === 0x15) {
183
+ for (let i = 0; i < line.length; i++) {
184
+ writeSync(fd, Buffer.from('\b \b'));
185
+ }
186
+ line = '';
187
+ continue;
188
+ }
189
+
190
+ // Printable ASCII → accept and echo
191
+ if (byte >= 0x20 && byte <= 0x7e) {
192
+ line += String.fromCharCode(byte);
193
+ writeSync(fd, buf, 0, 1, null); // echo to terminal
194
+ }
195
+ // Ignore other control characters
196
+ }
197
+
198
+ return line;
199
+ } finally {
200
+ closeSync(fd);
201
+ }
202
+ }
203
+
93
204
  // ─── Tool handler ─────────────────────────────────────────────────────────────
94
205
 
95
206
  async function handleAskUser(args) {
@@ -167,7 +278,7 @@ async function handleRequest(msg) {
167
278
  },
168
279
  serverInfo: {
169
280
  name: 'ask-user-server',
170
- version: '0.5.3',
281
+ version: '0.5.4',
171
282
  },
172
283
  });
173
284
  break;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ask-user-server",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "private": true,
5
5
  "type": "module"
6
6
  }
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "ostacky-controller",
3
+ "version": "0.5.4",
4
+ "private": true,
5
+ "type": "module"
6
+ }
package/dist/cli.js CHANGED
@@ -161,7 +161,7 @@ var require_picocolors = __commonJS((exports, module) => {
161
161
  // package.json
162
162
  var package_default = {
163
163
  name: "ostacky",
164
- version: "0.5.3",
164
+ version: "0.5.4",
165
165
  description: "Instalador interactivo de agentes y comandos para OpenCode",
166
166
  type: "module",
167
167
  bin: {
@@ -876,7 +876,7 @@ var L2 = () => {
876
876
  import { join as join5 } from "path";
877
877
  // manifest.json
878
878
  var manifest_default = {
879
- version: "0.5.3",
879
+ version: "0.5.4",
880
880
  repo: "JaimeHoracio/Ostacky",
881
881
  tag: "v0.5.3",
882
882
  agents: [
@@ -884,7 +884,7 @@ var manifest_default = {
884
884
  name: "ostacky",
885
885
  file: "assets/agents/ostacky.md",
886
886
  description: "Orquestador principal con ruteo por nivel de impacto, máquina de estados persistida (controller MCP), edición segura con 3 outcomes, y delegación en OpenSpec + Superpowers",
887
- version: "0.5.3",
887
+ version: "0.5.4",
888
888
  sha256: "92c533260f1747f660be123d699c227b77b3f36e3c8f33929a6f470b56fef6dc"
889
889
  }
890
890
  ],
@@ -893,14 +893,14 @@ var manifest_default = {
893
893
  name: "install-stack",
894
894
  file: "assets/commands/install-stack.md",
895
895
  description: "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, Context7, controller MCP)",
896
- version: "0.5.3",
896
+ version: "0.5.4",
897
897
  sha256: "e8b75efe505766d47dd4d38cfb055b6801552cd457d99bce018c196a346e4560"
898
898
  },
899
899
  {
900
900
  name: "opsx-sync",
901
901
  file: "assets/commands/opsx-sync.md",
902
902
  description: "Sincroniza delta specs del change activo sin inicializar CodeGraph si ya existe índice",
903
- version: "0.5.3",
903
+ version: "0.5.4",
904
904
  sha256: "ed9948f1910743b672e1dfad496bc96972a224a98b063232be39290d43068c50"
905
905
  }
906
906
  ],
@@ -909,15 +909,15 @@ var manifest_default = {
909
909
  name: "ask-user-server",
910
910
  file: "assets/mcp/ask-user-server/",
911
911
  description: "MCP server con tool ask_user para consultar al usuario con bloqueo de ejecución",
912
- version: "0.5.3",
913
- sha256: "b1614dda3a7a8f27367a2da48d80145a43bba6b88f7719fc5a8e041dfb905435"
912
+ version: "0.5.4",
913
+ sha256: "eae84bbf9addb839160dee64a7e1e8bc8f34f4520e02c9a2900c741003986258"
914
914
  },
915
915
  {
916
916
  name: "ostacky-controller",
917
917
  file: "assets/mcp/ostacky-controller/",
918
918
  description: "Máquina de estados persistida para Ostacky: validación de transiciones, consumo de decisiones, autorización de side effects, edición segura y snapshots reutilizables",
919
- version: "0.5.3",
920
- sha256: "c66291cf170a7579e611580e8ac6f4bb15857d7e71b43fb793d92ea3a0013951"
919
+ version: "0.5.4",
920
+ sha256: "a24e94655cc88d0f99b9a913f12b32a1bb6c634c9a72d92cb4706b147b686760"
921
921
  }
922
922
  ],
923
923
  skills: [
@@ -925,77 +925,77 @@ var manifest_default = {
925
925
  name: "execution-mode-evaluation",
926
926
  file: "assets/skills/execution-mode-evaluation/SKILL.md",
927
927
  description: "Skill de análisis de modo de ejecución — output reconciliado con controller snapshot contract (recommendation field)",
928
- version: "0.5.3",
928
+ version: "0.5.4",
929
929
  sha256: "1063bc501b284d84daa181198cfb8194beff481594ba9931e6bbd46d89cfdabd"
930
930
  },
931
931
  {
932
932
  name: "brainstorming",
933
933
  file: "assets/skills/brainstorming/SKILL.md",
934
934
  description: "Skill de descubrimiento y exploración (Superpowers)",
935
- version: "0.5.3",
935
+ version: "0.5.4",
936
936
  sha256: "ad15458c54912007ae3f708c698a11f0a4a58e2a7c7860a1ae8874db573c9e98"
937
937
  },
938
938
  {
939
939
  name: "writing-plans",
940
940
  file: "assets/skills/writing-plans/SKILL.md",
941
941
  description: "Skill de planificación de implementación (Superpowers) — execution handoff removido, Ostacky decide modo de ejecución",
942
- version: "0.5.3",
942
+ version: "0.5.4",
943
943
  sha256: "ff242e9205666f74dc1b28bf19bd77270d46dcc5c322d643faa49aabf8e8d096"
944
944
  },
945
945
  {
946
946
  name: "tdd",
947
947
  file: "assets/skills/tdd/SKILL.md",
948
948
  description: "Skill de test-driven development (Superpowers)",
949
- version: "0.5.3",
949
+ version: "0.5.4",
950
950
  sha256: "7eacd8ee81dc5c0b85065c0392e37ee10314661f7edb59dd8e70a9e0dae8f371"
951
951
  },
952
952
  {
953
953
  name: "subagent-driven-development",
954
954
  file: "assets/skills/subagent-driven-development/SKILL.md",
955
955
  description: "Skill de ejecución con subagentes (Superpowers) — ejecuta solo después de confirmación del coordinador Ostacky",
956
- version: "0.5.3",
956
+ version: "0.5.4",
957
957
  sha256: "a9e6c9070f63dcac0a065a1abd91c9218fa07e201f594d1ce5f6a0dc0bfa0674"
958
958
  },
959
959
  {
960
960
  name: "dispatching-parallel-agents",
961
961
  file: "assets/skills/dispatching-parallel-agents/SKILL.md",
962
962
  description: "Skill de dispatch paralelo de agentes (Superpowers)",
963
- version: "0.5.3",
963
+ version: "0.5.4",
964
964
  sha256: "281edf0c38f358497c7e2066fa8217a2ba3e2a39b4205c4af0c41d328fc035a1"
965
965
  },
966
966
  {
967
967
  name: "review",
968
968
  file: "assets/skills/review/SKILL.md",
969
969
  description: "Skill de revisión de código (Superpowers)",
970
- version: "0.5.3",
970
+ version: "0.5.4",
971
971
  sha256: "c78d3beff45e9bb6b5e9e1d7155910f379e082d7aaf3c61b90d651d09e0d2e2a"
972
972
  },
973
973
  {
974
974
  name: "openspec-explore",
975
975
  file: "assets/skills/openspec-explore/SKILL.md",
976
976
  description: "Skill de exploración pre-spec (OpenSpec)",
977
- version: "0.5.3",
977
+ version: "0.5.4",
978
978
  sha256: "1c75cab8672c2eb8b12f27a0b31f0b7fdb73c21c72583c1e8a566e09fe4108a6"
979
979
  },
980
980
  {
981
981
  name: "openspec-propose",
982
982
  file: "assets/skills/openspec-propose/SKILL.md",
983
983
  description: "Skill de generación de proposal (OpenSpec)",
984
- version: "0.5.3",
984
+ version: "0.5.4",
985
985
  sha256: "ab88e9aa22db09559ccf7987d08adc0469b7c6fbe46498e63a3b64926f19e66b"
986
986
  },
987
987
  {
988
988
  name: "openspec-apply-change",
989
989
  file: "assets/skills/openspec-apply-change/SKILL.md",
990
990
  description: "Skill de aplicación de change (OpenSpec)",
991
- version: "0.5.3",
991
+ version: "0.5.4",
992
992
  sha256: "847c2f88a66e8d5946c1fec422a5367c89eca5340839b659bbaaeb6f0bdac487"
993
993
  },
994
994
  {
995
995
  name: "openspec-archive-change",
996
996
  file: "assets/skills/openspec-archive-change/SKILL.md",
997
997
  description: "Skill de archivo de change (OpenSpec)",
998
- version: "0.5.3",
998
+ version: "0.5.4",
999
999
  sha256: "3d35905ec40a081b8fd77b144426e540c67b1f50cc5801b655313a4fdfaa087a"
1000
1000
  }
1001
1001
  ]
@@ -1186,7 +1186,7 @@ function clearLockfile(opencodeRoot) {
1186
1186
  const lockfile = readLockfile(opencodeRoot);
1187
1187
  if (!lockfile) {
1188
1188
  writeLockfile(opencodeRoot, {
1189
- version: "0.5.3",
1189
+ version: "0.5.4",
1190
1190
  lockedAt: new Date().toISOString(),
1191
1191
  repo: "",
1192
1192
  tag: "",
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.5.3",
2
+ "version": "0.5.4",
3
3
  "repo": "JaimeHoracio/Ostacky",
4
4
  "tag": "v0.5.3",
5
5
  "agents": [
@@ -7,7 +7,7 @@
7
7
  "name": "ostacky",
8
8
  "file": "assets/agents/ostacky.md",
9
9
  "description": "Orquestador principal con ruteo por nivel de impacto, máquina de estados persistida (controller MCP), edición segura con 3 outcomes, y delegación en OpenSpec + Superpowers",
10
- "version": "0.5.3",
10
+ "version": "0.5.4",
11
11
  "sha256": "92c533260f1747f660be123d699c227b77b3f36e3c8f33929a6f470b56fef6dc"
12
12
  }
13
13
  ],
@@ -16,14 +16,14 @@
16
16
  "name": "install-stack",
17
17
  "file": "assets/commands/install-stack.md",
18
18
  "description": "Instala el stack tecnológico del proyecto (CodeGraph, skills, OpenSpec, Engram, Context7, controller MCP)",
19
- "version": "0.5.3",
19
+ "version": "0.5.4",
20
20
  "sha256": "e8b75efe505766d47dd4d38cfb055b6801552cd457d99bce018c196a346e4560"
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.5.3",
26
+ "version": "0.5.4",
27
27
  "sha256": "ed9948f1910743b672e1dfad496bc96972a224a98b063232be39290d43068c50"
28
28
  }
29
29
  ],
@@ -32,15 +32,15 @@
32
32
  "name": "ask-user-server",
33
33
  "file": "assets/mcp/ask-user-server/",
34
34
  "description": "MCP server con tool ask_user para consultar al usuario con bloqueo de ejecución",
35
- "version": "0.5.3",
36
- "sha256": "b1614dda3a7a8f27367a2da48d80145a43bba6b88f7719fc5a8e041dfb905435"
35
+ "version": "0.5.4",
36
+ "sha256": "eae84bbf9addb839160dee64a7e1e8bc8f34f4520e02c9a2900c741003986258"
37
37
  },
38
38
  {
39
39
  "name": "ostacky-controller",
40
40
  "file": "assets/mcp/ostacky-controller/",
41
41
  "description": "Máquina de estados persistida para Ostacky: validación de transiciones, consumo de decisiones, autorización de side effects, edición segura y snapshots reutilizables",
42
- "version": "0.5.3",
43
- "sha256": "c66291cf170a7579e611580e8ac6f4bb15857d7e71b43fb793d92ea3a0013951"
42
+ "version": "0.5.4",
43
+ "sha256": "a24e94655cc88d0f99b9a913f12b32a1bb6c634c9a72d92cb4706b147b686760"
44
44
  }
45
45
  ],
46
46
  "skills": [
@@ -48,77 +48,77 @@
48
48
  "name": "execution-mode-evaluation",
49
49
  "file": "assets/skills/execution-mode-evaluation/SKILL.md",
50
50
  "description": "Skill de análisis de modo de ejecución — output reconciliado con controller snapshot contract (recommendation field)",
51
- "version": "0.5.3",
51
+ "version": "0.5.4",
52
52
  "sha256": "1063bc501b284d84daa181198cfb8194beff481594ba9931e6bbd46d89cfdabd"
53
53
  },
54
54
  {
55
55
  "name": "brainstorming",
56
56
  "file": "assets/skills/brainstorming/SKILL.md",
57
57
  "description": "Skill de descubrimiento y exploración (Superpowers)",
58
- "version": "0.5.3",
58
+ "version": "0.5.4",
59
59
  "sha256": "ad15458c54912007ae3f708c698a11f0a4a58e2a7c7860a1ae8874db573c9e98"
60
60
  },
61
61
  {
62
62
  "name": "writing-plans",
63
63
  "file": "assets/skills/writing-plans/SKILL.md",
64
64
  "description": "Skill de planificación de implementación (Superpowers) — execution handoff removido, Ostacky decide modo de ejecución",
65
- "version": "0.5.3",
65
+ "version": "0.5.4",
66
66
  "sha256": "ff242e9205666f74dc1b28bf19bd77270d46dcc5c322d643faa49aabf8e8d096"
67
67
  },
68
68
  {
69
69
  "name": "tdd",
70
70
  "file": "assets/skills/tdd/SKILL.md",
71
71
  "description": "Skill de test-driven development (Superpowers)",
72
- "version": "0.5.3",
72
+ "version": "0.5.4",
73
73
  "sha256": "7eacd8ee81dc5c0b85065c0392e37ee10314661f7edb59dd8e70a9e0dae8f371"
74
74
  },
75
75
  {
76
76
  "name": "subagent-driven-development",
77
77
  "file": "assets/skills/subagent-driven-development/SKILL.md",
78
78
  "description": "Skill de ejecución con subagentes (Superpowers) — ejecuta solo después de confirmación del coordinador Ostacky",
79
- "version": "0.5.3",
79
+ "version": "0.5.4",
80
80
  "sha256": "a9e6c9070f63dcac0a065a1abd91c9218fa07e201f594d1ce5f6a0dc0bfa0674"
81
81
  },
82
82
  {
83
83
  "name": "dispatching-parallel-agents",
84
84
  "file": "assets/skills/dispatching-parallel-agents/SKILL.md",
85
85
  "description": "Skill de dispatch paralelo de agentes (Superpowers)",
86
- "version": "0.5.3",
86
+ "version": "0.5.4",
87
87
  "sha256": "281edf0c38f358497c7e2066fa8217a2ba3e2a39b4205c4af0c41d328fc035a1"
88
88
  },
89
89
  {
90
90
  "name": "review",
91
91
  "file": "assets/skills/review/SKILL.md",
92
92
  "description": "Skill de revisión de código (Superpowers)",
93
- "version": "0.5.3",
93
+ "version": "0.5.4",
94
94
  "sha256": "c78d3beff45e9bb6b5e9e1d7155910f379e082d7aaf3c61b90d651d09e0d2e2a"
95
95
  },
96
96
  {
97
97
  "name": "openspec-explore",
98
98
  "file": "assets/skills/openspec-explore/SKILL.md",
99
99
  "description": "Skill de exploración pre-spec (OpenSpec)",
100
- "version": "0.5.3",
100
+ "version": "0.5.4",
101
101
  "sha256": "1c75cab8672c2eb8b12f27a0b31f0b7fdb73c21c72583c1e8a566e09fe4108a6"
102
102
  },
103
103
  {
104
104
  "name": "openspec-propose",
105
105
  "file": "assets/skills/openspec-propose/SKILL.md",
106
106
  "description": "Skill de generación de proposal (OpenSpec)",
107
- "version": "0.5.3",
107
+ "version": "0.5.4",
108
108
  "sha256": "ab88e9aa22db09559ccf7987d08adc0469b7c6fbe46498e63a3b64926f19e66b"
109
109
  },
110
110
  {
111
111
  "name": "openspec-apply-change",
112
112
  "file": "assets/skills/openspec-apply-change/SKILL.md",
113
113
  "description": "Skill de aplicación de change (OpenSpec)",
114
- "version": "0.5.3",
114
+ "version": "0.5.4",
115
115
  "sha256": "847c2f88a66e8d5946c1fec422a5367c89eca5340839b659bbaaeb6f0bdac487"
116
116
  },
117
117
  {
118
118
  "name": "openspec-archive-change",
119
119
  "file": "assets/skills/openspec-archive-change/SKILL.md",
120
120
  "description": "Skill de archivo de change (OpenSpec)",
121
- "version": "0.5.3",
121
+ "version": "0.5.4",
122
122
  "sha256": "3d35905ec40a081b8fd77b144426e540c67b1f50cc5801b655313a4fdfaa087a"
123
123
  }
124
124
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ostacky",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "Instalador interactivo de agentes y comandos para OpenCode",
5
5
  "type": "module",
6
6
  "bin": {