@timmeck/brain 3.36.54 → 3.36.56

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,348 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ import { getCurrentVersion } from '../cli/update-check.js';
3
+ import { RAGEngine, RAGIndexer, KnowledgeGraphEngine, FactExtractor, SemanticCompressor, FeedbackEngine, ToolTracker, ToolPatternAnalyzer, ProactiveEngine, UserModel, CodeHealthMonitor, TeachingProtocol, Curriculum, ConsensusEngine, ActiveLearner, RepoAbsorber, FeatureExtractor, FeatureRecommender, ContradictionResolver, CheckpointManager, TraceCollector, MessageRouter, TelegramBot, DiscordBot, BenchmarkSuite, AgentTrainer, ToolScopeManager, PluginMarketplace, CodeSandbox, GuardrailEngine, CausalPlanner, ResearchRoadmap, runRoadmapMigration, CreativeEngine, runCreativeMigration, ActionBridgeEngine, runActionBridgeMigration, ContentForge, runContentForgeMigration, CodeForge, runCodeForgeMigration, StrategyForge, runStrategyForgeMigration, CrossBrainSignalRouter, runSignalRouterMigration, ChatEngine, runChatMigration, SubAgentFactory, runSubAgentMigration, SignalScanner, CodeMiner, PatternExtractor, ContextBuilder, CodeGenerator, TechRadarEngine, runTechRadarMigration, NotificationService as MultiChannelNotificationService, runNotificationMigration, DiscordProvider, TelegramProvider, EmailProvider, } from '@timmeck/brain-core';
4
+ // ── Intelligence Upgrade (Sessions 55-76) ────────────────
5
+ export function createIntelligenceEngines(deps) {
6
+ const { db, config, services, embeddingEngine, orchestrator, researchScheduler, thoughtStream, llmService, notifier, goalEngine } = deps;
7
+ const logger = getLogger();
8
+ // 55. RAG Pipeline — vector search across all knowledge
9
+ const ragEngine = new RAGEngine(db, { brainName: 'brain' });
10
+ if (embeddingEngine)
11
+ ragEngine.setEmbeddingEngine(embeddingEngine);
12
+ ragEngine.setThoughtStream(thoughtStream);
13
+ if (llmService.isAvailable())
14
+ ragEngine.setLLMService(llmService);
15
+ services.ragEngine = ragEngine;
16
+ const ragIndexer = new RAGIndexer(db);
17
+ ragIndexer.setRAGEngine(ragEngine);
18
+ services.ragIndexer = ragIndexer;
19
+ // Background: initial RAG indexing after 30s startup delay
20
+ setTimeout(() => {
21
+ ragIndexer.indexAll().then(count => {
22
+ if (count > 0)
23
+ logger.info(`[RAG] Initial indexing: ${count} vectors`);
24
+ }).catch(err => logger.debug(`[RAG] Initial indexing skipped: ${err.message}`));
25
+ }, 30_000);
26
+ // 56. Knowledge Graph 2.0 — typed fact relations
27
+ const knowledgeGraph = new KnowledgeGraphEngine(db, { brainName: 'brain' });
28
+ knowledgeGraph.setThoughtStream(thoughtStream);
29
+ services.knowledgeGraph = knowledgeGraph;
30
+ const factExtractor = new FactExtractor(db, { brainName: 'brain' });
31
+ if (llmService.isAvailable())
32
+ factExtractor.setLLMService(llmService);
33
+ services.factExtractor = factExtractor;
34
+ // 57. Semantic Compression — deduplicate knowledge
35
+ const semanticCompressor = new SemanticCompressor(db, { brainName: 'brain' });
36
+ semanticCompressor.setRAGEngine(ragEngine);
37
+ if (llmService.isAvailable())
38
+ semanticCompressor.setLLMService(llmService);
39
+ semanticCompressor.setThoughtStream(thoughtStream);
40
+ services.semanticCompressor = semanticCompressor;
41
+ // 58. Feedback Learning — RLHF reward signals
42
+ const feedbackEngine = new FeedbackEngine(db, { brainName: 'brain' });
43
+ feedbackEngine.setThoughtStream(thoughtStream);
44
+ services.feedbackEngine = feedbackEngine;
45
+ // 59. Tool-Use Learning — track tool outcomes
46
+ const toolTracker = new ToolTracker(db, { brainName: 'brain' });
47
+ const toolPatternAnalyzer = new ToolPatternAnalyzer(db);
48
+ services.toolTracker = toolTracker;
49
+ services.toolPatternAnalyzer = toolPatternAnalyzer;
50
+ // 60. Proactive Suggestions — trigger-based improvement proposals
51
+ const proactiveEngine = new ProactiveEngine(db, { brainName: 'brain' });
52
+ proactiveEngine.setThoughtStream(thoughtStream);
53
+ services.proactiveEngine = proactiveEngine;
54
+ // 61. User Modeling — adaptive responses
55
+ const userModel = new UserModel(db, { brainName: 'brain' });
56
+ services.userModel = userModel;
57
+ // 62. Code Health Monitor — codebase quality tracking
58
+ const codeHealthMonitor = new CodeHealthMonitor(db, { brainName: 'brain' });
59
+ codeHealthMonitor.setThoughtStream(thoughtStream);
60
+ services.codeHealthMonitor = codeHealthMonitor;
61
+ // 63. Inter-Brain Teaching — knowledge transfer protocol
62
+ const teachingProtocol = new TeachingProtocol(db, { brainName: 'brain' });
63
+ services.teachingProtocol = teachingProtocol;
64
+ const curriculum = new Curriculum(db);
65
+ services.curriculum = curriculum;
66
+ // 64. Consensus Decisions — multi-brain voting
67
+ const consensusEngine = new ConsensusEngine(db, { brainName: 'brain' });
68
+ services.consensusEngine = consensusEngine;
69
+ // 65. Active Learning — gap identification & closing strategies
70
+ const activeLearner = new ActiveLearner(db, { brainName: 'brain' });
71
+ activeLearner.setThoughtStream(thoughtStream);
72
+ services.activeLearner = activeLearner;
73
+ // 66. RepoAbsorber — autonomous code learning from discovered repos
74
+ const repoAbsorber = new RepoAbsorber(db);
75
+ repoAbsorber.setThoughtStream(thoughtStream);
76
+ repoAbsorber.setRAGEngine(ragEngine);
77
+ repoAbsorber.setKnowledgeGraph(knowledgeGraph);
78
+ services.repoAbsorber = repoAbsorber;
79
+ // 67. FeatureExtractor — extract useful functions/patterns from absorbed repos
80
+ const featureExtractor = new FeatureExtractor(db);
81
+ featureExtractor.setRAGEngine(ragEngine);
82
+ featureExtractor.setKnowledgeGraph(knowledgeGraph);
83
+ if (services.llmService)
84
+ featureExtractor.setLLMService(services.llmService);
85
+ services.featureExtractor = featureExtractor;
86
+ repoAbsorber.setFeatureExtractor(featureExtractor);
87
+ // 68. FeatureRecommender — wishlist, connections, periodic need scanning
88
+ const featureRecommender = new FeatureRecommender(db);
89
+ featureRecommender.setFeatureExtractor(featureExtractor);
90
+ featureRecommender.setRAGEngine(ragEngine);
91
+ featureRecommender.setKnowledgeGraph(knowledgeGraph);
92
+ featureRecommender.setThoughtStream(thoughtStream);
93
+ services.featureRecommender = featureRecommender;
94
+ // 69. ContradictionResolver — resolve knowledge graph contradictions
95
+ const contradictionResolver = new ContradictionResolver(db);
96
+ contradictionResolver.setKnowledgeGraph(knowledgeGraph);
97
+ services.contradictionResolver = contradictionResolver;
98
+ // 70. CheckpointManager — workflow state persistence for crash recovery & time-travel
99
+ const checkpointManager = new CheckpointManager(db);
100
+ services.checkpointManager = checkpointManager;
101
+ // 71. TraceCollector — observability & tracing for all workflows
102
+ const traceCollector = new TraceCollector(db);
103
+ services.traceCollector = traceCollector;
104
+ // 72. Messaging Bots — bidirectional Telegram/Discord (optional, if tokens configured)
105
+ const messageRouter = new MessageRouter({ brainName: 'brain' });
106
+ services.messageRouter = messageRouter;
107
+ const telegramBot = new TelegramBot();
108
+ telegramBot.setRouter(messageRouter);
109
+ services.telegramBot = telegramBot;
110
+ const discordBot = new DiscordBot();
111
+ discordBot.setRouter(messageRouter);
112
+ services.discordBot = discordBot;
113
+ // 73. Agent Training — BenchmarkSuite + AgentTrainer (eval harness with curriculum learning)
114
+ const benchmarkSuite = new BenchmarkSuite(db);
115
+ const agentTrainer = new AgentTrainer(db);
116
+ agentTrainer.setBenchmarkSuite(benchmarkSuite);
117
+ services.benchmarkSuite = benchmarkSuite;
118
+ services.agentTrainer = agentTrainer;
119
+ // 74. Tool Scoping — dynamic tool availability per workflow phase (LangGraph-inspired)
120
+ const toolScopeManager = new ToolScopeManager(db);
121
+ toolScopeManager.registerDefaults();
122
+ services.toolScopeManager = toolScopeManager;
123
+ // 75. Plugin Marketplace — browse, install, rate plugins (OpenClaw-inspired)
124
+ const pluginMarketplace = new PluginMarketplace(db, { brainVersion: getCurrentVersion() });
125
+ services.pluginMarketplace = pluginMarketplace;
126
+ // 76. Code Sandbox — isolated code execution with Docker/local fallback (AutoGen-inspired)
127
+ const codeSandbox = new CodeSandbox(db);
128
+ services.codeSandbox = codeSandbox;
129
+ // Wire CodeSandbox into SelfModificationEngine for pre-validation
130
+ if (services.selfModificationEngine) {
131
+ services.selfModificationEngine.setSandbox(codeSandbox);
132
+ logger.info('SelfModificationEngine: Sandbox pre-validation enabled');
133
+ }
134
+ // 89. GuardrailEngine — self-protection: parameter bounds, circuit breaker, health checks
135
+ const guardrailEngine = new GuardrailEngine(db, { brainName: 'brain' });
136
+ guardrailEngine.setParameterRegistry(services.parameterRegistry);
137
+ if (goalEngine)
138
+ guardrailEngine.setGoalEngine(goalEngine);
139
+ guardrailEngine.setThoughtStream(thoughtStream);
140
+ services.guardrailEngine = guardrailEngine;
141
+ // 86. CausalPlanner — root-cause diagnosis + intervention planning
142
+ const causalPlanner = new CausalPlanner(researchScheduler.causalGraph);
143
+ causalPlanner.setGoalEngine(goalEngine);
144
+ services.causalPlanner = causalPlanner;
145
+ // 87. ResearchRoadmap — goal dependencies + multi-step research plans
146
+ runRoadmapMigration(db);
147
+ const researchRoadmap = new ResearchRoadmap(db, goalEngine);
148
+ researchRoadmap.setThoughtStream(thoughtStream);
149
+ services.researchRoadmap = researchRoadmap;
150
+ // 88. CreativeEngine — cross-domain idea generation
151
+ runCreativeMigration(db);
152
+ const creativeEngine = new CreativeEngine(db, { brainName: 'brain' });
153
+ creativeEngine.setKnowledgeDistiller(orchestrator.knowledgeDistiller);
154
+ creativeEngine.setHypothesisEngine(researchScheduler.hypothesisEngine);
155
+ if (llmService)
156
+ creativeEngine.setLLMService(llmService);
157
+ creativeEngine.setThoughtStream(thoughtStream);
158
+ services.creativeEngine = creativeEngine;
159
+ // 91. ActionBridgeEngine — risk-assessed auto-execution of proposed actions
160
+ runActionBridgeMigration(db);
161
+ const actionBridge = new ActionBridgeEngine(db, { brainName: 'brain' });
162
+ services.actionBridge = actionBridge;
163
+ // 92. ContentForge — autonomous content generation + publishing
164
+ runContentForgeMigration(db);
165
+ const contentForge = new ContentForge(db, { brainName: 'brain' });
166
+ if (llmService)
167
+ contentForge.setLLMService(llmService);
168
+ contentForge.setActionBridge(actionBridge);
169
+ services.contentForge = contentForge;
170
+ // 93. CodeForge — pattern extraction + auto-apply code changes
171
+ runCodeForgeMigration(db);
172
+ const codeForge = new CodeForge(db, { brainName: 'brain' });
173
+ codeForge.setActionBridge(actionBridge);
174
+ if (services.guardrailEngine)
175
+ codeForge.setGuardrailEngine(services.guardrailEngine);
176
+ if (services.selfModificationEngine)
177
+ codeForge.setSelfModificationEngine(services.selfModificationEngine);
178
+ if (services.codeHealthMonitor)
179
+ codeForge.setCodeHealthMonitor(services.codeHealthMonitor);
180
+ services.codeForge = codeForge;
181
+ // 94. StrategyForge — autonomous strategy creation + execution
182
+ runStrategyForgeMigration(db);
183
+ const strategyForge = new StrategyForge(db, { brainName: 'brain' });
184
+ strategyForge.setActionBridge(actionBridge);
185
+ strategyForge.setKnowledgeDistiller(orchestrator.knowledgeDistiller);
186
+ services.strategyForge = strategyForge;
187
+ // CrossBrainSignalRouter — bidirectional signal routing
188
+ runSignalRouterMigration(db);
189
+ const signalRouter = new CrossBrainSignalRouter(db, 'brain');
190
+ if (notifier)
191
+ signalRouter.setNotifier(notifier);
192
+ // Handle incoming trade signals → create insight
193
+ signalRouter.onSignal('trade_signal', (signal) => {
194
+ const symbol = signal.payload.symbol ?? 'unknown';
195
+ const direction = signal.payload.direction ?? 'neutral';
196
+ try {
197
+ services.research.createInsight({
198
+ title: `Trade signal: ${symbol} ${direction}`,
199
+ type: 'cross-brain',
200
+ description: `Received ${direction} signal for ${symbol} from ${signal.sourceBrain} (confidence: ${signal.confidence.toFixed(2)})`,
201
+ });
202
+ }
203
+ catch { /* best effort */ }
204
+ logger.info(`[signal-router] Created insight from trade signal: ${symbol} ${direction}`);
205
+ });
206
+ // Handle incoming engagement signals → create insight
207
+ signalRouter.onSignal('engagement_signal', (signal) => {
208
+ const topic = signal.payload.topic ?? 'unknown';
209
+ try {
210
+ services.research.createInsight({
211
+ title: `Engagement signal: ${topic}`,
212
+ type: 'cross-brain',
213
+ description: `Engagement signal from ${signal.sourceBrain}: ${signal.payload.summary ?? topic}`,
214
+ });
215
+ }
216
+ catch { /* best effort */ }
217
+ logger.info(`[signal-router] Created insight from engagement signal: ${topic}`);
218
+ });
219
+ services.signalRouter = signalRouter;
220
+ // 100. ChatEngine — NLU-routed chat interface
221
+ runChatMigration(db);
222
+ const chatEngine = new ChatEngine(db, { brainName: 'brain' });
223
+ services.chatEngine = chatEngine;
224
+ // 101. SubAgentFactory — spawn specialized sub-agents
225
+ runSubAgentMigration(db);
226
+ const subAgentFactory = new SubAgentFactory(db);
227
+ services.subAgentFactory = subAgentFactory;
228
+ // ── Wire intelligence engines into autonomous ResearchOrchestrator ──
229
+ orchestrator.setFactExtractor(factExtractor);
230
+ orchestrator.setKnowledgeGraph(knowledgeGraph);
231
+ orchestrator.setSemanticCompressor(semanticCompressor);
232
+ orchestrator.setProactiveEngine(proactiveEngine);
233
+ orchestrator.setActiveLearner(activeLearner);
234
+ orchestrator.setRAGIndexer(ragIndexer);
235
+ orchestrator.setTeachingProtocol(teachingProtocol);
236
+ orchestrator.setCodeHealthMonitor(codeHealthMonitor);
237
+ orchestrator.setRepoAbsorber(repoAbsorber);
238
+ orchestrator.setFeatureRecommender(featureRecommender);
239
+ orchestrator.setFeatureExtractor(featureExtractor);
240
+ orchestrator.setContradictionResolver(contradictionResolver);
241
+ orchestrator.setCheckpointManager(checkpointManager);
242
+ orchestrator.setFeedbackEngine(feedbackEngine);
243
+ orchestrator.setUserModel(userModel);
244
+ orchestrator.setConsensusEngine(consensusEngine);
245
+ orchestrator.setTraceCollector(traceCollector);
246
+ orchestrator.setGuardrailEngine(guardrailEngine);
247
+ orchestrator.setCausalPlanner(causalPlanner);
248
+ orchestrator.setResearchRoadmap(researchRoadmap);
249
+ orchestrator.setCreativeEngine(creativeEngine);
250
+ orchestrator.setActionBridge(actionBridge);
251
+ orchestrator.setContentForge(contentForge);
252
+ orchestrator.setCodeForge(codeForge);
253
+ orchestrator.setStrategyForge(strategyForge);
254
+ logger.info('Intelligence upgrade active (RAG, KG, Compression, Feedback, Tool-Learning, Proactive, UserModel, CodeHealth, Teaching, Consensus, ActiveLearning, RepoAbsorber, Guardrails, CausalPlanner, Roadmap, Creative — all wired into orchestrator)');
255
+ logger.info('Research orchestrator started (48+ steps, feedback loops active, DataMiner bootstrapped, Dream Mode active, Prediction Engine active)');
256
+ // 11k. Signal Scanner — GitHub/HN/Crypto signal tracking
257
+ if (config.scanner.enabled) {
258
+ const signalScanner = new SignalScanner(db, config.scanner);
259
+ orchestrator.setSignalScanner(signalScanner);
260
+ signalScanner.start();
261
+ services.signalScanner = signalScanner;
262
+ logger.info(`Signal scanner started (interval: ${config.scanner.scanIntervalMs}ms, token: ${config.scanner.githubToken ? 'yes' : 'NO — set GITHUB_TOKEN'})`);
263
+ }
264
+ // 11k2. TechRadar Engine — daily tech trend scanning + relevance analysis
265
+ try {
266
+ runTechRadarMigration(db);
267
+ const techRadar = new TechRadarEngine(db, {
268
+ githubToken: config.scanner.githubToken,
269
+ });
270
+ if (llmService)
271
+ techRadar.setLLMService(llmService);
272
+ techRadar.start();
273
+ services.techRadar = techRadar;
274
+ logger.info('TechRadar engine started');
275
+ }
276
+ catch (err) {
277
+ logger.warn(`TechRadar setup failed (non-critical): ${err.message}`);
278
+ }
279
+ // 11k3. NotificationService — multi-channel notifications
280
+ try {
281
+ runNotificationMigration(db);
282
+ const notificationService = new MultiChannelNotificationService(db);
283
+ // Auto-register available providers
284
+ const discordProv = new DiscordProvider();
285
+ const telegramProv = new TelegramProvider();
286
+ const emailProvider = new EmailProvider();
287
+ discordProv.isAvailable().then(ok => {
288
+ if (ok) {
289
+ notificationService.registerProvider(discordProv);
290
+ logger.info('Discord notification provider registered');
291
+ }
292
+ }).catch(() => { });
293
+ telegramProv.isAvailable().then(ok => {
294
+ if (ok) {
295
+ notificationService.registerProvider(telegramProv);
296
+ logger.info('Telegram notification provider registered');
297
+ }
298
+ }).catch(() => { });
299
+ emailProvider.isAvailable().then(ok => {
300
+ if (ok) {
301
+ notificationService.registerProvider(emailProvider);
302
+ logger.info('Email notification provider registered');
303
+ }
304
+ }).catch(() => { });
305
+ services.multiChannelNotifications = notificationService;
306
+ logger.info('NotificationService initialized');
307
+ }
308
+ catch (err) {
309
+ logger.warn(`NotificationService setup failed (non-critical): ${err.message}`);
310
+ }
311
+ // 11l. CodeMiner — mine repo contents from GitHub (needs GITHUB_TOKEN)
312
+ let patternExtractor;
313
+ if (config.scanner.githubToken) {
314
+ const codeMiner = new CodeMiner(db, { githubToken: config.scanner.githubToken });
315
+ patternExtractor = new PatternExtractor(db);
316
+ orchestrator.setCodeMiner(codeMiner);
317
+ services.codeMiner = codeMiner;
318
+ services.patternExtractor = patternExtractor;
319
+ void codeMiner.bootstrap();
320
+ logger.info('CodeMiner activated (GITHUB_TOKEN set)');
321
+ }
322
+ // 11m. CodeGenerator — autonomous code generation (needs ANTHROPIC_API_KEY)
323
+ if (process.env.ANTHROPIC_API_KEY) {
324
+ const codeGenerator = new CodeGenerator(db, { brainName: 'brain', apiKey: process.env.ANTHROPIC_API_KEY });
325
+ const contextBuilder = new ContextBuilder(orchestrator.knowledgeDistiller, orchestrator.journal, patternExtractor ?? null, services.signalScanner ?? null);
326
+ codeGenerator.setContextBuilder(contextBuilder);
327
+ codeGenerator.setThoughtStream(thoughtStream);
328
+ orchestrator.setCodeGenerator(codeGenerator);
329
+ services.codeGenerator = codeGenerator;
330
+ logger.info('CodeGenerator activated (ANTHROPIC_API_KEY set)');
331
+ // Wire ContextBuilder with SelfScanner into SelfModificationEngine
332
+ if (services.selfModificationEngine && services.selfScanner) {
333
+ const selfmodCtx = new ContextBuilder(orchestrator.knowledgeDistiller, orchestrator.journal, patternExtractor ?? null, services.signalScanner ?? null);
334
+ selfmodCtx.setSelfScanner(services.selfScanner);
335
+ services.selfModificationEngine.setContextBuilder(selfmodCtx);
336
+ }
337
+ }
338
+ return {
339
+ guardrailEngine,
340
+ causalPlanner,
341
+ researchRoadmap,
342
+ creativeEngine,
343
+ telegramBot,
344
+ discordBot,
345
+ patternExtractor,
346
+ };
347
+ }
348
+ //# sourceMappingURL=engine-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-factory.js","sourceRoot":"","sources":["../../src/init/engine-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { SynapseManager } from '../synapses/synapse-manager.js';
2
+ import type { CrossBrainNotifier, CrossBrainSubscriptionManager, CrossBrainCorrelator, ResearchOrchestrator } from '@timmeck/brain-core';
3
+ import type { Services } from '../ipc/router.js';
4
+ export declare function setupEventListeners(services: Services, synapseManager: SynapseManager, notifier: CrossBrainNotifier | null, correlator: CrossBrainCorrelator | null, orchestrator: ResearchOrchestrator | null): void;
5
+ export declare function setupCrossBrainSubscriptions(subscriptionManager: CrossBrainSubscriptionManager | null, correlator: CrossBrainCorrelator | null, orchestrator: ResearchOrchestrator | null): void;
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Event listener setup — extracted from BrainCore.setupEventListeners + setupCrossBrainSubscriptions.
3
+ * Pure extraction, no logic changes.
4
+ */
5
+ import { getLogger } from '../utils/logger.js';
6
+ import { getEventBus } from '../utils/events.js';
7
+ export function setupEventListeners(services, synapseManager, notifier, correlator, orchestrator) {
8
+ const bus = getEventBus();
9
+ const webhook = services.webhook;
10
+ const causal = services.causal;
11
+ const hypothesis = services.hypothesis;
12
+ const orch = orchestrator;
13
+ bus.on('error:reported', ({ errorId, projectId }) => {
14
+ synapseManager.strengthen({ type: 'error', id: errorId }, { type: 'project', id: projectId }, 'co_occurs');
15
+ notifier?.notify('error:reported', { errorId, projectId });
16
+ correlator?.recordEvent('brain', 'error:reported', { errorId, projectId });
17
+ webhook?.fire('error:reported', { errorId, projectId });
18
+ causal?.recordEvent('brain', 'error:reported', { errorId, projectId });
19
+ hypothesis?.observe({ source: 'brain', type: 'error:reported', value: 1, timestamp: Date.now() });
20
+ orch?.onEvent('error:reported', { errorId, projectId });
21
+ });
22
+ bus.on('solution:applied', ({ errorId, solutionId, success }) => {
23
+ if (success) {
24
+ synapseManager.strengthen({ type: 'solution', id: solutionId }, { type: 'error', id: errorId }, 'solves');
25
+ }
26
+ else {
27
+ const synapse = synapseManager.find({ type: 'solution', id: solutionId }, { type: 'error', id: errorId }, 'solves');
28
+ if (synapse)
29
+ synapseManager.weaken(synapse.id, 0.7);
30
+ }
31
+ });
32
+ bus.on('module:registered', ({ moduleId, projectId }) => {
33
+ synapseManager.strengthen({ type: 'code_module', id: moduleId }, { type: 'project', id: projectId }, 'co_occurs');
34
+ });
35
+ bus.on('rule:learned', ({ ruleId, pattern }) => {
36
+ getLogger().info(`New rule #${ruleId} learned: ${pattern}`);
37
+ causal?.recordEvent('brain', 'rule:learned', { ruleId, pattern });
38
+ hypothesis?.observe({ source: 'brain', type: 'rule:learned', value: 1, timestamp: Date.now() });
39
+ orch?.onEvent('rule:learned', { ruleId });
40
+ });
41
+ bus.on('insight:created', ({ insightId, type }) => {
42
+ getLogger().info(`New insight #${insightId} (${type})`);
43
+ notifier?.notifyPeer('marketing-brain', 'insight:created', { insightId, type });
44
+ correlator?.recordEvent('brain', 'insight:created', { insightId, type });
45
+ webhook?.fire('insight:created', { insightId, type });
46
+ causal?.recordEvent('brain', 'insight:created', { insightId, type });
47
+ hypothesis?.observe({ source: 'brain', type: 'insight:created', value: 1, timestamp: Date.now() });
48
+ orch?.onEvent('insight:created', { insightId, type });
49
+ });
50
+ bus.on('solution:applied', ({ errorId, solutionId, success }) => {
51
+ orch?.onEvent('solution:applied', { errorId, solutionId, success: success ? 1 : 0 });
52
+ });
53
+ bus.on('memory:created', ({ memoryId, projectId }) => {
54
+ if (projectId) {
55
+ synapseManager.strengthen({ type: 'memory', id: memoryId }, { type: 'project', id: projectId }, 'co_occurs');
56
+ }
57
+ });
58
+ bus.on('session:ended', ({ sessionId }) => {
59
+ getLogger().info(`Session #${sessionId} ended`);
60
+ });
61
+ bus.on('decision:recorded', ({ decisionId, projectId }) => {
62
+ if (projectId) {
63
+ synapseManager.strengthen({ type: 'decision', id: decisionId }, { type: 'project', id: projectId }, 'co_occurs');
64
+ }
65
+ });
66
+ bus.on('task:created', ({ taskId }) => {
67
+ getLogger().info(`Task #${taskId} created`);
68
+ });
69
+ bus.on('task:completed', ({ taskId }) => {
70
+ getLogger().info(`Task #${taskId} completed`);
71
+ });
72
+ }
73
+ export function setupCrossBrainSubscriptions(subscriptionManager, correlator, orchestrator) {
74
+ if (!subscriptionManager || !correlator)
75
+ return;
76
+ const logger = getLogger();
77
+ subscriptionManager.subscribe('trading-brain', ['trade:completed'], (event, data) => {
78
+ logger.info(`[cross-brain] Received ${event} from trading-brain`, { data });
79
+ correlator.recordEvent('trading-brain', event, data);
80
+ orchestrator?.onCrossBrainEvent('trading-brain', event, data);
81
+ });
82
+ subscriptionManager.subscribe('trading-brain', ['trade:outcome'], (event, data) => {
83
+ correlator.recordEvent('trading-brain', event, data);
84
+ orchestrator?.onCrossBrainEvent('trading-brain', event, data);
85
+ const d = data;
86
+ if (d && d.win === false) {
87
+ const lossCorrelations = correlator.getCorrelations(0.3)
88
+ .filter(c => c.type === 'error-trade-loss');
89
+ if (lossCorrelations.length > 0) {
90
+ logger.warn(`[cross-brain] Trade loss correlated with recent errors (strength: ${lossCorrelations[0].strength.toFixed(2)})`);
91
+ }
92
+ }
93
+ });
94
+ subscriptionManager.subscribe('marketing-brain', ['post:published'], (event, data) => {
95
+ logger.info(`[cross-brain] Received ${event} from marketing-brain`, { data });
96
+ correlator.recordEvent('marketing-brain', event, data);
97
+ orchestrator?.onCrossBrainEvent('marketing-brain', event, data);
98
+ });
99
+ subscriptionManager.subscribe('marketing-brain', ['campaign:created'], (event, data) => {
100
+ correlator.recordEvent('marketing-brain', event, data);
101
+ orchestrator?.onCrossBrainEvent('marketing-brain', event, data);
102
+ });
103
+ }
104
+ //# sourceMappingURL=events-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-init.js","sourceRoot":"","sources":["../../src/init/events-init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { BrainConfig } from '../types/config.types.js';
3
+ export declare function logCrash(config: BrainConfig | null, type: string, err: Error): void;
4
+ export declare function runRetentionCleanup(db: Database.Database, config: BrainConfig): void;
5
+ export interface CleanupRefs {
6
+ cleanupTimer: ReturnType<typeof setInterval> | null;
7
+ retentionTimer: ReturnType<typeof setInterval> | null;
8
+ borgSync: {
9
+ stop(): void;
10
+ } | null;
11
+ telegramBot: {
12
+ stop(): Promise<void>;
13
+ } | null;
14
+ discordBot: {
15
+ stop(): Promise<void>;
16
+ } | null;
17
+ peerNetwork: {
18
+ stopDiscovery(): void;
19
+ } | null;
20
+ pluginRegistry: {
21
+ size: number;
22
+ list(): Array<{
23
+ name: string;
24
+ }>;
25
+ unloadPlugin(name: string): Promise<boolean>;
26
+ } | null;
27
+ subscriptionManager: {
28
+ disconnectAll(): void;
29
+ } | null;
30
+ attentionEngine: {
31
+ stop(): void;
32
+ } | null;
33
+ commandCenter: {
34
+ stop(): void;
35
+ } | null;
36
+ orchestrator: {
37
+ stop(): void;
38
+ } | null;
39
+ researchScheduler: {
40
+ stop(): void;
41
+ } | null;
42
+ researchEngine: {
43
+ stop(): void;
44
+ } | null;
45
+ embeddingEngine: {
46
+ stop(): void;
47
+ } | null;
48
+ learningEngine: {
49
+ stop(): void;
50
+ } | null;
51
+ mcpHttpServer: {
52
+ stop(): void;
53
+ } | null;
54
+ apiServer: {
55
+ stop(): void;
56
+ } | null;
57
+ ipcServer: {
58
+ stop(): void;
59
+ } | null;
60
+ db: {
61
+ close(): void;
62
+ } | null;
63
+ }
64
+ export declare function cleanup(refs: CleanupRefs): void;
65
+ export declare function setupCrashRecovery(config: BrainConfig | null, onRestart: () => void): void;