@theihtisham/agent-shadow-brain 6.0.2 → 6.2.0

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 (74) hide show
  1. package/CHANGELOG.md +372 -0
  2. package/README.md +330 -358
  3. package/dist/brain/auto-update.js +1 -1
  4. package/dist/brain/brain-bus.d.ts +40 -0
  5. package/dist/brain/brain-bus.d.ts.map +1 -0
  6. package/dist/brain/brain-bus.js +94 -0
  7. package/dist/brain/brain-bus.js.map +1 -0
  8. package/dist/brain/brain-portability.js +3 -3
  9. package/dist/brain/brain-portability.js.map +1 -1
  10. package/dist/brain/collision-detective.d.ts.map +1 -1
  11. package/dist/brain/collision-detective.js +16 -0
  12. package/dist/brain/collision-detective.js.map +1 -1
  13. package/dist/brain/context-continuity.d.ts +78 -0
  14. package/dist/brain/context-continuity.d.ts.map +1 -0
  15. package/dist/brain/context-continuity.js +341 -0
  16. package/dist/brain/context-continuity.js.map +1 -0
  17. package/dist/brain/dream-engine.d.ts.map +1 -1
  18. package/dist/brain/dream-engine.js +12 -0
  19. package/dist/brain/dream-engine.js.map +1 -1
  20. package/dist/brain/forgetting-curve.d.ts.map +1 -1
  21. package/dist/brain/forgetting-curve.js +19 -0
  22. package/dist/brain/forgetting-curve.js.map +1 -1
  23. package/dist/brain/global-brain.d.ts +4 -0
  24. package/dist/brain/global-brain.d.ts.map +1 -1
  25. package/dist/brain/global-brain.js +61 -9
  26. package/dist/brain/global-brain.js.map +1 -1
  27. package/dist/brain/live-brain.d.ts +119 -0
  28. package/dist/brain/live-brain.d.ts.map +1 -0
  29. package/dist/brain/live-brain.js +405 -0
  30. package/dist/brain/live-brain.js.map +1 -0
  31. package/dist/brain/mcp-server.d.ts +4 -0
  32. package/dist/brain/mcp-server.d.ts.map +1 -1
  33. package/dist/brain/mcp-server.js +81 -5
  34. package/dist/brain/mcp-server.js.map +1 -1
  35. package/dist/brain/memory-graph.d.ts +51 -0
  36. package/dist/brain/memory-graph.d.ts.map +1 -0
  37. package/dist/brain/memory-graph.js +267 -0
  38. package/dist/brain/memory-graph.js.map +1 -0
  39. package/dist/brain/memory-seeder.d.ts +78 -0
  40. package/dist/brain/memory-seeder.d.ts.map +1 -0
  41. package/dist/brain/memory-seeder.js +349 -0
  42. package/dist/brain/memory-seeder.js.map +1 -0
  43. package/dist/brain/orchestrator.js +1 -1
  44. package/dist/brain/subagent-bridge.d.ts.map +1 -1
  45. package/dist/brain/subagent-bridge.js +12 -0
  46. package/dist/brain/subagent-bridge.js.map +1 -1
  47. package/dist/brain/token-economy.d.ts +2 -0
  48. package/dist/brain/token-economy.d.ts.map +1 -1
  49. package/dist/brain/token-economy.js +80 -24
  50. package/dist/brain/token-economy.js.map +1 -1
  51. package/dist/cli.js +240 -31
  52. package/dist/cli.js.map +1 -1
  53. package/dist/dashboard/server.d.ts +24 -0
  54. package/dist/dashboard/server.d.ts.map +1 -1
  55. package/dist/dashboard/server.js +524 -7
  56. package/dist/dashboard/server.js.map +1 -1
  57. package/dist/dashboard/v6-dashboard-html.d.ts +1 -1
  58. package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -1
  59. package/dist/dashboard/v6-dashboard-html.js +2070 -213
  60. package/dist/dashboard/v6-dashboard-html.js.map +1 -1
  61. package/dist/index.d.ts +4 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +4 -0
  64. package/dist/index.js.map +1 -1
  65. package/dist/types.d.ts +17 -12
  66. package/dist/types.d.ts.map +1 -1
  67. package/docs/launch/README.md +61 -0
  68. package/docs/launch/RELEASE_CHECKLIST_v6.0.3.md +102 -0
  69. package/docs/launch/RELEASE_NOTES_v6.0.3.md +111 -0
  70. package/docs/launch/RELEASE_NOTES_v6.1.0.md +38 -0
  71. package/docs/launch/RELEASE_NOTES_v6.2.0.md +54 -0
  72. package/package.json +18 -4
  73. package/tools/export-resume-pack.mjs +56 -0
  74. package/tools/record-global-memory.mjs +72 -0
@@ -8,8 +8,35 @@ import * as fs from 'fs';
8
8
  import * as path from 'path';
9
9
  import * as os from 'os';
10
10
  import * as crypto from 'crypto';
11
- const SPEND_PATH = path.join(os.homedir(), '.shadow-brain', 'token-spend.jsonl');
12
- const STATS_PATH = path.join(os.homedir(), '.shadow-brain', 'token-economy.json');
11
+ function brainHomeDir() {
12
+ return process.env.SHADOW_BRAIN_HOME || process.env.HOME || os.homedir();
13
+ }
14
+ function spendPath() {
15
+ return path.join(brainHomeDir(), '.shadow-brain', 'token-spend.jsonl');
16
+ }
17
+ function statsPath() {
18
+ return path.join(brainHomeDir(), '.shadow-brain', 'token-economy.json');
19
+ }
20
+ function emptyBucket() {
21
+ return { spendUsd: 0, calls: 0, inputTokens: 0, outputTokens: 0 };
22
+ }
23
+ function addSpendBucket(target, key, record) {
24
+ const bucket = target[key] ?? emptyBucket();
25
+ bucket.spendUsd += record.estimatedCostUsd;
26
+ bucket.calls++;
27
+ bucket.inputTokens = (bucket.inputTokens ?? 0) + record.inputTokens;
28
+ bucket.outputTokens = (bucket.outputTokens ?? 0) + record.outputTokens;
29
+ if (!bucket.lastSeen || record.timestamp.getTime() > new Date(bucket.lastSeen).getTime()) {
30
+ bucket.lastSeen = record.timestamp;
31
+ }
32
+ target[key] = bucket;
33
+ }
34
+ function roundBuckets(buckets) {
35
+ for (const bucket of Object.values(buckets)) {
36
+ bucket.spendUsd = +bucket.spendUsd.toFixed(6);
37
+ }
38
+ return buckets;
39
+ }
13
40
  // Per-1M-tokens USD pricing (rough, for projection only)
14
41
  const MODEL_PRICING = {
15
42
  'claude-opus-4-7': { input: 15, output: 75 },
@@ -33,24 +60,28 @@ export class TokenEconomy {
33
60
  async init() {
34
61
  if (this.initialized)
35
62
  return;
36
- fs.mkdirSync(path.dirname(SPEND_PATH), { recursive: true });
37
- if (fs.existsSync(SPEND_PATH)) {
63
+ const spendFile = spendPath();
64
+ const statsFile = statsPath();
65
+ fs.mkdirSync(path.dirname(spendFile), { recursive: true });
66
+ if (fs.existsSync(spendFile)) {
38
67
  try {
39
- const raw = fs.readFileSync(SPEND_PATH, 'utf-8');
68
+ const raw = fs.readFileSync(spendFile, 'utf-8');
40
69
  for (const line of raw.split('\n')) {
41
70
  if (!line.trim())
42
71
  continue;
43
72
  const r = JSON.parse(line);
44
- this.records.push({ ...r, timestamp: new Date(r.timestamp) });
73
+ if (this.isValidRecord(r)) {
74
+ this.records.push({ ...r, timestamp: new Date(r.timestamp) });
75
+ }
45
76
  }
46
77
  }
47
78
  catch {
48
79
  /* skip */
49
80
  }
50
81
  }
51
- if (fs.existsSync(STATS_PATH)) {
82
+ if (fs.existsSync(statsFile)) {
52
83
  try {
53
- const parsed = JSON.parse(fs.readFileSync(STATS_PATH, 'utf-8'));
84
+ const parsed = JSON.parse(fs.readFileSync(statsFile, 'utf-8'));
54
85
  this.savingsOpportunitiesUsd = parsed.savingsOpportunitiesUsd ?? 0;
55
86
  }
56
87
  catch {
@@ -69,6 +100,7 @@ export class TokenEconomy {
69
100
  id: `spend-${crypto.randomBytes(6).toString('hex')}`,
70
101
  agentTool: input.agentTool,
71
102
  model,
103
+ provider: input.provider,
72
104
  inputTokens: input.inputTokens,
73
105
  outputTokens: input.outputTokens,
74
106
  estimatedCostUsd: +cost.toFixed(6),
@@ -77,7 +109,7 @@ export class TokenEconomy {
77
109
  };
78
110
  this.records.push(record);
79
111
  try {
80
- fs.appendFileSync(SPEND_PATH, JSON.stringify(record) + '\n');
112
+ fs.appendFileSync(spendPath(), JSON.stringify(record) + '\n');
81
113
  }
82
114
  catch {
83
115
  /* non-fatal */
@@ -90,25 +122,32 @@ export class TokenEconomy {
90
122
  const byAgent = {};
91
123
  const byModel = {};
92
124
  const byCategory = {};
125
+ const recentByAgent = {};
126
+ const recentByModel = {};
127
+ const recentByCategory = {};
93
128
  let totalSpend = 0;
94
129
  let totalInput = 0;
95
130
  let totalOutput = 0;
131
+ let lastRecord = null;
132
+ const recentWindowDays = 7;
133
+ const weekAgo = Date.now() - recentWindowDays * 24 * 60 * 60 * 1000;
96
134
  for (const r of this.records) {
97
135
  totalSpend += r.estimatedCostUsd;
98
136
  totalInput += r.inputTokens;
99
137
  totalOutput += r.outputTokens;
100
- byAgent[r.agentTool] = byAgent[r.agentTool] ?? { spendUsd: 0, calls: 0 };
101
- byAgent[r.agentTool].spendUsd += r.estimatedCostUsd;
102
- byAgent[r.agentTool].calls++;
103
- byModel[r.model] = byModel[r.model] ?? { spendUsd: 0, calls: 0 };
104
- byModel[r.model].spendUsd += r.estimatedCostUsd;
105
- byModel[r.model].calls++;
106
- byCategory[r.taskCategory] = byCategory[r.taskCategory] ?? { spendUsd: 0, calls: 0 };
107
- byCategory[r.taskCategory].spendUsd += r.estimatedCostUsd;
108
- byCategory[r.taskCategory].calls++;
138
+ if (!lastRecord || r.timestamp.getTime() > lastRecord.timestamp.getTime()) {
139
+ lastRecord = r;
140
+ }
141
+ addSpendBucket(byAgent, r.agentTool, r);
142
+ addSpendBucket(byModel, r.model, r);
143
+ addSpendBucket(byCategory, r.taskCategory, r);
144
+ if (r.timestamp.getTime() >= weekAgo) {
145
+ addSpendBucket(recentByAgent, r.agentTool, r);
146
+ addSpendBucket(recentByModel, r.model, r);
147
+ addSpendBucket(recentByCategory, r.taskCategory, r);
148
+ }
109
149
  }
110
150
  // Project monthly spend from last 7 days
111
- const weekAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;
112
151
  const recent = this.records.filter(r => r.timestamp.getTime() >= weekAgo);
113
152
  const weeklySpend = recent.reduce((acc, r) => acc + r.estimatedCostUsd, 0);
114
153
  const monthlyProjectionUsd = +(weeklySpend * (30 / 7)).toFixed(2);
@@ -119,9 +158,15 @@ export class TokenEconomy {
119
158
  totalSpendUsd: +totalSpend.toFixed(4),
120
159
  totalInputTokens: totalInput,
121
160
  totalOutputTokens: totalOutput,
122
- byAgent,
123
- byModel,
124
- byCategory,
161
+ byAgent: roundBuckets(byAgent),
162
+ byModel: roundBuckets(byModel),
163
+ byCategory: roundBuckets(byCategory),
164
+ recentWindowDays,
165
+ recentSpendUsd: +weeklySpend.toFixed(4),
166
+ recentByAgent: roundBuckets(recentByAgent),
167
+ recentByModel: roundBuckets(recentByModel),
168
+ recentByCategory: roundBuckets(recentByCategory),
169
+ lastRecord,
125
170
  monthlyProjectionUsd,
126
171
  savingsOpportunitiesUsd: +savings.toFixed(2),
127
172
  suggestions,
@@ -195,14 +240,25 @@ export class TokenEconomy {
195
240
  savingsOpportunitiesUsd: savings,
196
241
  lastRecalculated: new Date().toISOString(),
197
242
  };
198
- const tmp = STATS_PATH + '.tmp';
243
+ const file = statsPath();
244
+ fs.mkdirSync(path.dirname(file), { recursive: true });
245
+ const tmp = file + '.tmp';
199
246
  fs.writeFileSync(tmp, JSON.stringify(shape, null, 2));
200
- fs.renameSync(tmp, STATS_PATH);
247
+ fs.renameSync(tmp, file);
201
248
  }
202
249
  catch {
203
250
  /* non-fatal */
204
251
  }
205
252
  }
253
+ isValidRecord(record) {
254
+ return Boolean(record &&
255
+ typeof record.agentTool === 'string' &&
256
+ typeof record.model === 'string' &&
257
+ Number.isFinite(record.inputTokens) &&
258
+ Number.isFinite(record.outputTokens) &&
259
+ Number.isFinite(record.estimatedCostUsd) &&
260
+ record.timestamp);
261
+ }
206
262
  }
207
263
  let _instance = null;
208
264
  export function getTokenEconomy() {
@@ -1 +1 @@
1
- {"version":3,"file":"token-economy.js","sourceRoot":"","sources":["../../src/brain/token-economy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-economy.js","sourceRoot":"","sources":["../../src/brain/token-economy.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -8,7 +8,7 @@ import * as path from 'path';
8
8
  import * as os from 'os';
9
9
  import { Orchestrator } from './brain/orchestrator.js';
10
10
  import { detectRunningAgents, createAdapter } from './adapters/index.js';
11
- const VERSION = '6.0.2';
11
+ const VERSION = '6.2.0';
12
12
  const config = new Conf({
13
13
  projectName: 'shadow-brain',
14
14
  defaults: {
@@ -24,13 +24,16 @@ const config = new Conf({
24
24
  });
25
25
  function mergeConfig(cliOpts) {
26
26
  const saved = config.store;
27
+ const watchMode = cliOpts.watchMode === false || cliOpts.watch === false
28
+ ? false
29
+ : saved.watchMode !== false;
27
30
  return {
28
31
  provider: (cliOpts.provider || saved.provider || 'ollama'),
29
32
  apiKey: cliOpts.apiKey || saved.apiKey,
30
33
  model: cliOpts.model || saved.model,
31
34
  agents: (cliOpts.agents?.split(',') || saved.agents || ['claude-code']),
32
35
  projectDir: cliOpts.projectDir || cliOpts.args?.[0] || saved.projectDir || process.cwd(),
33
- watchMode: cliOpts.watch !== false && (saved.watchMode !== false),
36
+ watchMode,
34
37
  autoInject: cliOpts.inject !== false && (saved.autoInject !== false),
35
38
  reviewDepth: (cliOpts.depth || saved.reviewDepth || 'standard'),
36
39
  brainPersonality: (cliOpts.personality || saved.brainPersonality || 'balanced'),
@@ -625,6 +628,8 @@ const dashCmd = new Command('dash')
625
628
  .option('--depth <depth>', 'Review depth (quick|standard|deep)')
626
629
  .option('--agents <agents>', 'Comma-separated list of agents to watch')
627
630
  .option('--port <port>', 'Dashboard port', '7341')
631
+ .option('--host <host>', 'Dashboard bind host', '127.0.0.1')
632
+ .option('--no-analysis', 'Start only the dashboard UI/API without background project analysis')
628
633
  .option('--no-open', 'Do not open browser automatically')
629
634
  .action(async (projectDir, opts) => {
630
635
  const brainConfig = mergeConfig({ ...opts, projectDir });
@@ -666,7 +671,17 @@ const dashCmd = new Command('dash')
666
671
  }
667
672
  catch { /* ignore */ }
668
673
  }
669
- await orchestrator.start();
674
+ if (opts.analysis !== false) {
675
+ setTimeout(() => {
676
+ orchestrator.start().catch((err) => {
677
+ console.error(chalk.red(' Background analysis error:'), err?.message || String(err));
678
+ });
679
+ }, 250);
680
+ }
681
+ else {
682
+ console.log(chalk.dim(' Background analysis disabled; dashboard UI/API only.\n'));
683
+ }
684
+ await new Promise(() => { });
670
685
  }
671
686
  catch (err) {
672
687
  console.error(chalk.red(' Error:'), err.message);
@@ -2442,7 +2457,7 @@ const v5Cmd = new Command('v5')
2442
2457
  const program = new Command();
2443
2458
  program
2444
2459
  .name('shadow-brain')
2445
- .description('Shadow Brain v5.2.0 — cross-agent memory and safety layer for Codex, Claude Code, Cursor, Copilot, Cline, Windsurf, and MCP tools')
2460
+ .description('Shadow Brain v6.0.3 - local cross-agent memory, live brain health, resume context, and safety controls')
2446
2461
  .version(VERSION);
2447
2462
  program.addCommand(startCmd);
2448
2463
  program.addCommand(reviewCmd);
@@ -3048,17 +3063,22 @@ const globalBrainCmd = new Command('global')
3048
3063
  .action(async () => {
3049
3064
  const { getGlobalBrain } = await import('./brain/global-brain.js');
3050
3065
  const brain = getGlobalBrain();
3051
- await brain.init();
3052
- const s = brain.getStats();
3053
- console.log(chalk.magenta.bold(`\n SHADOW BRAIN v${VERSION} — Global Brain`));
3054
- console.log(` Projects: ${chalk.cyan(s.totalProjects)}`);
3055
- console.log(` Agents: ${chalk.cyan(s.totalAgents)}`);
3056
- console.log(` Entries: ${chalk.cyan(s.totalEntries)}`);
3057
- console.log(` Size: ${chalk.cyan(s.totalSizeMB.toFixed(2) + ' MB')}`);
3058
- console.log(` Hit rate: ${chalk.cyan((s.hitRate * 100).toFixed(1) + '%')} (${s.hits}/${s.hits + s.misses})`);
3059
- console.log(` Pending: ${chalk.cyan(s.pendingWrites)}`);
3060
- console.log(` Uptime: ${chalk.cyan(Math.round(s.uptime / 1000) + 's')}`);
3061
- console.log(` Last sync: ${chalk.dim(s.lastSync.toISOString())}`);
3066
+ try {
3067
+ await brain.init();
3068
+ const s = brain.getStats();
3069
+ console.log(chalk.magenta.bold(`\n SHADOW BRAIN v${VERSION} — Global Brain`));
3070
+ console.log(` Projects: ${chalk.cyan(s.totalProjects)}`);
3071
+ console.log(` Agents: ${chalk.cyan(s.totalAgents)}`);
3072
+ console.log(` Entries: ${chalk.cyan(s.totalEntries)}`);
3073
+ console.log(` Size: ${chalk.cyan(s.totalSizeMB.toFixed(2) + ' MB')}`);
3074
+ console.log(` Hit rate: ${chalk.cyan((s.hitRate * 100).toFixed(1) + '%')} (${s.hits}/${s.hits + s.misses})`);
3075
+ console.log(` Pending: ${chalk.cyan(s.pendingWrites)}`);
3076
+ console.log(` Uptime: ${chalk.cyan(Math.round(s.uptime / 1000) + 's')}`);
3077
+ console.log(` Last sync: ${chalk.dim(s.lastSync.toISOString())}`);
3078
+ }
3079
+ finally {
3080
+ await brain.shutdown();
3081
+ }
3062
3082
  }))
3063
3083
  .addCommand(new Command('recall')
3064
3084
  .description('Recall entries from the global brain — works across projects + agents')
@@ -3070,20 +3090,25 @@ const globalBrainCmd = new Command('global')
3070
3090
  .action(async (opts) => {
3071
3091
  const { getGlobalBrain } = await import('./brain/global-brain.js');
3072
3092
  const brain = getGlobalBrain();
3073
- await brain.init();
3074
- const results = brain.recall({
3075
- keywords: opts.query ? opts.query.split(/\s+/) : undefined,
3076
- agentTool: opts.agent,
3077
- category: opts.category,
3078
- limit: parseInt(opts.limit, 10),
3079
- });
3080
- if (opts.json) {
3081
- console.log(JSON.stringify(results, null, 2));
3082
- return;
3093
+ try {
3094
+ await brain.init();
3095
+ const results = brain.recall({
3096
+ keywords: opts.query ? opts.query.split(/\s+/) : undefined,
3097
+ agentTool: opts.agent,
3098
+ category: opts.category,
3099
+ limit: parseInt(opts.limit, 10),
3100
+ });
3101
+ if (opts.json) {
3102
+ console.log(JSON.stringify(results, null, 2));
3103
+ return;
3104
+ }
3105
+ console.log(chalk.magenta.bold(`\n SHADOW BRAIN v${VERSION} — Global Recall (${results.length})`));
3106
+ for (const r of results) {
3107
+ console.log(` ${chalk.cyan('[' + r.agentTool + ']')} ${chalk.dim(r.category)} ${chalk.white(r.content.slice(0, 100))}`);
3108
+ }
3083
3109
  }
3084
- console.log(chalk.magenta.bold(`\n SHADOW BRAIN v${VERSION} — Global Recall (${results.length})`));
3085
- for (const r of results) {
3086
- console.log(` ${chalk.cyan('[' + r.agentTool + ']')} ${chalk.dim(r.category)} ${chalk.white(r.content.slice(0, 100))}`);
3110
+ finally {
3111
+ await brain.shutdown();
3087
3112
  }
3088
3113
  }))
3089
3114
  .addCommand(new Command('cache')
@@ -3101,9 +3126,14 @@ const globalBrainCmd = new Command('global')
3101
3126
  .action(async () => {
3102
3127
  const { getGlobalBrain } = await import('./brain/global-brain.js');
3103
3128
  const brain = getGlobalBrain();
3104
- await brain.init();
3105
- await brain.sync();
3106
- console.log(chalk.green(' ✓ Synced to disk.'));
3129
+ try {
3130
+ await brain.init();
3131
+ await brain.sync();
3132
+ console.log(chalk.green(' ✓ Synced to disk.'));
3133
+ }
3134
+ finally {
3135
+ await brain.shutdown();
3136
+ }
3107
3137
  }));
3108
3138
  const detachAllCmd = new Command('detach-all')
3109
3139
  .description('Remove Shadow Brain hooks from every detected AI agent without creating new hooks')
@@ -3215,6 +3245,183 @@ const handoffCmd = new Command('handoff')
3215
3245
  await brain.shutdown();
3216
3246
  }
3217
3247
  });
3248
+ const resumeSeedCmd = new Command('resume-seed')
3249
+ .description('Generate a source-backed context continuity seed for fresh or compacted agent sessions')
3250
+ .argument('[project-dir]', 'Project directory', process.cwd())
3251
+ .option('--max-memories <n>', 'Maximum recalled memories to include', '12')
3252
+ .option('-o, --output <file>', 'Write markdown seed to this file')
3253
+ .option('--json', 'Output JSON instead of markdown')
3254
+ .action(async (projectDir, opts) => {
3255
+ const { buildContextSeedPack } = await import('./brain/context-continuity.js');
3256
+ const { getGlobalBrain } = await import('./brain/global-brain.js');
3257
+ const resolvedProjectDir = path.resolve(projectDir);
3258
+ try {
3259
+ const pack = await buildContextSeedPack({
3260
+ projectDir: resolvedProjectDir,
3261
+ maxMemories: parseInt(opts.maxMemories || '12', 10),
3262
+ });
3263
+ if (opts.output) {
3264
+ const outPath = path.resolve(resolvedProjectDir, opts.output);
3265
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
3266
+ fs.writeFileSync(outPath, pack.markdown, 'utf-8');
3267
+ console.log(chalk.green(` ✓ Context continuity seed written: ${outPath}`));
3268
+ return;
3269
+ }
3270
+ if (opts.json)
3271
+ console.log(JSON.stringify(pack, null, 2));
3272
+ else
3273
+ console.log(pack.markdown);
3274
+ }
3275
+ finally {
3276
+ await getGlobalBrain().shutdown().catch(() => { });
3277
+ }
3278
+ });
3279
+ function splitQueries(value) {
3280
+ if (!value)
3281
+ return undefined;
3282
+ return value
3283
+ .split('|')
3284
+ .map(item => item.trim())
3285
+ .filter(Boolean);
3286
+ }
3287
+ const liveBrainCmd = new Command('live-brain')
3288
+ .alias('live')
3289
+ .description('v6.0.3 Live Brain - memory health, agent briefing, recall eval, and training export');
3290
+ liveBrainCmd.addCommand(new Command('status')
3291
+ .description('Show source-backed live brain health for a project')
3292
+ .argument('[project-dir]', 'Project directory', process.cwd())
3293
+ .option('--max-memories <n>', 'Maximum memories to include', '12')
3294
+ .option('--queries <q1|q2>', 'Pipe-separated recall eval queries')
3295
+ .option('--no-global-fallback', 'Do not fall back to latest global memories when project memory is empty')
3296
+ .option('--json', 'Output JSON')
3297
+ .action(async (projectDir, opts) => {
3298
+ const { getLiveBrain } = await import('./brain/live-brain.js');
3299
+ const report = await getLiveBrain().report({
3300
+ projectDir,
3301
+ maxMemories: parseInt(opts.maxMemories || '12', 10),
3302
+ queries: splitQueries(opts.queries),
3303
+ globalFallback: opts.globalFallback,
3304
+ });
3305
+ if (opts.json) {
3306
+ console.log(JSON.stringify(report, null, 2));
3307
+ return;
3308
+ }
3309
+ console.log(chalk.magenta.bold(`\n SHADOW BRAIN v${VERSION} - Live Brain`));
3310
+ console.log(` Project: ${chalk.cyan(report.projectName)} ${chalk.dim(report.projectDir)}`);
3311
+ console.log(` Scope: ${report.projectScoped ? chalk.green('project') : chalk.yellow('global fallback')}`);
3312
+ console.log(` Memory: ${chalk.cyan(report.memoryQuality.totalEntries)} entries, ${chalk.cyan(report.memoryQuality.avgScore + '/100')} avg quality`);
3313
+ console.log(` Sources: ${chalk.cyan(Math.round(report.memoryQuality.sourceCoverage * 100) + '%')} coverage`);
3314
+ console.log(` Recall: ${chalk.cyan(report.recallEval.avgHitCount)} avg hits/query, ${chalk.cyan(Math.round(report.recallEval.sourceBackedHitRate * 100) + '%')} source-backed hits`);
3315
+ if (report.learningActions.length) {
3316
+ console.log(chalk.yellow('\n Recommended actions'));
3317
+ for (const action of report.learningActions) {
3318
+ console.log(` [${action.priority}] ${action.title}`);
3319
+ console.log(chalk.dim(` ${action.reason}`));
3320
+ if (action.command)
3321
+ console.log(chalk.dim(` ${action.command}`));
3322
+ }
3323
+ }
3324
+ else {
3325
+ console.log(chalk.green('\n No immediate hygiene actions.'));
3326
+ }
3327
+ }));
3328
+ liveBrainCmd.addCommand(new Command('brief')
3329
+ .description('Print or write the live agent briefing for fresh sessions and handoffs')
3330
+ .argument('[project-dir]', 'Project directory', process.cwd())
3331
+ .option('-o, --output <file>', 'Write briefing markdown to this file')
3332
+ .option('--max-memories <n>', 'Maximum memories to include', '12')
3333
+ .option('--no-global-fallback', 'Do not fall back to latest global memories when project memory is empty')
3334
+ .action(async (projectDir, opts) => {
3335
+ const { getLiveBrain } = await import('./brain/live-brain.js');
3336
+ const report = await getLiveBrain().report({
3337
+ projectDir,
3338
+ maxMemories: parseInt(opts.maxMemories || '12', 10),
3339
+ globalFallback: opts.globalFallback,
3340
+ });
3341
+ if (opts.output) {
3342
+ const outPath = path.resolve(projectDir, opts.output);
3343
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
3344
+ fs.writeFileSync(outPath, report.agentBriefing, 'utf-8');
3345
+ console.log(chalk.green(` Live agent briefing written: ${outPath}`));
3346
+ return;
3347
+ }
3348
+ console.log(report.agentBriefing);
3349
+ }));
3350
+ liveBrainCmd.addCommand(new Command('eval')
3351
+ .description('Run recall checks that show whether agents can find the right long-memory context')
3352
+ .argument('[project-dir]', 'Project directory', process.cwd())
3353
+ .option('--queries <q1|q2>', 'Pipe-separated recall eval queries')
3354
+ .option('--json', 'Output JSON')
3355
+ .action(async (projectDir, opts) => {
3356
+ const { getLiveBrain } = await import('./brain/live-brain.js');
3357
+ const report = await getLiveBrain().report({
3358
+ projectDir,
3359
+ queries: splitQueries(opts.queries),
3360
+ });
3361
+ if (opts.json) {
3362
+ console.log(JSON.stringify(report.recallEval, null, 2));
3363
+ return;
3364
+ }
3365
+ console.log(chalk.magenta.bold(`\n SHADOW BRAIN v${VERSION} - Recall Eval`));
3366
+ for (const item of report.recallEval.cases) {
3367
+ const color = item.hitCount ? chalk.green : chalk.red;
3368
+ console.log(color(` ${item.query}: ${item.hitCount} hits (${item.sourceBackedHits} source-backed)`));
3369
+ if (item.topCategories.length)
3370
+ console.log(chalk.dim(` ${item.topCategories.join(', ')}`));
3371
+ for (const warning of item.warnings)
3372
+ console.log(chalk.yellow(` ${warning}`));
3373
+ }
3374
+ }));
3375
+ liveBrainCmd.addCommand(new Command('hygiene')
3376
+ .description('List concrete memory cleanup and learning actions')
3377
+ .argument('[project-dir]', 'Project directory', process.cwd())
3378
+ .option('--json', 'Output JSON')
3379
+ .action(async (projectDir, opts) => {
3380
+ const { getLiveBrain } = await import('./brain/live-brain.js');
3381
+ const report = await getLiveBrain().report({ projectDir });
3382
+ if (opts.json) {
3383
+ console.log(JSON.stringify({
3384
+ actions: report.learningActions,
3385
+ quality: report.memoryQuality,
3386
+ lowQualityMemories: report.lowQualityMemories,
3387
+ staleMemories: report.staleMemories,
3388
+ }, null, 2));
3389
+ return;
3390
+ }
3391
+ console.log(chalk.magenta.bold(`\n SHADOW BRAIN v${VERSION} - Memory Hygiene`));
3392
+ for (const action of report.learningActions) {
3393
+ console.log(` [${action.priority}] ${chalk.cyan(action.title)}`);
3394
+ console.log(chalk.dim(` ${action.reason}`));
3395
+ if (action.command)
3396
+ console.log(chalk.dim(` ${action.command}`));
3397
+ }
3398
+ if (!report.learningActions.length)
3399
+ console.log(chalk.green(' No immediate cleanup actions.'));
3400
+ }));
3401
+ liveBrainCmd.addCommand(new Command('train-pack')
3402
+ .description('Export source-backed memories as JSONL rows for evals, distillation, or local fine-tuning pipelines')
3403
+ .argument('[project-dir]', 'Project directory', process.cwd())
3404
+ .option('-o, --out <file>', 'Output JSONL file')
3405
+ .option('--max-rows <n>', 'Maximum rows', '200')
3406
+ .option('--include-low-quality', 'Include low-quality or source-light memories')
3407
+ .action(async (projectDir, opts) => {
3408
+ const { getLiveBrain } = await import('./brain/live-brain.js');
3409
+ const jsonl = await getLiveBrain().trainingJsonl({
3410
+ projectDir,
3411
+ maxRows: parseInt(opts.maxRows || '200', 10),
3412
+ includeLowQuality: !!opts.includeLowQuality,
3413
+ });
3414
+ if (opts.out) {
3415
+ const outPath = path.resolve(projectDir, opts.out);
3416
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
3417
+ fs.writeFileSync(outPath, jsonl ? jsonl + '\n' : '', 'utf-8');
3418
+ console.log(chalk.green(` Training pack written: ${outPath}`));
3419
+ return;
3420
+ }
3421
+ process.stdout.write(jsonl);
3422
+ if (jsonl)
3423
+ process.stdout.write('\n');
3424
+ }));
3218
3425
  function readStdin() {
3219
3426
  return new Promise((resolve) => {
3220
3427
  let data = '';
@@ -3330,6 +3537,8 @@ program.addCommand(detachAllCmd);
3330
3537
  program.addCommand(auditHooksCmd);
3331
3538
  program.addCommand(timelineCmd);
3332
3539
  program.addCommand(handoffCmd);
3540
+ program.addCommand(resumeSeedCmd);
3541
+ program.addCommand(liveBrainCmd);
3333
3542
  program.addCommand(firewallCmd);
3334
3543
  program.addCommand(proofCmd);
3335
3544
  // ── v6.0 "Hive Mind" commands ────────────────────────────────────────────────