@timmeck/brain-core 2.2.0 → 2.4.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/dist/api/middleware.js +1 -0
- package/dist/api/middleware.js.map +1 -1
- package/dist/backup/service.d.ts +48 -0
- package/dist/backup/service.js +153 -0
- package/dist/backup/service.js.map +1 -0
- package/dist/causal/engine.d.ts +98 -0
- package/dist/causal/engine.js +265 -0
- package/dist/causal/engine.js.map +1 -0
- package/dist/export/service.d.ts +42 -0
- package/dist/export/service.js +118 -0
- package/dist/export/service.js.map +1 -0
- package/dist/hypothesis/engine.d.ts +104 -0
- package/dist/hypothesis/engine.js +386 -0
- package/dist/hypothesis/engine.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/meta-learning/engine.d.ts +108 -0
- package/dist/meta-learning/engine.js +275 -0
- package/dist/meta-learning/engine.js.map +1 -0
- package/dist/webhooks/service.d.ts +65 -0
- package/dist/webhooks/service.js +157 -0
- package/dist/webhooks/service.js.map +1 -0
- package/package.json +8 -2
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { getLogger } from '../utils/logger.js';
|
|
2
|
+
// ── Service ─────────────────────────────────────────────
|
|
3
|
+
export class ExportService {
|
|
4
|
+
db;
|
|
5
|
+
logger = getLogger();
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.db = db;
|
|
8
|
+
}
|
|
9
|
+
/** Get list of all tables in the database. */
|
|
10
|
+
listTables() {
|
|
11
|
+
const rows = this.db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name`).all();
|
|
12
|
+
return rows.map(r => r.name);
|
|
13
|
+
}
|
|
14
|
+
/** Get column info for a table. */
|
|
15
|
+
getColumns(table) {
|
|
16
|
+
this.validateTableName(table);
|
|
17
|
+
const rows = this.db.prepare(`PRAGMA table_info("${table}")`).all();
|
|
18
|
+
return rows.map(r => ({ name: r.name, type: r.type }));
|
|
19
|
+
}
|
|
20
|
+
/** Export data from a table. */
|
|
21
|
+
export(options) {
|
|
22
|
+
this.validateTableName(options.table);
|
|
23
|
+
const columns = options.columns?.length
|
|
24
|
+
? options.columns.map(c => `"${c.replace(/"/g, '""')}"`).join(', ')
|
|
25
|
+
: '*';
|
|
26
|
+
const conditions = [];
|
|
27
|
+
const params = [];
|
|
28
|
+
if (options.where) {
|
|
29
|
+
conditions.push(`(${options.where})`);
|
|
30
|
+
}
|
|
31
|
+
if (options.dateColumn && options.dateFrom) {
|
|
32
|
+
this.validateColumnName(options.dateColumn);
|
|
33
|
+
conditions.push(`"${options.dateColumn}" >= ?`);
|
|
34
|
+
params.push(options.dateFrom);
|
|
35
|
+
}
|
|
36
|
+
if (options.dateColumn && options.dateTo) {
|
|
37
|
+
this.validateColumnName(options.dateColumn);
|
|
38
|
+
conditions.push(`"${options.dateColumn}" <= ?`);
|
|
39
|
+
params.push(options.dateTo);
|
|
40
|
+
}
|
|
41
|
+
let sql = `SELECT ${columns} FROM "${options.table}"`;
|
|
42
|
+
if (conditions.length > 0) {
|
|
43
|
+
sql += ` WHERE ${conditions.join(' AND ')}`;
|
|
44
|
+
}
|
|
45
|
+
if (options.orderBy) {
|
|
46
|
+
sql += ` ORDER BY ${options.orderBy}`;
|
|
47
|
+
}
|
|
48
|
+
if (options.limit) {
|
|
49
|
+
sql += ` LIMIT ?`;
|
|
50
|
+
params.push(options.limit);
|
|
51
|
+
}
|
|
52
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
53
|
+
const data = options.format === 'csv'
|
|
54
|
+
? this.toCsv(rows)
|
|
55
|
+
: JSON.stringify(rows, null, 2);
|
|
56
|
+
this.logger.info(`Exported ${rows.length} rows from ${options.table} as ${options.format}`);
|
|
57
|
+
return {
|
|
58
|
+
table: options.table,
|
|
59
|
+
format: options.format,
|
|
60
|
+
rowCount: rows.length,
|
|
61
|
+
data,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/** Export multiple tables at once (JSON only). */
|
|
65
|
+
exportAll(tables, format = 'json') {
|
|
66
|
+
const tableNames = tables ?? this.listTables();
|
|
67
|
+
const results = {};
|
|
68
|
+
for (const table of tableNames) {
|
|
69
|
+
results[table] = this.export({ table, format });
|
|
70
|
+
}
|
|
71
|
+
return results;
|
|
72
|
+
}
|
|
73
|
+
/** Get row counts for all tables. */
|
|
74
|
+
getStats() {
|
|
75
|
+
const tables = this.listTables();
|
|
76
|
+
const stats = {};
|
|
77
|
+
for (const table of tables) {
|
|
78
|
+
const row = this.db.prepare(`SELECT COUNT(*) as count FROM "${table}"`).get();
|
|
79
|
+
stats[table] = row.count;
|
|
80
|
+
}
|
|
81
|
+
return stats;
|
|
82
|
+
}
|
|
83
|
+
/** Convert array of objects to CSV string. */
|
|
84
|
+
toCsv(rows) {
|
|
85
|
+
if (rows.length === 0)
|
|
86
|
+
return '';
|
|
87
|
+
const headers = Object.keys(rows[0]);
|
|
88
|
+
const lines = [headers.join(',')];
|
|
89
|
+
for (const row of rows) {
|
|
90
|
+
const values = headers.map(h => {
|
|
91
|
+
const val = row[h];
|
|
92
|
+
if (val == null)
|
|
93
|
+
return '';
|
|
94
|
+
const str = String(val);
|
|
95
|
+
// Escape CSV: quote if contains comma, quote, or newline
|
|
96
|
+
if (str.includes(',') || str.includes('"') || str.includes('\n')) {
|
|
97
|
+
return `"${str.replace(/"/g, '""')}"`;
|
|
98
|
+
}
|
|
99
|
+
return str;
|
|
100
|
+
});
|
|
101
|
+
lines.push(values.join(','));
|
|
102
|
+
}
|
|
103
|
+
return lines.join('\n');
|
|
104
|
+
}
|
|
105
|
+
/** Validate table name to prevent SQL injection. */
|
|
106
|
+
validateTableName(name) {
|
|
107
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {
|
|
108
|
+
throw new Error(`Invalid table name: ${name}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** Validate column name. */
|
|
112
|
+
validateColumnName(name) {
|
|
113
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {
|
|
114
|
+
throw new Error(`Invalid column name: ${name}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/export/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
export type HypothesisStatus = 'proposed' | 'testing' | 'confirmed' | 'rejected' | 'inconclusive';
|
|
3
|
+
export interface Hypothesis {
|
|
4
|
+
id?: number;
|
|
5
|
+
statement: string;
|
|
6
|
+
type: string;
|
|
7
|
+
source: string;
|
|
8
|
+
variables: string[];
|
|
9
|
+
condition: HypothesisCondition;
|
|
10
|
+
status: HypothesisStatus;
|
|
11
|
+
evidence_for: number;
|
|
12
|
+
evidence_against: number;
|
|
13
|
+
confidence: number;
|
|
14
|
+
p_value: number;
|
|
15
|
+
created_at?: string;
|
|
16
|
+
tested_at?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface HypothesisCondition {
|
|
19
|
+
type: 'temporal' | 'correlation' | 'threshold' | 'frequency';
|
|
20
|
+
params: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
export interface HypothesisTestResult {
|
|
23
|
+
hypothesisId: number;
|
|
24
|
+
passed: boolean;
|
|
25
|
+
evidenceFor: number;
|
|
26
|
+
evidenceAgainst: number;
|
|
27
|
+
pValue: number;
|
|
28
|
+
confidence: number;
|
|
29
|
+
newStatus: HypothesisStatus;
|
|
30
|
+
}
|
|
31
|
+
export interface Observation {
|
|
32
|
+
source: string;
|
|
33
|
+
type: string;
|
|
34
|
+
value: number;
|
|
35
|
+
timestamp: number;
|
|
36
|
+
metadata?: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
export declare function runHypothesisMigration(db: Database.Database): void;
|
|
39
|
+
/**
|
|
40
|
+
* Hypothesis Engine: generates and tests hypotheses autonomously.
|
|
41
|
+
*
|
|
42
|
+
* Research approach: The scientific method, automated.
|
|
43
|
+
*
|
|
44
|
+
* 1. OBSERVE: Collect observations from all brains
|
|
45
|
+
* 2. HYPOTHESIZE: Generate hypotheses from patterns in observations
|
|
46
|
+
* - Temporal: "Event A occurs more often during time window X"
|
|
47
|
+
* - Correlation: "When metric A increases, metric B also increases"
|
|
48
|
+
* - Threshold: "Performance degrades when metric A exceeds value X"
|
|
49
|
+
* - Frequency: "Event A happens with period P"
|
|
50
|
+
* 3. TEST: Evaluate hypotheses against historical data using statistical tests
|
|
51
|
+
* 4. CONCLUDE: Accept or reject based on evidence
|
|
52
|
+
*/
|
|
53
|
+
export declare class HypothesisEngine {
|
|
54
|
+
private db;
|
|
55
|
+
private logger;
|
|
56
|
+
private minEvidence;
|
|
57
|
+
private confirmThreshold;
|
|
58
|
+
private rejectThreshold;
|
|
59
|
+
constructor(db: Database.Database, config?: {
|
|
60
|
+
minEvidence?: number;
|
|
61
|
+
confirmThreshold?: number;
|
|
62
|
+
rejectThreshold?: number;
|
|
63
|
+
});
|
|
64
|
+
/** Record an observation for hypothesis generation and testing. */
|
|
65
|
+
observe(observation: Observation): void;
|
|
66
|
+
/** Propose a hypothesis manually or from automated detection. */
|
|
67
|
+
propose(hypothesis: Omit<Hypothesis, 'id' | 'status' | 'evidence_for' | 'evidence_against' | 'confidence' | 'p_value' | 'created_at' | 'tested_at'>): Hypothesis;
|
|
68
|
+
/**
|
|
69
|
+
* Auto-generate hypotheses from observation patterns.
|
|
70
|
+
* This is the creative part — the system forms its own theories.
|
|
71
|
+
*/
|
|
72
|
+
generate(): Hypothesis[];
|
|
73
|
+
/**
|
|
74
|
+
* Test a hypothesis against available data.
|
|
75
|
+
* Returns the test result with updated status.
|
|
76
|
+
*/
|
|
77
|
+
test(hypothesisId: number): HypothesisTestResult | null;
|
|
78
|
+
/** Test all proposed/testing hypotheses. */
|
|
79
|
+
testAll(): HypothesisTestResult[];
|
|
80
|
+
/** Get a hypothesis by ID. */
|
|
81
|
+
get(id: number): Hypothesis | null;
|
|
82
|
+
/** List hypotheses by status. */
|
|
83
|
+
list(status?: HypothesisStatus, limit?: number): Hypothesis[];
|
|
84
|
+
/** Get summary statistics. */
|
|
85
|
+
getSummary(): {
|
|
86
|
+
total: number;
|
|
87
|
+
proposed: number;
|
|
88
|
+
testing: number;
|
|
89
|
+
confirmed: number;
|
|
90
|
+
rejected: number;
|
|
91
|
+
inconclusive: number;
|
|
92
|
+
totalObservations: number;
|
|
93
|
+
topConfirmed: Hypothesis[];
|
|
94
|
+
};
|
|
95
|
+
private generateTemporalHypotheses;
|
|
96
|
+
private generateCorrelationHypotheses;
|
|
97
|
+
private generateThresholdHypotheses;
|
|
98
|
+
private testTemporalHypothesis;
|
|
99
|
+
private testCorrelationHypothesis;
|
|
100
|
+
private testThresholdHypothesis;
|
|
101
|
+
private testFrequencyHypothesis;
|
|
102
|
+
private getObservationTypes;
|
|
103
|
+
private getObservationTimeRange;
|
|
104
|
+
}
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { getLogger } from '../utils/logger.js';
|
|
2
|
+
// ── Migration ───────────────────────────────────────────
|
|
3
|
+
export function runHypothesisMigration(db) {
|
|
4
|
+
db.exec(`
|
|
5
|
+
CREATE TABLE IF NOT EXISTS hypotheses (
|
|
6
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
7
|
+
statement TEXT NOT NULL,
|
|
8
|
+
type TEXT NOT NULL,
|
|
9
|
+
source TEXT NOT NULL,
|
|
10
|
+
variables TEXT NOT NULL,
|
|
11
|
+
condition TEXT NOT NULL,
|
|
12
|
+
status TEXT NOT NULL DEFAULT 'proposed',
|
|
13
|
+
evidence_for INTEGER NOT NULL DEFAULT 0,
|
|
14
|
+
evidence_against INTEGER NOT NULL DEFAULT 0,
|
|
15
|
+
confidence REAL NOT NULL DEFAULT 0,
|
|
16
|
+
p_value REAL NOT NULL DEFAULT 1,
|
|
17
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
18
|
+
tested_at TEXT
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
CREATE TABLE IF NOT EXISTS observations (
|
|
22
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
23
|
+
source TEXT NOT NULL,
|
|
24
|
+
type TEXT NOT NULL,
|
|
25
|
+
value REAL NOT NULL,
|
|
26
|
+
timestamp INTEGER NOT NULL,
|
|
27
|
+
metadata TEXT,
|
|
28
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_hypotheses_status ON hypotheses(status);
|
|
32
|
+
CREATE INDEX IF NOT EXISTS idx_hypotheses_confidence ON hypotheses(confidence DESC);
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_observations_type ON observations(type);
|
|
34
|
+
CREATE INDEX IF NOT EXISTS idx_observations_timestamp ON observations(timestamp);
|
|
35
|
+
`);
|
|
36
|
+
}
|
|
37
|
+
// ── Engine ───────────────────────────────────────────────
|
|
38
|
+
/**
|
|
39
|
+
* Hypothesis Engine: generates and tests hypotheses autonomously.
|
|
40
|
+
*
|
|
41
|
+
* Research approach: The scientific method, automated.
|
|
42
|
+
*
|
|
43
|
+
* 1. OBSERVE: Collect observations from all brains
|
|
44
|
+
* 2. HYPOTHESIZE: Generate hypotheses from patterns in observations
|
|
45
|
+
* - Temporal: "Event A occurs more often during time window X"
|
|
46
|
+
* - Correlation: "When metric A increases, metric B also increases"
|
|
47
|
+
* - Threshold: "Performance degrades when metric A exceeds value X"
|
|
48
|
+
* - Frequency: "Event A happens with period P"
|
|
49
|
+
* 3. TEST: Evaluate hypotheses against historical data using statistical tests
|
|
50
|
+
* 4. CONCLUDE: Accept or reject based on evidence
|
|
51
|
+
*/
|
|
52
|
+
export class HypothesisEngine {
|
|
53
|
+
db;
|
|
54
|
+
logger = getLogger();
|
|
55
|
+
minEvidence;
|
|
56
|
+
confirmThreshold; // p-value below this → confirmed
|
|
57
|
+
rejectThreshold; // p-value above this → rejected
|
|
58
|
+
constructor(db, config) {
|
|
59
|
+
this.db = db;
|
|
60
|
+
runHypothesisMigration(db);
|
|
61
|
+
this.minEvidence = config?.minEvidence ?? 10;
|
|
62
|
+
this.confirmThreshold = config?.confirmThreshold ?? 0.05;
|
|
63
|
+
this.rejectThreshold = config?.rejectThreshold ?? 0.5;
|
|
64
|
+
}
|
|
65
|
+
/** Record an observation for hypothesis generation and testing. */
|
|
66
|
+
observe(observation) {
|
|
67
|
+
this.db.prepare(`
|
|
68
|
+
INSERT INTO observations (source, type, value, timestamp, metadata)
|
|
69
|
+
VALUES (?, ?, ?, ?, ?)
|
|
70
|
+
`).run(observation.source, observation.type, observation.value, observation.timestamp, observation.metadata ? JSON.stringify(observation.metadata) : null);
|
|
71
|
+
}
|
|
72
|
+
/** Propose a hypothesis manually or from automated detection. */
|
|
73
|
+
propose(hypothesis) {
|
|
74
|
+
const stmt = this.db.prepare(`
|
|
75
|
+
INSERT INTO hypotheses (statement, type, source, variables, condition, status)
|
|
76
|
+
VALUES (?, ?, ?, ?, ?, 'proposed')
|
|
77
|
+
`);
|
|
78
|
+
const info = stmt.run(hypothesis.statement, hypothesis.type, hypothesis.source, JSON.stringify(hypothesis.variables), JSON.stringify(hypothesis.condition));
|
|
79
|
+
this.logger.info(`Hypothesis proposed: "${hypothesis.statement}"`);
|
|
80
|
+
return this.get(Number(info.lastInsertRowid));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Auto-generate hypotheses from observation patterns.
|
|
84
|
+
* This is the creative part — the system forms its own theories.
|
|
85
|
+
*/
|
|
86
|
+
generate() {
|
|
87
|
+
const generated = [];
|
|
88
|
+
// Strategy 1: Temporal patterns — "Event X happens more on certain hours"
|
|
89
|
+
const temporalHypotheses = this.generateTemporalHypotheses();
|
|
90
|
+
generated.push(...temporalHypotheses);
|
|
91
|
+
// Strategy 2: Correlation — "When metric A is high, metric B is also high"
|
|
92
|
+
const correlationHypotheses = this.generateCorrelationHypotheses();
|
|
93
|
+
generated.push(...correlationHypotheses);
|
|
94
|
+
// Strategy 3: Threshold — "Performance drops when metric exceeds X"
|
|
95
|
+
const thresholdHypotheses = this.generateThresholdHypotheses();
|
|
96
|
+
generated.push(...thresholdHypotheses);
|
|
97
|
+
this.logger.info(`Generated ${generated.length} hypotheses`);
|
|
98
|
+
return generated;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Test a hypothesis against available data.
|
|
102
|
+
* Returns the test result with updated status.
|
|
103
|
+
*/
|
|
104
|
+
test(hypothesisId) {
|
|
105
|
+
const hyp = this.get(hypothesisId);
|
|
106
|
+
if (!hyp)
|
|
107
|
+
return null;
|
|
108
|
+
const condition = typeof hyp.condition === 'string'
|
|
109
|
+
? JSON.parse(hyp.condition)
|
|
110
|
+
: hyp.condition;
|
|
111
|
+
let result;
|
|
112
|
+
switch (condition.type) {
|
|
113
|
+
case 'temporal':
|
|
114
|
+
result = this.testTemporalHypothesis(hyp, condition);
|
|
115
|
+
break;
|
|
116
|
+
case 'correlation':
|
|
117
|
+
result = this.testCorrelationHypothesis(hyp, condition);
|
|
118
|
+
break;
|
|
119
|
+
case 'threshold':
|
|
120
|
+
result = this.testThresholdHypothesis(hyp, condition);
|
|
121
|
+
break;
|
|
122
|
+
case 'frequency':
|
|
123
|
+
result = this.testFrequencyHypothesis(hyp, condition);
|
|
124
|
+
break;
|
|
125
|
+
default:
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
const totalEvidence = result.evidenceFor + result.evidenceAgainst;
|
|
129
|
+
const confidence = totalEvidence > 0 ? result.evidenceFor / totalEvidence : 0;
|
|
130
|
+
let newStatus = 'testing';
|
|
131
|
+
if (totalEvidence >= this.minEvidence) {
|
|
132
|
+
if (result.pValue < this.confirmThreshold) {
|
|
133
|
+
newStatus = 'confirmed';
|
|
134
|
+
}
|
|
135
|
+
else if (result.pValue > this.rejectThreshold) {
|
|
136
|
+
newStatus = 'rejected';
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
newStatus = 'inconclusive';
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Update in DB
|
|
143
|
+
this.db.prepare(`
|
|
144
|
+
UPDATE hypotheses SET
|
|
145
|
+
evidence_for = ?, evidence_against = ?,
|
|
146
|
+
confidence = ?, p_value = ?, status = ?,
|
|
147
|
+
tested_at = datetime('now')
|
|
148
|
+
WHERE id = ?
|
|
149
|
+
`).run(result.evidenceFor, result.evidenceAgainst, confidence, result.pValue, newStatus, hypothesisId);
|
|
150
|
+
this.logger.info(`Hypothesis #${hypothesisId} tested: ${newStatus} (p=${result.pValue.toFixed(4)}, confidence=${confidence.toFixed(3)})`);
|
|
151
|
+
return {
|
|
152
|
+
hypothesisId,
|
|
153
|
+
passed: newStatus === 'confirmed',
|
|
154
|
+
evidenceFor: result.evidenceFor,
|
|
155
|
+
evidenceAgainst: result.evidenceAgainst,
|
|
156
|
+
pValue: result.pValue,
|
|
157
|
+
confidence,
|
|
158
|
+
newStatus,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/** Test all proposed/testing hypotheses. */
|
|
162
|
+
testAll() {
|
|
163
|
+
const hypotheses = this.db.prepare(`SELECT id FROM hypotheses WHERE status IN ('proposed', 'testing')`).all();
|
|
164
|
+
return hypotheses
|
|
165
|
+
.map(h => this.test(h.id))
|
|
166
|
+
.filter((r) => r !== null);
|
|
167
|
+
}
|
|
168
|
+
/** Get a hypothesis by ID. */
|
|
169
|
+
get(id) {
|
|
170
|
+
const row = this.db.prepare('SELECT * FROM hypotheses WHERE id = ?').get(id);
|
|
171
|
+
if (!row)
|
|
172
|
+
return null;
|
|
173
|
+
return {
|
|
174
|
+
...row,
|
|
175
|
+
variables: JSON.parse(row.variables),
|
|
176
|
+
condition: JSON.parse(row.condition),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/** List hypotheses by status. */
|
|
180
|
+
list(status, limit = 50) {
|
|
181
|
+
let rows;
|
|
182
|
+
if (status) {
|
|
183
|
+
rows = this.db.prepare('SELECT * FROM hypotheses WHERE status = ? ORDER BY confidence DESC LIMIT ?').all(status, limit);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
rows = this.db.prepare('SELECT * FROM hypotheses ORDER BY confidence DESC LIMIT ?').all(limit);
|
|
187
|
+
}
|
|
188
|
+
return rows.map(r => ({
|
|
189
|
+
...r,
|
|
190
|
+
variables: JSON.parse(r.variables),
|
|
191
|
+
condition: JSON.parse(r.condition),
|
|
192
|
+
}));
|
|
193
|
+
}
|
|
194
|
+
/** Get summary statistics. */
|
|
195
|
+
getSummary() {
|
|
196
|
+
const counts = this.db.prepare(`
|
|
197
|
+
SELECT status, COUNT(*) as count FROM hypotheses GROUP BY status
|
|
198
|
+
`).all();
|
|
199
|
+
const statusMap = {};
|
|
200
|
+
let total = 0;
|
|
201
|
+
for (const { status, count } of counts) {
|
|
202
|
+
statusMap[status] = count;
|
|
203
|
+
total += count;
|
|
204
|
+
}
|
|
205
|
+
const obsCount = this.db.prepare('SELECT COUNT(*) as c FROM observations').get().c;
|
|
206
|
+
const topConfirmed = this.list('confirmed', 5);
|
|
207
|
+
return {
|
|
208
|
+
total,
|
|
209
|
+
proposed: statusMap['proposed'] ?? 0,
|
|
210
|
+
testing: statusMap['testing'] ?? 0,
|
|
211
|
+
confirmed: statusMap['confirmed'] ?? 0,
|
|
212
|
+
rejected: statusMap['rejected'] ?? 0,
|
|
213
|
+
inconclusive: statusMap['inconclusive'] ?? 0,
|
|
214
|
+
totalObservations: obsCount,
|
|
215
|
+
topConfirmed,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// ── Hypothesis Generation Strategies ──────────────
|
|
219
|
+
generateTemporalHypotheses() {
|
|
220
|
+
const results = [];
|
|
221
|
+
const types = this.getObservationTypes();
|
|
222
|
+
for (const type of types) {
|
|
223
|
+
// Check if there's a time-of-day pattern
|
|
224
|
+
const hourCounts = this.db.prepare(`
|
|
225
|
+
SELECT (timestamp / 3600000) % 24 as hour, COUNT(*) as count
|
|
226
|
+
FROM observations WHERE type = ?
|
|
227
|
+
GROUP BY hour HAVING count >= 3
|
|
228
|
+
ORDER BY count DESC LIMIT 1
|
|
229
|
+
`).get(type);
|
|
230
|
+
if (!hourCounts)
|
|
231
|
+
continue;
|
|
232
|
+
const totalCount = this.db.prepare('SELECT COUNT(*) as c FROM observations WHERE type = ?').get(type).c;
|
|
233
|
+
// If peak hour has > 2x average, propose a hypothesis
|
|
234
|
+
const avgPerHour = totalCount / 24;
|
|
235
|
+
if (hourCounts.count > avgPerHour * 2) {
|
|
236
|
+
const existing = this.db.prepare(`SELECT id FROM hypotheses WHERE type = 'temporal' AND variables LIKE ? AND status != 'rejected'`).get(`%"${type}"%`);
|
|
237
|
+
if (!existing) {
|
|
238
|
+
results.push(this.propose({
|
|
239
|
+
statement: `"${type}" events occur disproportionately around hour ${hourCounts.hour}:00 UTC`,
|
|
240
|
+
type: 'temporal',
|
|
241
|
+
source: 'hypothesis-engine',
|
|
242
|
+
variables: [type],
|
|
243
|
+
condition: {
|
|
244
|
+
type: 'temporal',
|
|
245
|
+
params: { eventType: type, peakHour: hourCounts.hour, expectedRatio: hourCounts.count / avgPerHour },
|
|
246
|
+
},
|
|
247
|
+
}));
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return results;
|
|
252
|
+
}
|
|
253
|
+
generateCorrelationHypotheses() {
|
|
254
|
+
const results = [];
|
|
255
|
+
const types = this.getObservationTypes();
|
|
256
|
+
// Check pairwise correlations between observation types
|
|
257
|
+
for (let i = 0; i < types.length; i++) {
|
|
258
|
+
for (let j = i + 1; j < types.length; j++) {
|
|
259
|
+
const typeA = types[i];
|
|
260
|
+
const typeB = types[j];
|
|
261
|
+
// Simple correlation: count co-occurrences within 1 minute windows
|
|
262
|
+
const coOccurrences = this.db.prepare(`
|
|
263
|
+
SELECT COUNT(*) as count FROM observations a
|
|
264
|
+
INNER JOIN observations b ON b.type = ? AND ABS(a.timestamp - b.timestamp) < 60000
|
|
265
|
+
WHERE a.type = ?
|
|
266
|
+
`).get(typeB, typeA).count;
|
|
267
|
+
const countA = this.db.prepare('SELECT COUNT(*) as c FROM observations WHERE type = ?').get(typeA).c;
|
|
268
|
+
if (countA > 0 && coOccurrences / countA > 0.3) {
|
|
269
|
+
const existing = this.db.prepare(`SELECT id FROM hypotheses WHERE type = 'correlation' AND variables LIKE ? AND variables LIKE ? AND status != 'rejected'`).get(`%"${typeA}"%`, `%"${typeB}"%`);
|
|
270
|
+
if (!existing) {
|
|
271
|
+
results.push(this.propose({
|
|
272
|
+
statement: `"${typeA}" and "${typeB}" events tend to occur together (co-occurrence rate: ${(coOccurrences / countA * 100).toFixed(0)}%)`,
|
|
273
|
+
type: 'correlation',
|
|
274
|
+
source: 'hypothesis-engine',
|
|
275
|
+
variables: [typeA, typeB],
|
|
276
|
+
condition: {
|
|
277
|
+
type: 'correlation',
|
|
278
|
+
params: { typeA, typeB, windowMs: 60_000, observedRate: coOccurrences / countA },
|
|
279
|
+
},
|
|
280
|
+
}));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return results;
|
|
286
|
+
}
|
|
287
|
+
generateThresholdHypotheses() {
|
|
288
|
+
const results = [];
|
|
289
|
+
const types = this.getObservationTypes();
|
|
290
|
+
for (const type of types) {
|
|
291
|
+
// Look for value distributions with clear thresholds
|
|
292
|
+
const stats = this.db.prepare(`
|
|
293
|
+
SELECT AVG(value) as avg, MAX(value) as max, MIN(value) as min,
|
|
294
|
+
COUNT(*) as count
|
|
295
|
+
FROM observations WHERE type = ?
|
|
296
|
+
`).get(type);
|
|
297
|
+
if (stats.count < 10)
|
|
298
|
+
continue;
|
|
299
|
+
// Check if high values correlate with other events
|
|
300
|
+
const threshold = stats.avg + (stats.max - stats.avg) * 0.5;
|
|
301
|
+
const highCount = this.db.prepare('SELECT COUNT(*) as c FROM observations WHERE type = ? AND value > ?').get(type, threshold).c;
|
|
302
|
+
if (highCount >= 3 && highCount < stats.count * 0.3) {
|
|
303
|
+
const existing = this.db.prepare(`SELECT id FROM hypotheses WHERE type = 'threshold' AND variables LIKE ? AND status != 'rejected'`).get(`%"${type}"%`);
|
|
304
|
+
if (!existing) {
|
|
305
|
+
results.push(this.propose({
|
|
306
|
+
statement: `"${type}" shows anomalous behavior when value exceeds ${threshold.toFixed(2)} (affects ${(highCount / stats.count * 100).toFixed(0)}% of observations)`,
|
|
307
|
+
type: 'threshold',
|
|
308
|
+
source: 'hypothesis-engine',
|
|
309
|
+
variables: [type],
|
|
310
|
+
condition: {
|
|
311
|
+
type: 'threshold',
|
|
312
|
+
params: { eventType: type, threshold, aboveCount: highCount, totalCount: stats.count },
|
|
313
|
+
},
|
|
314
|
+
}));
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return results;
|
|
319
|
+
}
|
|
320
|
+
// ── Hypothesis Testing ────────────────────────────
|
|
321
|
+
testTemporalHypothesis(hyp, condition) {
|
|
322
|
+
const { eventType, peakHour } = condition.params;
|
|
323
|
+
const total = this.db.prepare('SELECT COUNT(*) as c FROM observations WHERE type = ?').get(eventType).c;
|
|
324
|
+
const inPeak = this.db.prepare('SELECT COUNT(*) as c FROM observations WHERE type = ? AND (timestamp / 3600000) % 24 = ?').get(eventType, peakHour).c;
|
|
325
|
+
const expected = total / 24;
|
|
326
|
+
const evidenceFor = inPeak;
|
|
327
|
+
const evidenceAgainst = Math.max(0, Math.round(expected) - inPeak);
|
|
328
|
+
// Chi-squared test approximation (1 degree of freedom)
|
|
329
|
+
const chiSq = expected > 0 ? Math.pow(inPeak - expected, 2) / expected : 0;
|
|
330
|
+
const pValue = Math.exp(-chiSq / 2); // rough p-value approximation
|
|
331
|
+
return { evidenceFor, evidenceAgainst, pValue };
|
|
332
|
+
}
|
|
333
|
+
testCorrelationHypothesis(hyp, condition) {
|
|
334
|
+
const { typeA, typeB, windowMs } = condition.params;
|
|
335
|
+
const coOccurrences = this.db.prepare(`
|
|
336
|
+
SELECT COUNT(*) as count FROM observations a
|
|
337
|
+
INNER JOIN observations b ON b.type = ? AND ABS(a.timestamp - b.timestamp) < ?
|
|
338
|
+
WHERE a.type = ?
|
|
339
|
+
`).get(typeB, windowMs, typeA).count;
|
|
340
|
+
const countA = this.db.prepare('SELECT COUNT(*) as c FROM observations WHERE type = ?').get(typeA).c;
|
|
341
|
+
const countB = this.db.prepare('SELECT COUNT(*) as c FROM observations WHERE type = ?').get(typeB).c;
|
|
342
|
+
if (countA === 0 || countB === 0)
|
|
343
|
+
return { evidenceFor: 0, evidenceAgainst: 0, pValue: 1 };
|
|
344
|
+
const observedRate = coOccurrences / countA;
|
|
345
|
+
// Expected rate under independence
|
|
346
|
+
const timeRange = this.getObservationTimeRange();
|
|
347
|
+
const expectedRate = timeRange > 0 ? Math.min(1, (countB / timeRange) * windowMs * 2) : 0;
|
|
348
|
+
const evidenceFor = coOccurrences;
|
|
349
|
+
const evidenceAgainst = Math.max(0, countA - coOccurrences);
|
|
350
|
+
// Simplified z-test for proportions
|
|
351
|
+
if (expectedRate <= 0 || expectedRate >= 1)
|
|
352
|
+
return { evidenceFor, evidenceAgainst, pValue: 1 };
|
|
353
|
+
const z = (observedRate - expectedRate) / Math.sqrt(expectedRate * (1 - expectedRate) / countA);
|
|
354
|
+
const pValue = Math.exp(-0.5 * z * z); // rough p-value
|
|
355
|
+
return { evidenceFor, evidenceAgainst, pValue: Math.min(1, pValue) };
|
|
356
|
+
}
|
|
357
|
+
testThresholdHypothesis(hyp, condition) {
|
|
358
|
+
const { eventType, threshold } = condition.params;
|
|
359
|
+
const above = this.db.prepare('SELECT COUNT(*) as c FROM observations WHERE type = ? AND value > ?').get(eventType, threshold).c;
|
|
360
|
+
const total = this.db.prepare('SELECT COUNT(*) as c FROM observations WHERE type = ?').get(eventType).c;
|
|
361
|
+
const below = total - above;
|
|
362
|
+
// Test: is the proportion above threshold significantly different from random?
|
|
363
|
+
const proportion = total > 0 ? above / total : 0;
|
|
364
|
+
// Under null hypothesis, threshold splits data randomly
|
|
365
|
+
const expectedProportion = 0.5;
|
|
366
|
+
const z = total > 0
|
|
367
|
+
? (proportion - expectedProportion) / Math.sqrt(expectedProportion * (1 - expectedProportion) / total)
|
|
368
|
+
: 0;
|
|
369
|
+
// We care about the threshold being meaningful, so evidence is relative
|
|
370
|
+
const pValue = Math.exp(-0.5 * z * z);
|
|
371
|
+
return { evidenceFor: above, evidenceAgainst: below, pValue: Math.min(1, pValue) };
|
|
372
|
+
}
|
|
373
|
+
testFrequencyHypothesis(_hyp, _condition) {
|
|
374
|
+
// Placeholder for frequency/periodicity testing
|
|
375
|
+
return { evidenceFor: 0, evidenceAgainst: 0, pValue: 1 };
|
|
376
|
+
}
|
|
377
|
+
// ── Helpers ───────────────────────────────────────
|
|
378
|
+
getObservationTypes() {
|
|
379
|
+
return this.db.prepare('SELECT DISTINCT type FROM observations').all().map(r => r.type);
|
|
380
|
+
}
|
|
381
|
+
getObservationTimeRange() {
|
|
382
|
+
const row = this.db.prepare('SELECT MIN(timestamp) as min_ts, MAX(timestamp) as max_ts FROM observations').get();
|
|
383
|
+
return (row.max_ts ?? 0) - (row.min_ts ?? 0);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/hypothesis/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -53,3 +53,15 @@ export { CrossBrainCorrelator } from './cross-brain/correlator.js';
|
|
|
53
53
|
export type { CorrelatorEvent, Correlation, EcosystemHealth, CorrelatorConfig } from './cross-brain/correlator.js';
|
|
54
54
|
export { EcosystemService } from './ecosystem/service.js';
|
|
55
55
|
export type { BrainStatus, EcosystemStatus, AggregatedAnalytics } from './ecosystem/service.js';
|
|
56
|
+
export { WebhookService, runWebhookMigration } from './webhooks/service.js';
|
|
57
|
+
export type { WebhookConfig, WebhookRecord, DeliveryRecord, WebhookDeliveryResult } from './webhooks/service.js';
|
|
58
|
+
export { ExportService } from './export/service.js';
|
|
59
|
+
export type { ExportOptions, ExportResult } from './export/service.js';
|
|
60
|
+
export { BackupService } from './backup/service.js';
|
|
61
|
+
export type { BackupConfig, BackupRecord, RestoreResult } from './backup/service.js';
|
|
62
|
+
export { MetaLearningEngine, runMetaLearningMigration } from './meta-learning/engine.js';
|
|
63
|
+
export type { HyperParameter, LearningSnapshot, ParameterRecommendation, MetaLearningStatus } from './meta-learning/engine.js';
|
|
64
|
+
export { CausalGraph, runCausalMigration } from './causal/engine.js';
|
|
65
|
+
export type { CausalEvent, CausalEdge, CausalPath, CausalAnalysis } from './causal/engine.js';
|
|
66
|
+
export { HypothesisEngine, runHypothesisMigration } from './hypothesis/engine.js';
|
|
67
|
+
export type { Hypothesis, HypothesisStatus, HypothesisCondition, HypothesisTestResult, Observation } from './hypothesis/engine.js';
|