@timmeck/brain-core 2.29.1 → 2.31.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.
@@ -0,0 +1,515 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ // ── Migration ───────────────────────────────────────────
3
+ export function runReasoningMigration(db) {
4
+ db.exec(`
5
+ CREATE TABLE IF NOT EXISTS inference_rules (
6
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
7
+ antecedent TEXT NOT NULL,
8
+ consequent TEXT NOT NULL,
9
+ confidence REAL NOT NULL DEFAULT 0.5,
10
+ source_type TEXT NOT NULL,
11
+ source_id TEXT NOT NULL,
12
+ domain TEXT NOT NULL DEFAULT 'general',
13
+ keywords TEXT NOT NULL DEFAULT '[]',
14
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
15
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
16
+ UNIQUE(source_type, source_id)
17
+ );
18
+
19
+ CREATE TABLE IF NOT EXISTS inference_chains (
20
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
21
+ query TEXT NOT NULL,
22
+ chain_type TEXT NOT NULL DEFAULT 'forward',
23
+ rule_ids TEXT NOT NULL DEFAULT '[]',
24
+ steps TEXT NOT NULL DEFAULT '[]',
25
+ final_confidence REAL NOT NULL DEFAULT 0,
26
+ conclusion TEXT NOT NULL DEFAULT '',
27
+ temporal_estimate_ms REAL DEFAULT NULL,
28
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
29
+ );
30
+
31
+ CREATE TABLE IF NOT EXISTS reasoning_log (
32
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
33
+ query TEXT NOT NULL,
34
+ reasoning_type TEXT NOT NULL,
35
+ result_summary TEXT NOT NULL DEFAULT '',
36
+ chain_id INTEGER DEFAULT NULL,
37
+ confidence REAL NOT NULL DEFAULT 0,
38
+ duration_ms INTEGER NOT NULL DEFAULT 0,
39
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
40
+ );
41
+
42
+ CREATE INDEX IF NOT EXISTS idx_inference_rules_source ON inference_rules(source_type, source_id);
43
+ CREATE INDEX IF NOT EXISTS idx_inference_rules_confidence ON inference_rules(confidence DESC);
44
+ CREATE INDEX IF NOT EXISTS idx_inference_chains_type ON inference_chains(chain_type);
45
+ CREATE INDEX IF NOT EXISTS idx_reasoning_log_type ON reasoning_log(reasoning_type);
46
+ `);
47
+ }
48
+ // ── Engine ──────────────────────────────────────────────
49
+ export class ReasoningEngine {
50
+ db;
51
+ config;
52
+ log = getLogger();
53
+ ts = null;
54
+ sources = {};
55
+ startTime = Date.now();
56
+ // Prepared statements
57
+ stmtUpsertRule;
58
+ stmtGetRules;
59
+ stmtGetRulesByKeywords;
60
+ stmtInsertChain;
61
+ stmtGetChain;
62
+ stmtListChains;
63
+ stmtInsertLog;
64
+ stmtCountRules;
65
+ stmtCountChains;
66
+ stmtAvgConfidence;
67
+ stmtDomains;
68
+ stmtRecentChains;
69
+ constructor(db, config) {
70
+ this.db = db;
71
+ this.config = {
72
+ brainName: config.brainName,
73
+ maxDepth: config.maxDepth ?? 5,
74
+ minConfidence: config.minConfidence ?? 0.1,
75
+ dampening: config.dampening ?? 0.95,
76
+ minSimilarity: config.minSimilarity ?? 0.15,
77
+ };
78
+ runReasoningMigration(db);
79
+ this.stmtUpsertRule = db.prepare(`
80
+ INSERT INTO inference_rules (antecedent, consequent, confidence, source_type, source_id, domain, keywords, updated_at)
81
+ VALUES (?, ?, ?, ?, ?, ?, ?, datetime('now'))
82
+ ON CONFLICT(source_type, source_id) DO UPDATE SET
83
+ antecedent = excluded.antecedent,
84
+ consequent = excluded.consequent,
85
+ confidence = excluded.confidence,
86
+ domain = excluded.domain,
87
+ keywords = excluded.keywords,
88
+ updated_at = datetime('now')
89
+ `);
90
+ this.stmtGetRules = db.prepare('SELECT * FROM inference_rules WHERE confidence >= ? ORDER BY confidence DESC LIMIT ?');
91
+ this.stmtGetRulesByKeywords = db.prepare('SELECT * FROM inference_rules WHERE confidence >= ? ORDER BY confidence DESC');
92
+ this.stmtInsertChain = db.prepare(`
93
+ INSERT INTO inference_chains (query, chain_type, rule_ids, steps, final_confidence, conclusion, temporal_estimate_ms)
94
+ VALUES (?, ?, ?, ?, ?, ?, ?)
95
+ `);
96
+ this.stmtGetChain = db.prepare('SELECT * FROM inference_chains WHERE id = ?');
97
+ this.stmtListChains = db.prepare('SELECT * FROM inference_chains ORDER BY created_at DESC LIMIT ?');
98
+ this.stmtInsertLog = db.prepare(`
99
+ INSERT INTO reasoning_log (query, reasoning_type, result_summary, chain_id, confidence, duration_ms)
100
+ VALUES (?, ?, ?, ?, ?, ?)
101
+ `);
102
+ this.stmtCountRules = db.prepare('SELECT COUNT(*) as cnt FROM inference_rules');
103
+ this.stmtCountChains = db.prepare('SELECT COUNT(*) as cnt FROM inference_chains');
104
+ this.stmtAvgConfidence = db.prepare('SELECT AVG(confidence) as avg FROM inference_rules');
105
+ this.stmtDomains = db.prepare('SELECT DISTINCT domain FROM inference_rules ORDER BY domain');
106
+ this.stmtRecentChains = db.prepare("SELECT COUNT(*) as cnt FROM inference_chains WHERE created_at >= datetime('now', '-1 day')");
107
+ }
108
+ // ── Setters ─────────────────────────────────────────────
109
+ setThoughtStream(stream) { this.ts = stream; }
110
+ setDataSources(sources) { this.sources = sources; }
111
+ // ── 1. buildRules() ─────────────────────────────────────
112
+ /** Extract inference rules from hypotheses, principles, and causal edges. */
113
+ buildRules() {
114
+ let added = 0;
115
+ let updated = 0;
116
+ // 1a. Confirmed hypotheses → IF variables/condition THEN statement
117
+ try {
118
+ const hypotheses = this.sources.getConfirmedHypotheses?.() ?? [];
119
+ for (const h of hypotheses) {
120
+ const antecedent = h.variables.length > 0
121
+ ? `IF ${h.variables.join(' AND ')}`
122
+ : `IF ${h.condition.type}`;
123
+ const consequent = h.statement;
124
+ const keywords = this.tokenize(antecedent + ' ' + consequent);
125
+ const result = this.stmtUpsertRule.run(antecedent, consequent, h.confidence, 'hypothesis', String(h.id ?? 0), 'hypothesis', JSON.stringify(keywords));
126
+ if (result.changes > 0) {
127
+ if (result.lastInsertRowid)
128
+ added++;
129
+ else
130
+ updated++;
131
+ }
132
+ }
133
+ }
134
+ catch (err) {
135
+ this.log.warn(`[reasoning] buildRules hypotheses error: ${err.message}`);
136
+ }
137
+ // 1b. High-confidence principles → statement as rule
138
+ try {
139
+ const principles = this.sources.getPrinciples?.('', 200) ?? [];
140
+ for (const p of principles) {
141
+ if (p.confidence < 0.5)
142
+ continue;
143
+ const parts = p.statement.split(/→|->|leads to|causes|implies/i);
144
+ let antecedent;
145
+ let consequent;
146
+ if (parts.length >= 2) {
147
+ antecedent = parts[0].trim();
148
+ consequent = parts.slice(1).join('→').trim();
149
+ }
150
+ else {
151
+ antecedent = 'OBSERVE';
152
+ consequent = p.statement;
153
+ }
154
+ const keywords = this.tokenize(antecedent + ' ' + consequent);
155
+ const result = this.stmtUpsertRule.run(antecedent, consequent, p.confidence, 'principle', p.id, p.domain || 'general', JSON.stringify(keywords));
156
+ if (result.changes > 0) {
157
+ if (result.lastInsertRowid)
158
+ added++;
159
+ else
160
+ updated++;
161
+ }
162
+ }
163
+ }
164
+ catch (err) {
165
+ this.log.warn(`[reasoning] buildRules principles error: ${err.message}`);
166
+ }
167
+ // 1c. Causal edges → cause→effect with strength×confidence
168
+ try {
169
+ const edges = this.sources.getCausalEdges?.(0.2) ?? [];
170
+ for (const e of edges) {
171
+ const antecedent = e.cause;
172
+ const consequent = e.effect;
173
+ const confidence = e.strength * e.confidence;
174
+ const keywords = this.tokenize(antecedent + ' ' + consequent);
175
+ const result = this.stmtUpsertRule.run(antecedent, consequent, confidence, 'causal', `${e.cause}→${e.effect}`, 'causal', JSON.stringify(keywords));
176
+ if (result.changes > 0) {
177
+ if (result.lastInsertRowid)
178
+ added++;
179
+ else
180
+ updated++;
181
+ }
182
+ }
183
+ }
184
+ catch (err) {
185
+ this.log.warn(`[reasoning] buildRules causal error: ${err.message}`);
186
+ }
187
+ const total = this.stmtCountRules.get().cnt;
188
+ this.ts?.emit('reasoning', 'analyzing', `Built ${added} new + ${updated} updated rules (${total} total)`, 'routine');
189
+ this.log.info(`[reasoning] buildRules: +${added} new, ~${updated} updated, ${total} total`);
190
+ return { added, updated, total };
191
+ }
192
+ // ── 2. infer(query) — Forward Chaining ──────────────────
193
+ /** Forward chaining inference: find logical chains starting from query keywords. */
194
+ infer(query) {
195
+ const start = Date.now();
196
+ const queryKeywords = this.tokenize(query);
197
+ if (queryKeywords.length === 0)
198
+ return null;
199
+ const allRules = this.stmtGetRulesByKeywords.all(this.config.minConfidence);
200
+ const rules = allRules.map(r => ({ ...r, keywords: JSON.parse(r.keywords) }));
201
+ // Find best starting rule by matching antecedent keywords
202
+ const steps = [];
203
+ const visited = new Set();
204
+ let currentKeywords = queryKeywords;
205
+ let cumulativeConfidence = 1.0;
206
+ for (let depth = 0; depth < this.config.maxDepth; depth++) {
207
+ const bestRule = this.findBestMatch(currentKeywords, rules, visited, 'antecedent');
208
+ if (!bestRule)
209
+ break;
210
+ cumulativeConfidence *= bestRule.confidence * this.config.dampening;
211
+ if (cumulativeConfidence < this.config.minConfidence)
212
+ break;
213
+ visited.add(bestRule.id);
214
+ steps.push({
215
+ ruleId: bestRule.id,
216
+ antecedent: bestRule.antecedent,
217
+ consequent: bestRule.consequent,
218
+ confidence: bestRule.confidence,
219
+ cumulativeConfidence,
220
+ source: `${bestRule.source_type}:${bestRule.source_id}`,
221
+ });
222
+ // Next iteration: match consequent keywords against new antecedents
223
+ currentKeywords = this.tokenize(bestRule.consequent);
224
+ }
225
+ if (steps.length === 0) {
226
+ this.stmtInsertLog.run(query, 'forward', 'no chain found', null, 0, Date.now() - start);
227
+ return null;
228
+ }
229
+ const conclusion = steps.length > 1
230
+ ? `${steps[0].antecedent} → ${steps.map(s => s.consequent).join(' → ')}`
231
+ : `${steps[0].antecedent} → ${steps[0].consequent}`;
232
+ const chain = {
233
+ query,
234
+ chain_type: 'forward',
235
+ steps,
236
+ rule_ids: steps.map(s => s.ruleId),
237
+ final_confidence: cumulativeConfidence,
238
+ conclusion,
239
+ };
240
+ // Persist
241
+ const result = this.stmtInsertChain.run(query, 'forward', JSON.stringify(chain.rule_ids), JSON.stringify(chain.steps), chain.final_confidence, chain.conclusion, null);
242
+ chain.id = Number(result.lastInsertRowid);
243
+ this.stmtInsertLog.run(query, 'forward', conclusion, chain.id, chain.final_confidence, Date.now() - start);
244
+ this.ts?.emit('reasoning', 'discovering', `Inferred: ${conclusion} (conf=${chain.final_confidence.toFixed(3)})`, chain.final_confidence > 0.5 ? 'notable' : 'routine');
245
+ return chain;
246
+ }
247
+ // ── 3. abduce(observation) — Abductive Reasoning ────────
248
+ /** Abductive reasoning: find possible explanations for an observation. */
249
+ abduce(observation) {
250
+ const start = Date.now();
251
+ const obsKeywords = this.tokenize(observation);
252
+ if (obsKeywords.length === 0)
253
+ return [];
254
+ const allRules = this.stmtGetRulesByKeywords.all(this.config.minConfidence);
255
+ const rules = allRules.map(r => ({ ...r, keywords: JSON.parse(r.keywords) }));
256
+ const explanations = [];
257
+ for (const rule of rules) {
258
+ // Match observation keywords against CONSEQUENTS (backwards!)
259
+ const consequentKeywords = this.tokenize(rule.consequent);
260
+ const overlap = this.keywordOverlap(obsKeywords, consequentKeywords);
261
+ if (overlap === 0)
262
+ continue;
263
+ const coverage = obsKeywords.length > 0 ? overlap / obsKeywords.length : 0;
264
+ const score = rule.confidence * coverage;
265
+ if (score >= this.config.minConfidence) {
266
+ explanations.push({
267
+ ruleId: rule.id,
268
+ antecedent: rule.antecedent,
269
+ consequent: rule.consequent,
270
+ confidence: rule.confidence,
271
+ coverage,
272
+ score,
273
+ source: `${rule.source_type}:${rule.source_id}`,
274
+ });
275
+ }
276
+ }
277
+ // Sort by score, top 5
278
+ explanations.sort((a, b) => b.score - a.score);
279
+ const top = explanations.slice(0, 5);
280
+ const summary = top.length > 0
281
+ ? `${top.length} explanations: ${top.map(e => e.antecedent).join(', ')}`
282
+ : 'no explanations found';
283
+ this.stmtInsertLog.run(observation, 'abductive', summary, null, top[0]?.score ?? 0, Date.now() - start);
284
+ if (top.length > 0) {
285
+ this.ts?.emit('reasoning', 'exploring', `Abduce "${observation}": ${top.length} explanations found`, 'routine');
286
+ }
287
+ return top;
288
+ }
289
+ // ── 4. temporalInfer(eventType) — Temporal Chains ───────
290
+ /** Temporal inference: trace causal chains with time delays. */
291
+ temporalInfer(eventType) {
292
+ const start = Date.now();
293
+ if (!this.sources.getCausalEffects)
294
+ return null;
295
+ const steps = [];
296
+ const visited = new Set();
297
+ let current = eventType;
298
+ let cumulativeLag = 0;
299
+ let cumulativeConf = 1.0;
300
+ visited.add(current);
301
+ for (let depth = 0; depth < this.config.maxDepth; depth++) {
302
+ const effects = this.sources.getCausalEffects(current);
303
+ if (!effects || effects.length === 0)
304
+ break;
305
+ // Pick strongest effect not yet visited
306
+ const best = effects.find(e => !visited.has(e.effect));
307
+ if (!best)
308
+ break;
309
+ visited.add(best.effect);
310
+ cumulativeLag += best.lag_ms;
311
+ cumulativeConf *= best.confidence * this.config.dampening;
312
+ if (cumulativeConf < this.config.minConfidence)
313
+ break;
314
+ steps.push({
315
+ cause: best.cause,
316
+ effect: best.effect,
317
+ lag_ms: best.lag_ms,
318
+ cumulative_lag_ms: cumulativeLag,
319
+ confidence: best.confidence,
320
+ cumulative_confidence: cumulativeConf,
321
+ });
322
+ current = best.effect;
323
+ }
324
+ if (steps.length === 0) {
325
+ this.stmtInsertLog.run(eventType, 'temporal', 'no temporal chain', null, 0, Date.now() - start);
326
+ return null;
327
+ }
328
+ // Build narrative
329
+ const parts = [eventType];
330
+ for (const s of steps) {
331
+ parts.push(`→(${s.lag_ms}ms)→ ${s.effect}`);
332
+ }
333
+ const narrative = parts.join(' ');
334
+ const chain = {
335
+ eventType,
336
+ steps,
337
+ total_lag_ms: cumulativeLag,
338
+ final_confidence: cumulativeConf,
339
+ narrative,
340
+ };
341
+ // Persist as inference chain
342
+ const result = this.stmtInsertChain.run(eventType, 'temporal', JSON.stringify(steps.map((_, i) => i)), JSON.stringify(steps), cumulativeConf, narrative, cumulativeLag);
343
+ this.stmtInsertLog.run(eventType, 'temporal', narrative, Number(result.lastInsertRowid), cumulativeConf, Date.now() - start);
344
+ this.ts?.emit('reasoning', 'analyzing', `Temporal: ${narrative}`, 'routine');
345
+ return chain;
346
+ }
347
+ // ── 5. counterfactual(event) — "What if X never happened?" ─
348
+ /** Counterfactual reasoning: what downstream effects would be lost if event never happened. */
349
+ counterfactual(event) {
350
+ const start = Date.now();
351
+ const affected = [];
352
+ const queue = [event];
353
+ const visited = new Set();
354
+ visited.add(event);
355
+ // BFS over causal graph
356
+ while (queue.length > 0) {
357
+ const current = queue.shift();
358
+ const effects = this.sources.getCausalEffects?.(current) ?? [];
359
+ for (const e of effects) {
360
+ if (!visited.has(e.effect)) {
361
+ visited.add(e.effect);
362
+ affected.push(e.effect);
363
+ queue.push(e.effect);
364
+ }
365
+ }
366
+ }
367
+ const narrative = affected.length > 0
368
+ ? `Without "${event}", ${affected.length} downstream effects would not have occurred: ${affected.join(', ')}`
369
+ : `"${event}" has no known downstream effects.`;
370
+ const result = {
371
+ event,
372
+ affected_effects: affected,
373
+ depth: visited.size - 1,
374
+ narrative,
375
+ };
376
+ // Persist
377
+ const chainResult = this.stmtInsertChain.run(event, 'counterfactual', JSON.stringify([]), JSON.stringify(affected), affected.length > 0 ? 1.0 : 0.0, narrative, null);
378
+ this.stmtInsertLog.run(event, 'counterfactual', narrative, Number(chainResult.lastInsertRowid), affected.length > 0 ? 1.0 : 0.0, Date.now() - start);
379
+ if (affected.length > 0) {
380
+ this.ts?.emit('reasoning', 'exploring', `Counterfactual: without "${event}" → ${affected.length} effects lost`, 'notable');
381
+ }
382
+ return result;
383
+ }
384
+ // ── 6. getProofTree(chainId) ────────────────────────────
385
+ /** Retrieve a stored proof tree / inference chain by ID. */
386
+ getProofTree(chainId) {
387
+ const row = this.stmtGetChain.get(chainId);
388
+ if (!row)
389
+ return null;
390
+ return this.toChain(row);
391
+ }
392
+ // ── 7. getRules(limit?, minConfidence?) ─────────────────
393
+ /** Get inference rules, optionally filtered. */
394
+ getRules(limit = 50, minConfidence = 0) {
395
+ const rows = this.stmtGetRules.all(minConfidence, limit);
396
+ return rows.map(r => this.toRule(r));
397
+ }
398
+ // ── 8. getStatus() ──────────────────────────────────────
399
+ /** Engine status and stats. */
400
+ getStatus() {
401
+ const ruleCount = this.stmtCountRules.get().cnt;
402
+ const chainCount = this.stmtCountChains.get().cnt;
403
+ const avgConf = this.stmtAvgConfidence.get().avg ?? 0;
404
+ const domains = this.stmtDomains.all().map(d => d.domain);
405
+ const recentChains = this.stmtRecentChains.get().cnt;
406
+ return {
407
+ ruleCount,
408
+ chainCount,
409
+ avgConfidence: avgConf,
410
+ domains,
411
+ recentChains,
412
+ uptime: Date.now() - this.startTime,
413
+ };
414
+ }
415
+ // ── Private helpers ─────────────────────────────────────
416
+ /** Tokenize text into bigram-aware keywords. */
417
+ tokenize(text) {
418
+ const words = text.toLowerCase()
419
+ .replace(/[^a-z0-9äöüß_\-]/g, ' ')
420
+ .split(/\s+/)
421
+ .filter(w => w.length > 2 && !STOP_WORDS.has(w));
422
+ // Deduplicate
423
+ return [...new Set(words)];
424
+ }
425
+ /** Jaccard similarity between two keyword sets. */
426
+ jaccard(a, b) {
427
+ if (a.length === 0 || b.length === 0)
428
+ return 0;
429
+ const setA = new Set(a);
430
+ const setB = new Set(b);
431
+ let intersection = 0;
432
+ for (const w of setA) {
433
+ if (setB.has(w))
434
+ intersection++;
435
+ }
436
+ const union = setA.size + setB.size - intersection;
437
+ return union > 0 ? intersection / union : 0;
438
+ }
439
+ /** Count keyword overlap. */
440
+ keywordOverlap(a, b) {
441
+ const setB = new Set(b);
442
+ let count = 0;
443
+ for (const w of a) {
444
+ if (setB.has(w))
445
+ count++;
446
+ }
447
+ return count;
448
+ }
449
+ /** Find best matching rule for given keywords. */
450
+ findBestMatch(queryKeywords, rules, visited, matchField) {
451
+ let bestRule = null;
452
+ let bestScore = 0;
453
+ for (const rule of rules) {
454
+ if (visited.has(rule.id))
455
+ continue;
456
+ const fieldKeywords = matchField === 'antecedent'
457
+ ? this.tokenize(rule.antecedent)
458
+ : this.tokenize(rule.consequent);
459
+ const sim = this.jaccard(queryKeywords, fieldKeywords);
460
+ if (sim < this.config.minSimilarity)
461
+ continue;
462
+ const score = sim * rule.confidence;
463
+ if (score > bestScore) {
464
+ bestScore = score;
465
+ bestRule = rule;
466
+ }
467
+ }
468
+ return bestRule;
469
+ }
470
+ /** Convert DB row to InferenceChain. */
471
+ toChain(row) {
472
+ return {
473
+ id: row.id,
474
+ query: row.query,
475
+ chain_type: row.chain_type,
476
+ steps: JSON.parse(row.steps || '[]'),
477
+ rule_ids: JSON.parse(row.rule_ids || '[]'),
478
+ final_confidence: row.final_confidence,
479
+ conclusion: row.conclusion,
480
+ temporal_estimate_ms: row.temporal_estimate_ms,
481
+ created_at: row.created_at,
482
+ };
483
+ }
484
+ /** Convert DB row to InferenceRule. */
485
+ toRule(row) {
486
+ return {
487
+ id: row.id,
488
+ antecedent: row.antecedent,
489
+ consequent: row.consequent,
490
+ confidence: row.confidence,
491
+ source_type: row.source_type,
492
+ source_id: row.source_id,
493
+ domain: row.domain,
494
+ keywords: JSON.parse(row.keywords || '[]'),
495
+ created_at: row.created_at,
496
+ updated_at: row.updated_at,
497
+ };
498
+ }
499
+ }
500
+ // ── Stop Words ──────────────────────────────────────────
501
+ const STOP_WORDS = new Set([
502
+ 'the', 'and', 'for', 'are', 'but', 'not', 'you', 'all', 'can', 'had',
503
+ 'her', 'was', 'one', 'our', 'out', 'has', 'have', 'been', 'will', 'with',
504
+ 'this', 'that', 'from', 'they', 'were', 'each', 'which', 'their', 'then',
505
+ 'them', 'these', 'other', 'than', 'when', 'some', 'what', 'there', 'also',
506
+ 'into', 'more', 'its', 'only', 'could', 'would', 'should', 'about',
507
+ 'does', 'did', 'just', 'how', 'where', 'who', 'may', 'most', 'over',
508
+ 'such', 'after', 'because', 'through', 'between', 'very', 'being',
509
+ 'those', 'still', 'while', 'both', 'same', 'way', 'any', 'many',
510
+ 'der', 'die', 'das', 'den', 'dem', 'des', 'ein', 'eine', 'einer',
511
+ 'und', 'ist', 'hat', 'nicht', 'sich', 'mit', 'auf', 'für', 'von',
512
+ 'als', 'auch', 'noch', 'nach', 'bei', 'aus', 'wenn', 'dass', 'oder',
513
+ 'aber', 'wie', 'wird', 'sind', 'vor', 'nur', 'über', 'kann', 'schon',
514
+ ]);
515
+ //# sourceMappingURL=reasoning-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning-engine.js","sourceRoot":"","sources":["../../src/reasoning/reasoning-engine.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@ import type { SimulationEngine } from '../metacognition/simulation-engine.js';
34
34
  import type { MemoryPalace } from '../memory-palace/memory-palace.js';
35
35
  import type { GoalEngine } from '../goals/goal-engine.js';
36
36
  import type { EvolutionEngine } from '../metacognition/evolution-engine.js';
37
+ import type { ReasoningEngine } from '../reasoning/reasoning-engine.js';
37
38
  import { AutoResponder } from './auto-responder.js';
38
39
  export interface ResearchOrchestratorConfig {
39
40
  brainName: string;
@@ -81,6 +82,7 @@ export declare class ResearchOrchestrator {
81
82
  private memoryPalace;
82
83
  private goalEngine;
83
84
  private evolutionEngine;
85
+ private reasoningEngine;
84
86
  private brainName;
85
87
  private feedbackTimer;
86
88
  private cycleCount;
@@ -138,6 +140,8 @@ export declare class ResearchOrchestrator {
138
140
  setGoalEngine(engine: GoalEngine): void;
139
141
  /** Set the EvolutionEngine — evolves parameter configurations via genetic algorithm. */
140
142
  setEvolutionEngine(engine: EvolutionEngine): void;
143
+ /** Set the ReasoningEngine — multi-step logical inference chains. */
144
+ setReasoningEngine(engine: ReasoningEngine): void;
141
145
  /** Set the PredictionEngine — wires journal into it. */
142
146
  setPredictionEngine(engine: PredictionEngine): void;
143
147
  /** Start the autonomous feedback loop timer. */
@@ -49,6 +49,7 @@ export class ResearchOrchestrator {
49
49
  memoryPalace = null;
50
50
  goalEngine = null;
51
51
  evolutionEngine = null;
52
+ reasoningEngine = null;
52
53
  brainName;
53
54
  feedbackTimer = null;
54
55
  cycleCount = 0;
@@ -159,6 +160,8 @@ export class ResearchOrchestrator {
159
160
  setGoalEngine(engine) { this.goalEngine = engine; }
160
161
  /** Set the EvolutionEngine — evolves parameter configurations via genetic algorithm. */
161
162
  setEvolutionEngine(engine) { this.evolutionEngine = engine; }
163
+ /** Set the ReasoningEngine — multi-step logical inference chains. */
164
+ setReasoningEngine(engine) { this.reasoningEngine = engine; }
162
165
  /** Set the PredictionEngine — wires journal into it. */
163
166
  setPredictionEngine(engine) {
164
167
  this.predictionEngine = engine;
@@ -1170,6 +1173,47 @@ export class ResearchOrchestrator {
1170
1173
  this.log.warn(`[orchestrator] Step 36 error: ${err.message}`);
1171
1174
  }
1172
1175
  }
1176
+ // Step 37: ReasoningEngine — build rules + run inferences (every 5 cycles)
1177
+ if (this.reasoningEngine && this.cycleCount % 5 === 0) {
1178
+ try {
1179
+ ts?.emit('reasoning', 'analyzing', 'Step 37: Building inference rules + reasoning...', 'routine');
1180
+ this.reasoningEngine.buildRules();
1181
+ // Infer on attention topics or anomalies
1182
+ const topics = this.attentionEngine?.getTopTopics?.(3) ?? [];
1183
+ const queries = topics.map((t) => t.topic);
1184
+ if (queries.length === 0) {
1185
+ const anomalies = this.anomalyDetective.getAnomalies(undefined, 3);
1186
+ for (const a of anomalies)
1187
+ queries.push(a.title);
1188
+ }
1189
+ let insights = 0;
1190
+ for (const q of queries) {
1191
+ const chain = this.reasoningEngine.infer(q);
1192
+ if (chain && chain.steps.length > 1) {
1193
+ this.journal.write({
1194
+ type: 'discovery',
1195
+ title: `Reasoning Chain: ${q}`,
1196
+ content: chain.conclusion,
1197
+ tags: [this.brainName, 'reasoning', 'inference'],
1198
+ references: [],
1199
+ significance: chain.final_confidence > 0.5 ? 'notable' : 'routine',
1200
+ data: { chain },
1201
+ });
1202
+ insights++;
1203
+ }
1204
+ // Abduce on surprising observations
1205
+ const explanations = this.reasoningEngine.abduce(q);
1206
+ if (explanations.length > 0) {
1207
+ insights++;
1208
+ }
1209
+ }
1210
+ if (this.metaCognitionLayer)
1211
+ this.metaCognitionLayer.recordStep('reasoning_engine', this.cycleCount, { insights });
1212
+ }
1213
+ catch (err) {
1214
+ this.log.warn(`[orchestrator] Step 37 error: ${err.message}`);
1215
+ }
1216
+ }
1173
1217
  const duration = Date.now() - start;
1174
1218
  ts?.emit('orchestrator', 'reflecting', `Feedback Cycle #${this.cycleCount} complete (${duration}ms)`);
1175
1219
  this.log.info(`[orchestrator] ─── Feedback Cycle #${this.cycleCount} complete (${duration}ms) ───`);
@@ -1934,6 +1978,7 @@ export class ResearchOrchestrator {
1934
1978
  simulation: this.simulationEngine?.getStatus() ?? null,
1935
1979
  memoryPalace: this.memoryPalace?.getStatus() ?? null,
1936
1980
  goals: this.goalEngine?.getStatus() ?? null,
1981
+ reasoning: this.reasoningEngine?.getStatus() ?? null,
1937
1982
  };
1938
1983
  }
1939
1984
  }