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.
- package/bin/spectoflow.js +37 -9
- 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 —
|
|
33
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(`${
|
|
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.
|
|
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",
|