@timmeck/brain-core 2.31.2 → 2.33.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.
Files changed (32) hide show
  1. package/codegen-dashboard.html +222 -1
  2. package/dist/codegen/codegen-server.d.ts +5 -0
  3. package/dist/codegen/codegen-server.js +106 -1
  4. package/dist/codegen/codegen-server.js.map +1 -1
  5. package/dist/codegen/context-builder.d.ts +4 -0
  6. package/dist/codegen/context-builder.js +26 -2
  7. package/dist/codegen/context-builder.js.map +1 -1
  8. package/dist/index.d.ts +6 -0
  9. package/dist/index.js +6 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/research/bootstrap-service.d.ts +57 -0
  12. package/dist/research/bootstrap-service.js +325 -0
  13. package/dist/research/bootstrap-service.js.map +1 -0
  14. package/dist/research/data-miner.d.ts +1 -0
  15. package/dist/research/data-miner.js +22 -5
  16. package/dist/research/data-miner.js.map +1 -1
  17. package/dist/research/research-orchestrator.d.ts +14 -0
  18. package/dist/research/research-orchestrator.js +140 -0
  19. package/dist/research/research-orchestrator.js.map +1 -1
  20. package/dist/self-modification/index.d.ts +2 -0
  21. package/dist/self-modification/index.js +2 -0
  22. package/dist/self-modification/index.js.map +1 -0
  23. package/dist/self-modification/self-modification-engine.d.ts +93 -0
  24. package/dist/self-modification/self-modification-engine.js +588 -0
  25. package/dist/self-modification/self-modification-engine.js.map +1 -0
  26. package/dist/self-scanner/index.d.ts +2 -0
  27. package/dist/self-scanner/index.js +2 -0
  28. package/dist/self-scanner/index.js.map +1 -0
  29. package/dist/self-scanner/self-scanner.d.ts +99 -0
  30. package/dist/self-scanner/self-scanner.js +397 -0
  31. package/dist/self-scanner/self-scanner.js.map +1 -0
  32. package/package.json +1 -1
@@ -0,0 +1,57 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { SelfObserver } from './self-observer.js';
3
+ import type { AnomalyDetective } from './anomaly-detective.js';
4
+ import type { ResearchJournal } from './journal.js';
5
+ import type { HypothesisEngine } from '../hypothesis/engine.js';
6
+ import type { PredictionEngine } from '../prediction/prediction-engine.js';
7
+ import type { ParameterRegistry } from '../metacognition/parameter-registry.js';
8
+ export interface BootstrapConfig {
9
+ brainName: string;
10
+ engineCount: number;
11
+ mcpToolCount: number;
12
+ version: string;
13
+ }
14
+ export interface BootstrapEngines {
15
+ selfObserver?: SelfObserver;
16
+ anomalyDetective?: AnomalyDetective;
17
+ journal?: ResearchJournal;
18
+ hypothesisEngine?: HypothesisEngine;
19
+ predictionEngine?: PredictionEngine;
20
+ parameterRegistry?: ParameterRegistry;
21
+ }
22
+ export interface BootstrapState {
23
+ bootstrapped: boolean;
24
+ bootstrapped_at: number | null;
25
+ observations_seeded: number;
26
+ journal_entries_seeded: number;
27
+ hypotheses_seeded: number;
28
+ predictions_seeded: number;
29
+ updated_at: string;
30
+ }
31
+ export interface BootstrapResult {
32
+ alreadyBootstrapped: boolean;
33
+ observations: number;
34
+ journalEntries: number;
35
+ hypotheses: number;
36
+ predictions: number;
37
+ metrics: number;
38
+ }
39
+ export declare function runBootstrapMigration(db: Database.Database): void;
40
+ export declare class BootstrapService {
41
+ private db;
42
+ private config;
43
+ private engines;
44
+ private log;
45
+ constructor(db: Database.Database, config: BootstrapConfig);
46
+ /** Wire engines after construction — missing engines are gracefully skipped. */
47
+ setEngines(engines: BootstrapEngines): void;
48
+ /** Run the 5-phase bootstrap. Idempotent — only runs once. */
49
+ bootstrap(): BootstrapResult;
50
+ /** Get current bootstrap state. */
51
+ getState(): BootstrapState;
52
+ private seedObservations;
53
+ private seedJournal;
54
+ private seedHypotheses;
55
+ private seedPredictions;
56
+ private seedMetrics;
57
+ }
@@ -0,0 +1,325 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ // ── Known research tables ───────────────────────────────
3
+ const RESEARCH_TABLES = [
4
+ 'self_observations', 'self_insights', 'research_journal', 'hypotheses', 'observations',
5
+ 'anomalies', 'metric_history', 'experiments', 'knowledge_base', 'research_agenda',
6
+ 'cross_domain_events', 'cross_domain_correlations', 'causal_events', 'causal_edges',
7
+ 'predictions', 'prediction_metrics', 'dream_history',
8
+ ];
9
+ // ── Migration ───────────────────────────────────────────
10
+ export function runBootstrapMigration(db) {
11
+ db.exec(`
12
+ CREATE TABLE IF NOT EXISTS bootstrap_state (
13
+ id INTEGER PRIMARY KEY CHECK (id = 1),
14
+ bootstrapped INTEGER NOT NULL DEFAULT 0,
15
+ bootstrapped_at INTEGER,
16
+ observations_seeded INTEGER NOT NULL DEFAULT 0,
17
+ journal_entries_seeded INTEGER NOT NULL DEFAULT 0,
18
+ hypotheses_seeded INTEGER NOT NULL DEFAULT 0,
19
+ predictions_seeded INTEGER NOT NULL DEFAULT 0,
20
+ updated_at TEXT DEFAULT (datetime('now'))
21
+ );
22
+ INSERT OR IGNORE INTO bootstrap_state (id) VALUES (1);
23
+ `);
24
+ }
25
+ // ── BootstrapService ────────────────────────────────────
26
+ export class BootstrapService {
27
+ db;
28
+ config;
29
+ engines = {};
30
+ log = getLogger();
31
+ constructor(db, config) {
32
+ this.db = db;
33
+ this.config = config;
34
+ runBootstrapMigration(db);
35
+ }
36
+ /** Wire engines after construction — missing engines are gracefully skipped. */
37
+ setEngines(engines) {
38
+ this.engines = engines;
39
+ }
40
+ /** Run the 5-phase bootstrap. Idempotent — only runs once. */
41
+ bootstrap() {
42
+ const state = this.getState();
43
+ if (state.bootstrapped) {
44
+ this.log.info(`[bootstrap] Already bootstrapped at ${state.bootstrapped_at}`);
45
+ return { alreadyBootstrapped: true, observations: 0, journalEntries: 0, hypotheses: 0, predictions: 0, metrics: 0 };
46
+ }
47
+ this.log.info(`[bootstrap] Starting cold-start bootstrap for ${this.config.brainName}...`);
48
+ const start = Date.now();
49
+ const observations = this.seedObservations();
50
+ const journalEntries = this.seedJournal();
51
+ const hypotheses = this.seedHypotheses();
52
+ const predictions = this.seedPredictions();
53
+ const metrics = this.seedMetrics();
54
+ // Mark as bootstrapped
55
+ this.db.prepare(`
56
+ UPDATE bootstrap_state SET
57
+ bootstrapped = 1,
58
+ bootstrapped_at = ?,
59
+ observations_seeded = ?,
60
+ journal_entries_seeded = ?,
61
+ hypotheses_seeded = ?,
62
+ predictions_seeded = ?,
63
+ updated_at = datetime('now')
64
+ WHERE id = 1
65
+ `).run(Date.now(), observations, journalEntries, hypotheses, predictions);
66
+ const duration = Date.now() - start;
67
+ this.log.info(`[bootstrap] Complete in ${duration}ms: ${observations} observations, ${journalEntries} journal, ` +
68
+ `${hypotheses} hypotheses, ${predictions} predictions, ${metrics} metrics seeded`);
69
+ return { alreadyBootstrapped: false, observations, journalEntries, hypotheses, predictions, metrics };
70
+ }
71
+ /** Get current bootstrap state. */
72
+ getState() {
73
+ const row = this.db.prepare('SELECT * FROM bootstrap_state WHERE id = 1').get();
74
+ if (!row) {
75
+ return { bootstrapped: false, bootstrapped_at: null, observations_seeded: 0, journal_entries_seeded: 0, hypotheses_seeded: 0, predictions_seeded: 0, updated_at: '' };
76
+ }
77
+ return {
78
+ bootstrapped: row.bootstrapped === 1,
79
+ bootstrapped_at: row.bootstrapped_at,
80
+ observations_seeded: row.observations_seeded,
81
+ journal_entries_seeded: row.journal_entries_seeded,
82
+ hypotheses_seeded: row.hypotheses_seeded,
83
+ predictions_seeded: row.predictions_seeded,
84
+ updated_at: row.updated_at,
85
+ };
86
+ }
87
+ // ── Phase 1: Seed Observations ────────────────────────
88
+ seedObservations() {
89
+ if (!this.engines.selfObserver)
90
+ return 0;
91
+ let count = 0;
92
+ // 1a. DB table sizes — count rows in known research tables
93
+ for (const table of RESEARCH_TABLES) {
94
+ try {
95
+ const row = this.db.prepare(`SELECT COUNT(*) as cnt FROM ${table}`).get();
96
+ this.engines.selfObserver.record({
97
+ category: 'tool_usage',
98
+ event_type: `table_size:${table}`,
99
+ metrics: { row_count: row.cnt, table },
100
+ });
101
+ count++;
102
+ }
103
+ catch {
104
+ // Table doesn't exist yet — skip
105
+ }
106
+ }
107
+ // 1b. Parameter landscape — read up to 15 parameters
108
+ if (this.engines.parameterRegistry) {
109
+ try {
110
+ const params = this.engines.parameterRegistry.list();
111
+ const toSeed = params.slice(0, 15);
112
+ for (const p of toSeed) {
113
+ this.engines.selfObserver.record({
114
+ category: 'tool_usage',
115
+ event_type: `parameter:${p.engine}.${p.name}`,
116
+ metrics: { value: p.value, min: p.min, max: p.max },
117
+ });
118
+ count++;
119
+ }
120
+ }
121
+ catch {
122
+ // ParameterRegistry not ready
123
+ }
124
+ }
125
+ // 1c. System state — 5 observations
126
+ const systemObs = [
127
+ { event_type: 'system:engine_count', metrics: { count: this.config.engineCount } },
128
+ { event_type: 'system:mcp_tool_count', metrics: { count: this.config.mcpToolCount } },
129
+ { event_type: 'system:startup_time', metrics: { timestamp: Date.now() } },
130
+ { event_type: 'system:memory_rss', metrics: { bytes: process.memoryUsage().rss } },
131
+ { event_type: 'system:version', metrics: { version: this.config.version, brain: this.config.brainName } },
132
+ ];
133
+ for (const obs of systemObs) {
134
+ this.engines.selfObserver.record({
135
+ category: 'tool_usage',
136
+ event_type: obs.event_type,
137
+ metrics: obs.metrics,
138
+ });
139
+ count++;
140
+ }
141
+ this.log.info(`[bootstrap] Phase 1: ${count} observations seeded`);
142
+ return count;
143
+ }
144
+ // ── Phase 2: Seed Journal ─────────────────────────────
145
+ seedJournal() {
146
+ if (!this.engines.journal)
147
+ return 0;
148
+ let count = 0;
149
+ const { brainName, version, engineCount, mcpToolCount } = this.config;
150
+ // Entry 1: Brain initialized
151
+ this.engines.journal.write({
152
+ type: 'milestone',
153
+ title: `${brainName} initialized (v${version})`,
154
+ content: `Brain started with ${engineCount} engines and ${mcpToolCount} MCP tools. Cold-start bootstrap active.`,
155
+ tags: [brainName, 'bootstrap', 'init'],
156
+ references: [],
157
+ significance: 'notable',
158
+ data: { version, engineCount, mcpToolCount, phase: 'bootstrap' },
159
+ });
160
+ count++;
161
+ // Entry 2: Architecture baseline
162
+ const tableCounts = {};
163
+ for (const table of RESEARCH_TABLES) {
164
+ try {
165
+ const row = this.db.prepare(`SELECT COUNT(*) as cnt FROM ${table}`).get();
166
+ tableCounts[table] = row.cnt;
167
+ }
168
+ catch {
169
+ // skip
170
+ }
171
+ }
172
+ this.engines.journal.write({
173
+ type: 'discovery',
174
+ title: 'Architecture baseline recorded',
175
+ content: `Database has ${Object.keys(tableCounts).length} research tables. ${JSON.stringify(tableCounts)}`,
176
+ tags: [brainName, 'bootstrap', 'baseline'],
177
+ references: [],
178
+ significance: 'routine',
179
+ data: { tableCounts },
180
+ });
181
+ count++;
182
+ // Entry 3: Cold-start bootstrap complete
183
+ this.engines.journal.write({
184
+ type: 'discovery',
185
+ title: 'Cold-start bootstrap complete',
186
+ content: 'Initial seed data generated from self-introspection. Engines should now have enough data to produce output from cycle 1.',
187
+ tags: [brainName, 'bootstrap', 'cold-start'],
188
+ references: [],
189
+ significance: 'routine',
190
+ data: { phase: 'complete' },
191
+ });
192
+ count++;
193
+ // Entry 4: Parameter count (only if registry available)
194
+ if (this.engines.parameterRegistry) {
195
+ try {
196
+ const params = this.engines.parameterRegistry.list();
197
+ this.engines.journal.write({
198
+ type: 'discovery',
199
+ title: `${params.length} tunable parameters registered`,
200
+ content: `ParameterRegistry contains ${params.length} parameters across ${new Set(params.map(p => p.engine)).size} engines.`,
201
+ tags: [brainName, 'bootstrap', 'parameters'],
202
+ references: [],
203
+ significance: 'routine',
204
+ data: { parameterCount: params.length },
205
+ });
206
+ count++;
207
+ }
208
+ catch {
209
+ // skip
210
+ }
211
+ }
212
+ this.log.info(`[bootstrap] Phase 2: ${count} journal entries seeded`);
213
+ return count;
214
+ }
215
+ // ── Phase 3: Seed Hypotheses ──────────────────────────
216
+ seedHypotheses() {
217
+ if (!this.engines.hypothesisEngine)
218
+ return 0;
219
+ let count = 0;
220
+ const seeds = [
221
+ {
222
+ statement: 'Higher dream.prune_threshold leads to fewer but higher-quality memories',
223
+ variables: ['dream.prune_threshold', 'memory_quality'],
224
+ condition: { type: 'correlation', params: { strategy: 'bootstrap_seed', domain: 'dream' } },
225
+ },
226
+ {
227
+ statement: 'Attention decay rate correlates with focus duration',
228
+ variables: ['attention.decay_rate', 'focus_duration'],
229
+ condition: { type: 'correlation', params: { strategy: 'bootstrap_seed', domain: 'attention' } },
230
+ },
231
+ {
232
+ statement: 'More observation types lead to more hypotheses per cycle',
233
+ variables: ['observation_type_count', 'hypothesis_per_cycle'],
234
+ condition: { type: 'correlation', params: { strategy: 'bootstrap_seed', domain: 'hypothesis' } },
235
+ },
236
+ {
237
+ statement: 'Journal entry count grows linearly over cycles',
238
+ variables: ['journal_entries', 'cycle_count'],
239
+ condition: { type: 'threshold', params: { strategy: 'bootstrap_seed', domain: 'journal' } },
240
+ },
241
+ ];
242
+ for (const seed of seeds) {
243
+ // Duplicate check
244
+ const existing = this.db.prepare("SELECT id FROM hypotheses WHERE statement = ? AND status != 'rejected'").get(seed.statement);
245
+ if (existing)
246
+ continue;
247
+ try {
248
+ this.engines.hypothesisEngine.propose({
249
+ statement: seed.statement,
250
+ type: 'correlation',
251
+ source: 'bootstrap',
252
+ variables: seed.variables,
253
+ condition: seed.condition,
254
+ });
255
+ count++;
256
+ }
257
+ catch {
258
+ // skip
259
+ }
260
+ }
261
+ this.log.info(`[bootstrap] Phase 3: ${count} hypotheses seeded`);
262
+ return count;
263
+ }
264
+ // ── Phase 4: Seed Predictions ─────────────────────────
265
+ seedPredictions() {
266
+ if (!this.engines.predictionEngine)
267
+ return 0;
268
+ let count = 0;
269
+ const now = Date.now();
270
+ const metricsToSeed = ['journal_entries', 'observation_count', 'hypothesis_count'];
271
+ for (const metric of metricsToSeed) {
272
+ // Seed 5 data points with slightly varying values over the last 5 intervals
273
+ for (let i = 4; i >= 0; i--) {
274
+ const timestamp = now - (i * 300_000); // 5-min intervals
275
+ const baseValue = metric === 'journal_entries' ? 3 + i : metric === 'observation_count' ? 10 + i * 2 : 1 + i;
276
+ this.db.prepare(`
277
+ INSERT INTO prediction_metrics (metric, value, domain, timestamp) VALUES (?, ?, ?, ?)
278
+ `).run(metric, baseValue, 'metric', timestamp);
279
+ count++;
280
+ }
281
+ }
282
+ this.log.info(`[bootstrap] Phase 4: ${count} prediction data points seeded`);
283
+ return count;
284
+ }
285
+ // ── Phase 5: Seed Metrics ─────────────────────────────
286
+ seedMetrics() {
287
+ if (!this.engines.anomalyDetective)
288
+ return 0;
289
+ let count = 0;
290
+ const now = Date.now();
291
+ const anomalyMetrics = ['insight_count', 'anomaly_count', 'cycle_duration_ms', 'journal_entries', 'hypothesis_count'];
292
+ for (const metric of anomalyMetrics) {
293
+ // Seed 5 baseline data points over the last 5 intervals
294
+ for (let i = 4; i >= 0; i--) {
295
+ const timestamp = now - (i * 300_000);
296
+ let baseValue;
297
+ switch (metric) {
298
+ case 'insight_count':
299
+ baseValue = 1 + Math.floor(i * 0.5);
300
+ break;
301
+ case 'anomaly_count':
302
+ baseValue = 0;
303
+ break;
304
+ case 'cycle_duration_ms':
305
+ baseValue = 150 + i * 10;
306
+ break;
307
+ case 'journal_entries':
308
+ baseValue = 3 + i;
309
+ break;
310
+ case 'hypothesis_count':
311
+ baseValue = 1 + i;
312
+ break;
313
+ default: baseValue = 0;
314
+ }
315
+ this.db.prepare(`
316
+ INSERT INTO metric_history (metric, value, timestamp) VALUES (?, ?, ?)
317
+ `).run(metric, baseValue, timestamp);
318
+ count++;
319
+ }
320
+ }
321
+ this.log.info(`[bootstrap] Phase 5: ${count} anomaly baseline metrics seeded`);
322
+ return count;
323
+ }
324
+ }
325
+ //# sourceMappingURL=bootstrap-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-service.js","sourceRoot":"","sources":["../../src/research/bootstrap-service.ts"],"names":[],"mappings":"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"}
@@ -60,6 +60,7 @@ export interface DataMinerEngines {
60
60
  export interface DataMinerState {
61
61
  last_mined_at: number;
62
62
  bootstrap_complete: boolean;
63
+ bootstrap_attempts: number;
63
64
  total_observations_mined: number;
64
65
  total_causal_events_mined: number;
65
66
  total_metrics_mined: number;
@@ -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.log.info(`[data-miner] Bootstrapping ${names} — scanning all historical data...`);
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
- this.state.bootstrap_complete = true;
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":"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"}
1
+ {"version":3,"file":"data-miner.js","sourceRoot":"","sources":["../../src/research/data-miner.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,9 @@ import type { GoalEngine } from '../goals/goal-engine.js';
36
36
  import type { EvolutionEngine } from '../metacognition/evolution-engine.js';
37
37
  import type { ReasoningEngine } from '../reasoning/reasoning-engine.js';
38
38
  import type { EmotionalModel } from '../emotional/emotional-model.js';
39
+ import type { SelfScanner } from '../self-scanner/self-scanner.js';
40
+ import type { SelfModificationEngine } from '../self-modification/self-modification-engine.js';
41
+ import type { BootstrapService } from './bootstrap-service.js';
39
42
  import { AutoResponder } from './auto-responder.js';
40
43
  export interface ResearchOrchestratorConfig {
41
44
  brainName: string;
@@ -86,6 +89,9 @@ export declare class ResearchOrchestrator {
86
89
  private evolutionEngine;
87
90
  private reasoningEngine;
88
91
  private emotionalModel;
92
+ private selfScanner;
93
+ private selfModificationEngine;
94
+ private bootstrapService;
89
95
  private brainName;
90
96
  private feedbackTimer;
91
97
  private cycleCount;
@@ -146,6 +152,12 @@ export declare class ResearchOrchestrator {
146
152
  /** Set the ReasoningEngine — multi-step logical inference chains. */
147
153
  setReasoningEngine(engine: ReasoningEngine): void;
148
154
  setEmotionalModel(model: EmotionalModel): void;
155
+ /** Set the SelfScanner — indexes own source code for self-modification context. */
156
+ setSelfScanner(scanner: SelfScanner): void;
157
+ /** Set the SelfModificationEngine — generates and applies code changes autonomously. */
158
+ setSelfModificationEngine(engine: SelfModificationEngine): void;
159
+ /** Set the BootstrapService — seeds initial data on first cycle. */
160
+ setBootstrapService(service: BootstrapService): void;
149
161
  /** Set the PredictionEngine — wires journal into it. */
150
162
  setPredictionEngine(engine: PredictionEngine): void;
151
163
  /** Start the autonomous feedback loop timer. */
@@ -192,6 +204,8 @@ export declare class ResearchOrchestrator {
192
204
  /** Append improvement suggestions to ~/.brain/improvement-requests.md.
193
205
  * Skips writing if suggestions are identical to the last write (dedup). */
194
206
  private writeSuggestionsToFile;
207
+ /** Find a concrete self-improvement suggestion that maps to specific files. */
208
+ private findActionableSuggestion;
195
209
  /** Get a comprehensive research summary for dashboards/API. */
196
210
  getSummary(): Record<string, unknown>;
197
211
  }