@theihtisham/agent-shadow-brain 5.1.1 → 6.0.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/README.md +355 -1095
- package/dist/adapters/copilot.d.ts +14 -0
- package/dist/adapters/copilot.d.ts.map +1 -0
- package/dist/adapters/copilot.js +93 -0
- package/dist/adapters/copilot.js.map +1 -0
- package/dist/adapters/cursor.d.ts +13 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +96 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/index.d.ts +4 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +7 -3
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/windsurf.d.ts +14 -0
- package/dist/adapters/windsurf.d.ts.map +1 -0
- package/dist/adapters/windsurf.js +107 -0
- package/dist/adapters/windsurf.js.map +1 -0
- package/dist/brain/agent-firewall.d.ts +7 -0
- package/dist/brain/agent-firewall.d.ts.map +1 -0
- package/dist/brain/agent-firewall.js +152 -0
- package/dist/brain/agent-firewall.js.map +1 -0
- package/dist/brain/agent-handoff.d.ts +19 -0
- package/dist/brain/agent-handoff.d.ts.map +1 -0
- package/dist/brain/agent-handoff.js +127 -0
- package/dist/brain/agent-handoff.js.map +1 -0
- package/dist/brain/air-gap.d.ts +23 -0
- package/dist/brain/air-gap.d.ts.map +1 -0
- package/dist/brain/air-gap.js +137 -0
- package/dist/brain/air-gap.js.map +1 -0
- package/dist/brain/attention-heatmap.d.ts +24 -0
- package/dist/brain/attention-heatmap.d.ts.map +1 -0
- package/dist/brain/attention-heatmap.js +108 -0
- package/dist/brain/attention-heatmap.js.map +1 -0
- package/dist/brain/auto-setup.js +19 -14
- package/dist/brain/auto-setup.js.map +1 -1
- package/dist/brain/auto-update.js +1 -1
- package/dist/brain/brain-chat.d.ts +42 -0
- package/dist/brain/brain-chat.d.ts.map +1 -0
- package/dist/brain/brain-chat.js +162 -0
- package/dist/brain/brain-chat.js.map +1 -0
- package/dist/brain/brain-encryption.d.ts +14 -0
- package/dist/brain/brain-encryption.d.ts.map +1 -0
- package/dist/brain/brain-encryption.js +68 -0
- package/dist/brain/brain-encryption.js.map +1 -0
- package/dist/brain/brain-exchange.d.ts +30 -0
- package/dist/brain/brain-exchange.d.ts.map +1 -0
- package/dist/brain/brain-exchange.js +106 -0
- package/dist/brain/brain-exchange.js.map +1 -0
- package/dist/brain/brain-garden.d.ts +18 -0
- package/dist/brain/brain-garden.d.ts.map +1 -0
- package/dist/brain/brain-garden.js +81 -0
- package/dist/brain/brain-garden.js.map +1 -0
- package/dist/brain/brain-portability.js +1 -1
- package/dist/brain/branch-brain.d.ts +23 -0
- package/dist/brain/branch-brain.d.ts.map +1 -0
- package/dist/brain/branch-brain.js +159 -0
- package/dist/brain/branch-brain.js.map +1 -0
- package/dist/brain/calibration-monitor.d.ts +20 -0
- package/dist/brain/calibration-monitor.d.ts.map +1 -0
- package/dist/brain/calibration-monitor.js +144 -0
- package/dist/brain/calibration-monitor.js.map +1 -0
- package/dist/brain/causal-chains.d.ts +37 -0
- package/dist/brain/causal-chains.d.ts.map +1 -0
- package/dist/brain/causal-chains.js +250 -0
- package/dist/brain/causal-chains.js.map +1 -0
- package/dist/brain/collision-detective.d.ts +32 -0
- package/dist/brain/collision-detective.d.ts.map +1 -0
- package/dist/brain/collision-detective.js +233 -0
- package/dist/brain/collision-detective.js.map +1 -0
- package/dist/brain/cost-aware-spawner.d.ts +7 -0
- package/dist/brain/cost-aware-spawner.d.ts.map +1 -0
- package/dist/brain/cost-aware-spawner.js +77 -0
- package/dist/brain/cost-aware-spawner.js.map +1 -0
- package/dist/brain/dream-engine.d.ts +35 -0
- package/dist/brain/dream-engine.d.ts.map +1 -0
- package/dist/brain/dream-engine.js +273 -0
- package/dist/brain/dream-engine.js.map +1 -0
- package/dist/brain/embeddings.d.ts +27 -0
- package/dist/brain/embeddings.d.ts.map +1 -0
- package/dist/brain/embeddings.js +175 -0
- package/dist/brain/embeddings.js.map +1 -0
- package/dist/brain/forgetting-curve.d.ts +21 -0
- package/dist/brain/forgetting-curve.d.ts.map +1 -0
- package/dist/brain/forgetting-curve.js +174 -0
- package/dist/brain/forgetting-curve.js.map +1 -0
- package/dist/brain/formal-verification-bridge.d.ts +26 -0
- package/dist/brain/formal-verification-bridge.d.ts.map +1 -0
- package/dist/brain/formal-verification-bridge.js +219 -0
- package/dist/brain/formal-verification-bridge.js.map +1 -0
- package/dist/brain/global-brain.d.ts +63 -0
- package/dist/brain/global-brain.d.ts.map +1 -0
- package/dist/brain/global-brain.js +348 -0
- package/dist/brain/global-brain.js.map +1 -0
- package/dist/brain/hallucination-quarantine.d.ts +26 -0
- package/dist/brain/hallucination-quarantine.d.ts.map +1 -0
- package/dist/brain/hallucination-quarantine.js +135 -0
- package/dist/brain/hallucination-quarantine.js.map +1 -0
- package/dist/brain/hive-accelerator.d.ts +39 -0
- package/dist/brain/hive-accelerator.d.ts.map +1 -0
- package/dist/brain/hive-accelerator.js +152 -0
- package/dist/brain/hive-accelerator.js.map +1 -0
- package/dist/brain/json-output.d.ts +26 -0
- package/dist/brain/json-output.d.ts.map +1 -0
- package/dist/brain/json-output.js +112 -0
- package/dist/brain/json-output.js.map +1 -0
- package/dist/brain/l0-cache.d.ts +40 -0
- package/dist/brain/l0-cache.d.ts.map +1 -0
- package/dist/brain/l0-cache.js +176 -0
- package/dist/brain/l0-cache.js.map +1 -0
- package/dist/brain/local-llm.d.ts +20 -0
- package/dist/brain/local-llm.d.ts.map +1 -0
- package/dist/brain/local-llm.js +132 -0
- package/dist/brain/local-llm.js.map +1 -0
- package/dist/brain/mcp-server.d.ts +44 -0
- package/dist/brain/mcp-server.d.ts.map +1 -1
- package/dist/brain/mcp-server.js +486 -12
- package/dist/brain/mcp-server.js.map +1 -1
- package/dist/brain/model-registry.d.ts +96 -0
- package/dist/brain/model-registry.d.ts.map +1 -0
- package/dist/brain/model-registry.js +585 -0
- package/dist/brain/model-registry.js.map +1 -0
- package/dist/brain/orchestrator.js +1 -1
- package/dist/brain/pr-auto-review.d.ts +17 -0
- package/dist/brain/pr-auto-review.d.ts.map +1 -0
- package/dist/brain/pr-auto-review.js +73 -0
- package/dist/brain/pr-auto-review.js.map +1 -0
- package/dist/brain/pre-mortem.d.ts +21 -0
- package/dist/brain/pre-mortem.d.ts.map +1 -0
- package/dist/brain/pre-mortem.js +210 -0
- package/dist/brain/pre-mortem.js.map +1 -0
- package/dist/brain/prompt-cache.d.ts +54 -0
- package/dist/brain/prompt-cache.d.ts.map +1 -0
- package/dist/brain/prompt-cache.js +105 -0
- package/dist/brain/prompt-cache.js.map +1 -0
- package/dist/brain/reputation-ledger.d.ts +42 -0
- package/dist/brain/reputation-ledger.d.ts.map +1 -0
- package/dist/brain/reputation-ledger.js +326 -0
- package/dist/brain/reputation-ledger.js.map +1 -0
- package/dist/brain/session-hooks.d.ts +47 -0
- package/dist/brain/session-hooks.d.ts.map +1 -0
- package/dist/brain/session-hooks.js +706 -0
- package/dist/brain/session-hooks.js.map +1 -0
- package/dist/brain/subagent-bridge.d.ts +46 -0
- package/dist/brain/subagent-bridge.d.ts.map +1 -0
- package/dist/brain/subagent-bridge.js +364 -0
- package/dist/brain/subagent-bridge.js.map +1 -0
- package/dist/brain/subconscious.d.ts +34 -0
- package/dist/brain/subconscious.d.ts.map +1 -0
- package/dist/brain/subconscious.js +275 -0
- package/dist/brain/subconscious.js.map +1 -0
- package/dist/brain/swarm-debate.d.ts +22 -0
- package/dist/brain/swarm-debate.d.ts.map +1 -0
- package/dist/brain/swarm-debate.js +134 -0
- package/dist/brain/swarm-debate.js.map +1 -0
- package/dist/brain/team-brain-sync.d.ts +22 -0
- package/dist/brain/team-brain-sync.d.ts.map +1 -0
- package/dist/brain/team-brain-sync.js +132 -0
- package/dist/brain/team-brain-sync.js.map +1 -0
- package/dist/brain/token-economy.d.ts +25 -0
- package/dist/brain/token-economy.d.ts.map +1 -0
- package/dist/brain/token-economy.js +216 -0
- package/dist/brain/token-economy.js.map +1 -0
- package/dist/brain/voice-mode.d.ts +15 -0
- package/dist/brain/voice-mode.d.ts.map +1 -0
- package/dist/brain/voice-mode.js +97 -0
- package/dist/brain/voice-mode.js.map +1 -0
- package/dist/cli.js +990 -6
- package/dist/cli.js.map +1 -1
- package/dist/dashboard/server.d.ts +6 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +1118 -368
- package/dist/dashboard/server.js.map +1 -1
- package/dist/dashboard/v6-dashboard-html.d.ts +2 -0
- package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -0
- package/dist/dashboard/v6-dashboard-html.js +2474 -0
- package/dist/dashboard/v6-dashboard-html.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +644 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +77 -12
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
// src/brain/global-brain.ts — Singleton Global Brain (v5.2.0)
|
|
2
|
+
//
|
|
3
|
+
// One brain. Every project. Every agent. Every machine.
|
|
4
|
+
//
|
|
5
|
+
// The Global Brain is a singleton store at ~/.shadow-brain/global.json that
|
|
6
|
+
// every Shadow Brain instance reads from and writes to. Insights from project
|
|
7
|
+
// A using Cursor are immediately available to project B using Claude Code.
|
|
8
|
+
//
|
|
9
|
+
// Storage: append-friendly JSON store (no native deps), persisted on every
|
|
10
|
+
// flush. Combined with l0-cache.ts, hot recalls return in <1ms.
|
|
11
|
+
//
|
|
12
|
+
// Concurrency: write queue + atomic file replace prevents conflicts when
|
|
13
|
+
// multiple agents write simultaneously.
|
|
14
|
+
import * as fs from 'fs';
|
|
15
|
+
import * as path from 'path';
|
|
16
|
+
import * as os from 'os';
|
|
17
|
+
import * as crypto from 'crypto';
|
|
18
|
+
const DEFAULT_DIR = path.join(os.homedir(), '.shadow-brain');
|
|
19
|
+
const DEFAULT_DB_PATH = path.join(DEFAULT_DIR, 'global.json');
|
|
20
|
+
const DEFAULT_CONFIG = {
|
|
21
|
+
dbPath: DEFAULT_DB_PATH,
|
|
22
|
+
walMode: true,
|
|
23
|
+
writeQueueSize: 1000,
|
|
24
|
+
autoVacuumMB: 500,
|
|
25
|
+
autoPruneMB: 1000,
|
|
26
|
+
syncIntervalMs: 5000,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Singleton Global Brain — the source of truth for all projects + agents.
|
|
30
|
+
*
|
|
31
|
+
* Storage: JSON file at ~/.shadow-brain/global.json (zero new deps).
|
|
32
|
+
* In-memory Map keyed by entry.id for O(1) ID lookups.
|
|
33
|
+
*/
|
|
34
|
+
export class GlobalBrain {
|
|
35
|
+
constructor(config = {}) {
|
|
36
|
+
this.entries = new Map();
|
|
37
|
+
this.projects = new Map();
|
|
38
|
+
this.agents = new Map();
|
|
39
|
+
this.writeQueue = [];
|
|
40
|
+
this.syncTimer = null;
|
|
41
|
+
this.initialized = false;
|
|
42
|
+
this.dirty = false;
|
|
43
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
44
|
+
this.startedAt = Date.now();
|
|
45
|
+
this.stats = {
|
|
46
|
+
totalProjects: 0,
|
|
47
|
+
totalAgents: 0,
|
|
48
|
+
totalEntries: 0,
|
|
49
|
+
totalSizeMB: 0,
|
|
50
|
+
pendingWrites: 0,
|
|
51
|
+
hits: 0,
|
|
52
|
+
misses: 0,
|
|
53
|
+
hitRate: 0,
|
|
54
|
+
lastSync: new Date(),
|
|
55
|
+
lastVacuum: null,
|
|
56
|
+
lastPrune: null,
|
|
57
|
+
uptime: 0,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
static getInstance(config) {
|
|
61
|
+
if (!GlobalBrain.instance) {
|
|
62
|
+
GlobalBrain.instance = new GlobalBrain(config);
|
|
63
|
+
}
|
|
64
|
+
return GlobalBrain.instance;
|
|
65
|
+
}
|
|
66
|
+
async init() {
|
|
67
|
+
if (this.initialized)
|
|
68
|
+
return;
|
|
69
|
+
fs.mkdirSync(path.dirname(this.config.dbPath), { recursive: true });
|
|
70
|
+
if (fs.existsSync(this.config.dbPath)) {
|
|
71
|
+
try {
|
|
72
|
+
const raw = fs.readFileSync(this.config.dbPath, 'utf-8');
|
|
73
|
+
const parsed = JSON.parse(raw);
|
|
74
|
+
for (const e of parsed.entries ?? []) {
|
|
75
|
+
// Re-hydrate Date instances
|
|
76
|
+
this.entries.set(e.id, {
|
|
77
|
+
...e,
|
|
78
|
+
createdAt: new Date(e.createdAt),
|
|
79
|
+
lastAccessed: new Date(e.lastAccessed),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
for (const p of parsed.projects ?? [])
|
|
83
|
+
this.projects.set(p.id, p);
|
|
84
|
+
for (const a of parsed.agents ?? [])
|
|
85
|
+
this.agents.set(a.tool, a);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Corrupted file → start fresh, back up the bad one
|
|
89
|
+
try {
|
|
90
|
+
fs.renameSync(this.config.dbPath, this.config.dbPath + '.corrupt-' + Date.now());
|
|
91
|
+
}
|
|
92
|
+
catch { /* ignore */ }
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
this.startSyncLoop();
|
|
96
|
+
this.refreshStats();
|
|
97
|
+
this.initialized = true;
|
|
98
|
+
}
|
|
99
|
+
/** Generate a stable project ID from absolute path */
|
|
100
|
+
static projectIdFor(rootDir) {
|
|
101
|
+
const abs = path.resolve(rootDir);
|
|
102
|
+
return crypto.createHash('sha1').update(abs).digest('hex').slice(0, 16);
|
|
103
|
+
}
|
|
104
|
+
registerProject(rootDir, name) {
|
|
105
|
+
if (!this.initialized)
|
|
106
|
+
throw new Error('GlobalBrain not initialized — call init() first');
|
|
107
|
+
const id = GlobalBrain.projectIdFor(rootDir);
|
|
108
|
+
const projectName = name || path.basename(rootDir);
|
|
109
|
+
const now = Date.now();
|
|
110
|
+
const existing = this.projects.get(id);
|
|
111
|
+
this.projects.set(id, {
|
|
112
|
+
id,
|
|
113
|
+
name: projectName,
|
|
114
|
+
rootDir: path.resolve(rootDir),
|
|
115
|
+
firstSeen: existing?.firstSeen ?? now,
|
|
116
|
+
lastSeen: now,
|
|
117
|
+
});
|
|
118
|
+
this.dirty = true;
|
|
119
|
+
return id;
|
|
120
|
+
}
|
|
121
|
+
registerAgent(agent) {
|
|
122
|
+
if (!this.initialized)
|
|
123
|
+
return;
|
|
124
|
+
const now = Date.now();
|
|
125
|
+
const existing = this.agents.get(agent);
|
|
126
|
+
this.agents.set(agent, {
|
|
127
|
+
tool: agent,
|
|
128
|
+
firstSeen: existing?.firstSeen ?? now,
|
|
129
|
+
lastSeen: now,
|
|
130
|
+
sessionCount: (existing?.sessionCount ?? 0) + 1,
|
|
131
|
+
});
|
|
132
|
+
this.dirty = true;
|
|
133
|
+
}
|
|
134
|
+
/** Queue a write — resolves true on success */
|
|
135
|
+
async write(entry) {
|
|
136
|
+
if (!this.initialized)
|
|
137
|
+
await this.init();
|
|
138
|
+
const fullEntry = {
|
|
139
|
+
...entry,
|
|
140
|
+
id: crypto.randomUUID(),
|
|
141
|
+
createdAt: new Date(),
|
|
142
|
+
lastAccessed: new Date(),
|
|
143
|
+
accessCount: 0,
|
|
144
|
+
};
|
|
145
|
+
if (this.writeQueue.length >= this.config.writeQueueSize) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
return new Promise((resolve) => {
|
|
149
|
+
this.writeQueue.push({ entry: fullEntry, resolve });
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/** Direct synchronous write — bypasses queue */
|
|
153
|
+
writeSync(entry) {
|
|
154
|
+
if (!this.initialized)
|
|
155
|
+
throw new Error('GlobalBrain not initialized');
|
|
156
|
+
const id = crypto.randomUUID();
|
|
157
|
+
const fullEntry = {
|
|
158
|
+
...entry,
|
|
159
|
+
id,
|
|
160
|
+
createdAt: new Date(),
|
|
161
|
+
lastAccessed: new Date(),
|
|
162
|
+
accessCount: 0,
|
|
163
|
+
};
|
|
164
|
+
this.entries.set(id, fullEntry);
|
|
165
|
+
this.dirty = true;
|
|
166
|
+
this.stats.totalEntries = this.entries.size;
|
|
167
|
+
return id;
|
|
168
|
+
}
|
|
169
|
+
/** Recall entries — cross-project + cross-agent */
|
|
170
|
+
recall(opts = {}) {
|
|
171
|
+
if (!this.initialized)
|
|
172
|
+
return [];
|
|
173
|
+
const limit = opts.limit ?? 20;
|
|
174
|
+
const minImp = opts.minImportance ?? 0;
|
|
175
|
+
const kwLower = opts.keywords?.map(k => k.toLowerCase()) ?? null;
|
|
176
|
+
const matches = [];
|
|
177
|
+
for (const e of this.entries.values()) {
|
|
178
|
+
if (opts.projectId && e.projectId !== opts.projectId)
|
|
179
|
+
continue;
|
|
180
|
+
if (opts.agentTool && e.agentTool !== opts.agentTool)
|
|
181
|
+
continue;
|
|
182
|
+
if (opts.category && e.category !== opts.category)
|
|
183
|
+
continue;
|
|
184
|
+
if (e.importance < minImp)
|
|
185
|
+
continue;
|
|
186
|
+
if (kwLower) {
|
|
187
|
+
const hay = e.content.toLowerCase();
|
|
188
|
+
if (!kwLower.some(k => hay.includes(k)))
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
matches.push(e);
|
|
192
|
+
}
|
|
193
|
+
matches.sort((a, b) => {
|
|
194
|
+
if (b.importance !== a.importance)
|
|
195
|
+
return b.importance - a.importance;
|
|
196
|
+
return b.lastAccessed.getTime() - a.lastAccessed.getTime();
|
|
197
|
+
});
|
|
198
|
+
const result = matches.slice(0, limit);
|
|
199
|
+
if (result.length)
|
|
200
|
+
this.stats.hits++;
|
|
201
|
+
else
|
|
202
|
+
this.stats.misses++;
|
|
203
|
+
return result;
|
|
204
|
+
}
|
|
205
|
+
/** Bump access count for an entry */
|
|
206
|
+
touch(id) {
|
|
207
|
+
const entry = this.entries.get(id);
|
|
208
|
+
if (!entry)
|
|
209
|
+
return;
|
|
210
|
+
entry.accessCount++;
|
|
211
|
+
entry.lastAccessed = new Date();
|
|
212
|
+
this.dirty = true;
|
|
213
|
+
}
|
|
214
|
+
recallByIds(ids) {
|
|
215
|
+
const out = [];
|
|
216
|
+
for (const id of ids) {
|
|
217
|
+
const e = this.entries.get(id);
|
|
218
|
+
if (e)
|
|
219
|
+
out.push(e);
|
|
220
|
+
}
|
|
221
|
+
return out;
|
|
222
|
+
}
|
|
223
|
+
/** Chronological proof stream for dashboards, handoffs, and launch demos. */
|
|
224
|
+
timeline(opts = {}) {
|
|
225
|
+
if (!this.initialized)
|
|
226
|
+
return [];
|
|
227
|
+
const limit = opts.limit ?? 50;
|
|
228
|
+
return Array.from(this.entries.values())
|
|
229
|
+
.filter(e => !opts.projectId || e.projectId === opts.projectId)
|
|
230
|
+
.filter(e => !opts.agentTool || e.agentTool === opts.agentTool)
|
|
231
|
+
.filter(e => !opts.category || e.category === opts.category)
|
|
232
|
+
.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
|
|
233
|
+
.slice(0, limit)
|
|
234
|
+
.map(e => ({
|
|
235
|
+
id: e.id,
|
|
236
|
+
projectId: e.projectId,
|
|
237
|
+
projectName: e.projectName,
|
|
238
|
+
agentTool: e.agentTool,
|
|
239
|
+
category: e.category,
|
|
240
|
+
content: e.content,
|
|
241
|
+
importance: e.importance,
|
|
242
|
+
createdAt: e.createdAt,
|
|
243
|
+
lastAccessed: e.lastAccessed,
|
|
244
|
+
metadata: e.metadata,
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
getStats() {
|
|
248
|
+
this.refreshStats();
|
|
249
|
+
return { ...this.stats };
|
|
250
|
+
}
|
|
251
|
+
/** Force a sync of pending writes to disk */
|
|
252
|
+
async sync() {
|
|
253
|
+
if (!this.initialized)
|
|
254
|
+
return;
|
|
255
|
+
if (this.writeQueue.length > 0) {
|
|
256
|
+
const pending = this.writeQueue.splice(0, this.writeQueue.length);
|
|
257
|
+
for (const { entry, resolve } of pending) {
|
|
258
|
+
try {
|
|
259
|
+
this.entries.set(entry.id, entry);
|
|
260
|
+
resolve(true);
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
resolve(false);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
this.dirty = true;
|
|
267
|
+
}
|
|
268
|
+
if (this.dirty) {
|
|
269
|
+
this.persist();
|
|
270
|
+
this.stats.lastSync = new Date();
|
|
271
|
+
this.dirty = false;
|
|
272
|
+
}
|
|
273
|
+
this.maybeAutoMaintenance();
|
|
274
|
+
}
|
|
275
|
+
maybeAutoMaintenance() {
|
|
276
|
+
const sizeMB = this.estimateSizeMB();
|
|
277
|
+
this.stats.totalSizeMB = sizeMB;
|
|
278
|
+
if (sizeMB > this.config.autoPruneMB)
|
|
279
|
+
this.prune();
|
|
280
|
+
}
|
|
281
|
+
/** Auto-prune: drop low-importance, rarely-accessed entries when over threshold */
|
|
282
|
+
prune() {
|
|
283
|
+
const cutoff = Date.now() - 90 * 24 * 60 * 60 * 1000; // 90 days
|
|
284
|
+
const toDelete = [];
|
|
285
|
+
for (const [id, e] of this.entries) {
|
|
286
|
+
if (e.importance < 0.3 && e.accessCount < 2 && e.lastAccessed.getTime() < cutoff) {
|
|
287
|
+
toDelete.push(id);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
for (const id of toDelete)
|
|
291
|
+
this.entries.delete(id);
|
|
292
|
+
if (toDelete.length) {
|
|
293
|
+
this.dirty = true;
|
|
294
|
+
this.stats.lastPrune = new Date();
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
persist() {
|
|
298
|
+
const shape = {
|
|
299
|
+
schemaVersion: 1,
|
|
300
|
+
entries: Array.from(this.entries.values()),
|
|
301
|
+
projects: Array.from(this.projects.values()),
|
|
302
|
+
agents: Array.from(this.agents.values()),
|
|
303
|
+
};
|
|
304
|
+
// Atomic write — write to .tmp then rename
|
|
305
|
+
const tmp = this.config.dbPath + '.tmp';
|
|
306
|
+
fs.writeFileSync(tmp, JSON.stringify(shape));
|
|
307
|
+
fs.renameSync(tmp, this.config.dbPath);
|
|
308
|
+
}
|
|
309
|
+
startSyncLoop() {
|
|
310
|
+
if (this.syncTimer)
|
|
311
|
+
clearInterval(this.syncTimer);
|
|
312
|
+
this.syncTimer = setInterval(() => {
|
|
313
|
+
this.sync().catch(() => { });
|
|
314
|
+
}, this.config.syncIntervalMs);
|
|
315
|
+
}
|
|
316
|
+
refreshStats() {
|
|
317
|
+
if (!this.initialized)
|
|
318
|
+
return;
|
|
319
|
+
this.stats.totalProjects = this.projects.size;
|
|
320
|
+
this.stats.totalAgents = this.agents.size;
|
|
321
|
+
this.stats.totalEntries = this.entries.size;
|
|
322
|
+
this.stats.pendingWrites = this.writeQueue.length;
|
|
323
|
+
const totalChecks = this.stats.hits + this.stats.misses;
|
|
324
|
+
this.stats.hitRate = totalChecks > 0 ? this.stats.hits / totalChecks : 0;
|
|
325
|
+
this.stats.uptime = Date.now() - this.startedAt;
|
|
326
|
+
}
|
|
327
|
+
estimateSizeMB() {
|
|
328
|
+
try {
|
|
329
|
+
const stat = fs.statSync(this.config.dbPath);
|
|
330
|
+
return stat.size / (1024 * 1024);
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
return 0;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
async shutdown() {
|
|
337
|
+
if (this.syncTimer)
|
|
338
|
+
clearInterval(this.syncTimer);
|
|
339
|
+
await this.sync();
|
|
340
|
+
this.initialized = false;
|
|
341
|
+
GlobalBrain.instance = null;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
GlobalBrain.instance = null;
|
|
345
|
+
export function getGlobalBrain(config) {
|
|
346
|
+
return GlobalBrain.getInstance(config);
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=global-brain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-brain.js","sourceRoot":"","sources":["../../src/brain/global-brain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { QuarantineEntry } from '../types.js';
|
|
2
|
+
export declare class HallucinationQuarantine {
|
|
3
|
+
private entries;
|
|
4
|
+
private brain;
|
|
5
|
+
private initialized;
|
|
6
|
+
constructor();
|
|
7
|
+
init(): Promise<void>;
|
|
8
|
+
flag(source: string, claim: string, reasonFlagged: string, evidence?: string[]): Promise<QuarantineEntry>;
|
|
9
|
+
promote(entryId: string, projectId: string, agentTool: string): Promise<boolean>;
|
|
10
|
+
reject(entryId: string): Promise<boolean>;
|
|
11
|
+
list(opts?: {
|
|
12
|
+
pendingOnly?: boolean;
|
|
13
|
+
limit?: number;
|
|
14
|
+
}): QuarantineEntry[];
|
|
15
|
+
stats(): {
|
|
16
|
+
pending: number;
|
|
17
|
+
promoted: number;
|
|
18
|
+
deleted: number;
|
|
19
|
+
total: number;
|
|
20
|
+
};
|
|
21
|
+
private autoExpire;
|
|
22
|
+
private persist;
|
|
23
|
+
}
|
|
24
|
+
export declare function getHallucinationQuarantine(): HallucinationQuarantine;
|
|
25
|
+
export declare function resetHallucinationQuarantineForTests(): void;
|
|
26
|
+
//# sourceMappingURL=hallucination-quarantine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hallucination-quarantine.d.ts","sourceRoot":"","sources":["../../src/brain/hallucination-quarantine.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAW9C,qBAAa,uBAAuB;IAClC,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,WAAW,CAAS;;IAMtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBrB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAgB7G,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBhF,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/C,IAAI,CAAC,IAAI,GAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,eAAe,EAAE;IAQ7E,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAc9E,OAAO,CAAC,UAAU;YASJ,OAAO;CAatB;AAID,wBAAgB,0BAA0B,IAAI,uBAAuB,CAGpE;AAED,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// src/brain/hallucination-quarantine.ts — Suspect memory isolation
|
|
2
|
+
// v6.0.0 — Hive Mind Edition
|
|
3
|
+
//
|
|
4
|
+
// When Shadow Brain's adversarial defense flags a claim as potentially
|
|
5
|
+
// hallucinated, it goes here instead of the global brain. You can review,
|
|
6
|
+
// promote, or delete. Auto-deletes after 7 days by default.
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
import * as crypto from 'crypto';
|
|
11
|
+
import { getGlobalBrain } from './global-brain.js';
|
|
12
|
+
const QUARANTINE_PATH = path.join(os.homedir(), '.shadow-brain', 'hallucination-quarantine.json');
|
|
13
|
+
const AUTO_DELETE_AFTER_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
14
|
+
export class HallucinationQuarantine {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.entries = new Map();
|
|
17
|
+
this.initialized = false;
|
|
18
|
+
this.brain = getGlobalBrain();
|
|
19
|
+
}
|
|
20
|
+
async init() {
|
|
21
|
+
if (this.initialized)
|
|
22
|
+
return;
|
|
23
|
+
fs.mkdirSync(path.dirname(QUARANTINE_PATH), { recursive: true });
|
|
24
|
+
if (fs.existsSync(QUARANTINE_PATH)) {
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(fs.readFileSync(QUARANTINE_PATH, 'utf-8'));
|
|
27
|
+
for (const e of parsed.entries ?? []) {
|
|
28
|
+
this.entries.set(e.id, { ...e, quarantinedAt: new Date(e.quarantinedAt) });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
/* skip */
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.autoExpire();
|
|
36
|
+
this.initialized = true;
|
|
37
|
+
}
|
|
38
|
+
async flag(source, claim, reasonFlagged, evidence = []) {
|
|
39
|
+
await this.init();
|
|
40
|
+
const entry = {
|
|
41
|
+
id: `hq-${crypto.randomBytes(6).toString('hex')}`,
|
|
42
|
+
source,
|
|
43
|
+
claim: claim.slice(0, 800),
|
|
44
|
+
evidence,
|
|
45
|
+
reasonFlagged,
|
|
46
|
+
quarantinedAt: new Date(),
|
|
47
|
+
decision: 'pending',
|
|
48
|
+
};
|
|
49
|
+
this.entries.set(entry.id, entry);
|
|
50
|
+
await this.persist();
|
|
51
|
+
return entry;
|
|
52
|
+
}
|
|
53
|
+
async promote(entryId, projectId, agentTool) {
|
|
54
|
+
await this.init();
|
|
55
|
+
const entry = this.entries.get(entryId);
|
|
56
|
+
if (!entry)
|
|
57
|
+
return false;
|
|
58
|
+
await this.brain.init();
|
|
59
|
+
this.brain.writeSync({
|
|
60
|
+
projectId,
|
|
61
|
+
projectName: 'promoted-quarantine',
|
|
62
|
+
agentTool: agentTool,
|
|
63
|
+
category: 'promoted-from-quarantine',
|
|
64
|
+
content: entry.claim,
|
|
65
|
+
importance: 0.6,
|
|
66
|
+
metadata: { origin: 'quarantine-promoted', quarantineId: entryId, evidence: entry.evidence },
|
|
67
|
+
});
|
|
68
|
+
entry.decision = 'promoted';
|
|
69
|
+
await this.persist();
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
async reject(entryId) {
|
|
73
|
+
await this.init();
|
|
74
|
+
const entry = this.entries.get(entryId);
|
|
75
|
+
if (!entry)
|
|
76
|
+
return false;
|
|
77
|
+
entry.decision = 'deleted';
|
|
78
|
+
await this.persist();
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
list(opts = {}) {
|
|
82
|
+
this.autoExpire();
|
|
83
|
+
const all = Array.from(this.entries.values())
|
|
84
|
+
.filter(e => !opts.pendingOnly || e.decision === 'pending')
|
|
85
|
+
.sort((a, b) => b.quarantinedAt.getTime() - a.quarantinedAt.getTime());
|
|
86
|
+
return all.slice(0, opts.limit ?? 50);
|
|
87
|
+
}
|
|
88
|
+
stats() {
|
|
89
|
+
let pending = 0;
|
|
90
|
+
let promoted = 0;
|
|
91
|
+
let deleted = 0;
|
|
92
|
+
for (const e of this.entries.values()) {
|
|
93
|
+
if (e.decision === 'pending')
|
|
94
|
+
pending++;
|
|
95
|
+
else if (e.decision === 'promoted')
|
|
96
|
+
promoted++;
|
|
97
|
+
else
|
|
98
|
+
deleted++;
|
|
99
|
+
}
|
|
100
|
+
return { pending, promoted, deleted, total: this.entries.size };
|
|
101
|
+
}
|
|
102
|
+
// ── Internals ─────────────────────────────────────────────────────────────
|
|
103
|
+
autoExpire() {
|
|
104
|
+
const now = Date.now();
|
|
105
|
+
for (const [id, entry] of this.entries) {
|
|
106
|
+
if (entry.decision === 'pending' && now - entry.quarantinedAt.getTime() > AUTO_DELETE_AFTER_MS) {
|
|
107
|
+
entry.decision = 'deleted';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async persist() {
|
|
112
|
+
try {
|
|
113
|
+
const payload = {
|
|
114
|
+
schemaVersion: 1,
|
|
115
|
+
entries: Array.from(this.entries.values()),
|
|
116
|
+
};
|
|
117
|
+
const tmp = QUARANTINE_PATH + '.tmp';
|
|
118
|
+
fs.writeFileSync(tmp, JSON.stringify(payload, null, 2));
|
|
119
|
+
fs.renameSync(tmp, QUARANTINE_PATH);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
/* non-fatal */
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
let _instance = null;
|
|
127
|
+
export function getHallucinationQuarantine() {
|
|
128
|
+
if (!_instance)
|
|
129
|
+
_instance = new HallucinationQuarantine();
|
|
130
|
+
return _instance;
|
|
131
|
+
}
|
|
132
|
+
export function resetHallucinationQuarantineForTests() {
|
|
133
|
+
_instance = null;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=hallucination-quarantine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hallucination-quarantine.js","sourceRoot":"","sources":["../../src/brain/hallucination-quarantine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { CausalLink, TurboVector } from '../types.js';
|
|
2
|
+
export interface AcceleratorStatus {
|
|
3
|
+
ssspNodes: number;
|
|
4
|
+
ssspEdges: number;
|
|
5
|
+
turboEntries: number;
|
|
6
|
+
turboCompressionRatio: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class HiveAccelerator {
|
|
9
|
+
private sssp;
|
|
10
|
+
private turbo;
|
|
11
|
+
private initialized;
|
|
12
|
+
constructor();
|
|
13
|
+
init(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Rebuild the SSSP graph from causal links for O(m log^(2/3) n) traversal.
|
|
16
|
+
* Each link contributes two directed edges (cause → effect).
|
|
17
|
+
*/
|
|
18
|
+
buildCausalGraph(links: CausalLink[]): void;
|
|
19
|
+
/** Run BMSSP from a source node — returns distances + predecessors. */
|
|
20
|
+
traverseCausal(sourceId: string): any;
|
|
21
|
+
/**
|
|
22
|
+
* Store a compressed vector representation of a memory for faster SABB /
|
|
23
|
+
* heatmap similarity scoring. Uses PolarQuant + QJL (3 bits/dim).
|
|
24
|
+
*/
|
|
25
|
+
storeCompressed(id: string, vector: number[], metadata?: Record<string, unknown>): Promise<TurboVector | null>;
|
|
26
|
+
/** Semantic similarity search — returns top-K matching memories. */
|
|
27
|
+
similaritySearch(queryVector: number[], k?: number): Promise<Array<{
|
|
28
|
+
id: string;
|
|
29
|
+
score: number;
|
|
30
|
+
}>>;
|
|
31
|
+
/** Convert text to a simple 64-dim vector (character n-gram hash). Cheap, deterministic. */
|
|
32
|
+
static textToVector(text: string, dim?: number): number[];
|
|
33
|
+
/** Cosine similarity between two vectors. */
|
|
34
|
+
static cosine(a: number[], b: number[]): number;
|
|
35
|
+
status(): AcceleratorStatus;
|
|
36
|
+
}
|
|
37
|
+
export declare function getHiveAccelerator(): HiveAccelerator;
|
|
38
|
+
export declare function resetHiveAcceleratorForTests(): void;
|
|
39
|
+
//# sourceMappingURL=hive-accelerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hive-accelerator.d.ts","sourceRoot":"","sources":["../../src/brain/hive-accelerator.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,WAAW,CAAS;;IAOtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI;IAc3C,uEAAuE;IACvE,cAAc,CAAC,QAAQ,EAAE,MAAM;IAa/B;;;OAGG;IACG,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAYxH,oEAAoE;IAC9D,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,SAAI,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAYnG,4FAA4F;IAC5F,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,MAAM,EAAE;IAiBrD,6CAA6C;IAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAY/C,MAAM,IAAI,iBAAiB;CAU5B;AAID,wBAAgB,kBAAkB,IAAI,eAAe,CAGpD;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD"}
|