@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.
- package/CHANGELOG.md +372 -0
- package/README.md +330 -358
- package/dist/brain/auto-update.js +1 -1
- package/dist/brain/brain-bus.d.ts +40 -0
- package/dist/brain/brain-bus.d.ts.map +1 -0
- package/dist/brain/brain-bus.js +94 -0
- package/dist/brain/brain-bus.js.map +1 -0
- package/dist/brain/brain-portability.js +3 -3
- package/dist/brain/brain-portability.js.map +1 -1
- package/dist/brain/collision-detective.d.ts.map +1 -1
- package/dist/brain/collision-detective.js +16 -0
- package/dist/brain/collision-detective.js.map +1 -1
- package/dist/brain/context-continuity.d.ts +78 -0
- package/dist/brain/context-continuity.d.ts.map +1 -0
- package/dist/brain/context-continuity.js +341 -0
- package/dist/brain/context-continuity.js.map +1 -0
- package/dist/brain/dream-engine.d.ts.map +1 -1
- package/dist/brain/dream-engine.js +12 -0
- package/dist/brain/dream-engine.js.map +1 -1
- package/dist/brain/forgetting-curve.d.ts.map +1 -1
- package/dist/brain/forgetting-curve.js +19 -0
- package/dist/brain/forgetting-curve.js.map +1 -1
- package/dist/brain/global-brain.d.ts +4 -0
- package/dist/brain/global-brain.d.ts.map +1 -1
- package/dist/brain/global-brain.js +61 -9
- package/dist/brain/global-brain.js.map +1 -1
- package/dist/brain/live-brain.d.ts +119 -0
- package/dist/brain/live-brain.d.ts.map +1 -0
- package/dist/brain/live-brain.js +405 -0
- package/dist/brain/live-brain.js.map +1 -0
- package/dist/brain/mcp-server.d.ts +4 -0
- package/dist/brain/mcp-server.d.ts.map +1 -1
- package/dist/brain/mcp-server.js +81 -5
- package/dist/brain/mcp-server.js.map +1 -1
- package/dist/brain/memory-graph.d.ts +51 -0
- package/dist/brain/memory-graph.d.ts.map +1 -0
- package/dist/brain/memory-graph.js +267 -0
- package/dist/brain/memory-graph.js.map +1 -0
- package/dist/brain/memory-seeder.d.ts +78 -0
- package/dist/brain/memory-seeder.d.ts.map +1 -0
- package/dist/brain/memory-seeder.js +349 -0
- package/dist/brain/memory-seeder.js.map +1 -0
- package/dist/brain/orchestrator.js +1 -1
- package/dist/brain/subagent-bridge.d.ts.map +1 -1
- package/dist/brain/subagent-bridge.js +12 -0
- package/dist/brain/subagent-bridge.js.map +1 -1
- package/dist/brain/token-economy.d.ts +2 -0
- package/dist/brain/token-economy.d.ts.map +1 -1
- package/dist/brain/token-economy.js +80 -24
- package/dist/brain/token-economy.js.map +1 -1
- package/dist/cli.js +240 -31
- package/dist/cli.js.map +1 -1
- package/dist/dashboard/server.d.ts +24 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +524 -7
- package/dist/dashboard/server.js.map +1 -1
- package/dist/dashboard/v6-dashboard-html.d.ts +1 -1
- package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -1
- package/dist/dashboard/v6-dashboard-html.js +2070 -213
- package/dist/dashboard/v6-dashboard-html.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +17 -12
- package/dist/types.d.ts.map +1 -1
- package/docs/launch/README.md +61 -0
- package/docs/launch/RELEASE_CHECKLIST_v6.0.3.md +102 -0
- package/docs/launch/RELEASE_NOTES_v6.0.3.md +111 -0
- package/docs/launch/RELEASE_NOTES_v6.1.0.md +38 -0
- package/docs/launch/RELEASE_NOTES_v6.2.0.md +54 -0
- package/package.json +18 -4
- package/tools/export-resume-pack.mjs +56 -0
- 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
|
-
|
|
12
|
-
|
|
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
|
-
|
|
37
|
-
|
|
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(
|
|
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.
|
|
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(
|
|
82
|
+
if (fs.existsSync(statsFile)) {
|
|
52
83
|
try {
|
|
53
|
-
const parsed = JSON.parse(fs.readFileSync(
|
|
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(
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
byModel
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
|
|
3057
|
-
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3061
|
-
|
|
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
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
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
|
-
|
|
3085
|
-
|
|
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
|
-
|
|
3105
|
-
|
|
3106
|
-
|
|
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 ────────────────────────────────────────────────
|