@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.
- package/README.md +515 -305
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +1 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/brain/auto-setup.d.ts +54 -0
- package/dist/brain/auto-setup.d.ts.map +1 -0
- package/dist/brain/auto-setup.js +660 -0
- package/dist/brain/auto-setup.js.map +1 -0
- package/dist/brain/brain-portability.d.ts +81 -0
- package/dist/brain/brain-portability.d.ts.map +1 -0
- package/dist/brain/brain-portability.js +329 -0
- package/dist/brain/brain-portability.js.map +1 -0
- package/dist/brain/collective-learning.d.ts +54 -0
- package/dist/brain/collective-learning.d.ts.map +1 -0
- package/dist/brain/collective-learning.js +357 -0
- package/dist/brain/collective-learning.js.map +1 -0
- package/dist/brain/consensus-engine.d.ts +65 -0
- package/dist/brain/consensus-engine.d.ts.map +1 -0
- package/dist/brain/consensus-engine.js +385 -0
- package/dist/brain/consensus-engine.js.map +1 -0
- package/dist/brain/context-recall.d.ts +49 -0
- package/dist/brain/context-recall.d.ts.map +1 -0
- package/dist/brain/context-recall.js +502 -0
- package/dist/brain/context-recall.js.map +1 -0
- package/dist/brain/hierarchical-memory.d.ts +49 -0
- package/dist/brain/hierarchical-memory.d.ts.map +1 -0
- package/dist/brain/hierarchical-memory.js +451 -0
- package/dist/brain/hierarchical-memory.js.map +1 -0
- package/dist/brain/mcp-server.d.ts +12 -0
- package/dist/brain/mcp-server.d.ts.map +1 -1
- package/dist/brain/mcp-server.js +396 -37
- package/dist/brain/mcp-server.js.map +1 -1
- package/dist/brain/orchestrator.d.ts +34 -0
- package/dist/brain/orchestrator.d.ts.map +1 -1
- package/dist/brain/orchestrator.js +83 -1
- package/dist/brain/orchestrator.js.map +1 -1
- package/dist/brain/plugin-system.d.ts +97 -0
- package/dist/brain/plugin-system.d.ts.map +1 -0
- package/dist/brain/plugin-system.js +404 -0
- package/dist/brain/plugin-system.js.map +1 -0
- package/dist/cli.js +429 -3
- package/dist/cli.js.map +1 -1
- package/dist/dashboard/server.d.ts +4 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +453 -330
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +201 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +32 -4
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
// src/brain/collective-learning.ts — Cross-Project Collective Intelligence
|
|
2
|
+
// Verified rules, viral propagation, accuracy tracking
|
|
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', 'collective');
|
|
8
|
+
const MAX_RULES = 10000;
|
|
9
|
+
const VERIFICATION_THRESHOLD = 2; // Needs 2+ verifications to be "verified"
|
|
10
|
+
const ACCURACY_THRESHOLD = 0.7; // 70% accuracy required for viral propagation
|
|
11
|
+
/**
|
|
12
|
+
* CollectiveLearning — cross-project knowledge sharing with verified rules.
|
|
13
|
+
*
|
|
14
|
+
* When an insight or pattern is discovered in one project, it can be shared
|
|
15
|
+
* as a "rule" to all other projects. Rules go through:
|
|
16
|
+
*
|
|
17
|
+
* 1. **Proposal**: A pattern is extracted and proposed as a general rule
|
|
18
|
+
* 2. **Verification**: Other agents/projects test the rule and report results
|
|
19
|
+
* 3. **Adoption**: Rules that pass verification threshold are adopted
|
|
20
|
+
* 4. **Tracking**: Accuracy is continuously tracked — rules decay if inaccurate
|
|
21
|
+
* 5. **Viral Propagation**: High-accuracy rules spread to more projects
|
|
22
|
+
*
|
|
23
|
+
* Trust model: Rules start with low trust and earn trust through verification.
|
|
24
|
+
*/
|
|
25
|
+
export class CollectiveLearning {
|
|
26
|
+
constructor(projectId, customDir) {
|
|
27
|
+
this.rules = new Map();
|
|
28
|
+
this.projectRules = new Map(); // projectId → rule IDs
|
|
29
|
+
this.projectId = projectId;
|
|
30
|
+
this.storeDir = customDir || STORE_DIR;
|
|
31
|
+
this.loadFromDisk();
|
|
32
|
+
}
|
|
33
|
+
// ── Rule Management ──────────────────────────────────────────────────────────
|
|
34
|
+
/** Propose a new rule from a discovered pattern */
|
|
35
|
+
proposeRule(content, category, originAgent, evidence = [], exceptions = []) {
|
|
36
|
+
// Check for duplicate rules
|
|
37
|
+
const contentHash = crypto
|
|
38
|
+
.createHash('sha256')
|
|
39
|
+
.update(content.toLowerCase().trim())
|
|
40
|
+
.digest('hex');
|
|
41
|
+
for (const existing of this.rules.values()) {
|
|
42
|
+
const existingHash = crypto
|
|
43
|
+
.createHash('sha256')
|
|
44
|
+
.update(existing.content.toLowerCase().trim())
|
|
45
|
+
.digest('hex');
|
|
46
|
+
if (existingHash === contentHash) {
|
|
47
|
+
// Already exists — verify it from this project
|
|
48
|
+
this.verifyRule(existing.id, true);
|
|
49
|
+
return existing.id;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const id = crypto.randomUUID();
|
|
53
|
+
const rule = {
|
|
54
|
+
id,
|
|
55
|
+
content,
|
|
56
|
+
category,
|
|
57
|
+
originProject: this.projectId,
|
|
58
|
+
originAgent,
|
|
59
|
+
verifiedBy: [],
|
|
60
|
+
verifiedCount: 0,
|
|
61
|
+
contradictCount: 0,
|
|
62
|
+
trustScore: 0.3, // Start with low trust
|
|
63
|
+
applicability: this.inferApplicability(content, category),
|
|
64
|
+
exceptions,
|
|
65
|
+
createdAt: new Date(),
|
|
66
|
+
lastVerifiedAt: new Date(),
|
|
67
|
+
timesApplied: 0,
|
|
68
|
+
timesCorrect: 0,
|
|
69
|
+
accuracy: 0.5,
|
|
70
|
+
viralScore: 0,
|
|
71
|
+
};
|
|
72
|
+
this.rules.set(id, rule);
|
|
73
|
+
// Track which rules this project knows about
|
|
74
|
+
if (!this.projectRules.has(this.projectId)) {
|
|
75
|
+
this.projectRules.set(this.projectId, new Set());
|
|
76
|
+
}
|
|
77
|
+
this.projectRules.get(this.projectId).add(id);
|
|
78
|
+
// Cap total rules
|
|
79
|
+
if (this.rules.size > MAX_RULES) {
|
|
80
|
+
this.evictWeakestRules();
|
|
81
|
+
}
|
|
82
|
+
this.persistToDisk();
|
|
83
|
+
return id;
|
|
84
|
+
}
|
|
85
|
+
/** Verify a rule (confirm or contradict from another project/agent) */
|
|
86
|
+
verifyRule(ruleId, confirmed) {
|
|
87
|
+
const rule = this.rules.get(ruleId);
|
|
88
|
+
if (!rule)
|
|
89
|
+
return false;
|
|
90
|
+
if (confirmed) {
|
|
91
|
+
rule.verifiedCount++;
|
|
92
|
+
if (!rule.verifiedBy.includes(this.projectId)) {
|
|
93
|
+
rule.verifiedBy.push(this.projectId);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
rule.contradictCount++;
|
|
98
|
+
}
|
|
99
|
+
rule.lastVerifiedAt = new Date();
|
|
100
|
+
// Recalculate trust score
|
|
101
|
+
const totalEvidence = rule.verifiedCount + rule.contradictCount;
|
|
102
|
+
if (totalEvidence > 0) {
|
|
103
|
+
const verificationRate = rule.verifiedCount / totalEvidence;
|
|
104
|
+
rule.trustScore = Math.min(1, verificationRate * 0.7 + Math.min(totalEvidence * 0.03, 0.3));
|
|
105
|
+
}
|
|
106
|
+
// Track accuracy
|
|
107
|
+
rule.accuracy = totalEvidence > 0
|
|
108
|
+
? rule.timesCorrect / Math.max(1, rule.timesApplied)
|
|
109
|
+
: 0.5;
|
|
110
|
+
// Update viral score
|
|
111
|
+
rule.viralScore = this.calculateViralScore(rule);
|
|
112
|
+
this.persistToDisk();
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
/** Record that a rule was applied and whether it was correct */
|
|
116
|
+
recordApplication(ruleId, wasCorrect) {
|
|
117
|
+
const rule = this.rules.get(ruleId);
|
|
118
|
+
if (!rule)
|
|
119
|
+
return;
|
|
120
|
+
rule.timesApplied++;
|
|
121
|
+
if (wasCorrect) {
|
|
122
|
+
rule.timesCorrect++;
|
|
123
|
+
}
|
|
124
|
+
rule.accuracy = rule.timesApplied > 0
|
|
125
|
+
? rule.timesCorrect / rule.timesApplied
|
|
126
|
+
: 0;
|
|
127
|
+
// Auto-verify based on application outcome
|
|
128
|
+
this.verifyRule(ruleId, wasCorrect);
|
|
129
|
+
}
|
|
130
|
+
// ── Rule Retrieval ────────────────────────────────────────────────────────────
|
|
131
|
+
/** Get rules applicable to a given context */
|
|
132
|
+
getApplicableRules(context, topK = 20) {
|
|
133
|
+
const candidates = [];
|
|
134
|
+
for (const rule of this.rules.values()) {
|
|
135
|
+
let score = rule.trustScore * 0.4 + rule.accuracy * 0.3 + rule.viralScore * 0.2;
|
|
136
|
+
// Category match
|
|
137
|
+
if (context.category && rule.category === context.category) {
|
|
138
|
+
score += 0.2;
|
|
139
|
+
}
|
|
140
|
+
// Applicability match
|
|
141
|
+
if (context.projectType && rule.applicability.includes(context.projectType)) {
|
|
142
|
+
score += 0.15;
|
|
143
|
+
}
|
|
144
|
+
// Keyword overlap
|
|
145
|
+
if (context.keywords) {
|
|
146
|
+
const ruleLower = rule.content.toLowerCase();
|
|
147
|
+
const matches = context.keywords.filter(k => ruleLower.includes(k.toLowerCase())).length;
|
|
148
|
+
score += Math.min(0.2, matches * 0.05);
|
|
149
|
+
}
|
|
150
|
+
// File path relevance
|
|
151
|
+
if (context.files) {
|
|
152
|
+
for (const file of context.files) {
|
|
153
|
+
if (rule.content.toLowerCase().includes(path.extname(file).slice(1))) {
|
|
154
|
+
score += 0.1;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Only include rules with minimum trust
|
|
159
|
+
if (score > 0.3) {
|
|
160
|
+
candidates.push({ rule, score });
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
candidates.sort((a, b) => b.score - a.score);
|
|
164
|
+
return candidates.slice(0, topK).map(c => c.rule);
|
|
165
|
+
}
|
|
166
|
+
/** Get rules proposed by a specific project */
|
|
167
|
+
getByOrigin(projectId) {
|
|
168
|
+
return Array.from(this.rules.values())
|
|
169
|
+
.filter(r => r.originProject === projectId);
|
|
170
|
+
}
|
|
171
|
+
/** Get rules verified by a specific project */
|
|
172
|
+
getVerifiedBy(projectId) {
|
|
173
|
+
return Array.from(this.rules.values())
|
|
174
|
+
.filter(r => r.verifiedBy.includes(projectId));
|
|
175
|
+
}
|
|
176
|
+
/** Get all verified rules (above verification threshold) */
|
|
177
|
+
getVerifiedRules() {
|
|
178
|
+
return Array.from(this.rules.values())
|
|
179
|
+
.filter(r => r.verifiedCount >= VERIFICATION_THRESHOLD && r.accuracy >= ACCURACY_THRESHOLD);
|
|
180
|
+
}
|
|
181
|
+
/** Get a specific rule by ID */
|
|
182
|
+
get(ruleId) {
|
|
183
|
+
return this.rules.get(ruleId);
|
|
184
|
+
}
|
|
185
|
+
// ── Viral Propagation ────────────────────────────────────────────────────────
|
|
186
|
+
/** Export high-value rules for sharing with other projects/agents */
|
|
187
|
+
exportViralRules() {
|
|
188
|
+
return this.getVerifiedRules()
|
|
189
|
+
.filter(r => r.viralScore > 0.5)
|
|
190
|
+
.sort((a, b) => b.viralScore - a.viralScore);
|
|
191
|
+
}
|
|
192
|
+
/** Import rules from another project/agent */
|
|
193
|
+
importRules(rules) {
|
|
194
|
+
let imported = 0;
|
|
195
|
+
for (const rule of rules) {
|
|
196
|
+
const existing = this.rules.get(rule.id);
|
|
197
|
+
if (existing) {
|
|
198
|
+
// Merge verification data
|
|
199
|
+
existing.verifiedCount = Math.max(existing.verifiedCount, rule.verifiedCount);
|
|
200
|
+
existing.contradictCount = Math.max(existing.contradictCount, rule.contradictCount);
|
|
201
|
+
existing.trustScore = Math.max(existing.trustScore, rule.trustScore);
|
|
202
|
+
// Merge verifiedBy
|
|
203
|
+
for (const verifier of rule.verifiedBy) {
|
|
204
|
+
if (!existing.verifiedBy.includes(verifier)) {
|
|
205
|
+
existing.verifiedBy.push(verifier);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Take higher accuracy
|
|
209
|
+
existing.accuracy = Math.max(existing.accuracy, rule.accuracy);
|
|
210
|
+
existing.viralScore = Math.max(existing.viralScore, rule.viralScore);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
this.rules.set(rule.id, { ...rule });
|
|
214
|
+
imported++;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (imported > 0) {
|
|
218
|
+
this.persistToDisk();
|
|
219
|
+
}
|
|
220
|
+
return imported;
|
|
221
|
+
}
|
|
222
|
+
// ── Internal Helpers ─────────────────────────────────────────────────────────
|
|
223
|
+
calculateViralScore(rule) {
|
|
224
|
+
const verificationScore = Math.min(1, rule.verifiedCount * 0.15);
|
|
225
|
+
const accuracyScore = rule.accuracy;
|
|
226
|
+
const reachScore = Math.min(1, rule.verifiedBy.length * 0.1);
|
|
227
|
+
const ageBonus = Math.min(0.1, (Date.now() - rule.createdAt.getTime()) / (1000 * 60 * 60 * 24 * 30) * 0.02);
|
|
228
|
+
return verificationScore * 0.3 + accuracyScore * 0.4 + reachScore * 0.2 + ageBonus;
|
|
229
|
+
}
|
|
230
|
+
inferApplicability(content, category) {
|
|
231
|
+
const applicability = ['general'];
|
|
232
|
+
const lower = content.toLowerCase();
|
|
233
|
+
const techMap = {
|
|
234
|
+
'typescript': ['typescript', 'frontend', 'backend'],
|
|
235
|
+
'javascript': ['javascript', 'frontend', 'backend'],
|
|
236
|
+
'python': ['python', 'backend', 'ml'],
|
|
237
|
+
'react': ['react', 'frontend'],
|
|
238
|
+
'vue': ['vue', 'frontend'],
|
|
239
|
+
'angular': ['angular', 'frontend'],
|
|
240
|
+
'node': ['node', 'backend'],
|
|
241
|
+
'express': ['express', 'backend'],
|
|
242
|
+
'sql': ['database', 'sql'],
|
|
243
|
+
'mongodb': ['database', 'mongodb'],
|
|
244
|
+
'docker': ['devops', 'docker'],
|
|
245
|
+
'kubernetes': ['devops', 'kubernetes'],
|
|
246
|
+
'aws': ['cloud', 'aws'],
|
|
247
|
+
'gcp': ['cloud', 'gcp'],
|
|
248
|
+
'security': ['security'],
|
|
249
|
+
'performance': ['performance'],
|
|
250
|
+
'testing': ['testing'],
|
|
251
|
+
};
|
|
252
|
+
for (const [keyword, tags] of Object.entries(techMap)) {
|
|
253
|
+
if (lower.includes(keyword) || category.includes(keyword)) {
|
|
254
|
+
applicability.push(...tags);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return [...new Set(applicability)];
|
|
258
|
+
}
|
|
259
|
+
evictWeakestRules() {
|
|
260
|
+
const sorted = Array.from(this.rules.entries())
|
|
261
|
+
.sort((a, b) => a[1].trustScore * a[1].accuracy - b[1].trustScore * b[1].accuracy);
|
|
262
|
+
// Remove bottom 10%
|
|
263
|
+
const toRemove = Math.floor(sorted.length * 0.1);
|
|
264
|
+
for (let i = 0; i < toRemove; i++) {
|
|
265
|
+
this.rules.delete(sorted[i][0]);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// ── Statistics ────────────────────────────────────────────────────────────────
|
|
269
|
+
getStats() {
|
|
270
|
+
const rules = Array.from(this.rules.values());
|
|
271
|
+
const verified = rules.filter(r => r.verifiedCount >= VERIFICATION_THRESHOLD);
|
|
272
|
+
const categoryCount = new Map();
|
|
273
|
+
for (const rule of rules) {
|
|
274
|
+
categoryCount.set(rule.category, (categoryCount.get(rule.category) || 0) + 1);
|
|
275
|
+
}
|
|
276
|
+
const topCategories = Array.from(categoryCount.entries())
|
|
277
|
+
.sort((a, b) => b[1] - a[1])
|
|
278
|
+
.slice(0, 10)
|
|
279
|
+
.map(([cat, count]) => {
|
|
280
|
+
const catRules = rules.filter(r => r.category === cat);
|
|
281
|
+
const avgAcc = catRules.length > 0
|
|
282
|
+
? catRules.reduce((s, r) => s + r.accuracy, 0) / catRules.length
|
|
283
|
+
: 0;
|
|
284
|
+
return { category: cat, count, avgAccuracy: avgAcc };
|
|
285
|
+
});
|
|
286
|
+
const avgAccuracy = verified.length > 0
|
|
287
|
+
? verified.reduce((s, r) => s + r.accuracy, 0) / verified.length
|
|
288
|
+
: 0;
|
|
289
|
+
const recentRules = rules
|
|
290
|
+
.filter(r => Date.now() - r.createdAt.getTime() < 7 * 24 * 60 * 60 * 1000)
|
|
291
|
+
.length;
|
|
292
|
+
return {
|
|
293
|
+
totalRules: rules.length,
|
|
294
|
+
verifiedRules: verified.length,
|
|
295
|
+
averageAccuracy: avgAccuracy,
|
|
296
|
+
topCategories,
|
|
297
|
+
recentAdoptions: recentRules,
|
|
298
|
+
consensusRate: rules.length > 0
|
|
299
|
+
? rules.filter(r => r.verifiedCount > 0).length / rules.length
|
|
300
|
+
: 0,
|
|
301
|
+
networkSize: new Set(rules.flatMap(r => r.verifiedBy)).size,
|
|
302
|
+
knowledgeBaseSizeMB: 0, // Approximate — would need actual file size
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
// ── Persistence ──────────────────────────────────────────────────────────────
|
|
306
|
+
persistToDisk() {
|
|
307
|
+
try {
|
|
308
|
+
if (!fs.existsSync(this.storeDir)) {
|
|
309
|
+
fs.mkdirSync(this.storeDir, { recursive: true });
|
|
310
|
+
}
|
|
311
|
+
const data = {
|
|
312
|
+
rules: Array.from(this.rules.entries()).map(([id, r]) => [
|
|
313
|
+
id,
|
|
314
|
+
{
|
|
315
|
+
...r,
|
|
316
|
+
createdAt: r.createdAt.toISOString(),
|
|
317
|
+
lastVerifiedAt: r.lastVerifiedAt.toISOString(),
|
|
318
|
+
},
|
|
319
|
+
]),
|
|
320
|
+
projectRules: Array.from(this.projectRules.entries()).map(([pid, rids]) => [
|
|
321
|
+
pid,
|
|
322
|
+
Array.from(rids),
|
|
323
|
+
]),
|
|
324
|
+
version: '5.0.0',
|
|
325
|
+
};
|
|
326
|
+
fs.writeFileSync(path.join(this.storeDir, 'collective-rules.json'), JSON.stringify(data));
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
// Non-blocking
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
loadFromDisk() {
|
|
333
|
+
try {
|
|
334
|
+
const file = path.join(this.storeDir, 'collective-rules.json');
|
|
335
|
+
if (!fs.existsSync(file))
|
|
336
|
+
return;
|
|
337
|
+
const data = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
338
|
+
if (data.rules) {
|
|
339
|
+
for (const [id, r] of data.rules) {
|
|
340
|
+
const rule = { ...r };
|
|
341
|
+
rule.createdAt = new Date(r.createdAt);
|
|
342
|
+
rule.lastVerifiedAt = new Date(r.lastVerifiedAt);
|
|
343
|
+
this.rules.set(id, rule);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (data.projectRules) {
|
|
347
|
+
for (const [pid, rids] of data.projectRules) {
|
|
348
|
+
this.projectRules.set(pid, new Set(rids));
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
// Fresh start
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=collective-learning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collective-learning.js","sourceRoot":"","sources":["../../src/brain/collective-learning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ConsensusProposal, ConsensusVote, ConsensusResult, TrustScore } from '../types.js';
|
|
2
|
+
type Verdict = 'accepted' | 'rejected' | 'conflict' | 'pending';
|
|
3
|
+
/**
|
|
4
|
+
* ConsensusEngine — multi-agent agreement protocol.
|
|
5
|
+
*
|
|
6
|
+
* When multiple AI agents observe the same codebase, they may produce
|
|
7
|
+
* conflicting insights. This engine:
|
|
8
|
+
*
|
|
9
|
+
* 1. Collects proposals from agents
|
|
10
|
+
* 2. Opens voting windows where agents vote accept/reject with confidence
|
|
11
|
+
* 3. Computes agreement scores and confidence intervals
|
|
12
|
+
* 4. Resolves conflicts via weighted trust scores
|
|
13
|
+
* 5. Tracks long-term trust for each agent based on proposal accuracy
|
|
14
|
+
*/
|
|
15
|
+
export declare class ConsensusEngine {
|
|
16
|
+
private proposals;
|
|
17
|
+
private votes;
|
|
18
|
+
private results;
|
|
19
|
+
private trustScores;
|
|
20
|
+
private pendingTimers;
|
|
21
|
+
private storeDir;
|
|
22
|
+
private agentId;
|
|
23
|
+
constructor(agentId?: string, customDir?: string);
|
|
24
|
+
/** Submit a new proposal for consensus */
|
|
25
|
+
propose(content: string, category: string, confidence: number, evidence?: string[]): string;
|
|
26
|
+
/** Vote on a proposal */
|
|
27
|
+
vote(proposalId: string, vote: 'agree' | 'disagree' | 'abstain', confidence: number, reasoning: string): boolean;
|
|
28
|
+
/** Process an incoming vote from a remote agent */
|
|
29
|
+
receiveVote(vote: ConsensusVote): boolean;
|
|
30
|
+
/** Resolve a proposal by computing consensus */
|
|
31
|
+
resolveProposal(proposalId: string): ConsensusResult | null;
|
|
32
|
+
private getTrustScore;
|
|
33
|
+
getTrustScores(): TrustScore[];
|
|
34
|
+
private updateTrustFromResult;
|
|
35
|
+
/** Manually adjust trust for an agent (e.g., human override) */
|
|
36
|
+
setTrust(agentId: string, score: number): void;
|
|
37
|
+
/** Get result for a specific proposal */
|
|
38
|
+
getResult(proposalId: string): ConsensusResult | undefined;
|
|
39
|
+
/** Get all proposals with a specific verdict */
|
|
40
|
+
getByVerdict(verdict: Verdict): ConsensusResult[];
|
|
41
|
+
/** Get proposals by category */
|
|
42
|
+
getByCategory(category: string): ConsensusProposal[];
|
|
43
|
+
/** Get pending proposals (not yet resolved) */
|
|
44
|
+
getPending(): ConsensusProposal[];
|
|
45
|
+
getStats(): {
|
|
46
|
+
totalProposals: number;
|
|
47
|
+
acceptedCount: number;
|
|
48
|
+
rejectedCount: number;
|
|
49
|
+
conflictCount: number;
|
|
50
|
+
pendingCount: number;
|
|
51
|
+
averageAgreement: number;
|
|
52
|
+
agentCount: number;
|
|
53
|
+
topTrustedAgents: Array<{
|
|
54
|
+
agent: string;
|
|
55
|
+
score: number;
|
|
56
|
+
accuracy: number;
|
|
57
|
+
}>;
|
|
58
|
+
};
|
|
59
|
+
private persistToDisk;
|
|
60
|
+
private loadFromDisk;
|
|
61
|
+
/** Clean up timers */
|
|
62
|
+
dispose(): void;
|
|
63
|
+
}
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=consensus-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consensus-engine.d.ts","sourceRoot":"","sources":["../../src/brain/consensus-engine.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,UAAU,EACX,MAAM,aAAa,CAAC;AAWrB,KAAK,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAEhE;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAQhD,0CAA0C;IAC1C,OAAO,CACL,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAM,EAAO,GACtB,MAAM;IA8BT,yBAAyB;IACzB,IAAI,CACF,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,EACtC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO;IA+BV,mDAAmD;IACnD,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAsBzC,gDAAgD;IAChD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAiF3D,OAAO,CAAC,aAAa;IAMrB,cAAc,IAAI,UAAU,EAAE;IAI9B,OAAO,CAAC,qBAAqB;IAuC7B,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAiB9C,yCAAyC;IACzC,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI1D,gDAAgD;IAChD,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,EAAE;IAKjD,gCAAgC;IAChC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAKpD,+CAA+C;IAC/C,UAAU,IAAI,iBAAiB,EAAE;IASjC,QAAQ,IAAI;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC7E;YAsCa,aAAa;IA4C3B,OAAO,CAAC,YAAY;IAqDpB,sBAAsB;IACtB,OAAO,IAAI,IAAI;CAMhB"}
|