spirewise 1.9.1 → 1.9.3

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.
Files changed (3) hide show
  1. package/bin/cli.js +19 -14
  2. package/install.sh +1 -1
  3. package/package.json +1 -1
package/bin/cli.js CHANGED
@@ -56,7 +56,7 @@ const BANNER = [
56
56
  function banner() {
57
57
  console.log('');
58
58
  for (const line of BANNER) console.log(paint(RAW.cyan, line));
59
- console.log(paint(RAW.magenta, ` Agent Skills · F6S & LinkedIn copywriting${PKG_VERSION ? ' · v' + PKG_VERSION : ''}`));
59
+ console.log(paint(RAW.magenta, ` Agent Skills · That Startup Founders Love ${PKG_VERSION ? ' · v' + PKG_VERSION : ''}`));
60
60
  console.log('');
61
61
  }
62
62
 
@@ -251,11 +251,12 @@ function interactiveSelect({ title, subtitle, items, multi = true, preselected =
251
251
  : '↑/↓ move enter confirm';
252
252
 
253
253
  const lines = [];
254
- lines.push(rail());
255
254
  lines.push(`${paint(RAW.cyan, G.step)} ${paint(RAW.bold, `${num} - ${title}`)}`);
255
+ lines.push(rail()); // space under the header
256
256
  if (subtitle) lines.push(railLn(paint(RAW.dim, subtitle)));
257
257
  lines.push(railLn(paint(RAW.dim, nav)));
258
- if (items.length > PAGE) lines.push(railLn(paint(RAW.dim, start > 0 ? '↑ more' : ' ')));
258
+ lines.push(rail()); // space before the list
259
+ if (items.length > PAGE && start > 0) lines.push(railLn(paint(RAW.dim, '↑ more')));
259
260
  for (let i = start; i < end; i++) {
260
261
  const it = items[i];
261
262
  const on = i === index;
@@ -267,15 +268,19 @@ function interactiveSelect({ title, subtitle, items, multi = true, preselected =
267
268
  const hint = it.hint ? paint(RAW.dim, ' ' + it.hint) : '';
268
269
  lines.push(`${rail()} ${ptr} ${mark} ${label}${hint}`);
269
270
  }
270
- if (items.length > PAGE) lines.push(railLn(paint(RAW.dim, `${end < items.length ? '↓ more' : ' '} ${index + 1}/${items.length}`)));
271
- lines.push(rail());
271
+ if (items.length > PAGE) {
272
+ lines.push(rail()); // space between the list and "↓ more"
273
+ lines.push(railLn(paint(RAW.dim, `${end < items.length ? '↓ more' : ' '} ${index + 1}/${items.length}`)));
274
+ }
275
+ lines.push(rail()); // trailing space below the step
272
276
 
273
277
  if (lastLines > 0) stdout.write(`\x1b[${lastLines}A`);
274
278
  stdout.write('\x1b[0J' + lines.join('\n') + '\n');
275
279
  lastLines = lines.length;
276
280
  }
277
281
 
278
- // Replace the live frame with a compact, persisted transcript line.
282
+ // Replace the live frame with a compact, persisted transcript line — followed
283
+ // by a blank rail line so completed steps are spaced one line apart.
279
284
  function persist() {
280
285
  const summary = multi
281
286
  ? (() => { const l = items.filter((_, i) => selected.has(i)).map((it) => it.label);
@@ -284,6 +289,7 @@ function interactiveSelect({ title, subtitle, items, multi = true, preselected =
284
289
  const out = [
285
290
  `${paint(RAW.green, G.done)} ${paint(RAW.bold, `${num} - ${title}`)}`,
286
291
  railLn(paint(RAW.cyan, summary)),
292
+ rail(),
287
293
  ];
288
294
  if (lastLines > 0) stdout.write(`\x1b[${lastLines}A`);
289
295
  stdout.write('\x1b[0J' + out.join('\n') + '\n');
@@ -405,14 +411,13 @@ async function main() {
405
411
  const Ving = action === 'remove' ? 'Removing' : 'Installing';
406
412
  banner();
407
413
 
408
- // Clack-style flow frame: opens with ◆, each step hangs off the │ rail, and the
409
- // run closes with └. Only drawn when we actually show interactive steps.
414
+ // Clack-style flow frame: each step hangs off the │ rail and the run closes with
415
+ // └. Only drawn when we actually show interactive steps.
410
416
  let framed = false;
411
417
  const ensureIntro = () => {
412
418
  if (framed || !tty) return;
413
419
  framed = true;
414
420
  console.log('');
415
- console.log(`${paint(RAW.cyan, G.open)} ${paint(RAW.bold, action === 'remove' ? 'Remove skills' : 'Install skills')}`);
416
421
  };
417
422
 
418
423
  // 1) SKILLS
@@ -459,9 +464,9 @@ async function main() {
459
464
  title: 'Choose Where', step: 3,
460
465
  subtitle: action === 'remove' ? 'Where to remove them from?' : 'Where should they go?',
461
466
  items: [
462
- { value: 'project', label: 'This project', hint: 'just this folder' },
463
- { value: 'global', label: 'Everywhere', hint: 'all your projects' },
464
- { value: 'both', label: 'Both', hint: 'this project + everywhere' },
467
+ { value: 'project', label: 'Workspace', hint: 'just this folder' },
468
+ { value: 'global', label: 'Global', hint: 'all your projects' },
469
+ { value: 'both', label: 'Both', hint: 'workspace + global' },
465
470
  ],
466
471
  multi: false, preselected: [],
467
472
  });
@@ -471,10 +476,10 @@ async function main() {
471
476
  const scopes = scope === 'both' ? ['project', 'global'] : [scope];
472
477
 
473
478
  // ACTION
474
- if (framed) console.log(railLn());
479
+ if (!framed) console.log(''); // framed mode already ends with a │ rail line from the last step
475
480
 
476
481
  const pl = (n, w) => `${n} ${w}${n === 1 ? '' : 's'}`;
477
- const where = { project: 'this project', global: 'everywhere', both: 'this project + everywhere' }[scope];
482
+ const where = { project: 'workspace', global: 'global', both: 'workspace + global' }[scope];
478
483
  const lead = framed ? `${rail()} ` : ' '; // hang progress/result off the rail
479
484
  const end = framed ? `${paint(RAW.cyan, G.close)} ` : ' ';
480
485
 
package/install.sh CHANGED
@@ -54,7 +54,7 @@ banner() {
54
54
  color '1;36' ' ╚════██║██╔═══╝ ██║██╔══██╗██╔══╝ ██║███╗██║██║╚════██║██╔══╝ '; printf '\n'
55
55
  color '1;36' ' ███████║██║ ██║██║ ██║███████╗╚███╔███╔╝██║███████║███████╗'; printf '\n'
56
56
  color '1;36' ' ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝ ╚═╝╚══════╝╚══════╝'; printf '\n'
57
- color '1;35' ' Agent Skills · F6S & LinkedIn copywriting'; printf '\n\n'
57
+ color '1;35' ' Agent Skills · That Startup Founders Love'; printf '\n\n'
58
58
  }
59
59
 
60
60
  usage() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spirewise",
3
- "version": "1.9.1",
3
+ "version": "1.9.3",
4
4
  "description": "Installable Agent Skills for GitHub Copilot, Claude Code, and Cursor — copywriting (F6S & LinkedIn) and NVIDIA Inception tooling.",
5
5
  "bin": {
6
6
  "spirewise": "bin/cli.js"