bigpowers 2.83.2 → 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,17 @@
|
|
|
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
|
+
|
|
8
|
+
## [2.83.3](https://github.com/danielvm-git/bigpowers/compare/v2.83.2...v2.83.3) (2026-07-24)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **install:** stop spinner cleanly instead of freezing on sync ([f3589d9](https://github.com/danielvm-git/bigpowers/commit/f3589d9d97f843211f147b30223cdfa3b85483ae))
|
|
14
|
+
|
|
1
15
|
## [2.83.2](https://github.com/danielvm-git/bigpowers/compare/v2.83.1...v2.83.2) (2026-07-24)
|
|
2
16
|
|
|
3
17
|
|
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 ──────────────────────────────────────────────────────────
|
|
@@ -252,11 +269,15 @@ async function main() {
|
|
|
252
269
|
|
|
253
270
|
s.message('Syncing skills...');
|
|
254
271
|
try {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
s.
|
|
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
|
}
|
|
280
|
+
s.message('Installing to selected tools...');
|
|
260
281
|
|
|
261
282
|
const results = [];
|
|
262
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"; }
|