@timmeck/brain-core 2.36.50 → 2.36.52

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.
@@ -74,7 +74,7 @@ export class DreamEngine {
74
74
  minClusterSize: config.minClusterSize ?? 2,
75
75
  importanceDecayRate: config.importanceDecayRate ?? 0.5,
76
76
  importanceDecayAfterDays: config.importanceDecayAfterDays ?? 30,
77
- archiveImportanceThreshold: config.archiveImportanceThreshold ?? 1,
77
+ archiveImportanceThreshold: config.archiveImportanceThreshold ?? 3,
78
78
  dreamPruneThreshold: config.dreamPruneThreshold ?? 0.15,
79
79
  dreamLearningRate: config.dreamLearningRate ?? 0.15,
80
80
  maxConsolidationsPerCycle: config.maxConsolidationsPerCycle ?? 5,
@@ -4,7 +4,7 @@ export interface GoalEngineConfig {
4
4
  brainName: string;
5
5
  /** Maximum active goals at once. Default: 10 */
6
6
  maxActiveGoals?: number;
7
- /** Minimum data points for forecast. Default: 3 */
7
+ /** Minimum data points for forecast. Default: 8 */
8
8
  minForecastCycles?: number;
9
9
  }
10
10
  export type GoalType = 'metric_target' | 'discovery' | 'quality' | 'custom';
@@ -59,7 +59,7 @@ export class GoalEngine {
59
59
  this.config = {
60
60
  brainName: config.brainName,
61
61
  maxActiveGoals: config.maxActiveGoals ?? 10,
62
- minForecastCycles: config.minForecastCycles ?? 3,
62
+ minForecastCycles: config.minForecastCycles ?? 8,
63
63
  };
64
64
  runGoalEngineMigration(db);
65
65
  this.stmtCreateGoal = db.prepare(`
@@ -81,6 +81,9 @@ export class PeerNetwork {
81
81
  catch { /* ignore */ }
82
82
  this.socket = null;
83
83
  }
84
+ // Clear callback references to prevent memory leaks
85
+ this.onDiscoveredCallbacks = [];
86
+ this.onLostCallbacks = [];
84
87
  }
85
88
  announce() {
86
89
  if (!this.socket)
@@ -1 +1 @@
1
- {"version":3,"file":"peer-network.js","sourceRoot":"","sources":["../../src/peer-network/peer-network.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"peer-network.js","sourceRoot":"","sources":["../../src/peer-network/peer-network.ts"],"names":[],"mappings":"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"}
@@ -222,6 +222,7 @@ export class PredictionEngine {
222
222
  const expired = this.tracker.getPendingExpired();
223
223
  for (const pred of expired) {
224
224
  this.tracker.markExpired(pred.prediction_id);
225
+ this.db.prepare(`UPDATE prediction_state SET total_resolved = total_resolved + 1, updated_at = datetime('now') WHERE id = 1`).run();
225
226
  resolved++;
226
227
  }
227
228
  // 2. Resolve predictions past their horizon
@@ -236,7 +237,11 @@ export class PredictionEngine {
236
237
  )
237
238
  `).get(pred.metric, pred.created_at);
238
239
  if (row?.avg_value != null) {
239
- this.tracker.resolve(pred.prediction_id, row.avg_value);
240
+ const status = this.tracker.resolve(pred.prediction_id, row.avg_value);
241
+ this.db.prepare(`UPDATE prediction_state SET total_resolved = total_resolved + 1, updated_at = datetime('now') WHERE id = 1`).run();
242
+ if (status === 'correct') {
243
+ this.db.prepare(`UPDATE prediction_state SET total_correct = total_correct + 1 WHERE id = 1`).run();
244
+ }
240
245
  resolved++;
241
246
  }
242
247
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prediction-engine.js","sourceRoot":"","sources":["../../src/prediction/prediction-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prediction-engine.js","sourceRoot":"","sources":["../../src/prediction/prediction-engine.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ export interface ReasoningEngineConfig {
4
4
  brainName: string;
5
5
  /** Max inference chain depth. Default: 5 */
6
6
  maxDepth?: number;
7
- /** Min confidence to continue chain. Default: 0.1 */
7
+ /** Min confidence to continue chain. Default: 0.3 */
8
8
  minConfidence?: number;
9
9
  /** Confidence dampening per step. Default: 0.95 */
10
10
  dampening?: number;
@@ -71,7 +71,7 @@ export class ReasoningEngine {
71
71
  this.config = {
72
72
  brainName: config.brainName,
73
73
  maxDepth: config.maxDepth ?? 5,
74
- minConfidence: config.minConfidence ?? 0.1,
74
+ minConfidence: config.minConfidence ?? 0.3,
75
75
  dampening: config.dampening ?? 0.95,
76
76
  minSimilarity: config.minSimilarity ?? 0.15,
77
77
  };
@@ -97,6 +97,7 @@ export declare class ResearchOrchestrator {
97
97
  private dataScout;
98
98
  private simulationEngine;
99
99
  private memoryPalace;
100
+ private memoryPalaceRagRegistered;
100
101
  private goalEngine;
101
102
  private evolutionEngine;
102
103
  private reasoningEngine;
@@ -120,6 +121,10 @@ export declare class ResearchOrchestrator {
120
121
  private featureExtractor;
121
122
  private contradictionResolver;
122
123
  private checkpointManager;
124
+ private feedbackEngine;
125
+ private userModelEngine;
126
+ private consensusEngine;
127
+ private traceCollector;
123
128
  private lastAutoMissionTime;
124
129
  private onSuggestionCallback;
125
130
  private db;
@@ -221,6 +226,14 @@ export declare class ResearchOrchestrator {
221
226
  setFeatureExtractor(extractor: import('../codegen/feature-extractor.js').FeatureExtractor): void;
222
227
  setContradictionResolver(resolver: import('../knowledge-graph/contradiction-resolver.js').ContradictionResolver): void;
223
228
  setCheckpointManager(cm: import('../checkpoint/checkpoint-manager.js').CheckpointManager): void;
229
+ /** Set the FeedbackEngine — RLHF auto-feedback from cycle results. */
230
+ setFeedbackEngine(engine: import('../feedback/feedback-engine.js').FeedbackEngine): void;
231
+ /** Set the UserModel — profile tracking from orchestrator cycles. */
232
+ setUserModel(model: import('../user-model/user-model.js').UserModel): void;
233
+ /** Set the ConsensusEngine — auto-proposals for risky self-modifications. */
234
+ setConsensusEngine(engine: import('../consensus/consensus-engine.js').ConsensusEngine): void;
235
+ /** Set the TraceCollector — auto-instrumentation of research cycles. */
236
+ setTraceCollector(collector: import('../observability/trace-collector.js').TraceCollector): void;
224
237
  /** Set the LLMService — propagates to all engines that can use LLM. */
225
238
  setLLMService(llm: LLMService): void;
226
239
  /** Get the LLMService instance. */
@@ -48,6 +48,7 @@ export class ResearchOrchestrator {
48
48
  dataScout = null;
49
49
  simulationEngine = null;
50
50
  memoryPalace = null;
51
+ memoryPalaceRagRegistered = false;
51
52
  goalEngine = null;
52
53
  evolutionEngine = null;
53
54
  reasoningEngine = null;
@@ -71,6 +72,10 @@ export class ResearchOrchestrator {
71
72
  featureExtractor = null;
72
73
  contradictionResolver = null;
73
74
  checkpointManager = null;
75
+ feedbackEngine = null;
76
+ userModelEngine = null;
77
+ consensusEngine = null;
78
+ traceCollector = null;
74
79
  lastAutoMissionTime = 0;
75
80
  onSuggestionCallback = null;
76
81
  db;
@@ -243,6 +248,14 @@ export class ResearchOrchestrator {
243
248
  setFeatureExtractor(extractor) { this.featureExtractor = extractor; }
244
249
  setContradictionResolver(resolver) { this.contradictionResolver = resolver; }
245
250
  setCheckpointManager(cm) { this.checkpointManager = cm; }
251
+ /** Set the FeedbackEngine — RLHF auto-feedback from cycle results. */
252
+ setFeedbackEngine(engine) { this.feedbackEngine = engine; }
253
+ /** Set the UserModel — profile tracking from orchestrator cycles. */
254
+ setUserModel(model) { this.userModelEngine = model; }
255
+ /** Set the ConsensusEngine — auto-proposals for risky self-modifications. */
256
+ setConsensusEngine(engine) { this.consensusEngine = engine; }
257
+ /** Set the TraceCollector — auto-instrumentation of research cycles. */
258
+ setTraceCollector(collector) { this.traceCollector = collector; }
246
259
  /** Set the LLMService — propagates to all engines that can use LLM. */
247
260
  setLLMService(llm) {
248
261
  this.llmService = llm;
@@ -339,6 +352,14 @@ export class ResearchOrchestrator {
339
352
  const start = Date.now();
340
353
  const ts = this.thoughtStream;
341
354
  this.log.info(`[orchestrator] ─── Feedback Cycle #${this.cycleCount} ───`);
355
+ // Fix 6: Auto-instrument research cycles with TraceCollector
356
+ let traceId;
357
+ if (this.traceCollector) {
358
+ try {
359
+ traceId = this.traceCollector.startTrace('research_cycle', { cycle: this.cycleCount, brainName: this.brainName });
360
+ }
361
+ catch { /* tracing should never break the cycle */ }
362
+ }
342
363
  ts?.emit('orchestrator', 'perceiving', `Feedback Cycle #${this.cycleCount} starting...`);
343
364
  // Bootstrap: seed initial data on first cycle so engines have something to work with
344
365
  if (this.cycleCount === 1 && this.bootstrapService) {
@@ -743,6 +764,14 @@ export class ResearchOrchestrator {
743
764
  if (resolved > 0) {
744
765
  this.log.info(`[orchestrator] Predictions resolved: ${resolved}`);
745
766
  ts?.emit('prediction', 'predicting', `Resolved ${resolved} prediction${resolved > 1 ? 's' : ''}`);
767
+ // Cross-module: Prediction→Goal — feed accuracy into goal tracking
768
+ if (this.goalEngine) {
769
+ try {
770
+ const summary = this.predictionEngine.getSummary();
771
+ this.goalEngine.recordProgress(this.cycleCount, { predictionAccuracy: summary.accuracy_rate });
772
+ }
773
+ catch { /* goal recording non-critical */ }
774
+ }
746
775
  }
747
776
  ts?.emit('prediction', 'predicting', 'Generating new predictions...');
748
777
  const newPredictions = this.predictionEngine.autoPredictAll();
@@ -823,8 +852,8 @@ export class ResearchOrchestrator {
823
852
  }
824
853
  this.feedExperimentMeasurements(anomalies.length, insights.length);
825
854
  }
826
- // 13. Periodic Dream Consolidation: don't wait for idle, consolidate every 10 cycles
827
- if (this.dreamEngine && this.cycleCount % 10 === 0) {
855
+ // 13. Periodic Dream Consolidation: don't wait for idle, consolidate every 5 cycles
856
+ if (this.dreamEngine && this.cycleCount % 5 === 0) {
828
857
  ts?.emit('dream', 'dreaming', 'Feeding knowledge into memories for consolidation...');
829
858
  try {
830
859
  // Feed current knowledge into memories table so consolidation has material
@@ -943,6 +972,20 @@ export class ResearchOrchestrator {
943
972
  metadata: { type: c.type, statement_a: c.statement_a.substring(0, 100), statement_b: c.statement_b.substring(0, 100) },
944
973
  });
945
974
  }
975
+ // Cross-module: Narrative→Emotion — contradictions signal cognitive dissonance
976
+ if (this.emotionalModel && highSeverity.length > 0) {
977
+ try {
978
+ // Record contradiction observations so sense() picks up stress/frustration
979
+ this.hypothesisEngine.observe({
980
+ source: this.brainName,
981
+ type: 'high_severity_contradiction',
982
+ value: highSeverity.length,
983
+ timestamp: now,
984
+ metadata: { contradictionCount: contradictions.length, highSeverityCount: highSeverity.length },
985
+ });
986
+ }
987
+ catch { /* emotional signaling non-critical */ }
988
+ }
946
989
  // 17a. Actively resolve contradictions — lower confidence of weaker side
947
990
  let resolved = 0;
948
991
  for (const c of highSeverity.slice(0, 5)) {
@@ -1334,8 +1377,8 @@ export class ResearchOrchestrator {
1334
1377
  this.log.warn(`[orchestrator] Step 25 error: ${err.message}`);
1335
1378
  }
1336
1379
  }
1337
- // Step 26: Dream Retrospective — analyze pruning regret (every 10 cycles)
1338
- if (this.dreamEngine && this.cycleCount % 10 === 0) {
1380
+ // Step 26: Dream Retrospective — analyze pruning regret (every 5 cycles)
1381
+ if (this.dreamEngine && this.cycleCount % 5 === 0) {
1339
1382
  try {
1340
1383
  ts?.emit('orchestrator', 'reflecting', 'Step 26: Analyzing dream retrospective...', 'routine');
1341
1384
  const retrospectives = this.dreamEngine.analyzeRetrospective(5);
@@ -1445,8 +1488,8 @@ export class ResearchOrchestrator {
1445
1488
  this.log.warn(`[orchestrator] Step 30 error: ${err.message}`);
1446
1489
  }
1447
1490
  }
1448
- // Step 31: Meta-Trends — record system-wide trend data every cycle
1449
- if (this.metaCognitionLayer) {
1491
+ // Step 31: Meta-Trends — record system-wide trend data (every 5 cycles)
1492
+ if (this.metaCognitionLayer && this.cycleCount % 5 === 0) {
1450
1493
  try {
1451
1494
  const totalPrinciples = this.knowledgeDistiller.getPrinciples(undefined, 1000).length;
1452
1495
  const hypothesisSummary = this.hypothesisEngine.getSummary();
@@ -1488,6 +1531,15 @@ export class ResearchOrchestrator {
1488
1531
  significance: 'routine',
1489
1532
  data: { simulation: sim },
1490
1533
  });
1534
+ // Cross-module: Simulation→Prediction — feed predicted outcomes as synthetic metrics
1535
+ if (this.predictionEngine && sim.predictedOutcomes.length > 0) {
1536
+ try {
1537
+ for (const outcome of sim.predictedOutcomes) {
1538
+ this.predictionEngine.recordMetric(`sim_${outcome.metric}`, outcome.predicted * outcome.confidence, 'metric');
1539
+ }
1540
+ }
1541
+ catch { /* simulation metric recording non-critical */ }
1542
+ }
1491
1543
  if (this.metaCognitionLayer)
1492
1544
  this.metaCognitionLayer.recordStep('simulation', this.cycleCount, { predictions: sim.predictedOutcomes.length });
1493
1545
  }
@@ -1511,6 +1563,19 @@ export class ResearchOrchestrator {
1511
1563
  data: { memoryPalace: result },
1512
1564
  });
1513
1565
  }
1566
+ // Cross-module: MemoryPalace→RAG — index new connections for semantic search (once)
1567
+ if (result.newConnections > 0 && this.ragIndexer && !this.memoryPalaceRagRegistered) {
1568
+ try {
1569
+ this.ragIndexer.addSource({
1570
+ collection: 'memory_palace',
1571
+ query: `SELECT id, source_type || ':' || source_id || ' —[' || relation || ']→ ' || target_type || ':' || target_id as text FROM knowledge_connections ORDER BY strength DESC LIMIT 100`,
1572
+ textColumns: ['text'],
1573
+ idColumn: 'id',
1574
+ });
1575
+ this.memoryPalaceRagRegistered = true;
1576
+ }
1577
+ catch { /* source registration non-critical */ }
1578
+ }
1514
1579
  // Check for isolated knowledge
1515
1580
  const isolated = this.memoryPalace.getIsolatedNodes();
1516
1581
  if (isolated.length > 5) {
@@ -1622,6 +1687,19 @@ export class ResearchOrchestrator {
1622
1687
  data: { chain },
1623
1688
  });
1624
1689
  insights++;
1690
+ // Cross-module: Reasoning→Hypothesis — high-confidence chains become testable hypotheses
1691
+ if (this.hypothesisEngine && chain.final_confidence > 0.5) {
1692
+ try {
1693
+ this.hypothesisEngine.propose({
1694
+ statement: chain.conclusion,
1695
+ type: 'correlation',
1696
+ source: 'reasoning_engine',
1697
+ variables: [q],
1698
+ condition: { type: 'correlation', params: { strategy: 'inference_chain', chain_id: chain.id, confidence: chain.final_confidence } },
1699
+ });
1700
+ }
1701
+ catch { /* dedup or other constraint — non-critical */ }
1702
+ }
1625
1703
  }
1626
1704
  // Abduce on surprising observations
1627
1705
  const explanations = this.reasoningEngine.abduce(q);
@@ -1655,6 +1733,19 @@ export class ResearchOrchestrator {
1655
1733
  for (const rec of recs) {
1656
1734
  ts?.emit('emotional', 'reflecting', `[${mood.mood}] ${rec}`, 'notable');
1657
1735
  }
1736
+ // Cross-module: Emotional→Attention — high arousal boosts attention on active topics
1737
+ if (mood.arousal > 0.7 && this.attentionEngine) {
1738
+ try {
1739
+ const topTopics = this.attentionEngine.getTopTopics?.(3) ?? [];
1740
+ for (const t of topTopics) {
1741
+ this.attentionEngine.setFocus(t.topic, mood.arousal * 2.0);
1742
+ }
1743
+ if (topTopics.length > 0) {
1744
+ this.log.info(`[orchestrator] High arousal (${mood.arousal.toFixed(2)}) → boosted attention on ${topTopics.length} topics`);
1745
+ }
1746
+ }
1747
+ catch { /* attention boost non-critical */ }
1748
+ }
1658
1749
  if (this.metaCognitionLayer)
1659
1750
  this.metaCognitionLayer.recordStep('emotional_model', this.cycleCount, { insights: 1 });
1660
1751
  }
@@ -1692,6 +1783,18 @@ export class ResearchOrchestrator {
1692
1783
  referenceCode: suggestion.referenceCode,
1693
1784
  });
1694
1785
  ts?.emit('self-modification', 'discovering', `Self-modification proposed: ${mod.title}`, 'notable');
1786
+ // Auto-propose consensus vote for medium/high risk modifications
1787
+ if (this.consensusEngine && suggestion.targetFiles.length > 1) {
1788
+ try {
1789
+ this.consensusEngine.propose({
1790
+ type: 'selfmod_approval',
1791
+ description: `SelfMod: ${mod.title} — ${suggestion.problem.substring(0, 200)}`,
1792
+ options: ['approve', 'reject'],
1793
+ });
1794
+ ts?.emit('consensus', 'analyzing', `Consensus vote created for: ${mod.title}`, 'notable');
1795
+ }
1796
+ catch { /* not critical */ }
1797
+ }
1695
1798
  // Try to generate + test
1696
1799
  try {
1697
1800
  await this.selfModificationEngine.generateCode(mod.id);
@@ -1759,8 +1862,8 @@ export class ResearchOrchestrator {
1759
1862
  }
1760
1863
  }
1761
1864
  // ── Intelligence Upgrade Steps (Sessions 55-65) ─────────
1762
- // Step 42: FactExtractor — extract typed facts from recent insights (every 5 cycles)
1763
- if (this.factExtractor && this.knowledgeGraph && this.cycleCount % this.distillEvery === 0) {
1865
+ // Step 42: FactExtractor — extract typed facts from recent insights (every 3 cycles)
1866
+ if (this.factExtractor && this.knowledgeGraph && this.cycleCount % 3 === 0) {
1764
1867
  try {
1765
1868
  ts?.emit('fact_extractor', 'analyzing', 'Step 42: Extracting facts from insights...', 'routine');
1766
1869
  let factsAdded = 0;
@@ -1864,16 +1967,48 @@ export class ResearchOrchestrator {
1864
1967
  if (this.activeLearner && this.cycleCount % this.reflectEvery === 0) {
1865
1968
  try {
1866
1969
  ts?.emit('active_learner', 'analyzing', 'Step 45: Identifying knowledge gaps...', 'routine');
1867
- const gaps = this.activeLearner.identifyGaps();
1970
+ // Build real GapSources from curiosity engine + knowledge graph
1971
+ const gapSources = {};
1972
+ // Knowledge voids from CuriosityEngine (open dark_zones)
1973
+ if (this.curiosityEngine) {
1974
+ try {
1975
+ const curiosityGaps = this.curiosityEngine.getGaps(10);
1976
+ const darkZones = curiosityGaps.filter(g => g.gapType === 'dark_zone');
1977
+ if (darkZones.length > 0) {
1978
+ gapSources.knowledgeVoids = darkZones.map(g => ({ topic: g.topic }));
1979
+ }
1980
+ }
1981
+ catch { /* curiosity table may not exist */ }
1982
+ }
1983
+ // Low confidence facts from KnowledgeGraph
1984
+ if (this.knowledgeGraph) {
1985
+ try {
1986
+ const lowConf = this.db.prepare(`SELECT subject as topic, confidence FROM knowledge_facts WHERE confidence < 0.3 ORDER BY confidence ASC LIMIT 10`).all();
1987
+ if (lowConf.length > 0) {
1988
+ gapSources.lowConfidenceFacts = lowConf;
1989
+ }
1990
+ }
1991
+ catch { /* table may not exist */ }
1992
+ }
1993
+ const gaps = this.activeLearner.identifyGaps(gapSources);
1868
1994
  if (gaps.length > 0) {
1995
+ // Persist gaps via addGap so they get IDs for planLearning
1996
+ const persistedGaps = [];
1997
+ for (const gap of gaps.slice(0, 5)) {
1998
+ try {
1999
+ const persisted = this.activeLearner.addGap(gap.gapType, gap.topic, gap.description, gap.impact, gap.ease);
2000
+ persistedGaps.push(persisted);
2001
+ }
2002
+ catch { /* max gaps reached or duplicate — skip */ }
2003
+ }
1869
2004
  this.journal.write({
1870
2005
  title: `Active Learning: ${gaps.length} knowledge gap(s) identified`,
1871
2006
  type: 'insight', content: gaps.slice(0, 3).map(g => g.topic).join(', '),
1872
2007
  tags: [this.brainName, 'active-learning', 'knowledge-gaps'],
1873
2008
  references: [], significance: 'routine', data: { gapCount: gaps.length },
1874
2009
  });
1875
- // Plan learning for the highest-priority gap
1876
- const topGap = gaps[0];
2010
+ // Plan learning for the highest-priority persisted gap
2011
+ const topGap = persistedGaps[0];
1877
2012
  if (topGap?.id) {
1878
2013
  try {
1879
2014
  this.activeLearner.planLearning(topGap.id);
@@ -1924,6 +2059,18 @@ export class ResearchOrchestrator {
1924
2059
  }
1925
2060
  if (taught > 0) {
1926
2061
  ts?.emit('teaching', 'discovering', `Taught ${taught} principle(s) to peer brain(s)`, 'routine');
2062
+ // Cross-module: Teaching→Consensus — propose teaching packages for multi-brain review
2063
+ if (this.consensusEngine && taught >= 2) {
2064
+ try {
2065
+ const topPrinciples = principles.filter(p => (p.confidence ?? 0) >= 0.7).slice(0, 3);
2066
+ this.consensusEngine.propose({
2067
+ type: 'teaching_review',
2068
+ description: `Review ${taught} principles for teaching: ${topPrinciples.map(p => p.statement.substring(0, 60)).join('; ')}`,
2069
+ options: ['adopt', 'reject', 'defer'],
2070
+ });
2071
+ }
2072
+ catch { /* consensus proposal non-critical */ }
2073
+ }
1927
2074
  }
1928
2075
  if (this.metaCognitionLayer)
1929
2076
  this.metaCognitionLayer.recordStep('teaching', this.cycleCount, { insights: taught });
@@ -1974,8 +2121,8 @@ export class ResearchOrchestrator {
1974
2121
  this.log.warn(`[orchestrator] Step 49 error: ${err.message}`);
1975
2122
  }
1976
2123
  }
1977
- // Step 50: FeatureRecommender — detect needs, match features, build connections (every 15 cycles)
1978
- if (this.featureRecommender && this.cycleCount % 15 === 0) {
2124
+ // Step 50: FeatureRecommender — detect needs, match features, build connections (every 20 cycles)
2125
+ if (this.featureRecommender && this.cycleCount % 20 === 0) {
1979
2126
  try {
1980
2127
  ts?.emit('feature_recommender', 'analyzing', 'Step 50: Scanning for feature needs & connections...', 'routine');
1981
2128
  const recResult = await this.featureRecommender.runCycle();
@@ -2017,9 +2164,95 @@ export class ResearchOrchestrator {
2017
2164
  this.log.warn(`[orchestrator] Step 51 error: ${err.message}`);
2018
2165
  }
2019
2166
  }
2167
+ // Step 52: RLHF Auto-Feedback — generate signals from cycle results (every 10 cycles)
2168
+ if (this.feedbackEngine && this.cycleCount % this.reflectEvery === 0) {
2169
+ try {
2170
+ ts?.emit('feedback', 'analyzing', 'Step 52: Auto-feedback from cycle results...', 'routine');
2171
+ let feedbackCount = 0;
2172
+ // Confirmed hypotheses → positive feedback
2173
+ const confirmedHyps = this.hypothesisEngine.list('confirmed', 20);
2174
+ for (const hyp of confirmedHyps) {
2175
+ if (hyp.id) {
2176
+ this.feedbackEngine.recordFeedback('hypothesis', hyp.id, 'positive', `Confirmed: ${hyp.statement.substring(0, 100)}`);
2177
+ feedbackCount++;
2178
+ }
2179
+ }
2180
+ // Rejected hypotheses → negative feedback
2181
+ const rejectedHyps = this.hypothesisEngine.list('rejected', 20);
2182
+ for (const hyp of rejectedHyps) {
2183
+ if (hyp.id) {
2184
+ this.feedbackEngine.recordFeedback('hypothesis', hyp.id, 'negative', `Rejected: ${hyp.statement.substring(0, 100)}`);
2185
+ feedbackCount++;
2186
+ }
2187
+ }
2188
+ // Correct/wrong predictions → feedback
2189
+ if (this.predictionEngine) {
2190
+ const correctPreds = this.predictionEngine.list(undefined, 'correct', 20);
2191
+ for (const pred of correctPreds) {
2192
+ this.feedbackEngine.recordFeedback('prediction', Number(pred.prediction_id.substring(0, 8)) || 1, 'positive', `Correct: ${pred.metric}`);
2193
+ feedbackCount++;
2194
+ }
2195
+ const wrongPreds = this.predictionEngine.list(undefined, 'wrong', 20);
2196
+ for (const pred of wrongPreds) {
2197
+ this.feedbackEngine.recordFeedback('prediction', Number(pred.prediction_id.substring(0, 8)) || 1, 'negative', `Wrong: ${pred.metric}`);
2198
+ feedbackCount++;
2199
+ }
2200
+ }
2201
+ if (feedbackCount > 0) {
2202
+ ts?.emit('feedback', 'discovering', `Auto-feedback: ${feedbackCount} signal(s) generated`, 'routine');
2203
+ }
2204
+ if (this.metaCognitionLayer)
2205
+ this.metaCognitionLayer.recordStep('feedback_engine', this.cycleCount, { insights: feedbackCount });
2206
+ }
2207
+ catch (err) {
2208
+ this.log.warn(`[orchestrator] Step 52 error: ${err.message}`);
2209
+ }
2210
+ }
2211
+ // Step 53: UserModel — log user profile status to journal (every 20 cycles)
2212
+ if (this.userModelEngine && this.cycleCount % 20 === 0) {
2213
+ try {
2214
+ ts?.emit('user_model', 'analyzing', 'Step 53: Logging user model status...', 'routine');
2215
+ const profile = this.userModelEngine.getProfile();
2216
+ const status = this.userModelEngine.getStatus();
2217
+ const topDomain = [...profile.skillDomains.entries()][0];
2218
+ const skillLabel = topDomain ? `${topDomain[0]}:${topDomain[1]}` : 'unknown';
2219
+ this.journal.write({
2220
+ title: `User Model: ${status.totalKeys} keys, skill=${skillLabel}`,
2221
+ type: 'insight',
2222
+ content: `Top tools: ${profile.topTools.slice(0, 5).join(', ')}. Domains: ${profile.skillDomains.size}.`,
2223
+ tags: [this.brainName, 'user-model', 'profile'],
2224
+ references: [],
2225
+ significance: 'routine',
2226
+ data: { totalKeys: status.totalKeys, domains: status.domains },
2227
+ });
2228
+ if (this.metaCognitionLayer)
2229
+ this.metaCognitionLayer.recordStep('user_model', this.cycleCount, { insights: 1 });
2230
+ }
2231
+ catch (err) {
2232
+ this.log.warn(`[orchestrator] Step 53 error: ${err.message}`);
2233
+ }
2234
+ }
2235
+ // Step 54: Consensus — auto-propose for risky self-modifications (piggybacks on Step 40)
2236
+ // Already checked in Step 40; here we just log status
2237
+ if (this.consensusEngine && this.cycleCount % 20 === 0) {
2238
+ try {
2239
+ const cStatus = this.consensusEngine.getStatus();
2240
+ if (cStatus.totalProposals > 0) {
2241
+ ts?.emit('consensus', 'reflecting', `Consensus: ${cStatus.totalProposals} proposals, ${cStatus.resolvedCount} resolved`, 'routine');
2242
+ }
2243
+ }
2244
+ catch { /* not critical */ }
2245
+ }
2020
2246
  const duration = Date.now() - start;
2021
2247
  ts?.emit('orchestrator', 'reflecting', `Feedback Cycle #${this.cycleCount} complete (${duration}ms)`);
2022
2248
  this.log.info(`[orchestrator] ─── Feedback Cycle #${this.cycleCount} complete (${duration}ms) ───`);
2249
+ // End trace for this research cycle
2250
+ if (this.traceCollector && traceId) {
2251
+ try {
2252
+ this.traceCollector.endTrace(traceId);
2253
+ }
2254
+ catch { /* tracing should never break the cycle */ }
2255
+ }
2023
2256
  // Record cycle metrics into MetaCognition for engine-level tracking
2024
2257
  if (this.metaCognitionLayer) {
2025
2258
  this.metaCognitionLayer.recordStep('orchestrator', this.cycleCount, {
@@ -2823,7 +3056,31 @@ export class ResearchOrchestrator {
2823
3056
  }
2824
3057
  catch { /* featureRecommender not ready */ }
2825
3058
  }
2826
- // ── Source B: Existing suggestions (filtered skip AutoResponder noise) ──
3059
+ // ── Source B: CodeHealth issues SelfMod suggestions ──
3060
+ if (this.codeHealthMonitor) {
3061
+ try {
3062
+ const health = this.codeHealthMonitor.getStatus();
3063
+ if (health.lastScan && health.lastScan.techDebtScore > 60) {
3064
+ const scan = health.lastScan;
3065
+ const issues = [];
3066
+ if (scan.complexityScore > 70)
3067
+ issues.push(`high complexity (${scan.complexityScore.toFixed(0)})`);
3068
+ if (scan.duplicationScore > 30)
3069
+ issues.push(`code duplication (${scan.duplicationScore.toFixed(0)})`);
3070
+ if (scan.testRatio < 0.3)
3071
+ issues.push(`low test coverage (${(scan.testRatio * 100).toFixed(0)}%)`);
3072
+ if (issues.length > 0) {
3073
+ return {
3074
+ title: `Reduce tech debt (score: ${scan.techDebtScore.toFixed(0)})`,
3075
+ problem: `Code health scan detected: ${issues.join(', ')}. Tech debt score is ${scan.techDebtScore.toFixed(1)}/100.`,
3076
+ targetFiles: this.findTargetFilesForNeed('code quality'),
3077
+ };
3078
+ }
3079
+ }
3080
+ }
3081
+ catch { /* code health not ready */ }
3082
+ }
3083
+ // ── Source C: Existing suggestions (filtered — skip AutoResponder noise) ──
2827
3084
  if (!this.selfScanner)
2828
3085
  return null;
2829
3086
  const suggestions = this.generateSelfImprovementSuggestions();