spectoflow 0.16.0 → 0.16.1

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 +31 -9
  2. package/package.json +1 -1
package/bin/spectoflow.js CHANGED
@@ -23,14 +23,36 @@ 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
+ ' ###########################',
30
46
  ];
47
+ const LOGO_W = 41; // widest logo line, for centering the wordmark under it
48
+ const NAME = 's p e c t o f l o w';
31
49
  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`;
50
+ // Full logo block — hexagon mark + centered wordmark + version. For init, help and list.
51
+ function logo() {
52
+ const art = LOGO.map((l) => ' ' + c.amber(l)).join('\n');
53
+ const pad = ' '.repeat(Math.max(0, Math.round((2 + LOGO_W - NAME.length) / 2)));
54
+ return `\n${art}\n\n${pad}${c.bold(c.amber(NAME))}\n ${c.dim('v' + VERSION + ' · ' + TAGLINE)}\n`;
55
+ }
34
56
  // One-line brand — for the header of secondary command outputs.
35
57
  const brandLine = () => `${c.amber('spectoflow')} ${c.dim('v' + VERSION)}`;
36
58
 
@@ -208,7 +230,7 @@ function init() {
208
230
  if (!giText.includes(line)) fs.appendFileSync(gi, ((fs.existsSync(gi) && fs.readFileSync(gi, 'utf8').length) ? '\n' : '') + line + '\n');
209
231
  }
210
232
 
211
- console.log(banner());
233
+ console.log(logo());
212
234
  console.log(`${c.g('✓')} installed in ${c.bold(target)}`);
213
235
  console.log(` ${c.dim('.spectoflow/')} framework — brain, workflow, agents, skills, policy, dashboard, config`);
214
236
  console.log(` ${c.dim('specs/ plans/')} markdown artifacts (your source of truth)`);
@@ -238,7 +260,7 @@ function update() {
238
260
  const detail = note ? c.dim(note) : c.dim(list.slice(0, 6).join(', ') + (list.length > 6 ? ` +${list.length - 6} more` : ''));
239
261
  console.log(` ${sym} ${painter(label.padEnd(9))} ${n} ${detail}`);
240
262
  };
241
- console.log(banner());
263
+ console.log('');
242
264
  console.log(` ${c.bold('spectoflow update')} ${c.dim(from)} ${c.amber('→')} ${c.bold(r.toVersion)}${dryRun ? c.dim(' (dry-run)') : ''}`);
243
265
  console.log('');
244
266
  row(c.g('✓'), 'refreshed', r.refreshed, c.g);
@@ -375,7 +397,7 @@ function printWorkflow(withBrand = true) {
375
397
  }
376
398
  function listAll() {
377
399
  const { scope } = frameworkSource();
378
- console.log(banner());
400
+ console.log(logo());
379
401
  console.log(`${c.bold('Agents')} ${c.dim('— stable team personas (' + scope + ')')}`);
380
402
  printAgents(false);
381
403
  console.log(`\n${c.bold('Skills')} ${c.dim('— evolving procedures')}`);
@@ -386,7 +408,7 @@ function listAll() {
386
408
  }
387
409
 
388
410
  // ---- help (global + per-command) --------------------------------------------
389
- const help = () => console.log(`${banner()}
411
+ const help = () => console.log(`${logo()}
390
412
  ${c.dim('Usage:')} spectoflow ${c.g('<command>')} ${c.dim('[options]')} ${c.dim('· append -h to any command for its help')}
391
413
 
392
414
  ${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.1",
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",