@timmeck/brain-core 2.25.1 → 2.27.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 (62) hide show
  1. package/dist/causal/engine.d.ts +47 -0
  2. package/dist/causal/engine.js +142 -0
  3. package/dist/causal/engine.js.map +1 -1
  4. package/dist/codegen/code-generator.d.ts +17 -0
  5. package/dist/codegen/code-generator.js +61 -0
  6. package/dist/codegen/code-generator.js.map +1 -1
  7. package/dist/codegen/index.d.ts +1 -0
  8. package/dist/codegen/index.js.map +1 -1
  9. package/dist/curiosity/curiosity-engine.d.ts +29 -0
  10. package/dist/curiosity/curiosity-engine.js +147 -0
  11. package/dist/curiosity/curiosity-engine.js.map +1 -1
  12. package/dist/curiosity/index.d.ts +1 -1
  13. package/dist/debate/debate-engine.d.ts +27 -0
  14. package/dist/debate/debate-engine.js +169 -0
  15. package/dist/debate/debate-engine.js.map +1 -1
  16. package/dist/debate/index.d.ts +1 -1
  17. package/dist/dream/dream-engine.d.ts +16 -1
  18. package/dist/dream/dream-engine.js +190 -0
  19. package/dist/dream/dream-engine.js.map +1 -1
  20. package/dist/dream/index.d.ts +1 -1
  21. package/dist/dream/types.d.ts +18 -0
  22. package/dist/emergence/emergence-engine.d.ts +19 -0
  23. package/dist/emergence/emergence-engine.js +118 -0
  24. package/dist/emergence/emergence-engine.js.map +1 -1
  25. package/dist/hypothesis/engine.d.ts +38 -0
  26. package/dist/hypothesis/engine.js +167 -0
  27. package/dist/hypothesis/engine.js.map +1 -1
  28. package/dist/index.d.ts +20 -5
  29. package/dist/index.js +9 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/metacognition/auto-experiment-engine.d.ts +72 -0
  32. package/dist/metacognition/auto-experiment-engine.js +272 -0
  33. package/dist/metacognition/auto-experiment-engine.js.map +1 -0
  34. package/dist/metacognition/index.d.ts +12 -0
  35. package/dist/metacognition/index.js +7 -0
  36. package/dist/metacognition/index.js.map +1 -0
  37. package/dist/metacognition/meta-cognition-layer.d.ts +112 -0
  38. package/dist/metacognition/meta-cognition-layer.js +402 -0
  39. package/dist/metacognition/meta-cognition-layer.js.map +1 -0
  40. package/dist/metacognition/parameter-registry.d.ts +71 -0
  41. package/dist/metacognition/parameter-registry.js +162 -0
  42. package/dist/metacognition/parameter-registry.js.map +1 -0
  43. package/dist/metacognition/self-test-engine.d.ts +52 -0
  44. package/dist/metacognition/self-test-engine.js +210 -0
  45. package/dist/metacognition/self-test-engine.js.map +1 -0
  46. package/dist/metacognition/simulation-engine.d.ts +71 -0
  47. package/dist/metacognition/simulation-engine.js +267 -0
  48. package/dist/metacognition/simulation-engine.js.map +1 -0
  49. package/dist/metacognition/teach-engine.d.ts +63 -0
  50. package/dist/metacognition/teach-engine.js +185 -0
  51. package/dist/metacognition/teach-engine.js.map +1 -0
  52. package/dist/research/data-scout.d.ts +68 -0
  53. package/dist/research/data-scout.js +254 -0
  54. package/dist/research/data-scout.js.map +1 -0
  55. package/dist/research/research-orchestrator.d.ts +32 -1
  56. package/dist/research/research-orchestrator.js +344 -4
  57. package/dist/research/research-orchestrator.js.map +1 -1
  58. package/dist/transfer/index.d.ts +1 -1
  59. package/dist/transfer/transfer-engine.d.ts +38 -0
  60. package/dist/transfer/transfer-engine.js +138 -0
  61. package/dist/transfer/transfer-engine.js.map +1 -1
  62. package/package.json +1 -1
@@ -0,0 +1,63 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { ThoughtStream } from '../consciousness/thought-stream.js';
3
+ import type { KnowledgeDistiller } from '../research/knowledge-distiller.js';
4
+ import type { HypothesisEngine } from '../hypothesis/engine.js';
5
+ import type { ResearchJournal } from '../research/journal.js';
6
+ export interface TeachingPackage {
7
+ id?: number;
8
+ targetBrain: string;
9
+ principles: Array<{
10
+ statement: string;
11
+ confidence: number;
12
+ }>;
13
+ antiPatterns: Array<{
14
+ statement: string;
15
+ confidence: number;
16
+ }>;
17
+ strategies: Array<{
18
+ id: string;
19
+ description: string;
20
+ }>;
21
+ experiments: Array<{
22
+ name: string;
23
+ hypothesis: string;
24
+ conclusion: string;
25
+ }>;
26
+ journalInsights: string[];
27
+ principlesCount: number;
28
+ antipatternsCount: number;
29
+ strategiesCount: number;
30
+ experimentsCount: number;
31
+ createdAt: string;
32
+ effectivenessScore: number | null;
33
+ }
34
+ export interface TeachEngineStatus {
35
+ totalPackages: number;
36
+ avgEffectiveness: number;
37
+ recentPackages: TeachingPackage[];
38
+ }
39
+ export declare function runTeachEngineMigration(db: Database.Database): void;
40
+ export declare class TeachEngine {
41
+ private db;
42
+ private log;
43
+ private thoughtStream;
44
+ private distiller;
45
+ private hypothesisEngine;
46
+ private journal;
47
+ constructor(db: Database.Database);
48
+ setThoughtStream(stream: ThoughtStream): void;
49
+ setKnowledgeDistiller(distiller: KnowledgeDistiller): void;
50
+ setHypothesisEngine(engine: HypothesisEngine): void;
51
+ setJournal(journal: ResearchJournal): void;
52
+ /** Create a teaching package for another brain. */
53
+ createPackage(targetBrain: string): TeachingPackage;
54
+ /** Get a teaching package by id. */
55
+ getPackage(id: number): TeachingPackage | null;
56
+ /** List recent teaching packages. */
57
+ listPackages(limit?: number): TeachingPackage[];
58
+ /** Rate the effectiveness of a teaching package. */
59
+ rateEffectiveness(id: number, score: number): void;
60
+ /** Get status summary. */
61
+ getStatus(): TeachEngineStatus;
62
+ private toTeachingPackage;
63
+ }
@@ -0,0 +1,185 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ // ── Migration ───────────────────────────────────────────
3
+ export function runTeachEngineMigration(db) {
4
+ db.exec(`
5
+ CREATE TABLE IF NOT EXISTS teaching_packages (
6
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
7
+ target_brain TEXT NOT NULL,
8
+ package_json TEXT NOT NULL DEFAULT '{}',
9
+ principles_count INTEGER NOT NULL DEFAULT 0,
10
+ antipatterns_count INTEGER NOT NULL DEFAULT 0,
11
+ strategies_count INTEGER NOT NULL DEFAULT 0,
12
+ experiments_count INTEGER NOT NULL DEFAULT 0,
13
+ created_at TEXT DEFAULT (datetime('now')),
14
+ effectiveness_score REAL DEFAULT NULL
15
+ );
16
+ CREATE INDEX IF NOT EXISTS idx_teaching_packages_target ON teaching_packages(target_brain);
17
+ `);
18
+ }
19
+ // ── Engine ──────────────────────────────────────────────
20
+ export class TeachEngine {
21
+ db;
22
+ log = getLogger();
23
+ thoughtStream = null;
24
+ distiller = null;
25
+ hypothesisEngine = null;
26
+ journal = null;
27
+ constructor(db) {
28
+ this.db = db;
29
+ runTeachEngineMigration(db);
30
+ }
31
+ setThoughtStream(stream) {
32
+ this.thoughtStream = stream;
33
+ }
34
+ setKnowledgeDistiller(distiller) {
35
+ this.distiller = distiller;
36
+ }
37
+ setHypothesisEngine(engine) {
38
+ this.hypothesisEngine = engine;
39
+ }
40
+ setJournal(journal) {
41
+ this.journal = journal;
42
+ }
43
+ /** Create a teaching package for another brain. */
44
+ createPackage(targetBrain) {
45
+ // 1. Top 20 Principles (by confidence) from KnowledgeDistiller
46
+ const principles = [];
47
+ if (this.distiller) {
48
+ const ps = this.distiller.getPrinciples(undefined, 20);
49
+ for (const p of ps) {
50
+ principles.push({ statement: p.statement, confidence: p.confidence });
51
+ }
52
+ }
53
+ // 2. Top 10 Anti-Patterns from KnowledgeDistiller
54
+ const antiPatterns = [];
55
+ if (this.distiller) {
56
+ const aps = this.distiller.getAntiPatterns(undefined, 10);
57
+ for (const ap of aps) {
58
+ antiPatterns.push({ statement: ap.statement, confidence: ap.confidence });
59
+ }
60
+ }
61
+ // 3. Top 5 Strategies from KnowledgeDistiller (query DB directly)
62
+ const strategies = [];
63
+ try {
64
+ const rows = this.db.prepare(`
65
+ SELECT id, description FROM knowledge_strategies
66
+ ORDER BY effectiveness DESC LIMIT 5
67
+ `).all();
68
+ for (const r of rows) {
69
+ strategies.push({ id: r.id, description: r.description });
70
+ }
71
+ }
72
+ catch { /* knowledge_strategies table might not exist */ }
73
+ // 4. Top 5 experiment results from HypothesisEngine (confirmed with evidence)
74
+ const experiments = [];
75
+ if (this.hypothesisEngine) {
76
+ try {
77
+ const confirmed = this.hypothesisEngine.list('confirmed', 5);
78
+ for (const h of confirmed) {
79
+ experiments.push({
80
+ name: `Hypothesis #${h.id}`,
81
+ hypothesis: h.statement,
82
+ conclusion: `Confirmed with confidence ${h.confidence.toFixed(2)} (evidence: ${h.evidence_for} for, ${h.evidence_against} against)`,
83
+ });
84
+ }
85
+ }
86
+ catch { /* hypotheses table might not exist */ }
87
+ }
88
+ // 5. Key Journal insights (search for 'breakthrough' significance entries, take top 5 titles)
89
+ const journalInsights = [];
90
+ if (this.journal) {
91
+ try {
92
+ const entries = this.journal.getEntries(undefined, 100);
93
+ const breakthroughs = entries.filter(e => e.significance === 'breakthrough' || e.significance === 'paradigm_shift');
94
+ for (const e of breakthroughs.slice(0, 5)) {
95
+ journalInsights.push(e.title);
96
+ }
97
+ }
98
+ catch { /* journal table might not exist */ }
99
+ }
100
+ // 6. Package everything
101
+ const pkg = {
102
+ targetBrain,
103
+ principles,
104
+ antiPatterns,
105
+ strategies,
106
+ experiments,
107
+ journalInsights,
108
+ principlesCount: principles.length,
109
+ antipatternsCount: antiPatterns.length,
110
+ strategiesCount: strategies.length,
111
+ experimentsCount: experiments.length,
112
+ createdAt: new Date().toISOString(),
113
+ effectivenessScore: null,
114
+ };
115
+ const packageJson = JSON.stringify({
116
+ principles: pkg.principles,
117
+ antiPatterns: pkg.antiPatterns,
118
+ strategies: pkg.strategies,
119
+ experiments: pkg.experiments,
120
+ journalInsights: pkg.journalInsights,
121
+ });
122
+ const result = this.db.prepare(`
123
+ INSERT INTO teaching_packages (target_brain, package_json, principles_count, antipatterns_count, strategies_count, experiments_count)
124
+ VALUES (?, ?, ?, ?, ?, ?)
125
+ `).run(targetBrain, packageJson, pkg.principlesCount, pkg.antipatternsCount, pkg.strategiesCount, pkg.experimentsCount);
126
+ pkg.id = result.lastInsertRowid;
127
+ // 7. Emit thought
128
+ this.thoughtStream?.emit('teach', 'reflecting', `Created teaching package for "${targetBrain}": ${principles.length} principles, ${antiPatterns.length} anti-patterns, ${strategies.length} strategies, ${experiments.length} experiments`, principles.length > 5 ? 'notable' : 'routine');
129
+ this.log.info(`[teach] Created package #${pkg.id} for ${targetBrain}: ${principles.length}P, ${antiPatterns.length}AP, ${strategies.length}S, ${experiments.length}E`);
130
+ return pkg;
131
+ }
132
+ /** Get a teaching package by id. */
133
+ getPackage(id) {
134
+ const row = this.db.prepare('SELECT * FROM teaching_packages WHERE id = ?').get(id);
135
+ if (!row)
136
+ return null;
137
+ return this.toTeachingPackage(row);
138
+ }
139
+ /** List recent teaching packages. */
140
+ listPackages(limit = 20) {
141
+ const rows = this.db.prepare(`
142
+ SELECT * FROM teaching_packages ORDER BY id DESC LIMIT ?
143
+ `).all(limit);
144
+ return rows.map(r => this.toTeachingPackage(r));
145
+ }
146
+ /** Rate the effectiveness of a teaching package. */
147
+ rateEffectiveness(id, score) {
148
+ const clamped = Math.max(0, Math.min(1, score));
149
+ this.db.prepare(`
150
+ UPDATE teaching_packages SET effectiveness_score = ? WHERE id = ?
151
+ `).run(clamped, id);
152
+ this.log.debug(`[teach] Rated package #${id} effectiveness: ${clamped.toFixed(2)}`);
153
+ }
154
+ /** Get status summary. */
155
+ getStatus() {
156
+ const total = this.db.prepare('SELECT COUNT(*) as c FROM teaching_packages').get().c;
157
+ const avgRow = this.db.prepare('SELECT AVG(effectiveness_score) as avg FROM teaching_packages WHERE effectiveness_score IS NOT NULL').get();
158
+ const recentPackages = this.listPackages(5);
159
+ return {
160
+ totalPackages: total,
161
+ avgEffectiveness: avgRow.avg ?? 0,
162
+ recentPackages,
163
+ };
164
+ }
165
+ // ── Private ─────────────────────────────────────────────
166
+ toTeachingPackage(row) {
167
+ const packageData = JSON.parse(row.package_json || '{}');
168
+ return {
169
+ id: row.id,
170
+ targetBrain: row.target_brain,
171
+ principles: packageData.principles ?? [],
172
+ antiPatterns: packageData.antiPatterns ?? [],
173
+ strategies: packageData.strategies ?? [],
174
+ experiments: packageData.experiments ?? [],
175
+ journalInsights: packageData.journalInsights ?? [],
176
+ principlesCount: row.principles_count,
177
+ antipatternsCount: row.antipatterns_count,
178
+ strategiesCount: row.strategies_count,
179
+ experimentsCount: row.experiments_count,
180
+ createdAt: row.created_at,
181
+ effectivenessScore: row.effectiveness_score,
182
+ };
183
+ }
184
+ }
185
+ //# sourceMappingURL=teach-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teach-engine.js","sourceRoot":"","sources":["../../src/metacognition/teach-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { ThoughtStream } from '../consciousness/thought-stream.js';
3
+ export interface ScoutDiscovery {
4
+ id?: number;
5
+ source: string;
6
+ title: string;
7
+ url: string;
8
+ description: string;
9
+ relevanceScore: number;
10
+ metadata: Record<string, unknown>;
11
+ discoveredAt: string;
12
+ imported: boolean;
13
+ }
14
+ export interface ScoutAdapter {
15
+ name: string;
16
+ scout(): Promise<ScoutDiscovery[]>;
17
+ isEnabled(): boolean;
18
+ }
19
+ export interface DataScoutStatus {
20
+ totalDiscoveries: number;
21
+ importedCount: number;
22
+ bySource: Record<string, number>;
23
+ recentDiscoveries: ScoutDiscovery[];
24
+ }
25
+ export declare function runDataScoutMigration(db: Database.Database): void;
26
+ export declare class DataScout {
27
+ private db;
28
+ private adapters;
29
+ private thoughtStream;
30
+ private log;
31
+ constructor(db: Database.Database, adapters?: ScoutAdapter[]);
32
+ setThoughtStream(stream: ThoughtStream): void;
33
+ addAdapter(adapter: ScoutAdapter): void;
34
+ /** Run all enabled adapters, deduplicate, persist new discoveries. */
35
+ scout(): Promise<ScoutDiscovery[]>;
36
+ /** Get discoveries, optionally filtered by source. */
37
+ getDiscoveries(source?: string, limit?: number): ScoutDiscovery[];
38
+ /** Mark a discovery as imported. */
39
+ markImported(id: number): void;
40
+ /** Get status summary. */
41
+ getStatus(): DataScoutStatus;
42
+ private isDuplicate;
43
+ private toDiscovery;
44
+ }
45
+ /**
46
+ * GitHubTrendingAdapter — Discovers trending GitHub repositories.
47
+ */
48
+ export declare class GitHubTrendingAdapter implements ScoutAdapter {
49
+ readonly name = "github-trending";
50
+ isEnabled(): boolean;
51
+ scout(): Promise<ScoutDiscovery[]>;
52
+ }
53
+ /**
54
+ * NpmStatsAdapter — Discovers trending npm packages.
55
+ */
56
+ export declare class NpmStatsAdapter implements ScoutAdapter {
57
+ readonly name = "npm-stats";
58
+ isEnabled(): boolean;
59
+ scout(): Promise<ScoutDiscovery[]>;
60
+ }
61
+ /**
62
+ * HackerNewsAdapter — Discovers top Hacker News stories.
63
+ */
64
+ export declare class HackerNewsAdapter implements ScoutAdapter {
65
+ readonly name = "hackernews";
66
+ isEnabled(): boolean;
67
+ scout(): Promise<ScoutDiscovery[]>;
68
+ }
@@ -0,0 +1,254 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ // ── Migration ───────────────────────────────────────────
3
+ export function runDataScoutMigration(db) {
4
+ db.exec(`
5
+ CREATE TABLE IF NOT EXISTS scout_discoveries (
6
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
7
+ source TEXT NOT NULL,
8
+ title TEXT NOT NULL,
9
+ url TEXT NOT NULL DEFAULT '',
10
+ description TEXT NOT NULL DEFAULT '',
11
+ relevance_score REAL NOT NULL DEFAULT 0,
12
+ metadata TEXT NOT NULL DEFAULT '{}',
13
+ discovered_at TEXT DEFAULT (datetime('now')),
14
+ imported INTEGER NOT NULL DEFAULT 0
15
+ );
16
+ CREATE INDEX IF NOT EXISTS idx_scout_source ON scout_discoveries(source);
17
+ CREATE INDEX IF NOT EXISTS idx_scout_relevance ON scout_discoveries(relevance_score DESC);
18
+ `);
19
+ }
20
+ // ── DataScout ───────────────────────────────────────────
21
+ export class DataScout {
22
+ db;
23
+ adapters;
24
+ thoughtStream = null;
25
+ log = getLogger();
26
+ constructor(db, adapters = []) {
27
+ this.db = db;
28
+ this.adapters = adapters;
29
+ runDataScoutMigration(db);
30
+ }
31
+ setThoughtStream(stream) {
32
+ this.thoughtStream = stream;
33
+ }
34
+ addAdapter(adapter) {
35
+ this.adapters.push(adapter);
36
+ this.log.info(`[data-scout] Added adapter: ${adapter.name}`);
37
+ }
38
+ /** Run all enabled adapters, deduplicate, persist new discoveries. */
39
+ async scout() {
40
+ const allDiscoveries = [];
41
+ for (const adapter of this.adapters) {
42
+ if (!adapter.isEnabled())
43
+ continue;
44
+ try {
45
+ const discoveries = await adapter.scout();
46
+ let newCount = 0;
47
+ for (const discovery of discoveries) {
48
+ if (this.isDuplicate(discovery.source, discovery.title))
49
+ continue;
50
+ this.db.prepare(`
51
+ INSERT INTO scout_discoveries (source, title, url, description, relevance_score, metadata)
52
+ VALUES (?, ?, ?, ?, ?, ?)
53
+ `).run(discovery.source, discovery.title, discovery.url, discovery.description, discovery.relevanceScore, JSON.stringify(discovery.metadata));
54
+ allDiscoveries.push(discovery);
55
+ newCount++;
56
+ }
57
+ if (newCount > 0) {
58
+ this.log.info(`[data-scout] ${adapter.name}: ${newCount} new discoveries`);
59
+ this.thoughtStream?.emit('data-scout', 'discovering', `DataScout ${adapter.name}: found ${newCount} new items`, newCount >= 5 ? 'notable' : 'routine', { adapter: adapter.name, count: newCount });
60
+ }
61
+ }
62
+ catch (err) {
63
+ this.log.error(`[data-scout] Error in adapter ${adapter.name}: ${err.message}`);
64
+ }
65
+ }
66
+ return allDiscoveries;
67
+ }
68
+ /** Get discoveries, optionally filtered by source. */
69
+ getDiscoveries(source, limit = 20) {
70
+ if (source) {
71
+ return this.db.prepare('SELECT * FROM scout_discoveries WHERE source = ? ORDER BY relevance_score DESC LIMIT ?').all(source, limit).map(r => this.toDiscovery(r));
72
+ }
73
+ return this.db.prepare('SELECT * FROM scout_discoveries ORDER BY relevance_score DESC LIMIT ?').all(limit).map(r => this.toDiscovery(r));
74
+ }
75
+ /** Mark a discovery as imported. */
76
+ markImported(id) {
77
+ this.db.prepare('UPDATE scout_discoveries SET imported = 1 WHERE id = ?').run(id);
78
+ }
79
+ /** Get status summary. */
80
+ getStatus() {
81
+ const total = this.db.prepare('SELECT COUNT(*) as c FROM scout_discoveries').get().c;
82
+ const imported = this.db.prepare('SELECT COUNT(*) as c FROM scout_discoveries WHERE imported = 1').get().c;
83
+ const sourceRows = this.db.prepare('SELECT source, COUNT(*) as c FROM scout_discoveries GROUP BY source').all();
84
+ const bySource = {};
85
+ for (const row of sourceRows) {
86
+ bySource[row.source] = row.c;
87
+ }
88
+ const recent = this.getDiscoveries(undefined, 10);
89
+ return {
90
+ totalDiscoveries: total,
91
+ importedCount: imported,
92
+ bySource,
93
+ recentDiscoveries: recent,
94
+ };
95
+ }
96
+ // ── Private ──────────────────────────────────────────────
97
+ isDuplicate(source, title) {
98
+ const row = this.db.prepare('SELECT id FROM scout_discoveries WHERE source = ? AND title = ? LIMIT 1').get(source, title);
99
+ return !!row;
100
+ }
101
+ toDiscovery(row) {
102
+ return {
103
+ id: row.id,
104
+ source: row.source,
105
+ title: row.title,
106
+ url: row.url,
107
+ description: row.description,
108
+ relevanceScore: row.relevance_score,
109
+ metadata: JSON.parse(row.metadata || '{}'),
110
+ discoveredAt: row.discovered_at,
111
+ imported: row.imported === 1,
112
+ };
113
+ }
114
+ }
115
+ // ── Adapters ──────────────────────────────────────────────
116
+ function sleep(ms) {
117
+ return new Promise(resolve => setTimeout(resolve, ms));
118
+ }
119
+ /**
120
+ * GitHubTrendingAdapter — Discovers trending GitHub repositories.
121
+ */
122
+ export class GitHubTrendingAdapter {
123
+ name = 'github-trending';
124
+ isEnabled() {
125
+ return true;
126
+ }
127
+ async scout() {
128
+ try {
129
+ const res = await fetch('https://api.github.com/search/repositories?q=stars:>100+pushed:>2024-01-01&sort=stars&order=desc&per_page=10', {
130
+ headers: {
131
+ 'Accept': 'application/vnd.github+json',
132
+ 'User-Agent': 'brain-ecosystem',
133
+ },
134
+ });
135
+ if (!res.ok)
136
+ return [];
137
+ const data = await res.json();
138
+ if (!data.items)
139
+ return [];
140
+ return data.items.map(repo => ({
141
+ source: this.name,
142
+ title: repo.full_name,
143
+ url: repo.html_url,
144
+ description: repo.description || '',
145
+ relevanceScore: Math.min(1, repo.stargazers_count / 50000),
146
+ metadata: {
147
+ stars: repo.stargazers_count,
148
+ language: repo.language,
149
+ topics: repo.topics ?? [],
150
+ },
151
+ discoveredAt: new Date().toISOString(),
152
+ imported: false,
153
+ }));
154
+ }
155
+ catch {
156
+ return [];
157
+ }
158
+ }
159
+ }
160
+ /**
161
+ * NpmStatsAdapter — Discovers trending npm packages.
162
+ */
163
+ export class NpmStatsAdapter {
164
+ name = 'npm-stats';
165
+ isEnabled() {
166
+ return true;
167
+ }
168
+ async scout() {
169
+ try {
170
+ const res = await fetch('https://registry.npmjs.org/-/v1/search?text=typescript+ai&size=10', {
171
+ headers: {
172
+ 'Accept': 'application/json',
173
+ 'User-Agent': 'brain-ecosystem',
174
+ },
175
+ });
176
+ if (!res.ok)
177
+ return [];
178
+ const data = await res.json();
179
+ if (!data.objects)
180
+ return [];
181
+ return data.objects.map(obj => ({
182
+ source: this.name,
183
+ title: obj.package.name,
184
+ url: obj.package.links?.npm || `https://www.npmjs.com/package/${obj.package.name}`,
185
+ description: obj.package.description || '',
186
+ relevanceScore: Math.min(1, obj.searchScore ?? 0),
187
+ metadata: {
188
+ version: obj.package.version,
189
+ searchScore: obj.searchScore,
190
+ },
191
+ discoveredAt: new Date().toISOString(),
192
+ imported: false,
193
+ }));
194
+ }
195
+ catch {
196
+ return [];
197
+ }
198
+ }
199
+ }
200
+ /**
201
+ * HackerNewsAdapter — Discovers top Hacker News stories.
202
+ */
203
+ export class HackerNewsAdapter {
204
+ name = 'hackernews';
205
+ isEnabled() {
206
+ return true;
207
+ }
208
+ async scout() {
209
+ try {
210
+ const topRes = await fetch('https://hacker-news.firebaseio.com/v0/topstories.json');
211
+ if (!topRes.ok)
212
+ return [];
213
+ const ids = await topRes.json();
214
+ if (!Array.isArray(ids))
215
+ return [];
216
+ const topIds = ids.slice(0, 10);
217
+ const discoveries = [];
218
+ for (const id of topIds) {
219
+ try {
220
+ await sleep(200);
221
+ const itemRes = await fetch(`https://hacker-news.firebaseio.com/v0/item/${id}.json`);
222
+ if (!itemRes.ok)
223
+ continue;
224
+ const item = await itemRes.json();
225
+ if (!item || !item.title)
226
+ continue;
227
+ discoveries.push({
228
+ source: this.name,
229
+ title: item.title,
230
+ url: item.url || `https://news.ycombinator.com/item?id=${id}`,
231
+ description: `Score: ${item.score ?? 0} | By: ${item.by ?? 'unknown'}`,
232
+ relevanceScore: Math.min(1, (item.score ?? 0) / 500),
233
+ metadata: {
234
+ hnId: id,
235
+ score: item.score,
236
+ by: item.by,
237
+ type: item.type,
238
+ },
239
+ discoveredAt: new Date().toISOString(),
240
+ imported: false,
241
+ });
242
+ }
243
+ catch {
244
+ // Skip individual item failures
245
+ }
246
+ }
247
+ return discoveries;
248
+ }
249
+ catch {
250
+ return [];
251
+ }
252
+ }
253
+ }
254
+ //# sourceMappingURL=data-scout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-scout.js","sourceRoot":"","sources":["../../src/research/data-scout.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,13 @@ import type { NarrativeEngine } from '../narrative/narrative-engine.js';
24
24
  import type { CuriosityEngine } from '../curiosity/curiosity-engine.js';
25
25
  import type { EmergenceEngine } from '../emergence/emergence-engine.js';
26
26
  import type { DebateEngine } from '../debate/debate-engine.js';
27
+ import type { ParameterRegistry } from '../metacognition/parameter-registry.js';
28
+ import type { MetaCognitionLayer } from '../metacognition/meta-cognition-layer.js';
29
+ import type { AutoExperimentEngine } from '../metacognition/auto-experiment-engine.js';
30
+ import type { SelfTestEngine } from '../metacognition/self-test-engine.js';
31
+ import type { TeachEngine } from '../metacognition/teach-engine.js';
32
+ import type { DataScout } from './data-scout.js';
33
+ import type { SimulationEngine } from '../metacognition/simulation-engine.js';
27
34
  import { AutoResponder } from './auto-responder.js';
28
35
  export interface ResearchOrchestratorConfig {
29
36
  brainName: string;
@@ -61,6 +68,13 @@ export declare class ResearchOrchestrator {
61
68
  private curiosityEngine;
62
69
  private emergenceEngine;
63
70
  private debateEngine;
71
+ private parameterRegistry;
72
+ private metaCognitionLayer;
73
+ private autoExperimentEngine;
74
+ private selfTestEngine;
75
+ private teachEngine;
76
+ private dataScout;
77
+ private simulationEngine;
64
78
  private brainName;
65
79
  private feedbackTimer;
66
80
  private cycleCount;
@@ -72,6 +86,8 @@ export declare class ResearchOrchestrator {
72
86
  private suggestionHistory;
73
87
  /** Max repeats before trying an alternative. */
74
88
  private readonly stalledThreshold;
89
+ /** Hash of last written suggestions to prevent duplicate file writes. */
90
+ private lastSuggestionsHash;
75
91
  constructor(db: Database.Database, config: ResearchOrchestratorConfig, causalGraph?: CausalGraph);
76
92
  /** Set the DataMiner instance for DB-driven engine feeding. */
77
93
  setDataMiner(miner: DataMiner): void;
@@ -96,6 +112,20 @@ export declare class ResearchOrchestrator {
96
112
  /** Set the EmergenceEngine — tracks emergent behaviors and complexity metrics. */
97
113
  setEmergenceEngine(engine: EmergenceEngine): void;
98
114
  setDebateEngine(engine: DebateEngine): void;
115
+ /** Set the ParameterRegistry — central tunable parameter store. */
116
+ setParameterRegistry(registry: ParameterRegistry): void;
117
+ /** Set the MetaCognitionLayer — engine evaluation and frequency adjustment. */
118
+ setMetaCognitionLayer(layer: MetaCognitionLayer): void;
119
+ /** Set the AutoExperimentEngine — autonomous parameter tuning. */
120
+ setAutoExperimentEngine(engine: AutoExperimentEngine): void;
121
+ /** Set the SelfTestEngine — tests understanding depth of principles. */
122
+ setSelfTestEngine(engine: SelfTestEngine): void;
123
+ /** Set the TeachEngine — generates onboarding packages for new brains. */
124
+ setTeachEngine(engine: TeachEngine): void;
125
+ /** Set the DataScout — actively scouts external data sources. */
126
+ setDataScout(scout: DataScout): void;
127
+ /** Set the SimulationEngine — runs what-if scenarios. */
128
+ setSimulationEngine(engine: SimulationEngine): void;
99
129
  /** Set the PredictionEngine — wires journal into it. */
100
130
  setPredictionEngine(engine: PredictionEngine): void;
101
131
  /** Start the autonomous feedback loop timer. */
@@ -132,7 +162,8 @@ export declare class ResearchOrchestrator {
132
162
  private proposeAutoExperiment;
133
163
  /** Feed cycle measurements into running experiments. */
134
164
  private feedExperimentMeasurements;
135
- /** Append improvement suggestions to ~/.brain/improvement-requests.md */
165
+ /** Append improvement suggestions to ~/.brain/improvement-requests.md.
166
+ * Skips writing if suggestions are identical to the last write (dedup). */
136
167
  private writeSuggestionsToFile;
137
168
  /** Get a comprehensive research summary for dashboards/API. */
138
169
  getSummary(): Record<string, unknown>;