spectoflow 0.16.0 → 0.16.2

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 (2) hide show
  1. package/bin/spectoflow.js +37 -9
  2. package/package.json +1 -1
package/bin/spectoflow.js CHANGED
@@ -23,14 +23,42 @@ const paint = (code) => (s) => (useColor ? `\x1b[${code}m${s}\x1b[0m` : String(s
23
23
  const c = { g: paint('32'), cy: paint('36'), b: paint('34'), y: paint('33'), dim: paint('2'), bold: paint('1'), amber: paint('38;5;179') };
24
24
 
25
25
  // ---- branding ---------------------------------------------------------------
26
+ // The spectoflow mark in ASCII: a flat-top hexagon around the angular "S" (flow), rasterized to fit
27
+ // a terminal. Shown at the reading moments (init / help / list); secondary outputs use brandLine().
26
28
  const LOGO = [
27
- '┌─┐┌─┐┌─┐┌─┐┌┬┐┌─┐┌─┐┬ ┌─┐┬ ┬',
28
- '└─┐├─┘├┤ │ │ │ │├┤ │ │ ││││',
29
- '└─┘┴ └─┘└─┘ ┴ └─┘┴ ┴─┘└─┘└┴┘',
29
+ ' ########',
30
+ ' ###### #######',
31
+ ' ####### ######',
32
+ ' ###### ######',
33
+ ' ###### #### ######',
34
+ ' ##### ###### ####',
35
+ ' ### ###### ####',
36
+ ' ### ##### ####',
37
+ ' ### #### ## ####',
38
+ ' ### #### ######### ####',
39
+ ' ### #### ####### ##### ####',
40
+ ' ### ######## ### ####',
41
+ ' ### ## ### ####',
42
+ ' ### #### ####',
43
+ ' ### ###### ####',
44
+ ' ### ###### ####',
45
+ ' #### ###### ####',
46
+ ' ###### ### ######',
47
+ ' ###### ######',
48
+ ' ###### ######',
49
+ ' ###### ######',
50
+ ' ##########',
51
+ ' ####',
30
52
  ];
53
+ const LOGO_W = 41; // widest logo line, for centering the wordmark under it
54
+ const NAME = 's p e c t o f l o w';
31
55
  const TAGLINE = 'agent-agnostic spec-driven development · real-time control plane';
32
- // Full logo block — for init and help (the moments a human is reading, not scripting).
33
- const banner = () => `\n${LOGO.map((l) => ' ' + c.amber(l)).join('\n')}\n ${c.dim('v' + VERSION + ' · ' + TAGLINE)}\n`;
56
+ // Full logo block — hexagon mark + centered wordmark + version. For init, help and list.
57
+ function logo() {
58
+ const art = LOGO.map((l) => ' ' + c.amber(l)).join('\n');
59
+ const pad = ' '.repeat(Math.max(0, Math.round((2 + LOGO_W - NAME.length) / 2)));
60
+ return `\n${art}\n\n${pad}${c.bold(c.amber(NAME))}\n ${c.dim('v' + VERSION + ' · ' + TAGLINE)}\n`;
61
+ }
34
62
  // One-line brand — for the header of secondary command outputs.
35
63
  const brandLine = () => `${c.amber('spectoflow')} ${c.dim('v' + VERSION)}`;
36
64
 
@@ -208,7 +236,7 @@ function init() {
208
236
  if (!giText.includes(line)) fs.appendFileSync(gi, ((fs.existsSync(gi) && fs.readFileSync(gi, 'utf8').length) ? '\n' : '') + line + '\n');
209
237
  }
210
238
 
211
- console.log(banner());
239
+ console.log(logo());
212
240
  console.log(`${c.g('✓')} installed in ${c.bold(target)}`);
213
241
  console.log(` ${c.dim('.spectoflow/')} framework — brain, workflow, agents, skills, policy, dashboard, config`);
214
242
  console.log(` ${c.dim('specs/ plans/')} markdown artifacts (your source of truth)`);
@@ -238,7 +266,7 @@ function update() {
238
266
  const detail = note ? c.dim(note) : c.dim(list.slice(0, 6).join(', ') + (list.length > 6 ? ` +${list.length - 6} more` : ''));
239
267
  console.log(` ${sym} ${painter(label.padEnd(9))} ${n} ${detail}`);
240
268
  };
241
- console.log(banner());
269
+ console.log('');
242
270
  console.log(` ${c.bold('spectoflow update')} ${c.dim(from)} ${c.amber('→')} ${c.bold(r.toVersion)}${dryRun ? c.dim(' (dry-run)') : ''}`);
243
271
  console.log('');
244
272
  row(c.g('✓'), 'refreshed', r.refreshed, c.g);
@@ -375,7 +403,7 @@ function printWorkflow(withBrand = true) {
375
403
  }
376
404
  function listAll() {
377
405
  const { scope } = frameworkSource();
378
- console.log(banner());
406
+ console.log(logo());
379
407
  console.log(`${c.bold('Agents')} ${c.dim('— stable team personas (' + scope + ')')}`);
380
408
  printAgents(false);
381
409
  console.log(`\n${c.bold('Skills')} ${c.dim('— evolving procedures')}`);
@@ -386,7 +414,7 @@ function listAll() {
386
414
  }
387
415
 
388
416
  // ---- help (global + per-command) --------------------------------------------
389
- const help = () => console.log(`${banner()}
417
+ const help = () => console.log(`${logo()}
390
418
  ${c.dim('Usage:')} spectoflow ${c.g('<command>')} ${c.dim('[options]')} ${c.dim('· append -h to any command for its help')}
391
419
 
392
420
  ${c.bold('Project')}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spectoflow",
3
- "version": "0.16.0",
3
+ "version": "0.16.2",
4
4
  "description": "Agent-agnostic spec-driven development framework + real-time local control plane. Markdown artifacts, intent router, workflow-by-scope.",
5
5
  "keywords": [
6
6
  "spec-driven-development",