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.
- package/bin/cli.js +19 -14
- package/install.sh +1 -1
- 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 ·
|
|
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
|
-
|
|
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)
|
|
271
|
-
|
|
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:
|
|
409
|
-
//
|
|
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: '
|
|
463
|
-
{ value: 'global', label: '
|
|
464
|
-
{ value: 'both', label: 'Both',
|
|
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(
|
|
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: '
|
|
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 ·
|
|
57
|
+
color '1;35' ' Agent Skills · That Startup Founders Love'; printf '\n\n'
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
usage() {
|
package/package.json
CHANGED