@timmeck/brain-core 2.4.0 → 2.6.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 (35) hide show
  1. package/dist/index.d.ts +20 -0
  2. package/dist/index.js +20 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/research/adaptive-strategy.d.ts +56 -0
  5. package/dist/research/adaptive-strategy.js +236 -0
  6. package/dist/research/adaptive-strategy.js.map +1 -0
  7. package/dist/research/agenda-engine.d.ts +46 -0
  8. package/dist/research/agenda-engine.js +264 -0
  9. package/dist/research/agenda-engine.js.map +1 -0
  10. package/dist/research/anomaly-detective.d.ts +62 -0
  11. package/dist/research/anomaly-detective.js +318 -0
  12. package/dist/research/anomaly-detective.js.map +1 -0
  13. package/dist/research/autonomous-scheduler.d.ts +124 -0
  14. package/dist/research/autonomous-scheduler.js +411 -0
  15. package/dist/research/autonomous-scheduler.js.map +1 -0
  16. package/dist/research/counterfactual-engine.d.ts +63 -0
  17. package/dist/research/counterfactual-engine.js +263 -0
  18. package/dist/research/counterfactual-engine.js.map +1 -0
  19. package/dist/research/cross-domain-engine.d.ts +52 -0
  20. package/dist/research/cross-domain-engine.js +283 -0
  21. package/dist/research/cross-domain-engine.js.map +1 -0
  22. package/dist/research/experiment-engine.d.ts +77 -0
  23. package/dist/research/experiment-engine.js +328 -0
  24. package/dist/research/experiment-engine.js.map +1 -0
  25. package/dist/research/journal.d.ts +62 -0
  26. package/dist/research/journal.js +262 -0
  27. package/dist/research/journal.js.map +1 -0
  28. package/dist/research/knowledge-distiller.d.ts +95 -0
  29. package/dist/research/knowledge-distiller.js +426 -0
  30. package/dist/research/knowledge-distiller.js.map +1 -0
  31. package/dist/research/self-observer.d.ts +55 -0
  32. package/dist/research/self-observer.js +268 -0
  33. package/dist/research/self-observer.js.map +1 -0
  34. package/package.json +2 -1
  35. package/tsconfig.tsbuildinfo +1 -1
package/dist/index.d.ts CHANGED
@@ -59,9 +59,29 @@ export { ExportService } from './export/service.js';
59
59
  export type { ExportOptions, ExportResult } from './export/service.js';
60
60
  export { BackupService } from './backup/service.js';
61
61
  export type { BackupConfig, BackupRecord, RestoreResult } from './backup/service.js';
62
+ export { AutonomousResearchScheduler, runResearchDiscoveryMigration } from './research/autonomous-scheduler.js';
63
+ export type { ResearchDiscovery, ResearchCycleReport, AutonomousResearchConfig } from './research/autonomous-scheduler.js';
62
64
  export { MetaLearningEngine, runMetaLearningMigration } from './meta-learning/engine.js';
63
65
  export type { HyperParameter, LearningSnapshot, ParameterRecommendation, MetaLearningStatus } from './meta-learning/engine.js';
64
66
  export { CausalGraph, runCausalMigration } from './causal/engine.js';
65
67
  export type { CausalEvent, CausalEdge, CausalPath, CausalAnalysis } from './causal/engine.js';
66
68
  export { HypothesisEngine, runHypothesisMigration } from './hypothesis/engine.js';
67
69
  export type { Hypothesis, HypothesisStatus, HypothesisCondition, HypothesisTestResult, Observation } from './hypothesis/engine.js';
70
+ export { SelfObserver, runSelfObserverMigration } from './research/self-observer.js';
71
+ export type { SelfObservation, SelfInsight, ImprovementSuggestion, SelfObserverConfig, ObservationCategory, InsightType } from './research/self-observer.js';
72
+ export { AdaptiveStrategyEngine, runAdaptiveStrategyMigration } from './research/adaptive-strategy.js';
73
+ export type { StrategyAdaptation, StrategyStatus, StrategyDomain, AdaptiveStrategyConfig } from './research/adaptive-strategy.js';
74
+ export { ExperimentEngine, runExperimentMigration } from './research/experiment-engine.js';
75
+ export type { Experiment, ExperimentConclusion, ExperimentProposal, ExperimentStatus, ExperimentEngineConfig } from './research/experiment-engine.js';
76
+ export { CrossDomainEngine, runCrossDomainMigration } from './research/cross-domain-engine.js';
77
+ export type { CrossDomainCorrelation, CrossDomainEvent, CrossDomainConfig } from './research/cross-domain-engine.js';
78
+ export { CounterfactualEngine, runCounterfactualMigration } from './research/counterfactual-engine.js';
79
+ export type { CounterfactualQuery, CounterfactualResult, InterventionImpact, CounterfactualConfig } from './research/counterfactual-engine.js';
80
+ export { KnowledgeDistiller, runKnowledgeDistillerMigration } from './research/knowledge-distiller.js';
81
+ export type { Principle, AntiPattern, Strategy, KnowledgePackage, KnowledgeEvolution, KnowledgeDistillerConfig } from './research/knowledge-distiller.js';
82
+ export { ResearchAgendaEngine, runAgendaMigration } from './research/agenda-engine.js';
83
+ export type { ResearchAgendaItem, AgendaItemType, AgendaConfig } from './research/agenda-engine.js';
84
+ export { AnomalyDetective, runAnomalyDetectiveMigration } from './research/anomaly-detective.js';
85
+ export type { Anomaly, AnomalyType, AnomalySeverity, DriftReport, AnomalyDetectiveConfig } from './research/anomaly-detective.js';
86
+ export { ResearchJournal, runJournalMigration } from './research/journal.js';
87
+ export type { JournalEntry, JournalEntryType, Significance, JournalSummary, JournalConfig } from './research/journal.js';
package/dist/index.js CHANGED
@@ -51,10 +51,30 @@ export { WebhookService, runWebhookMigration } from './webhooks/service.js';
51
51
  export { ExportService } from './export/service.js';
52
52
  // ── Backup ────────────────────────────────────────────────
53
53
  export { BackupService } from './backup/service.js';
54
+ // ── Autonomous Research ──────────────────────────────────
55
+ export { AutonomousResearchScheduler, runResearchDiscoveryMigration } from './research/autonomous-scheduler.js';
54
56
  // ── Meta-Learning ────────────────────────────────────────
55
57
  export { MetaLearningEngine, runMetaLearningMigration } from './meta-learning/engine.js';
56
58
  // ── Causal Inference ─────────────────────────────────────
57
59
  export { CausalGraph, runCausalMigration } from './causal/engine.js';
58
60
  // ── Hypothesis Engine ────────────────────────────────────
59
61
  export { HypothesisEngine, runHypothesisMigration } from './hypothesis/engine.js';
62
+ // ── Self-Observer ───────────────────────────────────────
63
+ export { SelfObserver, runSelfObserverMigration } from './research/self-observer.js';
64
+ // ── Adaptive Strategy ──────────────────────────────────
65
+ export { AdaptiveStrategyEngine, runAdaptiveStrategyMigration } from './research/adaptive-strategy.js';
66
+ // ── Experiment Engine ──────────────────────────────────
67
+ export { ExperimentEngine, runExperimentMigration } from './research/experiment-engine.js';
68
+ // ── Cross-Domain Engine ────────────────────────────────
69
+ export { CrossDomainEngine, runCrossDomainMigration } from './research/cross-domain-engine.js';
70
+ // ── Counterfactual Engine ──────────────────────────────
71
+ export { CounterfactualEngine, runCounterfactualMigration } from './research/counterfactual-engine.js';
72
+ // ── Knowledge Distiller ────────────────────────────────
73
+ export { KnowledgeDistiller, runKnowledgeDistillerMigration } from './research/knowledge-distiller.js';
74
+ // ── Research Agenda ────────────────────────────────────
75
+ export { ResearchAgendaEngine, runAgendaMigration } from './research/agenda-engine.js';
76
+ // ── Anomaly Detective ──────────────────────────────────
77
+ export { AnomalyDetective, runAnomalyDetectiveMigration } from './research/anomaly-detective.js';
78
+ // ── Research Journal ───────────────────────────────────
79
+ export { ResearchJournal, runJournalMigration } from './research/journal.js';
60
80
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type Database from 'better-sqlite3';
2
+ export type StrategyDomain = 'recall' | 'learning' | 'research';
3
+ export interface StrategyAdaptation {
4
+ id?: number;
5
+ timestamp: number;
6
+ strategy: StrategyDomain;
7
+ parameter: string;
8
+ old_value: number;
9
+ new_value: number;
10
+ reason: string;
11
+ evidence: Record<string, unknown>;
12
+ reverted: boolean;
13
+ }
14
+ export interface StrategyStatus {
15
+ totalAdaptations: number;
16
+ activeAdaptations: number;
17
+ revertedAdaptations: number;
18
+ revertRate: number;
19
+ strategies: Record<StrategyDomain, StrategyDomainStatus>;
20
+ }
21
+ export interface StrategyDomainStatus {
22
+ parameters: Record<string, number>;
23
+ recentChanges: number;
24
+ lastChange?: string;
25
+ }
26
+ export interface AdaptiveStrategyConfig {
27
+ brainName: string;
28
+ /** Maximum percentage change per adaptation (0-1). Default: 0.2 (20%) */
29
+ maxChangeRate?: number;
30
+ /** Cycles to observe before evaluating an adaptation. Default: 5 */
31
+ observationCycles?: number;
32
+ /** Performance drop threshold for auto-revert (0-1). Default: 0.1 (10%) */
33
+ revertThreshold?: number;
34
+ }
35
+ export declare function runAdaptiveStrategyMigration(db: Database.Database): void;
36
+ export declare class AdaptiveStrategyEngine {
37
+ private db;
38
+ private config;
39
+ private log;
40
+ constructor(db: Database.Database, config: AdaptiveStrategyConfig);
41
+ /** Get current status of all strategies. */
42
+ getStatus(): StrategyStatus;
43
+ /** Get a parameter value. */
44
+ getParam(strategy: StrategyDomain, parameter: string): number | null;
45
+ /** Adapt a strategy parameter based on evidence. Applies stability guard. */
46
+ adapt(strategy: StrategyDomain, parameter: string, newValue: number, reason: string, evidence: Record<string, unknown>): StrategyAdaptation | null;
47
+ /** Check recent adaptations and revert if performance dropped. */
48
+ checkAndRevert(currentPerformance: number): StrategyAdaptation[];
49
+ /** Manually revert an adaptation. */
50
+ revert(adaptationId: number, reason?: string): boolean;
51
+ /** Get adaptation history. */
52
+ getAdaptations(strategy?: StrategyDomain, limit?: number): StrategyAdaptation[];
53
+ /** Record performance score for the most recent adaptation. */
54
+ recordPerformance(adaptationId: number, performance: number, phase: 'before' | 'after'): void;
55
+ private initializeDefaults;
56
+ }
@@ -0,0 +1,236 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ // ── Migration ───────────────────────────────────────────
3
+ export function runAdaptiveStrategyMigration(db) {
4
+ db.exec(`
5
+ CREATE TABLE IF NOT EXISTS strategy_adaptations (
6
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
7
+ timestamp INTEGER NOT NULL,
8
+ strategy TEXT NOT NULL,
9
+ parameter TEXT NOT NULL,
10
+ old_value REAL NOT NULL,
11
+ new_value REAL NOT NULL,
12
+ reason TEXT NOT NULL,
13
+ evidence TEXT NOT NULL,
14
+ reverted INTEGER DEFAULT 0,
15
+ revert_reason TEXT,
16
+ performance_before REAL,
17
+ performance_after REAL,
18
+ created_at TEXT DEFAULT (datetime('now'))
19
+ );
20
+ CREATE INDEX IF NOT EXISTS idx_strat_adapt_strategy ON strategy_adaptations(strategy);
21
+ CREATE INDEX IF NOT EXISTS idx_strat_adapt_param ON strategy_adaptations(parameter);
22
+
23
+ CREATE TABLE IF NOT EXISTS strategy_parameters (
24
+ strategy TEXT NOT NULL,
25
+ parameter TEXT NOT NULL,
26
+ value REAL NOT NULL,
27
+ min_value REAL NOT NULL,
28
+ max_value REAL NOT NULL,
29
+ updated_at TEXT DEFAULT (datetime('now')),
30
+ PRIMARY KEY (strategy, parameter)
31
+ );
32
+ `);
33
+ }
34
+ // ── Engine ──────────────────────────────────────────────
35
+ const DEFAULT_PARAMS = {
36
+ recall: {
37
+ fts_weight: { value: 0.5, min: 0.0, max: 1.0 },
38
+ semantic_weight: { value: 0.5, min: 0.0, max: 1.0 },
39
+ time_window_hours: { value: 168, min: 1, max: 720 },
40
+ min_match_score: { value: 0.3, min: 0.05, max: 0.9 },
41
+ },
42
+ learning: {
43
+ min_sample_size: { value: 5, min: 2, max: 50 },
44
+ synapse_decay_rate: { value: 0.05, min: 0.001, max: 0.3 },
45
+ confidence_threshold: { value: 0.6, min: 0.3, max: 0.95 },
46
+ learning_interval_ms: { value: 1_800_000, min: 60_000, max: 7_200_000 },
47
+ },
48
+ research: {
49
+ hypothesis_min_confidence: { value: 0.5, min: 0.1, max: 0.9 },
50
+ causal_min_strength: { value: 0.3, min: 0.05, max: 0.8 },
51
+ meta_step_size: { value: 0.1, min: 0.01, max: 0.5 },
52
+ research_interval_ms: { value: 600_000, min: 60_000, max: 3_600_000 },
53
+ },
54
+ };
55
+ export class AdaptiveStrategyEngine {
56
+ db;
57
+ config;
58
+ log = getLogger();
59
+ constructor(db, config) {
60
+ this.db = db;
61
+ this.config = {
62
+ brainName: config.brainName,
63
+ maxChangeRate: config.maxChangeRate ?? 0.2,
64
+ observationCycles: config.observationCycles ?? 5,
65
+ revertThreshold: config.revertThreshold ?? 0.1,
66
+ };
67
+ runAdaptiveStrategyMigration(db);
68
+ this.initializeDefaults();
69
+ }
70
+ /** Get current status of all strategies. */
71
+ getStatus() {
72
+ const total = this.db.prepare(`SELECT COUNT(*) as c FROM strategy_adaptations`).get().c;
73
+ const reverted = this.db.prepare(`SELECT COUNT(*) as c FROM strategy_adaptations WHERE reverted = 1`).get().c;
74
+ const strategies = {};
75
+ for (const domain of ['recall', 'learning', 'research']) {
76
+ const params = this.db.prepare(`
77
+ SELECT parameter, value FROM strategy_parameters WHERE strategy = ?
78
+ `).all(domain);
79
+ const recentChanges = this.db.prepare(`
80
+ SELECT COUNT(*) as c FROM strategy_adaptations
81
+ WHERE strategy = ? AND timestamp > ?
82
+ `).get(domain, Date.now() - 86_400_000).c;
83
+ const lastChange = this.db.prepare(`
84
+ SELECT created_at FROM strategy_adaptations
85
+ WHERE strategy = ? ORDER BY timestamp DESC LIMIT 1
86
+ `).get(domain);
87
+ strategies[domain] = {
88
+ parameters: Object.fromEntries(params.map(p => [p.parameter, p.value])),
89
+ recentChanges,
90
+ lastChange: lastChange?.created_at,
91
+ };
92
+ }
93
+ return {
94
+ totalAdaptations: total,
95
+ activeAdaptations: total - reverted,
96
+ revertedAdaptations: reverted,
97
+ revertRate: total > 0 ? reverted / total : 0,
98
+ strategies,
99
+ };
100
+ }
101
+ /** Get a parameter value. */
102
+ getParam(strategy, parameter) {
103
+ const row = this.db.prepare(`
104
+ SELECT value FROM strategy_parameters WHERE strategy = ? AND parameter = ?
105
+ `).get(strategy, parameter);
106
+ return row?.value ?? null;
107
+ }
108
+ /** Adapt a strategy parameter based on evidence. Applies stability guard. */
109
+ adapt(strategy, parameter, newValue, reason, evidence) {
110
+ const current = this.db.prepare(`
111
+ SELECT value, min_value, max_value FROM strategy_parameters
112
+ WHERE strategy = ? AND parameter = ?
113
+ `).get(strategy, parameter);
114
+ if (!current) {
115
+ this.log.warn(`Unknown parameter: ${strategy}.${parameter}`);
116
+ return null;
117
+ }
118
+ // Stability guard: limit change to maxChangeRate
119
+ const maxDelta = Math.abs(current.value) * this.config.maxChangeRate;
120
+ const delta = newValue - current.value;
121
+ const clampedDelta = Math.max(-maxDelta, Math.min(maxDelta, delta));
122
+ let finalValue = current.value + clampedDelta;
123
+ // Enforce bounds
124
+ finalValue = Math.max(current.min_value, Math.min(current.max_value, finalValue));
125
+ if (Math.abs(finalValue - current.value) < 1e-10)
126
+ return null; // No effective change
127
+ const timestamp = Date.now();
128
+ this.db.prepare(`
129
+ INSERT INTO strategy_adaptations (timestamp, strategy, parameter, old_value, new_value, reason, evidence)
130
+ VALUES (?, ?, ?, ?, ?, ?, ?)
131
+ `).run(timestamp, strategy, parameter, current.value, finalValue, reason, JSON.stringify(evidence));
132
+ this.db.prepare(`
133
+ UPDATE strategy_parameters SET value = ?, updated_at = datetime('now')
134
+ WHERE strategy = ? AND parameter = ?
135
+ `).run(finalValue, strategy, parameter);
136
+ return {
137
+ timestamp,
138
+ strategy,
139
+ parameter,
140
+ old_value: current.value,
141
+ new_value: finalValue,
142
+ reason,
143
+ evidence,
144
+ reverted: false,
145
+ };
146
+ }
147
+ /** Check recent adaptations and revert if performance dropped. */
148
+ checkAndRevert(currentPerformance) {
149
+ const recentUnreverted = this.db.prepare(`
150
+ SELECT * FROM strategy_adaptations
151
+ WHERE reverted = 0 AND performance_before IS NOT NULL
152
+ AND timestamp > ?
153
+ ORDER BY timestamp DESC
154
+ `).all(Date.now() - 86_400_000 * 7);
155
+ const reverted = [];
156
+ for (const row of recentUnreverted) {
157
+ const perfBefore = row.performance_before;
158
+ if (currentPerformance < perfBefore * (1 - this.config.revertThreshold)) {
159
+ // Performance dropped — revert
160
+ this.revert(row.id, `Performance dropped from ${perfBefore.toFixed(3)} to ${currentPerformance.toFixed(3)}`);
161
+ reverted.push({
162
+ id: row.id,
163
+ timestamp: row.timestamp,
164
+ strategy: row.strategy,
165
+ parameter: row.parameter,
166
+ old_value: row.old_value,
167
+ new_value: row.new_value,
168
+ reason: row.reason,
169
+ evidence: JSON.parse(row.evidence),
170
+ reverted: true,
171
+ });
172
+ }
173
+ }
174
+ return reverted;
175
+ }
176
+ /** Manually revert an adaptation. */
177
+ revert(adaptationId, reason) {
178
+ const row = this.db.prepare(`
179
+ SELECT * FROM strategy_adaptations WHERE id = ? AND reverted = 0
180
+ `).get(adaptationId);
181
+ if (!row)
182
+ return false;
183
+ // Restore old value
184
+ this.db.prepare(`
185
+ UPDATE strategy_parameters SET value = ?, updated_at = datetime('now')
186
+ WHERE strategy = ? AND parameter = ?
187
+ `).run(row.old_value, row.strategy, row.parameter);
188
+ // Mark as reverted
189
+ this.db.prepare(`
190
+ UPDATE strategy_adaptations SET reverted = 1, revert_reason = ?
191
+ WHERE id = ?
192
+ `).run(reason ?? 'Manual revert', adaptationId);
193
+ return true;
194
+ }
195
+ /** Get adaptation history. */
196
+ getAdaptations(strategy, limit = 20) {
197
+ let sql = `SELECT * FROM strategy_adaptations`;
198
+ const params = [];
199
+ if (strategy) {
200
+ sql += ` WHERE strategy = ?`;
201
+ params.push(strategy);
202
+ }
203
+ sql += ` ORDER BY timestamp DESC LIMIT ?`;
204
+ params.push(limit);
205
+ return this.db.prepare(sql).all(...params).map(row => ({
206
+ id: row.id,
207
+ timestamp: row.timestamp,
208
+ strategy: row.strategy,
209
+ parameter: row.parameter,
210
+ old_value: row.old_value,
211
+ new_value: row.new_value,
212
+ reason: row.reason,
213
+ evidence: JSON.parse(row.evidence),
214
+ reverted: row.reverted === 1,
215
+ }));
216
+ }
217
+ /** Record performance score for the most recent adaptation. */
218
+ recordPerformance(adaptationId, performance, phase) {
219
+ const col = phase === 'before' ? 'performance_before' : 'performance_after';
220
+ this.db.prepare(`
221
+ UPDATE strategy_adaptations SET ${col} = ? WHERE id = ?
222
+ `).run(performance, adaptationId);
223
+ }
224
+ initializeDefaults() {
225
+ const insert = this.db.prepare(`
226
+ INSERT OR IGNORE INTO strategy_parameters (strategy, parameter, value, min_value, max_value)
227
+ VALUES (?, ?, ?, ?, ?)
228
+ `);
229
+ for (const [strategy, params] of Object.entries(DEFAULT_PARAMS)) {
230
+ for (const [param, def] of Object.entries(params)) {
231
+ insert.run(strategy, param, def.value, def.min, def.max);
232
+ }
233
+ }
234
+ }
235
+ }
236
+ //# sourceMappingURL=adaptive-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adaptive-strategy.js","sourceRoot":"","sources":["../../src/research/adaptive-strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type Database from 'better-sqlite3';
2
+ export type AgendaItemType = 'hypothesis_test' | 'correlation_search' | 'parameter_sweep' | 'knowledge_gap' | 'anomaly_investigation';
3
+ export interface ResearchAgendaItem {
4
+ id?: number;
5
+ priority: number;
6
+ question: string;
7
+ type: AgendaItemType;
8
+ estimated_cycles: number;
9
+ expected_impact: string;
10
+ prerequisites: string[];
11
+ auto_executable: boolean;
12
+ status: 'open' | 'in_progress' | 'completed' | 'dismissed';
13
+ created_at?: string;
14
+ }
15
+ export interface AgendaConfig {
16
+ brainName: string;
17
+ /** Maximum agenda items. Default: 50 */
18
+ maxItems?: number;
19
+ }
20
+ export declare function runAgendaMigration(db: Database.Database): void;
21
+ export declare class ResearchAgendaEngine {
22
+ private db;
23
+ private config;
24
+ private log;
25
+ constructor(db: Database.Database, config: AgendaConfig);
26
+ /** Generate research agenda from current state of knowledge. */
27
+ generate(): ResearchAgendaItem[];
28
+ /** Get the prioritized research agenda. */
29
+ getAgenda(limit?: number): ResearchAgendaItem[];
30
+ /** Get the single most important next research question. */
31
+ getNext(): ResearchAgendaItem | null;
32
+ /** Reprioritize an agenda item. */
33
+ setPriority(id: number, priority: number): boolean;
34
+ /** Add a user-defined research question. */
35
+ ask(question: string, type?: AgendaItemType): ResearchAgendaItem;
36
+ /** Mark an item as completed or dismissed. */
37
+ resolve(id: number, status: 'completed' | 'dismissed'): boolean;
38
+ private getById;
39
+ private findOpenHypotheses;
40
+ private findKnowledgeGaps;
41
+ private findUnexploredCorrelations;
42
+ private findOpenAnomalies;
43
+ private findParameterSweeps;
44
+ private upsertItem;
45
+ private rowToItem;
46
+ }