bigpowers 2.83.3 → 2.83.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/.pi/package.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [2.83.4](https://github.com/danielvm-git/bigpowers/compare/v2.83.3...v2.83.4) (2026-07-24)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **install:** keep spinner animating via async sync-skills call ([a4c2193](https://github.com/danielvm-git/bigpowers/commit/a4c21937b0caa4602177c2a5c186d96510ec15f3))
|
|
7
|
+
|
|
1
8
|
## [2.83.3](https://github.com/danielvm-git/bigpowers/compare/v2.83.2...v2.83.3) (2026-07-24)
|
|
2
9
|
|
|
3
10
|
|
package/bin/setup.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// bigpowers setup — interactive installer
|
|
5
5
|
// Combines GSD simplicity with BMAD visual polish.
|
|
6
6
|
|
|
7
|
-
const { execSync } = require('child_process');
|
|
7
|
+
const { execSync, spawn } = require('child_process');
|
|
8
8
|
const fs = require('fs');
|
|
9
9
|
const path = require('path');
|
|
10
10
|
const { installGlobal, installLocal, uninstallTool, detectExistingInstall } = require('../scripts/lib/install-helpers');
|
|
@@ -76,6 +76,23 @@ function runInherited(cmd) {
|
|
|
76
76
|
execSync(cmd, { cwd: ROOT, stdio: 'inherit' });
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
+
// Async counterpart of runInherited: keeps the event loop free so a clack
|
|
80
|
+
// spinner's setInterval can keep animating while the child process runs.
|
|
81
|
+
// Output is captured (not inherited) so it can't collide with the spinner's
|
|
82
|
+
// own redraw; on failure the caller gets it back to show the user.
|
|
83
|
+
function runInheritedAsync(cmd) {
|
|
84
|
+
return new Promise((resolve, reject) => {
|
|
85
|
+
const child = spawn(cmd, { cwd: ROOT, shell: true });
|
|
86
|
+
let output = '';
|
|
87
|
+
child.stdout.on('data', (d) => (output += d));
|
|
88
|
+
child.stderr.on('data', (d) => (output += d));
|
|
89
|
+
child.on('close', (code) => {
|
|
90
|
+
if (code === 0) resolve(output);
|
|
91
|
+
else reject(new Error(output || `${cmd} exited with code ${code}`));
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
79
96
|
|
|
80
97
|
|
|
81
98
|
// ── Uninstall flow ──────────────────────────────────────────────────────────
|
|
@@ -250,14 +267,17 @@ async function main() {
|
|
|
250
267
|
await sleep(100);
|
|
251
268
|
}
|
|
252
269
|
|
|
253
|
-
s.
|
|
270
|
+
s.message('Syncing skills...');
|
|
254
271
|
try {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
272
|
+
const output = await runInheritedAsync('bash scripts/sync-skills.sh --distribute-only');
|
|
273
|
+
const summary = output.trim().split('\n').find((l) => l.includes('skills synced'));
|
|
274
|
+
if (summary) s.message(summary.trim());
|
|
275
|
+
} catch (err) {
|
|
276
|
+
s.stop('Sync failed.', 1);
|
|
277
|
+
console.error(err.message);
|
|
258
278
|
process.exit(1);
|
|
259
279
|
}
|
|
260
|
-
s.
|
|
280
|
+
s.message('Installing to selected tools...');
|
|
261
281
|
|
|
262
282
|
const results = [];
|
|
263
283
|
for (const toolId of selectedTools) {
|
package/package.json
CHANGED
|
Binary file
|
|
@@ -20,6 +20,9 @@ grep -q -- '--distribute-only' "$SYNC_SH" && pass 'sync-skills.sh: --distribute-
|
|
|
20
20
|
|| fail 'sync-skills.sh: missing --distribute-only flag'
|
|
21
21
|
grep -q "sync-skills.sh --distribute-only" "$SETUP_JS" && pass 'setup.js: invokes sync-skills.sh with --distribute-only' \
|
|
22
22
|
|| fail 'setup.js: does not pass --distribute-only'
|
|
23
|
+
grep -q "runInheritedAsync('bash scripts/sync-skills.sh --distribute-only')" "$SETUP_JS" \
|
|
24
|
+
&& pass 'setup.js: sync-skills call is async (spinner can animate)' \
|
|
25
|
+
|| fail 'setup.js: sync-skills call reverted to blocking runInherited (spinner would freeze)'
|
|
23
26
|
|
|
24
27
|
hash_of() { [[ -f "$1" ]] && shasum -a 256 "$1" | awk '{print $1}' || echo "absent"; }
|
|
25
28
|
listing_of() { [[ -d "$1" ]] && (find "$1" -maxdepth 1 -type f | sort) || echo "absent"; }
|