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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.83.3",
3
+ "version": "2.83.4",
4
4
  "description": "80 skills — 73 agent skills synthesizing 17 years of software engineering discipline into a prescriptive methodology for solo developers",
5
5
  "keywords": [
6
6
  "pi-package"
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.stop('Syncing skills...');
270
+ s.message('Syncing skills...');
254
271
  try {
255
- runInherited('bash scripts/sync-skills.sh --distribute-only');
256
- } catch {
257
- console.error(c.red('Sync failed.'));
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.start('Installing to selected tools...');
280
+ s.message('Installing to selected tools...');
261
281
 
262
282
  const results = [];
263
283
  for (const toolId of selectedTools) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.83.3",
3
+ "version": "2.83.4",
4
4
  "description": "73 agent skills synthesizing 17 years of software engineering discipline into a prescriptive methodology for solo developers",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -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"; }