spirewise 1.9.2 → 1.9.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.
Files changed (3) hide show
  1. package/bin/cli.js +15 -8
  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
 
@@ -225,7 +225,7 @@ const live = (s) => { if (IS_TTY) process.stdout.write('\r\x1b[2K' + s); };
225
225
  const liveEnd = (s) => { if (IS_TTY) process.stdout.write('\r\x1b[2K' + s + '\n'); else console.log(s); };
226
226
 
227
227
  // --- Interactive prompt (Clack / Appwrite style) ---------------------------
228
- function interactiveSelect({ title, subtitle, items, multi = true, preselected = [], pageSize = 6, step = 1 }) {
228
+ function interactiveSelect({ title, subtitle, items, multi = true, preselected = [], pageSize = 5, step = 1 }) {
229
229
  return new Promise((resolve) => {
230
230
  const stdin = process.stdin, stdout = process.stdout;
231
231
  if (!stdin.isTTY) { resolve(null); return; }
@@ -251,11 +251,11 @@ 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
259
  for (let i = start; i < end; i++) {
260
260
  const it = items[i];
261
261
  const on = i === index;
@@ -267,15 +267,21 @@ function interactiveSelect({ title, subtitle, items, multi = true, preselected =
267
267
  const hint = it.hint ? paint(RAW.dim, ' ' + it.hint) : '';
268
268
  lines.push(`${rail()} ${ptr} ${mark} ${label}${hint}`);
269
269
  }
270
- if (items.length > PAGE) lines.push(railLn(paint(RAW.dim, `${end < items.length ? '↓ more' : ' '} ${index + 1}/${items.length}`)));
271
- lines.push(rail());
270
+ if (items.length > PAGE) {
271
+ lines.push(rail()); // space below the list
272
+ const atEnd = end >= items.length;
273
+ const note = atEnd ? 'end of list · move up' : '↓ more · move up / down';
274
+ lines.push(railLn(paint(RAW.dim, `${note} ${index + 1}/${items.length}`)));
275
+ }
276
+ lines.push(rail()); // trailing space below the step
272
277
 
273
278
  if (lastLines > 0) stdout.write(`\x1b[${lastLines}A`);
274
279
  stdout.write('\x1b[0J' + lines.join('\n') + '\n');
275
280
  lastLines = lines.length;
276
281
  }
277
282
 
278
- // Replace the live frame with a compact, persisted transcript line.
283
+ // Replace the live frame with a compact, persisted transcript line — followed
284
+ // by a blank rail line so completed steps are spaced one line apart.
279
285
  function persist() {
280
286
  const summary = multi
281
287
  ? (() => { const l = items.filter((_, i) => selected.has(i)).map((it) => it.label);
@@ -284,6 +290,7 @@ function interactiveSelect({ title, subtitle, items, multi = true, preselected =
284
290
  const out = [
285
291
  `${paint(RAW.green, G.done)} ${paint(RAW.bold, `${num} - ${title}`)}`,
286
292
  railLn(paint(RAW.cyan, summary)),
293
+ rail(),
287
294
  ];
288
295
  if (lastLines > 0) stdout.write(`\x1b[${lastLines}A`);
289
296
  stdout.write('\x1b[0J' + out.join('\n') + '\n');
@@ -470,7 +477,7 @@ async function main() {
470
477
  const scopes = scope === 'both' ? ['project', 'global'] : [scope];
471
478
 
472
479
  // ACTION
473
- if (framed) console.log(railLn());
480
+ if (!framed) console.log(''); // framed mode already ends with a │ rail line from the last step
474
481
 
475
482
  const pl = (n, w) => `${n} ${w}${n === 1 ? '' : 's'}`;
476
483
  const where = { project: 'workspace', global: 'global', both: 'workspace + global' }[scope];
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.2",
3
+ "version": "1.9.4",
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"