@theihtisham/agent-shadow-brain 4.0.3 → 5.0.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.
Files changed (53) hide show
  1. package/README.md +515 -305
  2. package/dist/adapters/index.d.ts.map +1 -1
  3. package/dist/adapters/index.js +1 -0
  4. package/dist/adapters/index.js.map +1 -1
  5. package/dist/brain/auto-setup.d.ts +54 -0
  6. package/dist/brain/auto-setup.d.ts.map +1 -0
  7. package/dist/brain/auto-setup.js +660 -0
  8. package/dist/brain/auto-setup.js.map +1 -0
  9. package/dist/brain/brain-portability.d.ts +81 -0
  10. package/dist/brain/brain-portability.d.ts.map +1 -0
  11. package/dist/brain/brain-portability.js +329 -0
  12. package/dist/brain/brain-portability.js.map +1 -0
  13. package/dist/brain/collective-learning.d.ts +54 -0
  14. package/dist/brain/collective-learning.d.ts.map +1 -0
  15. package/dist/brain/collective-learning.js +357 -0
  16. package/dist/brain/collective-learning.js.map +1 -0
  17. package/dist/brain/consensus-engine.d.ts +65 -0
  18. package/dist/brain/consensus-engine.d.ts.map +1 -0
  19. package/dist/brain/consensus-engine.js +385 -0
  20. package/dist/brain/consensus-engine.js.map +1 -0
  21. package/dist/brain/context-recall.d.ts +49 -0
  22. package/dist/brain/context-recall.d.ts.map +1 -0
  23. package/dist/brain/context-recall.js +502 -0
  24. package/dist/brain/context-recall.js.map +1 -0
  25. package/dist/brain/hierarchical-memory.d.ts +49 -0
  26. package/dist/brain/hierarchical-memory.d.ts.map +1 -0
  27. package/dist/brain/hierarchical-memory.js +451 -0
  28. package/dist/brain/hierarchical-memory.js.map +1 -0
  29. package/dist/brain/mcp-server.d.ts +12 -0
  30. package/dist/brain/mcp-server.d.ts.map +1 -1
  31. package/dist/brain/mcp-server.js +396 -37
  32. package/dist/brain/mcp-server.js.map +1 -1
  33. package/dist/brain/orchestrator.d.ts +34 -0
  34. package/dist/brain/orchestrator.d.ts.map +1 -1
  35. package/dist/brain/orchestrator.js +83 -1
  36. package/dist/brain/orchestrator.js.map +1 -1
  37. package/dist/brain/plugin-system.d.ts +97 -0
  38. package/dist/brain/plugin-system.d.ts.map +1 -0
  39. package/dist/brain/plugin-system.js +404 -0
  40. package/dist/brain/plugin-system.js.map +1 -0
  41. package/dist/cli.js +429 -3
  42. package/dist/cli.js.map +1 -1
  43. package/dist/dashboard/server.d.ts +4 -0
  44. package/dist/dashboard/server.d.ts.map +1 -1
  45. package/dist/dashboard/server.js +453 -330
  46. package/dist/dashboard/server.js.map +1 -1
  47. package/dist/index.d.ts +8 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +10 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/types.d.ts +201 -1
  52. package/dist/types.d.ts.map +1 -1
  53. package/package.json +32 -4
@@ -0,0 +1,385 @@
1
+ // src/brain/consensus-engine.ts — Multi-Agent Consensus Protocol
2
+ // Voting, trust scoring, conflict resolution for shared intelligence
3
+ // v5.0.0 — Infinite Intelligence Edition
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import * as crypto from 'crypto';
7
+ const STORE_DIR = path.join(process.env.HOME || process.env.USERPROFILE || '~', '.shadow-brain', 'consensus');
8
+ const VOTE_TIMEOUT_MS = 60000; // 1 minute to vote on a proposal
9
+ const MIN_VOTES_FOR_CONSENSUS = 2;
10
+ const CONSENSUS_THRESHOLD = 0.6; // 60% agreement required
11
+ /**
12
+ * ConsensusEngine — multi-agent agreement protocol.
13
+ *
14
+ * When multiple AI agents observe the same codebase, they may produce
15
+ * conflicting insights. This engine:
16
+ *
17
+ * 1. Collects proposals from agents
18
+ * 2. Opens voting windows where agents vote accept/reject with confidence
19
+ * 3. Computes agreement scores and confidence intervals
20
+ * 4. Resolves conflicts via weighted trust scores
21
+ * 5. Tracks long-term trust for each agent based on proposal accuracy
22
+ */
23
+ export class ConsensusEngine {
24
+ constructor(agentId, customDir) {
25
+ this.proposals = new Map();
26
+ this.votes = new Map();
27
+ this.results = new Map();
28
+ this.trustScores = new Map();
29
+ this.pendingTimers = new Map();
30
+ this.agentId = agentId || `agent-${crypto.randomUUID().slice(0, 8)}`;
31
+ this.storeDir = customDir || STORE_DIR;
32
+ this.loadFromDisk();
33
+ }
34
+ // ── Proposal Management ──────────────────────────────────────────────────────
35
+ /** Submit a new proposal for consensus */
36
+ propose(content, category, confidence, evidence = []) {
37
+ const id = crypto.randomUUID();
38
+ const proposal = {
39
+ id,
40
+ proposer: this.agentId,
41
+ content,
42
+ category,
43
+ confidence,
44
+ evidence,
45
+ timestamp: new Date(),
46
+ };
47
+ this.proposals.set(id, proposal);
48
+ this.votes.set(id, []);
49
+ // Auto-vote agree for own proposal
50
+ this.vote(id, 'agree', confidence, 'Self-proposal with initial confidence');
51
+ // Set timeout for consensus resolution
52
+ const timer = setTimeout(() => {
53
+ this.resolveProposal(id);
54
+ this.pendingTimers.delete(id);
55
+ }, VOTE_TIMEOUT_MS);
56
+ this.pendingTimers.set(id, timer);
57
+ return id;
58
+ }
59
+ /** Vote on a proposal */
60
+ vote(proposalId, vote, confidence, reasoning) {
61
+ const proposal = this.proposals.get(proposalId);
62
+ if (!proposal)
63
+ return false;
64
+ const existingVotes = this.votes.get(proposalId) || [];
65
+ // Check if agent already voted
66
+ if (existingVotes.some(v => v.voter === this.agentId)) {
67
+ return false;
68
+ }
69
+ const consensusVote = {
70
+ voter: this.agentId,
71
+ proposalId,
72
+ vote,
73
+ confidence,
74
+ reasoning,
75
+ timestamp: new Date(),
76
+ };
77
+ existingVotes.push(consensusVote);
78
+ this.votes.set(proposalId, existingVotes);
79
+ // Auto-resolve if enough votes
80
+ if (existingVotes.length >= MIN_VOTES_FOR_CONSENSUS) {
81
+ this.resolveProposal(proposalId);
82
+ }
83
+ return true;
84
+ }
85
+ /** Process an incoming vote from a remote agent */
86
+ receiveVote(vote) {
87
+ const proposal = this.proposals.get(vote.proposalId);
88
+ if (!proposal)
89
+ return false;
90
+ const existingVotes = this.votes.get(vote.proposalId) || [];
91
+ // Check if voter already voted
92
+ if (existingVotes.some(v => v.voter === vote.voter)) {
93
+ return false;
94
+ }
95
+ existingVotes.push(vote);
96
+ this.votes.set(vote.proposalId, existingVotes);
97
+ // Auto-resolve if enough votes
98
+ if (existingVotes.length >= MIN_VOTES_FOR_CONSENSUS) {
99
+ this.resolveProposal(vote.proposalId);
100
+ }
101
+ return true;
102
+ }
103
+ /** Resolve a proposal by computing consensus */
104
+ resolveProposal(proposalId) {
105
+ const proposal = this.proposals.get(proposalId);
106
+ if (!proposal)
107
+ return null;
108
+ const votes = this.votes.get(proposalId) || [];
109
+ if (votes.length === 0)
110
+ return null;
111
+ // Clear pending timer if exists
112
+ const timer = this.pendingTimers.get(proposalId);
113
+ if (timer) {
114
+ clearTimeout(timer);
115
+ this.pendingTimers.delete(proposalId);
116
+ }
117
+ // Weighted vote counting — trust-weighted
118
+ let acceptWeight = 0;
119
+ let rejectWeight = 0;
120
+ let totalWeight = 0;
121
+ for (const v of votes) {
122
+ const trust = this.getTrustScore(v.voter);
123
+ const weight = trust * v.confidence;
124
+ if (v.vote === 'agree') {
125
+ acceptWeight += weight;
126
+ }
127
+ else {
128
+ rejectWeight += weight;
129
+ }
130
+ totalWeight += weight;
131
+ }
132
+ const agreementScore = totalWeight > 0 ? acceptWeight / totalWeight : 0;
133
+ // Compute confidence interval
134
+ const confidences = votes.map(v => v.confidence);
135
+ const avgConfidence = confidences.reduce((s, c) => s + c, 0) / confidences.length;
136
+ const confidenceStdDev = Math.sqrt(confidences.reduce((s, c) => s + Math.pow(c - avgConfidence, 2), 0) / confidences.length);
137
+ const confidenceInterval = [
138
+ Math.max(0, avgConfidence - 1.96 * confidenceStdDev),
139
+ Math.min(1, avgConfidence + 1.96 * confidenceStdDev),
140
+ ];
141
+ // Determine verdict
142
+ let verdict;
143
+ let conflictResolution;
144
+ if (agreementScore >= CONSENSUS_THRESHOLD) {
145
+ verdict = 'accepted';
146
+ }
147
+ else if (agreementScore <= 1 - CONSENSUS_THRESHOLD) {
148
+ verdict = 'rejected';
149
+ }
150
+ else {
151
+ // Conflict — resolve by trust-weighted proposer confidence
152
+ verdict = proposal.confidence > 0.7 ? 'accepted' : 'rejected';
153
+ conflictResolution = `Split vote (${(agreementScore * 100).toFixed(0)}% accept). Resolved by proposer confidence: ${(proposal.confidence * 100).toFixed(0)}%.`;
154
+ }
155
+ const result = {
156
+ proposal,
157
+ votes,
158
+ verdict,
159
+ agreementScore,
160
+ confidenceInterval,
161
+ resolvedAt: new Date(),
162
+ conflictResolution,
163
+ };
164
+ this.results.set(proposalId, result);
165
+ // Update trust scores based on outcome
166
+ this.updateTrustFromResult(result);
167
+ // Persist
168
+ this.persistToDisk();
169
+ return result;
170
+ }
171
+ // ── Trust Score Management ───────────────────────────────────────────────────
172
+ getTrustScore(agentId) {
173
+ const trust = this.trustScores.get(agentId);
174
+ if (!trust)
175
+ return 0.5; // Default trust for unknown agents
176
+ return trust.score;
177
+ }
178
+ getTrustScores() {
179
+ return Array.from(this.trustScores.values());
180
+ }
181
+ updateTrustFromResult(result) {
182
+ const accepted = result.verdict === 'accepted';
183
+ for (const vote of result.votes) {
184
+ const trust = this.trustScores.get(vote.voter) || {
185
+ agent: vote.voter,
186
+ score: 0.5,
187
+ totalProposals: 0,
188
+ acceptedProposals: 0,
189
+ rejectedProposals: 0,
190
+ accuracyHistory: [],
191
+ lastUpdated: new Date(),
192
+ };
193
+ trust.totalProposals++;
194
+ const agreedWithOutcome = (vote.vote === 'agree') === accepted;
195
+ if (agreedWithOutcome) {
196
+ trust.acceptedProposals++;
197
+ }
198
+ else {
199
+ trust.rejectedProposals++;
200
+ }
201
+ // Update accuracy history (keep last 100)
202
+ trust.accuracyHistory.push(agreedWithOutcome ? 1 : 0);
203
+ if (trust.accuracyHistory.length > 100) {
204
+ trust.accuracyHistory = trust.accuracyHistory.slice(-100);
205
+ }
206
+ // Recalculate trust score
207
+ const accuracy = trust.accuracyHistory.reduce((s, v) => s + v, 0) / trust.accuracyHistory.length;
208
+ const participationBonus = Math.min(0.1, trust.totalProposals * 0.005);
209
+ trust.score = Math.min(1, accuracy * 0.9 + participationBonus + 0.1);
210
+ trust.lastUpdated = new Date();
211
+ this.trustScores.set(vote.voter, trust);
212
+ }
213
+ }
214
+ /** Manually adjust trust for an agent (e.g., human override) */
215
+ setTrust(agentId, score) {
216
+ const trust = this.trustScores.get(agentId) || {
217
+ agent: agentId,
218
+ score: 0.5,
219
+ totalProposals: 0,
220
+ acceptedProposals: 0,
221
+ rejectedProposals: 0,
222
+ accuracyHistory: [],
223
+ lastUpdated: new Date(),
224
+ };
225
+ trust.score = Math.max(0, Math.min(1, score));
226
+ trust.lastUpdated = new Date();
227
+ this.trustScores.set(agentId, trust);
228
+ }
229
+ // ── Query Operations ─────────────────────────────────────────────────────────
230
+ /** Get result for a specific proposal */
231
+ getResult(proposalId) {
232
+ return this.results.get(proposalId);
233
+ }
234
+ /** Get all proposals with a specific verdict */
235
+ getByVerdict(verdict) {
236
+ return Array.from(this.results.values())
237
+ .filter(r => r.verdict === verdict);
238
+ }
239
+ /** Get proposals by category */
240
+ getByCategory(category) {
241
+ return Array.from(this.proposals.values())
242
+ .filter(p => p.category === category);
243
+ }
244
+ /** Get pending proposals (not yet resolved) */
245
+ getPending() {
246
+ return Array.from(this.proposals.keys())
247
+ .filter(id => !this.results.has(id))
248
+ .map(id => this.proposals.get(id))
249
+ .filter(Boolean);
250
+ }
251
+ // ── Statistics ────────────────────────────────────────────────────────────────
252
+ getStats() {
253
+ let accepted = 0;
254
+ let rejected = 0;
255
+ let conflict = 0;
256
+ let totalAgreement = 0;
257
+ for (const result of this.results.values()) {
258
+ if (result.verdict === 'accepted')
259
+ accepted++;
260
+ else if (result.verdict === 'rejected')
261
+ rejected++;
262
+ else
263
+ conflict++;
264
+ totalAgreement += result.agreementScore;
265
+ }
266
+ const topTrusted = Array.from(this.trustScores.values())
267
+ .sort((a, b) => b.score - a.score)
268
+ .slice(0, 10)
269
+ .map(t => ({
270
+ agent: t.agent,
271
+ score: t.score,
272
+ accuracy: t.accuracyHistory.length > 0
273
+ ? t.accuracyHistory.reduce((s, v) => s + v, 0) / t.accuracyHistory.length
274
+ : 0,
275
+ }));
276
+ return {
277
+ totalProposals: this.proposals.size,
278
+ acceptedCount: accepted,
279
+ rejectedCount: rejected,
280
+ conflictCount: conflict,
281
+ pendingCount: this.proposals.size - this.results.size,
282
+ averageAgreement: this.results.size > 0 ? totalAgreement / this.results.size : 0,
283
+ agentCount: this.trustScores.size,
284
+ topTrustedAgents: topTrusted,
285
+ };
286
+ }
287
+ // ── Persistence ──────────────────────────────────────────────────────────────
288
+ async persistToDisk() {
289
+ try {
290
+ if (!fs.existsSync(this.storeDir)) {
291
+ fs.mkdirSync(this.storeDir, { recursive: true });
292
+ }
293
+ const serialize = (obj) => {
294
+ const result = { ...obj };
295
+ for (const key of Object.keys(result)) {
296
+ const val = result[key];
297
+ if (val instanceof Date) {
298
+ result[key] = val.toISOString();
299
+ }
300
+ }
301
+ return result;
302
+ };
303
+ const data = {
304
+ proposals: Array.from(this.proposals.entries()).map(([id, p]) => [id, serialize(p)]),
305
+ votes: Array.from(this.votes.entries()).map(([id, vs]) => [
306
+ id,
307
+ vs.map(v => serialize(v)),
308
+ ]),
309
+ results: Array.from(this.results.entries()).map(([id, r]) => [
310
+ id,
311
+ {
312
+ ...serialize(r),
313
+ votes: r.votes.map(v => serialize(v)),
314
+ proposal: serialize(r.proposal),
315
+ },
316
+ ]),
317
+ trustScores: Array.from(this.trustScores.entries()).map(([id, t]) => [id, serialize(t)]),
318
+ version: '5.0.0',
319
+ };
320
+ fs.writeFileSync(path.join(this.storeDir, 'consensus-state.json'), JSON.stringify(data));
321
+ }
322
+ catch {
323
+ // Non-blocking
324
+ }
325
+ }
326
+ loadFromDisk() {
327
+ try {
328
+ const file = path.join(this.storeDir, 'consensus-state.json');
329
+ if (!fs.existsSync(file))
330
+ return;
331
+ const data = JSON.parse(fs.readFileSync(file, 'utf-8'));
332
+ const revivify = (obj) => {
333
+ const result = { ...obj };
334
+ for (const key of Object.keys(result)) {
335
+ const val = result[key];
336
+ if (typeof val === 'string' && key.endsWith('At') || key === 'timestamp' || key === 'lastUpdated') {
337
+ try {
338
+ result[key] = new Date(val);
339
+ }
340
+ catch { /* keep as string */ }
341
+ }
342
+ }
343
+ return result;
344
+ };
345
+ if (data.proposals) {
346
+ for (const [id, p] of data.proposals) {
347
+ this.proposals.set(id, revivify(p));
348
+ }
349
+ }
350
+ if (data.votes) {
351
+ for (const [id, vs] of data.votes) {
352
+ this.votes.set(id, vs.map(v => revivify(v)));
353
+ }
354
+ }
355
+ if (data.results) {
356
+ for (const [id, r] of data.results) {
357
+ const result = revivify(r);
358
+ if (result.proposal && typeof result.proposal === 'object') {
359
+ result.proposal = revivify(result.proposal);
360
+ }
361
+ if (Array.isArray(result.votes)) {
362
+ result.votes = result.votes.map(v => revivify(v));
363
+ }
364
+ this.results.set(id, result);
365
+ }
366
+ }
367
+ if (data.trustScores) {
368
+ for (const [id, t] of data.trustScores) {
369
+ this.trustScores.set(id, revivify(t));
370
+ }
371
+ }
372
+ }
373
+ catch {
374
+ // Fresh start
375
+ }
376
+ }
377
+ /** Clean up timers */
378
+ dispose() {
379
+ for (const timer of this.pendingTimers.values()) {
380
+ clearTimeout(timer);
381
+ }
382
+ this.pendingTimers.clear();
383
+ }
384
+ }
385
+ //# sourceMappingURL=consensus-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consensus-engine.js","sourceRoot":"","sources":["../../src/brain/consensus-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { RecallResult, RecallContext } from '../types.js';
2
+ import { HierarchicalMemory } from './hierarchical-memory.js';
3
+ /**
4
+ * ContextRecall — associative memory activation engine.
5
+ *
6
+ * Instead of requiring explicit search queries, this engine monitors the
7
+ * current work context (file being edited, keywords, project type, time)
8
+ * and automatically activates relevant memories.
9
+ *
10
+ * Activation triggers:
11
+ * 1. File path pattern matching (e.g., editing auth/*.ts triggers security memories)
12
+ * 2. Keyword detection (e.g., "database" triggers SQL/pattern memories)
13
+ * 3. Category association (e.g., "bug-fix" context loads past fix patterns)
14
+ * 4. Temporal patterns (time-of-day, day-of-week work habits)
15
+ * 5. Co-occurrence (memories frequently activated together strengthen their link)
16
+ */
17
+ export declare class ContextRecall {
18
+ private hierarchicalMemory;
19
+ private triggers;
20
+ private activationLinks;
21
+ private recentActivations;
22
+ private storeDir;
23
+ constructor(hierarchicalMemory: HierarchicalMemory, customDir?: string);
24
+ /** Activate memories based on current work context */
25
+ recall(context: RecallContext, topK?: number): RecallResult[];
26
+ /** Get a summary of what the brain "knows" about the current context */
27
+ getContextSummary(context: RecallContext): string;
28
+ private matchTriggers;
29
+ private triggerMatchesContext;
30
+ private learnTriggers;
31
+ private extractFilePaths;
32
+ private updateCoOccurrence;
33
+ private strengthenLink;
34
+ private buildActivationPath;
35
+ private getAllEntries;
36
+ getStats(): {
37
+ triggerCount: number;
38
+ linkCount: number;
39
+ recentActivationCount: number;
40
+ topTriggers: Array<{
41
+ pattern: string;
42
+ strength: number;
43
+ matches: number;
44
+ }>;
45
+ };
46
+ persist(): Promise<void>;
47
+ private loadFromDisk;
48
+ }
49
+ //# sourceMappingURL=context-recall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-recall.d.ts","sourceRoot":"","sources":["../../src/brain/context-recall.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,YAAY,EACZ,aAAa,EAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAwB9D;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,eAAe,CAA4C;IACnE,OAAO,CAAC,iBAAiB,CAA2E;IACpG,OAAO,CAAC,QAAQ,CAAS;gBAEb,kBAAkB,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,MAAM;IAQtE,sDAAsD;IACtD,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,GAAE,MAAW,GAAG,YAAY,EAAE;IAoGjE,wEAAwE;IACxE,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM;IA6BjD,OAAO,CAAC,aAAa;IAiJrB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,aAAa;IAiDrB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,aAAa;IAwCrB,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,WAAW,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC5E;IAqBK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC9B,OAAO,CAAC,YAAY;CAoCrB"}