@timmeck/brain-core 2.32.0 → 2.34.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.
- package/README.md +76 -28
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/research/bootstrap-service.d.ts +57 -0
- package/dist/research/bootstrap-service.js +325 -0
- package/dist/research/bootstrap-service.js.map +1 -0
- package/dist/research/data-miner.d.ts +1 -0
- package/dist/research/data-miner.js +22 -5
- package/dist/research/data-miner.js.map +1 -1
- package/dist/research/research-orchestrator.d.ts +4 -0
- package/dist/research/research-orchestrator.js +30 -0
- package/dist/research/research-orchestrator.js.map +1 -1
- package/dist/unified/unified-server.d.ts +17 -0
- package/dist/unified/unified-server.js +226 -0
- package/dist/unified/unified-server.js.map +1 -1
- package/package.json +1 -1
- package/unified-dashboard.html +1198 -1006
|
@@ -6,6 +6,7 @@ export function runDataMinerMigration(db) {
|
|
|
6
6
|
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
7
7
|
last_mined_at INTEGER NOT NULL DEFAULT 0,
|
|
8
8
|
bootstrap_complete INTEGER NOT NULL DEFAULT 0,
|
|
9
|
+
bootstrap_attempts INTEGER NOT NULL DEFAULT 0,
|
|
9
10
|
total_observations_mined INTEGER NOT NULL DEFAULT 0,
|
|
10
11
|
total_causal_events_mined INTEGER NOT NULL DEFAULT 0,
|
|
11
12
|
total_metrics_mined INTEGER NOT NULL DEFAULT 0,
|
|
@@ -13,6 +14,13 @@ export function runDataMinerMigration(db) {
|
|
|
13
14
|
);
|
|
14
15
|
INSERT OR IGNORE INTO data_miner_state (id) VALUES (1);
|
|
15
16
|
`);
|
|
17
|
+
// Graceful ALTER TABLE for existing DBs
|
|
18
|
+
try {
|
|
19
|
+
db.exec('ALTER TABLE data_miner_state ADD COLUMN bootstrap_attempts INTEGER NOT NULL DEFAULT 0');
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Column already exists
|
|
23
|
+
}
|
|
16
24
|
}
|
|
17
25
|
// ── DataMiner ───────────────────────────────────────────
|
|
18
26
|
export class DataMiner {
|
|
@@ -41,15 +49,22 @@ export class DataMiner {
|
|
|
41
49
|
return;
|
|
42
50
|
}
|
|
43
51
|
const names = this.adapters.map(a => a.name).join(', ');
|
|
44
|
-
this.
|
|
52
|
+
this.state.bootstrap_attempts++;
|
|
53
|
+
this.log.info(`[data-miner] Bootstrapping ${names} — attempt ${this.state.bootstrap_attempts}, scanning all historical data...`);
|
|
45
54
|
const start = Date.now();
|
|
46
55
|
// Mine everything from epoch
|
|
47
56
|
const result = this.mineFrom(0);
|
|
48
|
-
|
|
57
|
+
// Only mark complete if we actually mined something, OR safety valve after 10 attempts
|
|
58
|
+
if (result.total > 0 || this.state.bootstrap_attempts >= 10) {
|
|
59
|
+
this.state.bootstrap_complete = true;
|
|
60
|
+
if (result.total === 0) {
|
|
61
|
+
this.log.info(`[data-miner] Safety valve: marking bootstrap complete after ${this.state.bootstrap_attempts} attempts with 0 items (BootstrapService will seed data instead)`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
49
64
|
this.state.last_mined_at = Date.now();
|
|
50
65
|
this.saveState();
|
|
51
66
|
const duration = Date.now() - start;
|
|
52
|
-
this.log.info(`[data-miner] Bootstrap complete for ${names} in ${duration}ms — ` +
|
|
67
|
+
this.log.info(`[data-miner] Bootstrap ${this.state.bootstrap_complete ? 'complete' : 'incomplete (0 items)'} for ${names} in ${duration}ms — ` +
|
|
53
68
|
`${result.observations} observations, ${result.causalEvents} causal events, ` +
|
|
54
69
|
`${result.metrics} metrics, ${result.hypothesisObs} hypothesis observations, ` +
|
|
55
70
|
`${result.crossDomain} cross-domain events`);
|
|
@@ -158,11 +173,12 @@ export class DataMiner {
|
|
|
158
173
|
loadState() {
|
|
159
174
|
const row = this.db.prepare('SELECT * FROM data_miner_state WHERE id = 1').get();
|
|
160
175
|
if (!row) {
|
|
161
|
-
return { last_mined_at: 0, bootstrap_complete: false, total_observations_mined: 0, total_causal_events_mined: 0, total_metrics_mined: 0 };
|
|
176
|
+
return { last_mined_at: 0, bootstrap_complete: false, bootstrap_attempts: 0, total_observations_mined: 0, total_causal_events_mined: 0, total_metrics_mined: 0 };
|
|
162
177
|
}
|
|
163
178
|
return {
|
|
164
179
|
last_mined_at: row.last_mined_at,
|
|
165
180
|
bootstrap_complete: row.bootstrap_complete === 1,
|
|
181
|
+
bootstrap_attempts: row.bootstrap_attempts ?? 0,
|
|
166
182
|
total_observations_mined: row.total_observations_mined,
|
|
167
183
|
total_causal_events_mined: row.total_causal_events_mined,
|
|
168
184
|
total_metrics_mined: row.total_metrics_mined,
|
|
@@ -173,12 +189,13 @@ export class DataMiner {
|
|
|
173
189
|
UPDATE data_miner_state SET
|
|
174
190
|
last_mined_at = ?,
|
|
175
191
|
bootstrap_complete = ?,
|
|
192
|
+
bootstrap_attempts = ?,
|
|
176
193
|
total_observations_mined = ?,
|
|
177
194
|
total_causal_events_mined = ?,
|
|
178
195
|
total_metrics_mined = ?,
|
|
179
196
|
updated_at = datetime('now')
|
|
180
197
|
WHERE id = 1
|
|
181
|
-
`).run(this.state.last_mined_at, this.state.bootstrap_complete ? 1 : 0, this.state.total_observations_mined, this.state.total_causal_events_mined, this.state.total_metrics_mined);
|
|
198
|
+
`).run(this.state.last_mined_at, this.state.bootstrap_complete ? 1 : 0, this.state.bootstrap_attempts, this.state.total_observations_mined, this.state.total_causal_events_mined, this.state.total_metrics_mined);
|
|
182
199
|
}
|
|
183
200
|
}
|
|
184
201
|
//# sourceMappingURL=data-miner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-miner.js","sourceRoot":"","sources":["../../src/research/data-miner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"data-miner.js","sourceRoot":"","sources":["../../src/research/data-miner.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,7 @@ import type { ReasoningEngine } from '../reasoning/reasoning-engine.js';
|
|
|
38
38
|
import type { EmotionalModel } from '../emotional/emotional-model.js';
|
|
39
39
|
import type { SelfScanner } from '../self-scanner/self-scanner.js';
|
|
40
40
|
import type { SelfModificationEngine } from '../self-modification/self-modification-engine.js';
|
|
41
|
+
import type { BootstrapService } from './bootstrap-service.js';
|
|
41
42
|
import { AutoResponder } from './auto-responder.js';
|
|
42
43
|
export interface ResearchOrchestratorConfig {
|
|
43
44
|
brainName: string;
|
|
@@ -90,6 +91,7 @@ export declare class ResearchOrchestrator {
|
|
|
90
91
|
private emotionalModel;
|
|
91
92
|
private selfScanner;
|
|
92
93
|
private selfModificationEngine;
|
|
94
|
+
private bootstrapService;
|
|
93
95
|
private brainName;
|
|
94
96
|
private feedbackTimer;
|
|
95
97
|
private cycleCount;
|
|
@@ -154,6 +156,8 @@ export declare class ResearchOrchestrator {
|
|
|
154
156
|
setSelfScanner(scanner: SelfScanner): void;
|
|
155
157
|
/** Set the SelfModificationEngine — generates and applies code changes autonomously. */
|
|
156
158
|
setSelfModificationEngine(engine: SelfModificationEngine): void;
|
|
159
|
+
/** Set the BootstrapService — seeds initial data on first cycle. */
|
|
160
|
+
setBootstrapService(service: BootstrapService): void;
|
|
157
161
|
/** Set the PredictionEngine — wires journal into it. */
|
|
158
162
|
setPredictionEngine(engine: PredictionEngine): void;
|
|
159
163
|
/** Start the autonomous feedback loop timer. */
|
|
@@ -54,6 +54,7 @@ export class ResearchOrchestrator {
|
|
|
54
54
|
emotionalModel = null;
|
|
55
55
|
selfScanner = null;
|
|
56
56
|
selfModificationEngine = null;
|
|
57
|
+
bootstrapService = null;
|
|
57
58
|
brainName;
|
|
58
59
|
feedbackTimer = null;
|
|
59
60
|
cycleCount = 0;
|
|
@@ -172,6 +173,8 @@ export class ResearchOrchestrator {
|
|
|
172
173
|
setSelfScanner(scanner) { this.selfScanner = scanner; }
|
|
173
174
|
/** Set the SelfModificationEngine — generates and applies code changes autonomously. */
|
|
174
175
|
setSelfModificationEngine(engine) { this.selfModificationEngine = engine; }
|
|
176
|
+
/** Set the BootstrapService — seeds initial data on first cycle. */
|
|
177
|
+
setBootstrapService(service) { this.bootstrapService = service; }
|
|
175
178
|
/** Set the PredictionEngine — wires journal into it. */
|
|
176
179
|
setPredictionEngine(engine) {
|
|
177
180
|
this.predictionEngine = engine;
|
|
@@ -258,6 +261,19 @@ export class ResearchOrchestrator {
|
|
|
258
261
|
const ts = this.thoughtStream;
|
|
259
262
|
this.log.info(`[orchestrator] ─── Feedback Cycle #${this.cycleCount} ───`);
|
|
260
263
|
ts?.emit('orchestrator', 'perceiving', `Feedback Cycle #${this.cycleCount} starting...`);
|
|
264
|
+
// Bootstrap: seed initial data on first cycle so engines have something to work with
|
|
265
|
+
if (this.cycleCount === 1 && this.bootstrapService) {
|
|
266
|
+
try {
|
|
267
|
+
const result = this.bootstrapService.bootstrap();
|
|
268
|
+
if (!result.alreadyBootstrapped) {
|
|
269
|
+
ts?.emit('orchestrator', 'discovering', `Bootstrap seeded: ${result.observations} observations, ${result.journalEntries} journal, ${result.hypotheses} hypotheses, ${result.predictions} predictions, ${result.metrics} metrics`, 'notable');
|
|
270
|
+
this.log.info(`[orchestrator] Cold-start bootstrap complete — engines have initial data`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
catch (err) {
|
|
274
|
+
this.log.error(`[orchestrator] Bootstrap error: ${err.message}`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
261
277
|
// 0. DataMiner: mine new data from DB into engines
|
|
262
278
|
if (this.dataMiner) {
|
|
263
279
|
ts?.emit('data_miner', 'perceiving', 'Scanning for new data...');
|
|
@@ -481,6 +497,20 @@ export class ResearchOrchestrator {
|
|
|
481
497
|
this.journal.reflect();
|
|
482
498
|
ts?.emit('journal', 'reflecting', 'Reflection complete', 'notable');
|
|
483
499
|
}
|
|
500
|
+
// 8b. Cycle-end journal entry — guarantees journal grows every cycle
|
|
501
|
+
{
|
|
502
|
+
const cycleDuration = Date.now() - start;
|
|
503
|
+
const journalStats = this.journal.getSummary();
|
|
504
|
+
this.journal.write({
|
|
505
|
+
type: 'insight',
|
|
506
|
+
title: `Cycle #${this.cycleCount} summary`,
|
|
507
|
+
content: `Completed feedback cycle #${this.cycleCount} in ${cycleDuration}ms. ${insights.length} insights, ${anomalies.length} anomalies detected. Journal now has ${journalStats.total_entries ?? 0} entries.`,
|
|
508
|
+
tags: [this.brainName, 'cycle-summary'],
|
|
509
|
+
references: [],
|
|
510
|
+
significance: 'routine',
|
|
511
|
+
data: { cycle: this.cycleCount, duration_ms: cycleDuration, insights: insights.length, anomalies: anomalies.length },
|
|
512
|
+
});
|
|
513
|
+
}
|
|
484
514
|
// 9. Prediction Engine: resolve pending + auto-predict
|
|
485
515
|
if (this.predictionEngine) {
|
|
486
516
|
ts?.emit('prediction', 'predicting', 'Resolving pending predictions...');
|