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