ostacky 0.1.0 → 0.1.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 +5 -67
- package/assets/commands/install-stack.md +1 -1
- package/dist/cli.js +263 -33
- package/manifest.json +25 -25
- package/package.json +2 -2
- package/assets/skills/brainstorming/SKILL.md.placeholder +0 -36
- package/assets/skills/dispatching-parallel-agents/SKILL.md.placeholder +0 -36
- package/assets/skills/openspec-apply-change/SKILL.md.placeholder +0 -36
- package/assets/skills/openspec-archive-change/SKILL.md.placeholder +0 -36
- package/assets/skills/openspec-explore/SKILL.md.placeholder +0 -36
- package/assets/skills/openspec-propose/SKILL.md.placeholder +0 -36
- package/assets/skills/review/SKILL.md.placeholder +0 -36
- package/assets/skills/subagent-driven-development/SKILL.md.placeholder +0 -36
- package/assets/skills/tdd/SKILL.md.placeholder +0 -36
- package/assets/skills/writing-plans/SKILL.md.placeholder +0 -36
package/README.md
CHANGED
|
@@ -156,20 +156,20 @@ Tras instalar, el proyecto queda así:
|
|
|
156
156
|
|
|
157
157
|
```json
|
|
158
158
|
{
|
|
159
|
-
"version": "0.1.
|
|
159
|
+
"version": "0.1.2",
|
|
160
160
|
"lockedAt": "2025-01-01T00:00:00.000Z",
|
|
161
161
|
"repo": "JaimeHoracio/Ostacky",
|
|
162
|
-
"tag": "v0.1.
|
|
162
|
+
"tag": "v0.1.2",
|
|
163
163
|
"agents": {
|
|
164
164
|
"ostacky": {
|
|
165
|
-
"version": "0.1.
|
|
165
|
+
"version": "0.1.2",
|
|
166
166
|
"installedAt": "2025-01-01T00:00:00.000Z",
|
|
167
167
|
"sha256": "abc123..."
|
|
168
168
|
}
|
|
169
169
|
},
|
|
170
170
|
"commands": {
|
|
171
171
|
"install-stack": {
|
|
172
|
-
"version": "0.1.
|
|
172
|
+
"version": "0.1.2",
|
|
173
173
|
"installedAt": "2025-01-01T00:00:00.000Z",
|
|
174
174
|
"sha256": "def456..."
|
|
175
175
|
}
|
|
@@ -201,7 +201,7 @@ Ese paso es opcional. Si no aparece en la terminal, recargá OpenCode y volvé a
|
|
|
201
201
|
## Seguridad
|
|
202
202
|
|
|
203
203
|
- `opencode.jsonc` se versiona en el repo para compartir permisos y MCP de forma reproducible.
|
|
204
|
-
- Las URLs de descarga usan **tags de GitHub** (ej. `v0.1.
|
|
204
|
+
- Las URLs de descarga usan **tags de GitHub** (ej. `v0.1.2`), nunca `main` — instalaciones reproducibles
|
|
205
205
|
- Cada path de archivo descargado es validado para prevenir **path traversal**
|
|
206
206
|
- Los archivos incluyen **checksum SHA-256** opcional; si el manifest lo define, el contenido se verifica antes de escribir
|
|
207
207
|
- El cache local (`~/.opencode/cache/`) también valida integridad al servir archivos cacheados
|
|
@@ -222,68 +222,6 @@ Los archivos descargados se guardan en:
|
|
|
222
222
|
|
|
223
223
|
Si ya existe un archivo en cache con el hash correcto, no se hace ninguna petición de red.
|
|
224
224
|
|
|
225
|
-
## Desarrollo
|
|
226
|
-
|
|
227
|
-
> Los pasos de esta sección son **solo para quienes quieran contribuir o modificar el código**. Si eres usuario final, no necesitas ejecutar nada de esto — basta con `npx ostacky`.
|
|
228
|
-
|
|
229
|
-
### Requisitos adicionales para desarrollo
|
|
230
|
-
|
|
231
|
-
- [Bun](https://bun.sh/) >= 1.x
|
|
232
|
-
|
|
233
|
-
### 1. Clonar e instalar dependencias
|
|
234
|
-
|
|
235
|
-
```bash
|
|
236
|
-
git clone https://github.com/JaimeHoracio/Ostacky.git
|
|
237
|
-
cd Ostacky
|
|
238
|
-
bun install
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
`bun install` descarga todas las dependencias definidas en `package.json` (incluyendo TypeScript y los tipos de Bun).
|
|
242
|
-
|
|
243
|
-
### 2. Ejecutar en modo desarrollo
|
|
244
|
-
|
|
245
|
-
```bash
|
|
246
|
-
bun run dev
|
|
247
|
-
# equivalente a: bun run src/cli.ts
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
### 3. Compilar la CLI
|
|
251
|
-
|
|
252
|
-
La CLI se distribuye como un ejecutable JavaScript en `dist/cli.js`. Para generarlo:
|
|
253
|
-
|
|
254
|
-
```bash
|
|
255
|
-
bun run build
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
Este comando ejecuta internamente:
|
|
259
|
-
|
|
260
|
-
```bash
|
|
261
|
-
bun build src/cli.ts --target=node --format=esm --outfile dist/cli.js && bun scripts/add-shebang.ts
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
Tras compilar deberías obtener:
|
|
265
|
-
|
|
266
|
-
```
|
|
267
|
-
dist/
|
|
268
|
-
└── cli.js
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
### 4. Probar el binario compilado
|
|
272
|
-
|
|
273
|
-
```bash
|
|
274
|
-
node dist/cli.js
|
|
275
|
-
# o
|
|
276
|
-
bun run start
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### Publicar en npm
|
|
280
|
-
|
|
281
|
-
El script `prepublishOnly` ejecuta `bun run build` automáticamente antes de publicar, por lo que `dist/` siempre estará actualizado al publicar.
|
|
282
|
-
|
|
283
|
-
```bash
|
|
284
|
-
npm publish
|
|
285
|
-
```
|
|
286
|
-
|
|
287
225
|
## Licencia
|
|
288
226
|
|
|
289
227
|
MIT
|
|
@@ -3,7 +3,7 @@ description: Instala CodeGraph, skills curadas y OpenSpec localmente para OpenCo
|
|
|
3
3
|
agent: build
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Instala el stack tecnológico de desarrollo
|
|
6
|
+
Instala el stack tecnológico de desarrollo. NOTA: `npx ostacky install` ahora instala automáticamente CodeGraph, OpenSpec y Engram. Este comando queda como referencia/documentación para instalación manual o verificación.
|
|
7
7
|
|
|
8
8
|
**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.
|
|
9
9
|
|
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.1.
|
|
164
|
+
version: "0.1.2",
|
|
165
165
|
description: "Instalador interactivo de agentes y comandos para OpenCode",
|
|
166
166
|
type: "module",
|
|
167
167
|
bin: {
|
|
@@ -189,7 +189,7 @@ var package_default = {
|
|
|
189
189
|
license: "MIT",
|
|
190
190
|
dependencies: {
|
|
191
191
|
"@clack/prompts": "^0.9.0",
|
|
192
|
-
settings: "^0.1.
|
|
192
|
+
settings: "^0.1.2"
|
|
193
193
|
},
|
|
194
194
|
devDependencies: {
|
|
195
195
|
"@types/bun": "latest",
|
|
@@ -877,15 +877,15 @@ var L2 = () => {
|
|
|
877
877
|
import { join as join5 } from "path";
|
|
878
878
|
// manifest.json
|
|
879
879
|
var manifest_default = {
|
|
880
|
-
version: "0.1.
|
|
880
|
+
version: "0.1.2",
|
|
881
881
|
repo: "JaimeHoracio/Ostacky",
|
|
882
|
-
tag: "v0.1.
|
|
882
|
+
tag: "v0.1.2",
|
|
883
883
|
agents: [
|
|
884
884
|
{
|
|
885
885
|
name: "ostacky",
|
|
886
886
|
file: "assets/agents/ostacky.md",
|
|
887
887
|
description: "Agente principal de desarrollo con ejecución inline-first y local-first",
|
|
888
|
-
version: "0.1.
|
|
888
|
+
version: "0.1.2",
|
|
889
889
|
sha256: null
|
|
890
890
|
}
|
|
891
891
|
],
|
|
@@ -894,14 +894,14 @@ var manifest_default = {
|
|
|
894
894
|
name: "install-stack",
|
|
895
895
|
file: "assets/commands/install-stack.md",
|
|
896
896
|
description: "Instala el stack tecnológico del proyecto",
|
|
897
|
-
version: "0.1.
|
|
897
|
+
version: "0.1.2",
|
|
898
898
|
sha256: null
|
|
899
899
|
},
|
|
900
900
|
{
|
|
901
901
|
name: "opsx-sync",
|
|
902
902
|
file: "assets/commands/opsx-sync.md",
|
|
903
903
|
description: "Sincroniza delta specs del change activo (wrapper de openspec update)",
|
|
904
|
-
version: "0.1.
|
|
904
|
+
version: "0.1.2",
|
|
905
905
|
sha256: null
|
|
906
906
|
}
|
|
907
907
|
],
|
|
@@ -910,71 +910,71 @@ var manifest_default = {
|
|
|
910
910
|
name: "brainstorming",
|
|
911
911
|
file: "assets/skills/brainstorming/SKILL.md",
|
|
912
912
|
description: "Skill de descubrimiento y exploración (Superpowers)",
|
|
913
|
-
version: "0.1.
|
|
914
|
-
sha256: "
|
|
913
|
+
version: "0.1.2",
|
|
914
|
+
sha256: "ad15458c54912007ae3f708c698a11f0a4a58e2a7c7860a1ae8874db573c9e98"
|
|
915
915
|
},
|
|
916
916
|
{
|
|
917
917
|
name: "writing-plans",
|
|
918
918
|
file: "assets/skills/writing-plans/SKILL.md",
|
|
919
919
|
description: "Skill de planificación de implementación (Superpowers)",
|
|
920
|
-
version: "0.1.
|
|
921
|
-
sha256: "
|
|
920
|
+
version: "0.1.2",
|
|
921
|
+
sha256: "4d675df944b9c846e9066ff971861ad1c9673cd2c88375081b00a75872ad621a"
|
|
922
922
|
},
|
|
923
923
|
{
|
|
924
924
|
name: "tdd",
|
|
925
925
|
file: "assets/skills/tdd/SKILL.md",
|
|
926
926
|
description: "Skill de test-driven development (Superpowers)",
|
|
927
|
-
version: "0.1.
|
|
928
|
-
sha256: "
|
|
927
|
+
version: "0.1.2",
|
|
928
|
+
sha256: "7eacd8ee81dc5c0b85065c0392e37ee10314661f7edb59dd8e70a9e0dae8f371"
|
|
929
929
|
},
|
|
930
930
|
{
|
|
931
931
|
name: "subagent-driven-development",
|
|
932
932
|
file: "assets/skills/subagent-driven-development/SKILL.md",
|
|
933
933
|
description: "Skill de ejecución con subagentes (Superpowers)",
|
|
934
|
-
version: "0.1.
|
|
935
|
-
sha256: "
|
|
934
|
+
version: "0.1.2",
|
|
935
|
+
sha256: "14e0f685b1dc1d7e02b7226d18f037fe4b6cba49b512a1fadf67cfad2a9dcc96"
|
|
936
936
|
},
|
|
937
937
|
{
|
|
938
938
|
name: "dispatching-parallel-agents",
|
|
939
939
|
file: "assets/skills/dispatching-parallel-agents/SKILL.md",
|
|
940
940
|
description: "Skill de dispatch paralelo de agentes (Superpowers)",
|
|
941
|
-
version: "0.1.
|
|
942
|
-
sha256: "
|
|
941
|
+
version: "0.1.2",
|
|
942
|
+
sha256: "281edf0c38f358497c7e2066fa8217a2ba3e2a39b4205c4af0c41d328fc035a1"
|
|
943
943
|
},
|
|
944
944
|
{
|
|
945
945
|
name: "review",
|
|
946
946
|
file: "assets/skills/review/SKILL.md",
|
|
947
947
|
description: "Skill de revisión de código (Superpowers)",
|
|
948
|
-
version: "0.1.
|
|
949
|
-
sha256: "
|
|
948
|
+
version: "0.1.2",
|
|
949
|
+
sha256: "c78d3beff45e9bb6b5e9e1d7155910f379e082d7aaf3c61b90d651d09e0d2e2a"
|
|
950
950
|
},
|
|
951
951
|
{
|
|
952
952
|
name: "openspec-explore",
|
|
953
953
|
file: "assets/skills/openspec-explore/SKILL.md",
|
|
954
954
|
description: "Skill de exploración pre-spec (OpenSpec)",
|
|
955
|
-
version: "0.1.
|
|
956
|
-
sha256: "
|
|
955
|
+
version: "0.1.2",
|
|
956
|
+
sha256: "1c75cab8672c2eb8b12f27a0b31f0b7fdb73c21c72583c1e8a566e09fe4108a6"
|
|
957
957
|
},
|
|
958
958
|
{
|
|
959
959
|
name: "openspec-propose",
|
|
960
960
|
file: "assets/skills/openspec-propose/SKILL.md",
|
|
961
961
|
description: "Skill de generación de proposal (OpenSpec)",
|
|
962
|
-
version: "0.1.
|
|
963
|
-
sha256: "
|
|
962
|
+
version: "0.1.2",
|
|
963
|
+
sha256: "ab88e9aa22db09559ccf7987d08adc0469b7c6fbe46498e63a3b64926f19e66b"
|
|
964
964
|
},
|
|
965
965
|
{
|
|
966
966
|
name: "openspec-apply-change",
|
|
967
967
|
file: "assets/skills/openspec-apply-change/SKILL.md",
|
|
968
968
|
description: "Skill de aplicación de change (OpenSpec)",
|
|
969
|
-
version: "0.1.
|
|
970
|
-
sha256: "
|
|
969
|
+
version: "0.1.2",
|
|
970
|
+
sha256: "847c2f88a66e8d5946c1fec422a5367c89eca5340839b659bbaaeb6f0bdac487"
|
|
971
971
|
},
|
|
972
972
|
{
|
|
973
973
|
name: "openspec-archive-change",
|
|
974
974
|
file: "assets/skills/openspec-archive-change/SKILL.md",
|
|
975
975
|
description: "Skill de archivo de change (OpenSpec)",
|
|
976
|
-
version: "0.1.
|
|
977
|
-
sha256: "
|
|
976
|
+
version: "0.1.2",
|
|
977
|
+
sha256: "3d35905ec40a081b8fd77b144426e540c67b1f50cc5801b655313a4fdfaa087a"
|
|
978
978
|
}
|
|
979
979
|
]
|
|
980
980
|
};
|
|
@@ -1159,7 +1159,7 @@ function clearLockfile(opencodeRoot) {
|
|
|
1159
1159
|
const lockfile = readLockfile(opencodeRoot);
|
|
1160
1160
|
if (!lockfile) {
|
|
1161
1161
|
writeLockfile(opencodeRoot, {
|
|
1162
|
-
version: "0.1.
|
|
1162
|
+
version: "0.1.2",
|
|
1163
1163
|
lockedAt: new Date().toISOString(),
|
|
1164
1164
|
repo: "",
|
|
1165
1165
|
tag: "",
|
|
@@ -1177,6 +1177,7 @@ function clearLockfile(opencodeRoot) {
|
|
|
1177
1177
|
}
|
|
1178
1178
|
|
|
1179
1179
|
// src/installer.ts
|
|
1180
|
+
import { execSync } from "child_process";
|
|
1180
1181
|
function findOpenCodeDir(startDir = process.cwd()) {
|
|
1181
1182
|
let current = resolve(startDir);
|
|
1182
1183
|
while (true) {
|
|
@@ -1363,6 +1364,184 @@ function uninstallAll(paths) {
|
|
|
1363
1364
|
}
|
|
1364
1365
|
clearLockfile(paths.root);
|
|
1365
1366
|
}
|
|
1367
|
+
function isCommandAvailable(cmd) {
|
|
1368
|
+
try {
|
|
1369
|
+
if (process.platform === "win32") {
|
|
1370
|
+
execSync(`where ${cmd} >nul 2>&1`);
|
|
1371
|
+
} else {
|
|
1372
|
+
execSync(`which ${cmd} >/dev/null 2>&1`);
|
|
1373
|
+
}
|
|
1374
|
+
return true;
|
|
1375
|
+
} catch {
|
|
1376
|
+
return false;
|
|
1377
|
+
}
|
|
1378
|
+
}
|
|
1379
|
+
function installCodeGraph() {
|
|
1380
|
+
if (!isCommandAvailable("codegraph")) {
|
|
1381
|
+
try {
|
|
1382
|
+
if (process.platform === "win32") {
|
|
1383
|
+
execSync('powershell -c "irm https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.ps1 | iex"', { stdio: "inherit", timeout: 120000 });
|
|
1384
|
+
} else {
|
|
1385
|
+
execSync("curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh", { stdio: "inherit", timeout: 120000 });
|
|
1386
|
+
}
|
|
1387
|
+
if (!isCommandAvailable("codegraph")) {
|
|
1388
|
+
return {
|
|
1389
|
+
success: false,
|
|
1390
|
+
message: "CodeGraph instalado pero no está en PATH. ¿Necesitás reiniciar la terminal?"
|
|
1391
|
+
};
|
|
1392
|
+
}
|
|
1393
|
+
} catch (e2) {
|
|
1394
|
+
return {
|
|
1395
|
+
success: false,
|
|
1396
|
+
message: `Error instalando CodeGraph: ${e2.message}`
|
|
1397
|
+
};
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
try {
|
|
1401
|
+
execSync("codegraph install --target=opencode --location=local --yes", {
|
|
1402
|
+
stdio: "pipe",
|
|
1403
|
+
timeout: 60000
|
|
1404
|
+
});
|
|
1405
|
+
execSync("codegraph init -i", { stdio: "pipe", timeout: 120000 });
|
|
1406
|
+
return { success: true, message: "CodeGraph instalado y configurado para OpenCode" };
|
|
1407
|
+
} catch (e2) {
|
|
1408
|
+
return {
|
|
1409
|
+
success: false,
|
|
1410
|
+
message: `Error configurando CodeGraph: ${e2.message}`
|
|
1411
|
+
};
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
function setupOpenSpec() {
|
|
1415
|
+
try {
|
|
1416
|
+
execSync("npx --yes openspec init --tools opencode --force", {
|
|
1417
|
+
stdio: "pipe",
|
|
1418
|
+
timeout: 120000
|
|
1419
|
+
});
|
|
1420
|
+
return { success: true, message: "OpenSpec configurado para OpenCode" };
|
|
1421
|
+
} catch (e2) {
|
|
1422
|
+
return {
|
|
1423
|
+
success: false,
|
|
1424
|
+
message: `Error configurando OpenSpec: ${e2.message}`
|
|
1425
|
+
};
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
function installEngram() {
|
|
1429
|
+
if (isCommandAvailable("engram")) {
|
|
1430
|
+
try {
|
|
1431
|
+
execSync("engram setup opencode", { stdio: "pipe", timeout: 30000 });
|
|
1432
|
+
return { success: true, message: "Engram ya instalado y configurado para OpenCode" };
|
|
1433
|
+
} catch (e2) {
|
|
1434
|
+
return {
|
|
1435
|
+
success: false,
|
|
1436
|
+
message: `Error configurando Engram: ${e2.message}`
|
|
1437
|
+
};
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
if (isCommandAvailable("go")) {
|
|
1441
|
+
try {
|
|
1442
|
+
execSync("go install github.com/Gentleman-Programming/engram/cmd/engram@latest", { stdio: "pipe", timeout: 120000 });
|
|
1443
|
+
if (isCommandAvailable("engram")) {
|
|
1444
|
+
execSync("engram setup opencode", { stdio: "pipe", timeout: 30000 });
|
|
1445
|
+
return { success: true, message: "Engram instalado via go install y configurado" };
|
|
1446
|
+
}
|
|
1447
|
+
} catch {}
|
|
1448
|
+
}
|
|
1449
|
+
if (isCommandAvailable("brew") && (process.platform === "darwin" || process.platform === "linux")) {
|
|
1450
|
+
try {
|
|
1451
|
+
execSync("brew install gentleman-programming/tap/engram", {
|
|
1452
|
+
stdio: "pipe",
|
|
1453
|
+
timeout: 120000
|
|
1454
|
+
});
|
|
1455
|
+
if (isCommandAvailable("engram")) {
|
|
1456
|
+
execSync("engram setup opencode", { stdio: "pipe", timeout: 30000 });
|
|
1457
|
+
return { success: true, message: "Engram instalado via Homebrew y configurado" };
|
|
1458
|
+
}
|
|
1459
|
+
} catch {}
|
|
1460
|
+
}
|
|
1461
|
+
return {
|
|
1462
|
+
success: false,
|
|
1463
|
+
message: `No se pudo instalar Engram automáticamente.
|
|
1464
|
+
` + ` - Tenés Go? Ejecutá: go install github.com/Gentleman-Programming/engram/cmd/engram@latest
|
|
1465
|
+
` + ` - O descargá el binario: https://github.com/Gentleman-Programming/engram/releases
|
|
1466
|
+
` + " - Después ejecutá: engram setup opencode"
|
|
1467
|
+
};
|
|
1468
|
+
}
|
|
1469
|
+
function patchOpenCodeConfig() {
|
|
1470
|
+
const projectRoot = findProjectRoot();
|
|
1471
|
+
const candidates = ["opencode.json", "opencode.jsonc"];
|
|
1472
|
+
let configPath = null;
|
|
1473
|
+
for (const name of candidates) {
|
|
1474
|
+
const full = join4(projectRoot, name);
|
|
1475
|
+
if (existsSync3(full)) {
|
|
1476
|
+
configPath = full;
|
|
1477
|
+
break;
|
|
1478
|
+
}
|
|
1479
|
+
}
|
|
1480
|
+
if (!configPath) {
|
|
1481
|
+
return {
|
|
1482
|
+
success: false,
|
|
1483
|
+
message: "No se encontró opencode.json ni opencode.jsonc"
|
|
1484
|
+
};
|
|
1485
|
+
}
|
|
1486
|
+
try {
|
|
1487
|
+
const raw = readFileSync3(configPath, "utf-8");
|
|
1488
|
+
const config = JSON.parse(raw);
|
|
1489
|
+
let changed = false;
|
|
1490
|
+
if ("plugin" in config) {
|
|
1491
|
+
delete config.plugin;
|
|
1492
|
+
changed = true;
|
|
1493
|
+
}
|
|
1494
|
+
if (changed) {
|
|
1495
|
+
writeFileSync3(configPath, JSON.stringify(config, null, 2) + `
|
|
1496
|
+
`, "utf-8");
|
|
1497
|
+
return { success: true, message: "Config actualizada (plugin legacy eliminado)" };
|
|
1498
|
+
}
|
|
1499
|
+
return { success: true, message: "Config de OpenCode ya está limpia" };
|
|
1500
|
+
} catch (e2) {
|
|
1501
|
+
return {
|
|
1502
|
+
success: false,
|
|
1503
|
+
message: `Error parcheando config: ${e2.message}`
|
|
1504
|
+
};
|
|
1505
|
+
}
|
|
1506
|
+
}
|
|
1507
|
+
function uninstallEngramConfig() {
|
|
1508
|
+
const projectRoot = findProjectRoot();
|
|
1509
|
+
const candidates = ["opencode.json", "opencode.jsonc"];
|
|
1510
|
+
let configPath = null;
|
|
1511
|
+
for (const name of candidates) {
|
|
1512
|
+
const full = join4(projectRoot, name);
|
|
1513
|
+
if (existsSync3(full)) {
|
|
1514
|
+
configPath = full;
|
|
1515
|
+
break;
|
|
1516
|
+
}
|
|
1517
|
+
}
|
|
1518
|
+
if (!configPath) {
|
|
1519
|
+
return { success: false, message: "No se encontró opencode.json ni opencode.jsonc" };
|
|
1520
|
+
}
|
|
1521
|
+
try {
|
|
1522
|
+
const raw = readFileSync3(configPath, "utf-8");
|
|
1523
|
+
const config = JSON.parse(raw);
|
|
1524
|
+
let changed = false;
|
|
1525
|
+
if (config.mcp && "engram" in config.mcp) {
|
|
1526
|
+
delete config.mcp.engram;
|
|
1527
|
+
if (Object.keys(config.mcp).length === 0) {
|
|
1528
|
+
delete config.mcp;
|
|
1529
|
+
}
|
|
1530
|
+
changed = true;
|
|
1531
|
+
}
|
|
1532
|
+
if (!changed) {
|
|
1533
|
+
return { success: true, message: "Engram no estaba configurado en este proyecto" };
|
|
1534
|
+
}
|
|
1535
|
+
writeFileSync3(configPath, JSON.stringify(config, null, 2) + `
|
|
1536
|
+
`, "utf-8");
|
|
1537
|
+
return { success: true, message: "Config de Engram eliminada de opencode.json" };
|
|
1538
|
+
} catch (e2) {
|
|
1539
|
+
return {
|
|
1540
|
+
success: false,
|
|
1541
|
+
message: `Error limpiando config de Engram: ${e2.message}`
|
|
1542
|
+
};
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1366
1545
|
|
|
1367
1546
|
// src/prompts.ts
|
|
1368
1547
|
function onCancel(value) {
|
|
@@ -1392,13 +1571,39 @@ async function loadLatestManifest() {
|
|
|
1392
1571
|
function printPostInstallSteps() {
|
|
1393
1572
|
ye([
|
|
1394
1573
|
"Recargá OpenCode",
|
|
1395
|
-
"Ejecutá /install-stack para instalar el stack",
|
|
1396
|
-
"Recargá OpenCode nuevamente",
|
|
1397
1574
|
"Usá @Ostacky para invocar al agente",
|
|
1398
|
-
"Las skills bundleadas viven en .opencode/skills/ — revisá cuáles activás"
|
|
1575
|
+
"Las skills bundleadas viven en .opencode/skills/ — revisá cuáles activás",
|
|
1576
|
+
"Si ves errores en la instalación del stack, ejecutá /install-stack desde OpenCode como referencia"
|
|
1399
1577
|
].join(`
|
|
1400
1578
|
→ `), "Próximos pasos");
|
|
1401
1579
|
}
|
|
1580
|
+
async function doInstallStack() {
|
|
1581
|
+
const spin = L2();
|
|
1582
|
+
let allOk = true;
|
|
1583
|
+
spin.start("Instalando CodeGraph...");
|
|
1584
|
+
const cg = installCodeGraph();
|
|
1585
|
+
spin.stop(cg.success ? `✓ ${cg.message}` : `✗ ${cg.message}`);
|
|
1586
|
+
if (!cg.success)
|
|
1587
|
+
allOk = false;
|
|
1588
|
+
spin.start("Configurando OpenSpec...");
|
|
1589
|
+
const os = setupOpenSpec();
|
|
1590
|
+
spin.stop(os.success ? `✓ ${os.message}` : `✗ ${os.message}`);
|
|
1591
|
+
if (!os.success)
|
|
1592
|
+
allOk = false;
|
|
1593
|
+
spin.start("Instalando Engram...");
|
|
1594
|
+
const eng = installEngram();
|
|
1595
|
+
spin.stop(eng.success ? `✓ ${eng.message}` : `✗ ${eng.message}`);
|
|
1596
|
+
if (!eng.success)
|
|
1597
|
+
allOk = false;
|
|
1598
|
+
spin.start("Verificando configuración...");
|
|
1599
|
+
const cfg = patchOpenCodeConfig();
|
|
1600
|
+
spin.stop(cfg.success ? `✓ ${cfg.message}` : `✗ ${cfg.message}`);
|
|
1601
|
+
if (!cfg.success)
|
|
1602
|
+
allOk = false;
|
|
1603
|
+
if (!allOk) {
|
|
1604
|
+
v2.warn("Algunos componentes requieren atención. Revisá los mensajes de error arriba.");
|
|
1605
|
+
}
|
|
1606
|
+
}
|
|
1402
1607
|
async function resolveOpenCodePaths() {
|
|
1403
1608
|
const existing = findOpenCodeDir();
|
|
1404
1609
|
if (existing) {
|
|
@@ -1494,6 +1699,19 @@ async function doInstallAll(manifest, paths) {
|
|
|
1494
1699
|
errors++;
|
|
1495
1700
|
}
|
|
1496
1701
|
}
|
|
1702
|
+
if (errors === 0) {
|
|
1703
|
+
v2.info("Instalando stack de herramientas...");
|
|
1704
|
+
await doInstallStack();
|
|
1705
|
+
}
|
|
1706
|
+
const missingTools = [];
|
|
1707
|
+
if (!isCommandAvailable("codegraph"))
|
|
1708
|
+
missingTools.push("CodeGraph");
|
|
1709
|
+
if (!isCommandAvailable("engram"))
|
|
1710
|
+
missingTools.push("Engram");
|
|
1711
|
+
if (missingTools.length > 0) {
|
|
1712
|
+
v2.warn(`Faltan herramientas del stack: ${missingTools.join(", ")}.
|
|
1713
|
+
` + "Ejecutá `/install-stack` desde el agente para instalarlas manualmente.");
|
|
1714
|
+
}
|
|
1497
1715
|
if (errors === 0) {
|
|
1498
1716
|
v2.success("Todo instalado correctamente.");
|
|
1499
1717
|
} else {
|
|
@@ -1763,6 +1981,18 @@ async function doUninstallTotal(paths) {
|
|
|
1763
1981
|
}
|
|
1764
1982
|
uninstallAll(paths);
|
|
1765
1983
|
v2.success(`${pathsToDelete.length} item(s) eliminado(s).`);
|
|
1984
|
+
const cleanEngram = await me({
|
|
1985
|
+
message: "¿Deseas remover la configuración de Engram del proyecto (mcp.engram)?"
|
|
1986
|
+
});
|
|
1987
|
+
onCancel(cleanEngram);
|
|
1988
|
+
if (cleanEngram) {
|
|
1989
|
+
const result = uninstallEngramConfig();
|
|
1990
|
+
if (result.success) {
|
|
1991
|
+
v2.success(result.message);
|
|
1992
|
+
} else {
|
|
1993
|
+
v2.warn(result.message);
|
|
1994
|
+
}
|
|
1995
|
+
}
|
|
1766
1996
|
}
|
|
1767
1997
|
async function doUninstallAgent(paths) {
|
|
1768
1998
|
const lockfile = readLockfile(paths.root);
|
|
@@ -2013,8 +2243,8 @@ var HELP = `
|
|
|
2013
2243
|
ostacky — Instalador de agentes, comandos y skills para OpenCode
|
|
2014
2244
|
|
|
2015
2245
|
Uso:
|
|
2016
|
-
npx ostacky Menú interactivo
|
|
2017
|
-
npx ostacky install Instalar
|
|
2246
|
+
npx ostacky Menú interactivo (instalación completa)
|
|
2247
|
+
npx ostacky install Instalar TODO (agente + skills + CodeGraph + OpenSpec + Engram)
|
|
2018
2248
|
npx ostacky add agent Agregar agente(s)
|
|
2019
2249
|
npx ostacky add command Agregar command(s)
|
|
2020
2250
|
npx ostacky add skill Agregar skill(s)
|
package/manifest.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.1.
|
|
2
|
+
"version": "0.1.2",
|
|
3
3
|
"repo": "JaimeHoracio/Ostacky",
|
|
4
|
-
"tag": "v0.1.
|
|
4
|
+
"tag": "v0.1.2",
|
|
5
5
|
"agents": [
|
|
6
6
|
{
|
|
7
7
|
"name": "ostacky",
|
|
8
8
|
"file": "assets/agents/ostacky.md",
|
|
9
9
|
"description": "Agente principal de desarrollo con ejecución inline-first y local-first",
|
|
10
|
-
"version": "0.1.
|
|
10
|
+
"version": "0.1.2",
|
|
11
11
|
"sha256": null
|
|
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",
|
|
19
|
-
"version": "0.1.
|
|
19
|
+
"version": "0.1.2",
|
|
20
20
|
"sha256": null
|
|
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 (wrapper de openspec update)",
|
|
26
|
-
"version": "0.1.
|
|
26
|
+
"version": "0.1.2",
|
|
27
27
|
"sha256": null
|
|
28
28
|
}
|
|
29
29
|
],
|
|
@@ -32,71 +32,71 @@
|
|
|
32
32
|
"name": "brainstorming",
|
|
33
33
|
"file": "assets/skills/brainstorming/SKILL.md",
|
|
34
34
|
"description": "Skill de descubrimiento y exploración (Superpowers)",
|
|
35
|
-
"version": "0.1.
|
|
36
|
-
"sha256": "
|
|
35
|
+
"version": "0.1.2",
|
|
36
|
+
"sha256": "ad15458c54912007ae3f708c698a11f0a4a58e2a7c7860a1ae8874db573c9e98"
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"name": "writing-plans",
|
|
40
40
|
"file": "assets/skills/writing-plans/SKILL.md",
|
|
41
41
|
"description": "Skill de planificación de implementación (Superpowers)",
|
|
42
|
-
"version": "0.1.
|
|
43
|
-
"sha256": "
|
|
42
|
+
"version": "0.1.2",
|
|
43
|
+
"sha256": "4d675df944b9c846e9066ff971861ad1c9673cd2c88375081b00a75872ad621a"
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
"name": "tdd",
|
|
47
47
|
"file": "assets/skills/tdd/SKILL.md",
|
|
48
48
|
"description": "Skill de test-driven development (Superpowers)",
|
|
49
|
-
"version": "0.1.
|
|
50
|
-
"sha256": "
|
|
49
|
+
"version": "0.1.2",
|
|
50
|
+
"sha256": "7eacd8ee81dc5c0b85065c0392e37ee10314661f7edb59dd8e70a9e0dae8f371"
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
"name": "subagent-driven-development",
|
|
54
54
|
"file": "assets/skills/subagent-driven-development/SKILL.md",
|
|
55
55
|
"description": "Skill de ejecución con subagentes (Superpowers)",
|
|
56
|
-
"version": "0.1.
|
|
57
|
-
"sha256": "
|
|
56
|
+
"version": "0.1.2",
|
|
57
|
+
"sha256": "14e0f685b1dc1d7e02b7226d18f037fe4b6cba49b512a1fadf67cfad2a9dcc96"
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
"name": "dispatching-parallel-agents",
|
|
61
61
|
"file": "assets/skills/dispatching-parallel-agents/SKILL.md",
|
|
62
62
|
"description": "Skill de dispatch paralelo de agentes (Superpowers)",
|
|
63
|
-
"version": "0.1.
|
|
64
|
-
"sha256": "
|
|
63
|
+
"version": "0.1.2",
|
|
64
|
+
"sha256": "281edf0c38f358497c7e2066fa8217a2ba3e2a39b4205c4af0c41d328fc035a1"
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
67
|
"name": "review",
|
|
68
68
|
"file": "assets/skills/review/SKILL.md",
|
|
69
69
|
"description": "Skill de revisión de código (Superpowers)",
|
|
70
|
-
"version": "0.1.
|
|
71
|
-
"sha256": "
|
|
70
|
+
"version": "0.1.2",
|
|
71
|
+
"sha256": "c78d3beff45e9bb6b5e9e1d7155910f379e082d7aaf3c61b90d651d09e0d2e2a"
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
74
|
"name": "openspec-explore",
|
|
75
75
|
"file": "assets/skills/openspec-explore/SKILL.md",
|
|
76
76
|
"description": "Skill de exploración pre-spec (OpenSpec)",
|
|
77
|
-
"version": "0.1.
|
|
78
|
-
"sha256": "
|
|
77
|
+
"version": "0.1.2",
|
|
78
|
+
"sha256": "1c75cab8672c2eb8b12f27a0b31f0b7fdb73c21c72583c1e8a566e09fe4108a6"
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
81
|
"name": "openspec-propose",
|
|
82
82
|
"file": "assets/skills/openspec-propose/SKILL.md",
|
|
83
83
|
"description": "Skill de generación de proposal (OpenSpec)",
|
|
84
|
-
"version": "0.1.
|
|
85
|
-
"sha256": "
|
|
84
|
+
"version": "0.1.2",
|
|
85
|
+
"sha256": "ab88e9aa22db09559ccf7987d08adc0469b7c6fbe46498e63a3b64926f19e66b"
|
|
86
86
|
},
|
|
87
87
|
{
|
|
88
88
|
"name": "openspec-apply-change",
|
|
89
89
|
"file": "assets/skills/openspec-apply-change/SKILL.md",
|
|
90
90
|
"description": "Skill de aplicación de change (OpenSpec)",
|
|
91
|
-
"version": "0.1.
|
|
92
|
-
"sha256": "
|
|
91
|
+
"version": "0.1.2",
|
|
92
|
+
"sha256": "847c2f88a66e8d5946c1fec422a5367c89eca5340839b659bbaaeb6f0bdac487"
|
|
93
93
|
},
|
|
94
94
|
{
|
|
95
95
|
"name": "openspec-archive-change",
|
|
96
96
|
"file": "assets/skills/openspec-archive-change/SKILL.md",
|
|
97
97
|
"description": "Skill de archivo de change (OpenSpec)",
|
|
98
|
-
"version": "0.1.
|
|
99
|
-
"sha256": "
|
|
98
|
+
"version": "0.1.2",
|
|
99
|
+
"sha256": "3d35905ec40a081b8fd77b144426e540c67b1f50cc5801b655313a4fdfaa087a"
|
|
100
100
|
}
|
|
101
101
|
]
|
|
102
102
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ostacky",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Instalador interactivo de agentes y comandos para OpenCode",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"license": "MIT",
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@clack/prompts": "^0.9.0",
|
|
31
|
-
"settings": "^0.1.
|
|
31
|
+
"settings": "^0.1.2"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/bun": "latest",
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: brainstorming
|
|
3
|
-
description: Discovery and exploration of user intent, requirements, and design
|
|
4
|
-
source: github.com/obra/superpowers
|
|
5
|
-
ref: main
|
|
6
|
-
status: placeholder
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# brainstorming (placeholder)
|
|
10
|
-
|
|
11
|
-
**Status:** placeholder. Real content must be fetched from upstream via `ostacky sync` (maintainer command).
|
|
12
|
-
|
|
13
|
-
**Source:** github.com/obra/superpowers @ `ref: main`
|
|
14
|
-
**Original path in upstream:** `skills/brainstorming/SKILL.md` (or equivalent — adjust per repo)
|
|
15
|
-
|
|
16
|
-
## What this skill does
|
|
17
|
-
|
|
18
|
-
This file is a placeholder so the bundled installer can copy a complete directory
|
|
19
|
-
structure into `.opencode/skills/brainstorming/`. The CLI hashes the directory tree and
|
|
20
|
-
records the hash in the lockfile. Replacing this placeholder with the real
|
|
21
|
-
upstream content is a maintainer task, not an end-user task.
|
|
22
|
-
|
|
23
|
-
## For end users
|
|
24
|
-
|
|
25
|
-
If you ran `ostacky install` and see this file in your `.opencode/skills/brainstorming/`,
|
|
26
|
-
your installation is working as designed. The curated set is intentionally small.
|
|
27
|
-
To get the real skill content, ask the Ostacky maintainer to refresh the bundle.
|
|
28
|
-
|
|
29
|
-
## For maintainers
|
|
30
|
-
|
|
31
|
-
To populate this placeholder with the real upstream content:
|
|
32
|
-
|
|
33
|
-
1. `git clone --depth=1 https://github.com/github.com/obra/superpowers.git`
|
|
34
|
-
2. Copy `skills/brainstorming/SKILL.md` (and `scripts/`, `references/` if present) to this directory
|
|
35
|
-
3. Update `manifest.json` with the computed tree hash for this skill
|
|
36
|
-
4. Bump version, `npm publish`
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: dispatching-parallel-agents
|
|
3
|
-
description: Run multiple independent tasks in parallel via subagents
|
|
4
|
-
source: github.com/obra/superpowers
|
|
5
|
-
ref: main
|
|
6
|
-
status: placeholder
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# dispatching-parallel-agents (placeholder)
|
|
10
|
-
|
|
11
|
-
**Status:** placeholder. Real content must be fetched from upstream via `ostacky sync` (maintainer command).
|
|
12
|
-
|
|
13
|
-
**Source:** github.com/obra/superpowers @ `ref: main`
|
|
14
|
-
**Original path in upstream:** `skills/dispatching-parallel-agents/SKILL.md` (or equivalent — adjust per repo)
|
|
15
|
-
|
|
16
|
-
## What this skill does
|
|
17
|
-
|
|
18
|
-
This file is a placeholder so the bundled installer can copy a complete directory
|
|
19
|
-
structure into `.opencode/skills/dispatching-parallel-agents/`. The CLI hashes the directory tree and
|
|
20
|
-
records the hash in the lockfile. Replacing this placeholder with the real
|
|
21
|
-
upstream content is a maintainer task, not an end-user task.
|
|
22
|
-
|
|
23
|
-
## For end users
|
|
24
|
-
|
|
25
|
-
If you ran `ostacky install` and see this file in your `.opencode/skills/dispatching-parallel-agents/`,
|
|
26
|
-
your installation is working as designed. The curated set is intentionally small.
|
|
27
|
-
To get the real skill content, ask the Ostacky maintainer to refresh the bundle.
|
|
28
|
-
|
|
29
|
-
## For maintainers
|
|
30
|
-
|
|
31
|
-
To populate this placeholder with the real upstream content:
|
|
32
|
-
|
|
33
|
-
1. `git clone --depth=1 https://github.com/github.com/obra/superpowers.git`
|
|
34
|
-
2. Copy `skills/dispatching-parallel-agents/SKILL.md` (and `scripts/`, `references/` if present) to this directory
|
|
35
|
-
3. Update `manifest.json` with the computed tree hash for this skill
|
|
36
|
-
4. Bump version, `npm publish`
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: openspec-apply-change
|
|
3
|
-
description: Implement tasks from an OpenSpec change
|
|
4
|
-
source: github.com/Fission-AI/OpenSpec
|
|
5
|
-
ref: main
|
|
6
|
-
status: placeholder
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# openspec-apply-change (placeholder)
|
|
10
|
-
|
|
11
|
-
**Status:** placeholder. Real content must be fetched from upstream via `ostacky sync` (maintainer command).
|
|
12
|
-
|
|
13
|
-
**Source:** github.com/Fission-AI/OpenSpec @ `ref: main`
|
|
14
|
-
**Original path in upstream:** `skills/openspec-apply-change/SKILL.md` (or equivalent — adjust per repo)
|
|
15
|
-
|
|
16
|
-
## What this skill does
|
|
17
|
-
|
|
18
|
-
This file is a placeholder so the bundled installer can copy a complete directory
|
|
19
|
-
structure into `.opencode/skills/openspec-apply-change/`. The CLI hashes the directory tree and
|
|
20
|
-
records the hash in the lockfile. Replacing this placeholder with the real
|
|
21
|
-
upstream content is a maintainer task, not an end-user task.
|
|
22
|
-
|
|
23
|
-
## For end users
|
|
24
|
-
|
|
25
|
-
If you ran `ostacky install` and see this file in your `.opencode/skills/openspec-apply-change/`,
|
|
26
|
-
your installation is working as designed. The curated set is intentionally small.
|
|
27
|
-
To get the real skill content, ask the Ostacky maintainer to refresh the bundle.
|
|
28
|
-
|
|
29
|
-
## For maintainers
|
|
30
|
-
|
|
31
|
-
To populate this placeholder with the real upstream content:
|
|
32
|
-
|
|
33
|
-
1. `git clone --depth=1 https://github.com/github.com/Fission-AI/OpenSpec.git`
|
|
34
|
-
2. Copy `skills/openspec-apply-change/SKILL.md` (and `scripts/`, `references/` if present) to this directory
|
|
35
|
-
3. Update `manifest.json` with the computed tree hash for this skill
|
|
36
|
-
4. Bump version, `npm publish`
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: openspec-archive-change
|
|
3
|
-
description: Archive a completed change in the experimental workflow
|
|
4
|
-
source: github.com/Fission-AI/OpenSpec
|
|
5
|
-
ref: main
|
|
6
|
-
status: placeholder
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# openspec-archive-change (placeholder)
|
|
10
|
-
|
|
11
|
-
**Status:** placeholder. Real content must be fetched from upstream via `ostacky sync` (maintainer command).
|
|
12
|
-
|
|
13
|
-
**Source:** github.com/Fission-AI/OpenSpec @ `ref: main`
|
|
14
|
-
**Original path in upstream:** `skills/openspec-archive-change/SKILL.md` (or equivalent — adjust per repo)
|
|
15
|
-
|
|
16
|
-
## What this skill does
|
|
17
|
-
|
|
18
|
-
This file is a placeholder so the bundled installer can copy a complete directory
|
|
19
|
-
structure into `.opencode/skills/openspec-archive-change/`. The CLI hashes the directory tree and
|
|
20
|
-
records the hash in the lockfile. Replacing this placeholder with the real
|
|
21
|
-
upstream content is a maintainer task, not an end-user task.
|
|
22
|
-
|
|
23
|
-
## For end users
|
|
24
|
-
|
|
25
|
-
If you ran `ostacky install` and see this file in your `.opencode/skills/openspec-archive-change/`,
|
|
26
|
-
your installation is working as designed. The curated set is intentionally small.
|
|
27
|
-
To get the real skill content, ask the Ostacky maintainer to refresh the bundle.
|
|
28
|
-
|
|
29
|
-
## For maintainers
|
|
30
|
-
|
|
31
|
-
To populate this placeholder with the real upstream content:
|
|
32
|
-
|
|
33
|
-
1. `git clone --depth=1 https://github.com/github.com/Fission-AI/OpenSpec.git`
|
|
34
|
-
2. Copy `skills/openspec-archive-change/SKILL.md` (and `scripts/`, `references/` if present) to this directory
|
|
35
|
-
3. Update `manifest.json` with the computed tree hash for this skill
|
|
36
|
-
4. Bump version, `npm publish`
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: openspec-explore
|
|
3
|
-
description: Enter explore mode to think through ideas before committing to a change
|
|
4
|
-
source: github.com/Fission-AI/OpenSpec
|
|
5
|
-
ref: main
|
|
6
|
-
status: placeholder
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# openspec-explore (placeholder)
|
|
10
|
-
|
|
11
|
-
**Status:** placeholder. Real content must be fetched from upstream via `ostacky sync` (maintainer command).
|
|
12
|
-
|
|
13
|
-
**Source:** github.com/Fission-AI/OpenSpec @ `ref: main`
|
|
14
|
-
**Original path in upstream:** `skills/openspec-explore/SKILL.md` (or equivalent — adjust per repo)
|
|
15
|
-
|
|
16
|
-
## What this skill does
|
|
17
|
-
|
|
18
|
-
This file is a placeholder so the bundled installer can copy a complete directory
|
|
19
|
-
structure into `.opencode/skills/openspec-explore/`. The CLI hashes the directory tree and
|
|
20
|
-
records the hash in the lockfile. Replacing this placeholder with the real
|
|
21
|
-
upstream content is a maintainer task, not an end-user task.
|
|
22
|
-
|
|
23
|
-
## For end users
|
|
24
|
-
|
|
25
|
-
If you ran `ostacky install` and see this file in your `.opencode/skills/openspec-explore/`,
|
|
26
|
-
your installation is working as designed. The curated set is intentionally small.
|
|
27
|
-
To get the real skill content, ask the Ostacky maintainer to refresh the bundle.
|
|
28
|
-
|
|
29
|
-
## For maintainers
|
|
30
|
-
|
|
31
|
-
To populate this placeholder with the real upstream content:
|
|
32
|
-
|
|
33
|
-
1. `git clone --depth=1 https://github.com/github.com/Fission-AI/OpenSpec.git`
|
|
34
|
-
2. Copy `skills/openspec-explore/SKILL.md` (and `scripts/`, `references/` if present) to this directory
|
|
35
|
-
3. Update `manifest.json` with the computed tree hash for this skill
|
|
36
|
-
4. Bump version, `npm publish`
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: openspec-propose
|
|
3
|
-
description: Create a change proposal with all artifacts (proposal, design, tasks)
|
|
4
|
-
source: github.com/Fission-AI/OpenSpec
|
|
5
|
-
ref: main
|
|
6
|
-
status: placeholder
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# openspec-propose (placeholder)
|
|
10
|
-
|
|
11
|
-
**Status:** placeholder. Real content must be fetched from upstream via `ostacky sync` (maintainer command).
|
|
12
|
-
|
|
13
|
-
**Source:** github.com/Fission-AI/OpenSpec @ `ref: main`
|
|
14
|
-
**Original path in upstream:** `skills/openspec-propose/SKILL.md` (or equivalent — adjust per repo)
|
|
15
|
-
|
|
16
|
-
## What this skill does
|
|
17
|
-
|
|
18
|
-
This file is a placeholder so the bundled installer can copy a complete directory
|
|
19
|
-
structure into `.opencode/skills/openspec-propose/`. The CLI hashes the directory tree and
|
|
20
|
-
records the hash in the lockfile. Replacing this placeholder with the real
|
|
21
|
-
upstream content is a maintainer task, not an end-user task.
|
|
22
|
-
|
|
23
|
-
## For end users
|
|
24
|
-
|
|
25
|
-
If you ran `ostacky install` and see this file in your `.opencode/skills/openspec-propose/`,
|
|
26
|
-
your installation is working as designed. The curated set is intentionally small.
|
|
27
|
-
To get the real skill content, ask the Ostacky maintainer to refresh the bundle.
|
|
28
|
-
|
|
29
|
-
## For maintainers
|
|
30
|
-
|
|
31
|
-
To populate this placeholder with the real upstream content:
|
|
32
|
-
|
|
33
|
-
1. `git clone --depth=1 https://github.com/github.com/Fission-AI/OpenSpec.git`
|
|
34
|
-
2. Copy `skills/openspec-propose/SKILL.md` (and `scripts/`, `references/` if present) to this directory
|
|
35
|
-
3. Update `manifest.json` with the computed tree hash for this skill
|
|
36
|
-
4. Bump version, `npm publish`
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: review
|
|
3
|
-
description: Review code changes for security, performance, bugs, and quality
|
|
4
|
-
source: github.com/obra/superpowers
|
|
5
|
-
ref: main
|
|
6
|
-
status: placeholder
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# review (placeholder)
|
|
10
|
-
|
|
11
|
-
**Status:** placeholder. Real content must be fetched from upstream via `ostacky sync` (maintainer command).
|
|
12
|
-
|
|
13
|
-
**Source:** github.com/obra/superpowers @ `ref: main`
|
|
14
|
-
**Original path in upstream:** `skills/review/SKILL.md` (or equivalent — adjust per repo)
|
|
15
|
-
|
|
16
|
-
## What this skill does
|
|
17
|
-
|
|
18
|
-
This file is a placeholder so the bundled installer can copy a complete directory
|
|
19
|
-
structure into `.opencode/skills/review/`. The CLI hashes the directory tree and
|
|
20
|
-
records the hash in the lockfile. Replacing this placeholder with the real
|
|
21
|
-
upstream content is a maintainer task, not an end-user task.
|
|
22
|
-
|
|
23
|
-
## For end users
|
|
24
|
-
|
|
25
|
-
If you ran `ostacky install` and see this file in your `.opencode/skills/review/`,
|
|
26
|
-
your installation is working as designed. The curated set is intentionally small.
|
|
27
|
-
To get the real skill content, ask the Ostacky maintainer to refresh the bundle.
|
|
28
|
-
|
|
29
|
-
## For maintainers
|
|
30
|
-
|
|
31
|
-
To populate this placeholder with the real upstream content:
|
|
32
|
-
|
|
33
|
-
1. `git clone --depth=1 https://github.com/github.com/obra/superpowers.git`
|
|
34
|
-
2. Copy `skills/review/SKILL.md` (and `scripts/`, `references/` if present) to this directory
|
|
35
|
-
3. Update `manifest.json` with the computed tree hash for this skill
|
|
36
|
-
4. Bump version, `npm publish`
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: subagent-driven-development
|
|
3
|
-
description: Execute an implementation plan by delegating to specialized subagents
|
|
4
|
-
source: github.com/obra/superpowers
|
|
5
|
-
ref: main
|
|
6
|
-
status: placeholder
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# subagent-driven-development (placeholder)
|
|
10
|
-
|
|
11
|
-
**Status:** placeholder. Real content must be fetched from upstream via `ostacky sync` (maintainer command).
|
|
12
|
-
|
|
13
|
-
**Source:** github.com/obra/superpowers @ `ref: main`
|
|
14
|
-
**Original path in upstream:** `skills/subagent-driven-development/SKILL.md` (or equivalent — adjust per repo)
|
|
15
|
-
|
|
16
|
-
## What this skill does
|
|
17
|
-
|
|
18
|
-
This file is a placeholder so the bundled installer can copy a complete directory
|
|
19
|
-
structure into `.opencode/skills/subagent-driven-development/`. The CLI hashes the directory tree and
|
|
20
|
-
records the hash in the lockfile. Replacing this placeholder with the real
|
|
21
|
-
upstream content is a maintainer task, not an end-user task.
|
|
22
|
-
|
|
23
|
-
## For end users
|
|
24
|
-
|
|
25
|
-
If you ran `ostacky install` and see this file in your `.opencode/skills/subagent-driven-development/`,
|
|
26
|
-
your installation is working as designed. The curated set is intentionally small.
|
|
27
|
-
To get the real skill content, ask the Ostacky maintainer to refresh the bundle.
|
|
28
|
-
|
|
29
|
-
## For maintainers
|
|
30
|
-
|
|
31
|
-
To populate this placeholder with the real upstream content:
|
|
32
|
-
|
|
33
|
-
1. `git clone --depth=1 https://github.com/github.com/obra/superpowers.git`
|
|
34
|
-
2. Copy `skills/subagent-driven-development/SKILL.md` (and `scripts/`, `references/` if present) to this directory
|
|
35
|
-
3. Update `manifest.json` with the computed tree hash for this skill
|
|
36
|
-
4. Bump version, `npm publish`
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: tdd
|
|
3
|
-
description: Test-driven development: failing test, minimal implementation, refactor
|
|
4
|
-
source: github.com/obra/superpowers
|
|
5
|
-
ref: main
|
|
6
|
-
status: placeholder
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# tdd (placeholder)
|
|
10
|
-
|
|
11
|
-
**Status:** placeholder. Real content must be fetched from upstream via `ostacky sync` (maintainer command).
|
|
12
|
-
|
|
13
|
-
**Source:** github.com/obra/superpowers @ `ref: main`
|
|
14
|
-
**Original path in upstream:** `skills/tdd/SKILL.md` (or equivalent — adjust per repo)
|
|
15
|
-
|
|
16
|
-
## What this skill does
|
|
17
|
-
|
|
18
|
-
This file is a placeholder so the bundled installer can copy a complete directory
|
|
19
|
-
structure into `.opencode/skills/tdd/`. The CLI hashes the directory tree and
|
|
20
|
-
records the hash in the lockfile. Replacing this placeholder with the real
|
|
21
|
-
upstream content is a maintainer task, not an end-user task.
|
|
22
|
-
|
|
23
|
-
## For end users
|
|
24
|
-
|
|
25
|
-
If you ran `ostacky install` and see this file in your `.opencode/skills/tdd/`,
|
|
26
|
-
your installation is working as designed. The curated set is intentionally small.
|
|
27
|
-
To get the real skill content, ask the Ostacky maintainer to refresh the bundle.
|
|
28
|
-
|
|
29
|
-
## For maintainers
|
|
30
|
-
|
|
31
|
-
To populate this placeholder with the real upstream content:
|
|
32
|
-
|
|
33
|
-
1. `git clone --depth=1 https://github.com/github.com/obra/superpowers.git`
|
|
34
|
-
2. Copy `skills/tdd/SKILL.md` (and `scripts/`, `references/` if present) to this directory
|
|
35
|
-
3. Update `manifest.json` with the computed tree hash for this skill
|
|
36
|
-
4. Bump version, `npm publish`
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: writing-plans
|
|
3
|
-
description: Break a spec or requirements into a multi-step implementation plan
|
|
4
|
-
source: github.com/obra/superpowers
|
|
5
|
-
ref: main
|
|
6
|
-
status: placeholder
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# writing-plans (placeholder)
|
|
10
|
-
|
|
11
|
-
**Status:** placeholder. Real content must be fetched from upstream via `ostacky sync` (maintainer command).
|
|
12
|
-
|
|
13
|
-
**Source:** github.com/obra/superpowers @ `ref: main`
|
|
14
|
-
**Original path in upstream:** `skills/writing-plans/SKILL.md` (or equivalent — adjust per repo)
|
|
15
|
-
|
|
16
|
-
## What this skill does
|
|
17
|
-
|
|
18
|
-
This file is a placeholder so the bundled installer can copy a complete directory
|
|
19
|
-
structure into `.opencode/skills/writing-plans/`. The CLI hashes the directory tree and
|
|
20
|
-
records the hash in the lockfile. Replacing this placeholder with the real
|
|
21
|
-
upstream content is a maintainer task, not an end-user task.
|
|
22
|
-
|
|
23
|
-
## For end users
|
|
24
|
-
|
|
25
|
-
If you ran `ostacky install` and see this file in your `.opencode/skills/writing-plans/`,
|
|
26
|
-
your installation is working as designed. The curated set is intentionally small.
|
|
27
|
-
To get the real skill content, ask the Ostacky maintainer to refresh the bundle.
|
|
28
|
-
|
|
29
|
-
## For maintainers
|
|
30
|
-
|
|
31
|
-
To populate this placeholder with the real upstream content:
|
|
32
|
-
|
|
33
|
-
1. `git clone --depth=1 https://github.com/github.com/obra/superpowers.git`
|
|
34
|
-
2. Copy `skills/writing-plans/SKILL.md` (and `scripts/`, `references/` if present) to this directory
|
|
35
|
-
3. Update `manifest.json` with the computed tree hash for this skill
|
|
36
|
-
4. Bump version, `npm publish`
|