@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.
- package/dist/index.d.ts +20 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/research/adaptive-strategy.d.ts +56 -0
- package/dist/research/adaptive-strategy.js +236 -0
- package/dist/research/adaptive-strategy.js.map +1 -0
- package/dist/research/agenda-engine.d.ts +46 -0
- package/dist/research/agenda-engine.js +264 -0
- package/dist/research/agenda-engine.js.map +1 -0
- package/dist/research/anomaly-detective.d.ts +62 -0
- package/dist/research/anomaly-detective.js +318 -0
- package/dist/research/anomaly-detective.js.map +1 -0
- package/dist/research/autonomous-scheduler.d.ts +124 -0
- package/dist/research/autonomous-scheduler.js +411 -0
- package/dist/research/autonomous-scheduler.js.map +1 -0
- package/dist/research/counterfactual-engine.d.ts +63 -0
- package/dist/research/counterfactual-engine.js +263 -0
- package/dist/research/counterfactual-engine.js.map +1 -0
- package/dist/research/cross-domain-engine.d.ts +52 -0
- package/dist/research/cross-domain-engine.js +283 -0
- package/dist/research/cross-domain-engine.js.map +1 -0
- package/dist/research/experiment-engine.d.ts +77 -0
- package/dist/research/experiment-engine.js +328 -0
- package/dist/research/experiment-engine.js.map +1 -0
- package/dist/research/journal.d.ts +62 -0
- package/dist/research/journal.js +262 -0
- package/dist/research/journal.js.map +1 -0
- package/dist/research/knowledge-distiller.d.ts +95 -0
- package/dist/research/knowledge-distiller.js +426 -0
- package/dist/research/knowledge-distiller.js.map +1 -0
- package/dist/research/self-observer.d.ts +55 -0
- package/dist/research/self-observer.js +268 -0
- package/dist/research/self-observer.js.map +1 -0
- package/package.json +2 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { getLogger } from '../utils/logger.js';
|
|
2
|
+
// ── Migration ───────────────────────────────────────────
|
|
3
|
+
export function runJournalMigration(db) {
|
|
4
|
+
db.exec(`
|
|
5
|
+
CREATE TABLE IF NOT EXISTS research_journal (
|
|
6
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
7
|
+
timestamp INTEGER NOT NULL,
|
|
8
|
+
type TEXT NOT NULL,
|
|
9
|
+
title TEXT NOT NULL,
|
|
10
|
+
content TEXT NOT NULL,
|
|
11
|
+
tags TEXT NOT NULL DEFAULT '[]',
|
|
12
|
+
ref_ids TEXT NOT NULL DEFAULT '[]',
|
|
13
|
+
significance TEXT NOT NULL DEFAULT 'routine',
|
|
14
|
+
data TEXT NOT NULL DEFAULT '{}',
|
|
15
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
16
|
+
);
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_journal_type ON research_journal(type);
|
|
18
|
+
CREATE INDEX IF NOT EXISTS idx_journal_ts ON research_journal(timestamp);
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_journal_sig ON research_journal(significance);
|
|
20
|
+
|
|
21
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS journal_fts USING fts5(
|
|
22
|
+
title, content, tags,
|
|
23
|
+
content='research_journal',
|
|
24
|
+
content_rowid='id'
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
CREATE TRIGGER IF NOT EXISTS journal_ai AFTER INSERT ON research_journal BEGIN
|
|
28
|
+
INSERT INTO journal_fts(rowid, title, content, tags)
|
|
29
|
+
VALUES (new.id, new.title, new.content, new.tags);
|
|
30
|
+
END;
|
|
31
|
+
CREATE TRIGGER IF NOT EXISTS journal_ad AFTER DELETE ON research_journal BEGIN
|
|
32
|
+
INSERT INTO journal_fts(journal_fts, rowid, title, content, tags)
|
|
33
|
+
VALUES ('delete', old.id, old.title, old.content, old.tags);
|
|
34
|
+
END;
|
|
35
|
+
`);
|
|
36
|
+
}
|
|
37
|
+
// ── Engine ──────────────────────────────────────────────
|
|
38
|
+
export class ResearchJournal {
|
|
39
|
+
db;
|
|
40
|
+
config;
|
|
41
|
+
cyclesSinceReflection = 0;
|
|
42
|
+
log = getLogger();
|
|
43
|
+
constructor(db, config) {
|
|
44
|
+
this.db = db;
|
|
45
|
+
this.config = {
|
|
46
|
+
brainName: config.brainName,
|
|
47
|
+
reflectionInterval: config.reflectionInterval ?? 10,
|
|
48
|
+
maxEntries: config.maxEntries ?? 10_000,
|
|
49
|
+
};
|
|
50
|
+
runJournalMigration(db);
|
|
51
|
+
}
|
|
52
|
+
/** Write a journal entry. */
|
|
53
|
+
write(entry) {
|
|
54
|
+
const timestamp = Date.now();
|
|
55
|
+
const result = this.db.prepare(`
|
|
56
|
+
INSERT INTO research_journal (timestamp, type, title, content, tags, ref_ids, significance, data)
|
|
57
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
58
|
+
`).run(timestamp, entry.type, entry.title, entry.content, JSON.stringify(entry.tags), JSON.stringify(entry.references), entry.significance, JSON.stringify(entry.data));
|
|
59
|
+
this.cleanup();
|
|
60
|
+
return { ...entry, id: Number(result.lastInsertRowid), timestamp };
|
|
61
|
+
}
|
|
62
|
+
/** Record a discovery in the journal. */
|
|
63
|
+
recordDiscovery(title, description, data, significance = 'notable') {
|
|
64
|
+
return this.write({
|
|
65
|
+
type: 'discovery',
|
|
66
|
+
title,
|
|
67
|
+
content: description,
|
|
68
|
+
tags: ['discovery', this.config.brainName],
|
|
69
|
+
references: [],
|
|
70
|
+
significance,
|
|
71
|
+
data,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/** Record an experiment result. */
|
|
75
|
+
recordExperiment(name, result, data, significant) {
|
|
76
|
+
return this.write({
|
|
77
|
+
type: 'experiment',
|
|
78
|
+
title: `Experiment: ${name}`,
|
|
79
|
+
content: result,
|
|
80
|
+
tags: ['experiment', significant ? 'significant' : 'not_significant'],
|
|
81
|
+
references: [],
|
|
82
|
+
significance: significant ? 'notable' : 'routine',
|
|
83
|
+
data,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/** Record an anomaly. */
|
|
87
|
+
recordAnomaly(title, description, severity, data) {
|
|
88
|
+
const sig = severity === 'critical' ? 'breakthrough' :
|
|
89
|
+
severity === 'high' ? 'notable' : 'routine';
|
|
90
|
+
return this.write({
|
|
91
|
+
type: 'anomaly',
|
|
92
|
+
title,
|
|
93
|
+
content: description,
|
|
94
|
+
tags: ['anomaly', severity],
|
|
95
|
+
references: [],
|
|
96
|
+
significance: sig,
|
|
97
|
+
data,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/** Record a strategy adaptation. */
|
|
101
|
+
recordAdaptation(parameter, oldValue, newValue, reason) {
|
|
102
|
+
return this.write({
|
|
103
|
+
type: 'adaptation',
|
|
104
|
+
title: `Adapted ${parameter}: ${oldValue.toFixed(3)} → ${newValue.toFixed(3)}`,
|
|
105
|
+
content: reason,
|
|
106
|
+
tags: ['adaptation', parameter],
|
|
107
|
+
references: [],
|
|
108
|
+
significance: 'routine',
|
|
109
|
+
data: { parameter, old_value: oldValue, new_value: newValue },
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/** Generate automatic reflection based on recent entries. */
|
|
113
|
+
reflect() {
|
|
114
|
+
this.cyclesSinceReflection++;
|
|
115
|
+
if (this.cyclesSinceReflection < this.config.reflectionInterval)
|
|
116
|
+
return null;
|
|
117
|
+
this.cyclesSinceReflection = 0;
|
|
118
|
+
// Get recent entries since last reflection
|
|
119
|
+
const lastReflection = this.db.prepare(`
|
|
120
|
+
SELECT timestamp FROM research_journal WHERE type = 'reflection'
|
|
121
|
+
ORDER BY timestamp DESC LIMIT 1
|
|
122
|
+
`).get();
|
|
123
|
+
const since = lastReflection?.timestamp ?? 0;
|
|
124
|
+
const entries = this.db.prepare(`
|
|
125
|
+
SELECT type, significance, title FROM research_journal
|
|
126
|
+
WHERE timestamp > ? AND type != 'reflection'
|
|
127
|
+
ORDER BY timestamp DESC
|
|
128
|
+
`).all(since);
|
|
129
|
+
if (entries.length === 0)
|
|
130
|
+
return null;
|
|
131
|
+
const byType = new Map();
|
|
132
|
+
const bySignificance = new Map();
|
|
133
|
+
const highlights = [];
|
|
134
|
+
for (const e of entries) {
|
|
135
|
+
byType.set(e.type, (byType.get(e.type) ?? 0) + 1);
|
|
136
|
+
bySignificance.set(e.significance, (bySignificance.get(e.significance) ?? 0) + 1);
|
|
137
|
+
if (e.significance !== 'routine')
|
|
138
|
+
highlights.push(e.title);
|
|
139
|
+
}
|
|
140
|
+
const typeStr = [...byType.entries()].map(([k, v]) => `${v} ${k}(s)`).join(', ');
|
|
141
|
+
const content = [
|
|
142
|
+
`Reflection on ${entries.length} entries since last review:`,
|
|
143
|
+
`Types: ${typeStr}`,
|
|
144
|
+
'',
|
|
145
|
+
];
|
|
146
|
+
if (highlights.length > 0) {
|
|
147
|
+
content.push('Key highlights:');
|
|
148
|
+
for (const h of highlights.slice(0, 5))
|
|
149
|
+
content.push(` - ${h}`);
|
|
150
|
+
content.push('');
|
|
151
|
+
}
|
|
152
|
+
const confirmed = entries.filter(e => e.type === 'experiment' || e.type === 'discovery').length;
|
|
153
|
+
const anomalies = entries.filter(e => e.type === 'anomaly').length;
|
|
154
|
+
if (confirmed > 0)
|
|
155
|
+
content.push(`${confirmed} discoveries/experiments completed.`);
|
|
156
|
+
if (anomalies > 0)
|
|
157
|
+
content.push(`${anomalies} anomalies detected.`);
|
|
158
|
+
return this.write({
|
|
159
|
+
type: 'reflection',
|
|
160
|
+
title: `Reflection: ${entries.length} events reviewed`,
|
|
161
|
+
content: content.join('\n'),
|
|
162
|
+
tags: ['reflection', 'auto'],
|
|
163
|
+
references: [],
|
|
164
|
+
significance: highlights.length >= 3 ? 'notable' : 'routine',
|
|
165
|
+
data: { entries_count: entries.length, by_type: Object.fromEntries(byType), highlights },
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/** Get journal entries, optionally filtered. */
|
|
169
|
+
getEntries(type, limit = 20) {
|
|
170
|
+
let sql = `SELECT * FROM research_journal`;
|
|
171
|
+
const params = [];
|
|
172
|
+
if (type) {
|
|
173
|
+
sql += ` WHERE type = ?`;
|
|
174
|
+
params.push(type);
|
|
175
|
+
}
|
|
176
|
+
sql += ` ORDER BY timestamp DESC LIMIT ?`;
|
|
177
|
+
params.push(limit);
|
|
178
|
+
return this.db.prepare(sql).all(...params).map(r => this.rowToEntry(r));
|
|
179
|
+
}
|
|
180
|
+
/** Get summary of journal contents. */
|
|
181
|
+
getSummary(limit = 5) {
|
|
182
|
+
const total = this.db.prepare(`SELECT COUNT(*) as c FROM research_journal`).get().c;
|
|
183
|
+
const byType = Object.fromEntries(this.db.prepare(`SELECT type, COUNT(*) as c FROM research_journal GROUP BY type`).all()
|
|
184
|
+
.map(r => [r.type, r.c]));
|
|
185
|
+
const bySignificance = Object.fromEntries(this.db.prepare(`SELECT significance, COUNT(*) as c FROM research_journal GROUP BY significance`).all()
|
|
186
|
+
.map(r => [r.significance, r.c]));
|
|
187
|
+
const highlights = this.db.prepare(`
|
|
188
|
+
SELECT * FROM research_journal
|
|
189
|
+
WHERE significance IN ('notable', 'breakthrough', 'paradigm_shift')
|
|
190
|
+
ORDER BY timestamp DESC LIMIT ?
|
|
191
|
+
`).all(limit).map(r => this.rowToEntry(r));
|
|
192
|
+
const dateRange = this.db.prepare(`
|
|
193
|
+
SELECT MIN(created_at) as first, MAX(created_at) as last FROM research_journal
|
|
194
|
+
`).get();
|
|
195
|
+
return {
|
|
196
|
+
total_entries: total,
|
|
197
|
+
by_type: byType,
|
|
198
|
+
by_significance: bySignificance,
|
|
199
|
+
recent_highlights: highlights,
|
|
200
|
+
date_range: dateRange.first ? { first: dateRange.first, last: dateRange.last } : null,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/** Get only milestones and breakthroughs. */
|
|
204
|
+
getMilestones(limit = 10) {
|
|
205
|
+
return this.db.prepare(`
|
|
206
|
+
SELECT * FROM research_journal
|
|
207
|
+
WHERE significance IN ('breakthrough', 'paradigm_shift') OR type = 'milestone'
|
|
208
|
+
ORDER BY timestamp DESC LIMIT ?
|
|
209
|
+
`).all(limit).map(r => this.rowToEntry(r));
|
|
210
|
+
}
|
|
211
|
+
/** Full-text search across journal entries. */
|
|
212
|
+
search(query, limit = 20) {
|
|
213
|
+
try {
|
|
214
|
+
const ids = this.db.prepare(`
|
|
215
|
+
SELECT rowid FROM journal_fts WHERE journal_fts MATCH ? LIMIT ?
|
|
216
|
+
`).all(query, limit);
|
|
217
|
+
if (ids.length === 0)
|
|
218
|
+
return [];
|
|
219
|
+
const placeholders = ids.map(() => '?').join(',');
|
|
220
|
+
return this.db.prepare(`
|
|
221
|
+
SELECT * FROM research_journal WHERE id IN (${placeholders})
|
|
222
|
+
ORDER BY timestamp DESC
|
|
223
|
+
`).all(...ids.map(i => i.rowid)).map(r => this.rowToEntry(r));
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// FTS might fail on invalid query — fallback to LIKE
|
|
227
|
+
return this.db.prepare(`
|
|
228
|
+
SELECT * FROM research_journal
|
|
229
|
+
WHERE title LIKE ? OR content LIKE ?
|
|
230
|
+
ORDER BY timestamp DESC LIMIT ?
|
|
231
|
+
`).all(`%${query}%`, `%${query}%`, limit).map(r => this.rowToEntry(r));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
cleanup() {
|
|
235
|
+
const count = this.db.prepare(`SELECT COUNT(*) as c FROM research_journal`).get().c;
|
|
236
|
+
if (count > this.config.maxEntries) {
|
|
237
|
+
// Keep significant entries, delete old routine ones
|
|
238
|
+
this.db.prepare(`
|
|
239
|
+
DELETE FROM research_journal WHERE id IN (
|
|
240
|
+
SELECT id FROM research_journal
|
|
241
|
+
WHERE significance = 'routine'
|
|
242
|
+
ORDER BY timestamp ASC LIMIT ?
|
|
243
|
+
)
|
|
244
|
+
`).run(count - this.config.maxEntries);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
rowToEntry(row) {
|
|
248
|
+
return {
|
|
249
|
+
id: row.id,
|
|
250
|
+
timestamp: row.timestamp,
|
|
251
|
+
type: row.type,
|
|
252
|
+
title: row.title,
|
|
253
|
+
content: row.content,
|
|
254
|
+
tags: JSON.parse(row.tags || '[]'),
|
|
255
|
+
references: JSON.parse(row.ref_ids || '[]'),
|
|
256
|
+
significance: row.significance,
|
|
257
|
+
data: JSON.parse(row.data || '{}'),
|
|
258
|
+
created_at: row.created_at,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/research/journal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
export interface Principle {
|
|
3
|
+
id: string;
|
|
4
|
+
domain: string;
|
|
5
|
+
statement: string;
|
|
6
|
+
success_rate: number;
|
|
7
|
+
sample_size: number;
|
|
8
|
+
confidence: number;
|
|
9
|
+
source: string;
|
|
10
|
+
}
|
|
11
|
+
export interface AntiPattern {
|
|
12
|
+
id: string;
|
|
13
|
+
domain: string;
|
|
14
|
+
statement: string;
|
|
15
|
+
failure_rate: number;
|
|
16
|
+
sample_size: number;
|
|
17
|
+
confidence: number;
|
|
18
|
+
alternative: string;
|
|
19
|
+
}
|
|
20
|
+
export interface Strategy {
|
|
21
|
+
id: string;
|
|
22
|
+
domain: string;
|
|
23
|
+
description: string;
|
|
24
|
+
conditions: string[];
|
|
25
|
+
effectiveness: number;
|
|
26
|
+
evidence_count: number;
|
|
27
|
+
}
|
|
28
|
+
export interface KnowledgePackage {
|
|
29
|
+
id: string;
|
|
30
|
+
created: number;
|
|
31
|
+
domain: string;
|
|
32
|
+
principles: Principle[];
|
|
33
|
+
anti_patterns: AntiPattern[];
|
|
34
|
+
strategies: Strategy[];
|
|
35
|
+
confidence: number;
|
|
36
|
+
evidence_summary: string;
|
|
37
|
+
applicable_when: string[];
|
|
38
|
+
transferable_to: string[];
|
|
39
|
+
}
|
|
40
|
+
export interface KnowledgeEvolution {
|
|
41
|
+
domain: string;
|
|
42
|
+
period: string;
|
|
43
|
+
principles_added: number;
|
|
44
|
+
principles_removed: number;
|
|
45
|
+
anti_patterns_discovered: number;
|
|
46
|
+
strategies_changed: number;
|
|
47
|
+
confidence_trend: 'rising' | 'stable' | 'falling';
|
|
48
|
+
highlights: string[];
|
|
49
|
+
}
|
|
50
|
+
export interface KnowledgeDistillerConfig {
|
|
51
|
+
brainName: string;
|
|
52
|
+
/** Minimum evidence to extract a principle. Default: 5 */
|
|
53
|
+
minEvidence?: number;
|
|
54
|
+
/** Minimum success rate for a principle. Default: 0.7 */
|
|
55
|
+
minSuccessRate?: number;
|
|
56
|
+
/** Minimum failure rate for an anti-pattern. Default: 0.6 */
|
|
57
|
+
minFailureRate?: number;
|
|
58
|
+
}
|
|
59
|
+
export declare function runKnowledgeDistillerMigration(db: Database.Database): void;
|
|
60
|
+
export declare class KnowledgeDistiller {
|
|
61
|
+
private db;
|
|
62
|
+
private config;
|
|
63
|
+
private log;
|
|
64
|
+
constructor(db: Database.Database, config: KnowledgeDistillerConfig);
|
|
65
|
+
/** Distill knowledge from confirmed hypotheses, research discoveries, and strategy adaptations. */
|
|
66
|
+
distill(): {
|
|
67
|
+
principles: Principle[];
|
|
68
|
+
antiPatterns: AntiPattern[];
|
|
69
|
+
strategies: Strategy[];
|
|
70
|
+
};
|
|
71
|
+
/** Get summary of all distilled knowledge. */
|
|
72
|
+
getSummary(): {
|
|
73
|
+
principles: number;
|
|
74
|
+
antiPatterns: number;
|
|
75
|
+
strategies: number;
|
|
76
|
+
topPrinciples: Principle[];
|
|
77
|
+
avgConfidence: number;
|
|
78
|
+
};
|
|
79
|
+
/** Get principles, optionally filtered by domain. */
|
|
80
|
+
getPrinciples(domain?: string, limit?: number): Principle[];
|
|
81
|
+
/** Get anti-patterns. */
|
|
82
|
+
getAntiPatterns(domain?: string, limit?: number): AntiPattern[];
|
|
83
|
+
/** Build a transferable knowledge package for a domain. */
|
|
84
|
+
getPackage(domain: string): KnowledgePackage;
|
|
85
|
+
/** Track how knowledge has evolved over time. */
|
|
86
|
+
getEvolution(domain?: string, periods?: number): KnowledgeEvolution[];
|
|
87
|
+
private extractPrinciples;
|
|
88
|
+
private extractAntiPatterns;
|
|
89
|
+
private extractStrategies;
|
|
90
|
+
private suggestTransferDomains;
|
|
91
|
+
private upsertPrinciple;
|
|
92
|
+
private upsertAntiPattern;
|
|
93
|
+
private upsertStrategy;
|
|
94
|
+
private hashString;
|
|
95
|
+
}
|