@timmeck/brain-core 2.26.0 → 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 (56) 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 +15 -6
  29. package/dist/index.js +5 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/metacognition/index.d.ts +7 -1
  32. package/dist/metacognition/index.js +3 -0
  33. package/dist/metacognition/index.js.map +1 -1
  34. package/dist/metacognition/meta-cognition-layer.d.ts +50 -0
  35. package/dist/metacognition/meta-cognition-layer.js +190 -0
  36. package/dist/metacognition/meta-cognition-layer.js.map +1 -1
  37. package/dist/metacognition/self-test-engine.d.ts +52 -0
  38. package/dist/metacognition/self-test-engine.js +210 -0
  39. package/dist/metacognition/self-test-engine.js.map +1 -0
  40. package/dist/metacognition/simulation-engine.d.ts +71 -0
  41. package/dist/metacognition/simulation-engine.js +267 -0
  42. package/dist/metacognition/simulation-engine.js.map +1 -0
  43. package/dist/metacognition/teach-engine.d.ts +63 -0
  44. package/dist/metacognition/teach-engine.js +185 -0
  45. package/dist/metacognition/teach-engine.js.map +1 -0
  46. package/dist/research/data-scout.d.ts +68 -0
  47. package/dist/research/data-scout.js +254 -0
  48. package/dist/research/data-scout.js.map +1 -0
  49. package/dist/research/research-orchestrator.d.ts +16 -0
  50. package/dist/research/research-orchestrator.js +244 -0
  51. package/dist/research/research-orchestrator.js.map +1 -1
  52. package/dist/transfer/index.d.ts +1 -1
  53. package/dist/transfer/transfer-engine.d.ts +38 -0
  54. package/dist/transfer/transfer-engine.js +138 -0
  55. package/dist/transfer/transfer-engine.js.map +1 -1
  56. package/package.json +1 -1
@@ -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":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AA8B/C,2DAA2D;AAE3D,MAAM,UAAU,qBAAqB,CAAC,EAAqB;IACzD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;GAcP,CAAC,CAAC;AACL,CAAC;AAED,2DAA2D;AAE3D,MAAM,OAAO,SAAS;IACZ,EAAE,CAAoB;IACtB,QAAQ,CAAiB;IACzB,aAAa,GAAyB,IAAI,CAAC;IAC3C,GAAG,GAAG,SAAS,EAAE,CAAC;IAE1B,YAAY,EAAqB,EAAE,WAA2B,EAAE;QAC9D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,gBAAgB,CAAC,MAAqB;QACpC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;IAC9B,CAAC;IAED,UAAU,CAAC,OAAqB;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,sEAAsE;IACtE,KAAK,CAAC,KAAK;QACT,MAAM,cAAc,GAAqB,EAAE,CAAC;QAE5C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBAAE,SAAS;YAEnC,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC1C,IAAI,QAAQ,GAAG,CAAC,CAAC;gBAEjB,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;oBACpC,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC;wBAAE,SAAS;oBAElE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;WAGf,CAAC,CAAC,GAAG,CACJ,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,GAAG,EACb,SAAS,CAAC,WAAW,EACrB,SAAS,CAAC,cAAc,EACxB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CACnC,CAAC;oBAEF,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC/B,QAAQ,EAAE,CAAC;gBACb,CAAC;gBAED,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,IAAI,KAAK,QAAQ,kBAAkB,CAAC,CAAC;oBAC3E,IAAI,CAAC,aAAa,EAAE,IAAI,CACtB,YAAY,EAAE,aAAa,EAC3B,aAAa,OAAO,CAAC,IAAI,WAAW,QAAQ,YAAY,EACxD,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACrC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAC3C,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,OAAO,CAAC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,sDAAsD;IACtD,cAAc,CAAC,MAAe,EAAE,KAAK,GAAG,EAAE;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,OAAQ,IAAI,CAAC,EAAE,CAAC,OAAO,CACrB,wFAAwF,CACzF,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,OAAQ,IAAI,CAAC,EAAE,CAAC,OAAO,CACrB,uEAAuE,CACxE,CAAC,GAAG,CAAC,KAAK,CAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,oCAAoC;IACpC,YAAY,CAAC,EAAU;QACrB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,0BAA0B;IAC1B,SAAS;QACP,MAAM,KAAK,GAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;QACxG,MAAM,QAAQ,GAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;QAE9H,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAChC,qEAAqE,CACtE,CAAC,GAAG,EAA0C,CAAC;QAChD,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAElD,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,aAAa,EAAE,QAAQ;YACvB,QAAQ;YACR,iBAAiB,EAAE,MAAM;SAC1B,CAAC;IACJ,CAAC;IAED,4DAA4D;IAEpD,WAAW,CAAC,MAAc,EAAE,KAAa;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,yEAAyE,CAC1E,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAA+B,CAAC;QACnD,OAAO,CAAC,CAAC,GAAG,CAAC;IACf,CAAC;IAEO,WAAW,CAAC,GAA4B;QAC9C,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,MAAM,EAAE,GAAG,CAAC,MAAgB;YAC5B,KAAK,EAAE,GAAG,CAAC,KAAe;YAC1B,GAAG,EAAE,GAAG,CAAC,GAAa;YACtB,WAAW,EAAE,GAAG,CAAC,WAAqB;YACtC,cAAc,EAAE,GAAG,CAAC,eAAyB;YAC7C,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAE,GAAG,CAAC,QAAmB,IAAI,IAAI,CAAC;YACtD,YAAY,EAAE,GAAG,CAAC,aAAuB;YACzC,QAAQ,EAAG,GAAG,CAAC,QAAmB,KAAK,CAAC;SACzC,CAAC;IACJ,CAAC;CACF;AAED,6DAA6D;AAE7D,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACvB,IAAI,GAAG,iBAAiB,CAAC;IAElC,SAAS;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,8GAA8G,EAC9G;gBACE,OAAO,EAAE;oBACP,QAAQ,EAAE,6BAA6B;oBACvC,YAAY,EAAE,iBAAiB;iBAChC;aACF,CACF,CAAC;YAEF,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,CAAC;YAEvB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAOvB,CAAC;YAEL,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAC;YAE3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;gBACnC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC1D,QAAQ,EAAE;oBACR,KAAK,EAAE,IAAI,CAAC,gBAAgB;oBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;iBAC1B;gBACD,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACtC,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAe;IACjB,IAAI,GAAG,WAAW,CAAC;IAE5B,SAAS;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,mEAAmE,EACnE;gBACE,OAAO,EAAE;oBACP,QAAQ,EAAE,kBAAkB;oBAC5B,YAAY,EAAE,iBAAiB;iBAChC;aACF,CACF,CAAC;YAEF,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,CAAC;YAEvB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAQvB,CAAC;YAEL,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;YAE7B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC9B,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI;gBACvB,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,iCAAiC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;gBAClF,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE;gBAC1C,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;gBACjD,QAAQ,EAAE;oBACR,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO;oBAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;iBAC7B;gBACD,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACtC,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACnB,IAAI,GAAG,YAAY,CAAC;IAE7B,SAAS;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACpF,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO,EAAE,CAAC;YAE1B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,EAAc,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,OAAO,EAAE,CAAC;YAEnC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,MAAM,WAAW,GAAqB,EAAE,CAAC;YAEzC,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;oBACjB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,8CAA8C,EAAE,OAAO,CAAC,CAAC;oBACrF,IAAI,CAAC,OAAO,CAAC,EAAE;wBAAE,SAAS;oBAE1B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAM9B,CAAC;oBAEF,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;wBAAE,SAAS;oBAEnC,WAAW,CAAC,IAAI,CAAC;wBACf,MAAM,EAAE,IAAI,CAAC,IAAI;wBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,wCAAwC,EAAE,EAAE;wBAC7D,WAAW,EAAE,UAAU,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,IAAI,SAAS,EAAE;wBACtE,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;wBACpD,QAAQ,EAAE;4BACR,IAAI,EAAE,EAAE;4BACR,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,EAAE,EAAE,IAAI,CAAC,EAAE;4BACX,IAAI,EAAE,IAAI,CAAC,IAAI;yBAChB;wBACD,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACtC,QAAQ,EAAE,KAAK;qBAChB,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,gCAAgC;gBAClC,CAAC;YACH,CAAC;YAED,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
@@ -27,6 +27,10 @@ import type { DebateEngine } from '../debate/debate-engine.js';
27
27
  import type { ParameterRegistry } from '../metacognition/parameter-registry.js';
28
28
  import type { MetaCognitionLayer } from '../metacognition/meta-cognition-layer.js';
29
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';
30
34
  import { AutoResponder } from './auto-responder.js';
31
35
  export interface ResearchOrchestratorConfig {
32
36
  brainName: string;
@@ -67,6 +71,10 @@ export declare class ResearchOrchestrator {
67
71
  private parameterRegistry;
68
72
  private metaCognitionLayer;
69
73
  private autoExperimentEngine;
74
+ private selfTestEngine;
75
+ private teachEngine;
76
+ private dataScout;
77
+ private simulationEngine;
70
78
  private brainName;
71
79
  private feedbackTimer;
72
80
  private cycleCount;
@@ -110,6 +118,14 @@ export declare class ResearchOrchestrator {
110
118
  setMetaCognitionLayer(layer: MetaCognitionLayer): void;
111
119
  /** Set the AutoExperimentEngine — autonomous parameter tuning. */
112
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;
113
129
  /** Set the PredictionEngine — wires journal into it. */
114
130
  setPredictionEngine(engine: PredictionEngine): void;
115
131
  /** Start the autonomous feedback loop timer. */
@@ -42,6 +42,10 @@ export class ResearchOrchestrator {
42
42
  parameterRegistry = null;
43
43
  metaCognitionLayer = null;
44
44
  autoExperimentEngine = null;
45
+ selfTestEngine = null;
46
+ teachEngine = null;
47
+ dataScout = null;
48
+ simulationEngine = null;
45
49
  brainName;
46
50
  feedbackTimer = null;
47
51
  cycleCount = 0;
@@ -138,6 +142,14 @@ export class ResearchOrchestrator {
138
142
  setAutoExperimentEngine(engine) {
139
143
  this.autoExperimentEngine = engine;
140
144
  }
145
+ /** Set the SelfTestEngine — tests understanding depth of principles. */
146
+ setSelfTestEngine(engine) { this.selfTestEngine = engine; }
147
+ /** Set the TeachEngine — generates onboarding packages for new brains. */
148
+ setTeachEngine(engine) { this.teachEngine = engine; }
149
+ /** Set the DataScout — actively scouts external data sources. */
150
+ setDataScout(scout) { this.dataScout = scout; }
151
+ /** Set the SimulationEngine — runs what-if scenarios. */
152
+ setSimulationEngine(engine) { this.simulationEngine = engine; }
141
153
  /** Set the PredictionEngine — wires journal into it. */
142
154
  setPredictionEngine(engine) {
143
155
  this.predictionEngine = engine;
@@ -821,6 +833,234 @@ export class ResearchOrchestrator {
821
833
  this.reflectEvery = reflect;
822
834
  }
823
835
  }
836
+ // Step 23: Blind Spot Detection (every 5 cycles)
837
+ if (this.curiosityEngine && this.cycleCount % 5 === 0) {
838
+ try {
839
+ ts?.emit('orchestrator', 'analyzing', 'Step 23: Detecting blind spots...', 'routine');
840
+ const blindSpots = this.curiosityEngine.detectBlindSpots();
841
+ for (const bs of blindSpots) {
842
+ this.journal.write({
843
+ type: 'discovery',
844
+ title: `Blind spot: "${bs.topic}" (severity=${(bs.severity * 100).toFixed(0)}%)`,
845
+ content: `Knowledge blind spot detected. Hypotheses: ${bs.hypothesisCount}, Predictions: ${bs.predictionCount}, Journal: ${bs.journalCount}, Experiments: ${bs.experimentCount}`,
846
+ tags: ['blind-spot', bs.topic],
847
+ references: [],
848
+ significance: bs.severity > 0.85 ? 'notable' : 'routine',
849
+ data: { blindSpot: bs },
850
+ });
851
+ this.researchAgenda.ask(`Investigate blind spot: ${bs.topic} — severity ${(bs.severity * 100).toFixed(0)}%, needs more research`, 'knowledge_gap');
852
+ }
853
+ if (this.metaCognitionLayer)
854
+ this.metaCognitionLayer.recordStep('blind_spot_detector', this.cycleCount, { insights: blindSpots.length });
855
+ }
856
+ catch (err) {
857
+ this.log.warn(`[orchestrator] Step 23 error: ${err.message}`);
858
+ }
859
+ }
860
+ // Step 24: Creative Hypotheses (every 10 cycles)
861
+ if (this.cycleCount % 10 === 0) {
862
+ try {
863
+ ts?.emit('orchestrator', 'hypothesizing', 'Step 24: Generating creative hypotheses...', 'routine');
864
+ const creative = this.hypothesisEngine.generateCreative(3);
865
+ for (const h of creative) {
866
+ this.journal.write({
867
+ type: 'insight',
868
+ title: `Creative hypothesis: ${h.statement.substring(0, 80)}`,
869
+ content: `Source: ${h.source}, Type: ${h.type}`,
870
+ tags: ['creative-hypothesis', h.source],
871
+ references: [],
872
+ significance: 'routine',
873
+ data: { hypothesis: h },
874
+ });
875
+ }
876
+ if (this.metaCognitionLayer)
877
+ this.metaCognitionLayer.recordStep('creative_hypotheses', this.cycleCount, { insights: creative.length });
878
+ }
879
+ catch (err) {
880
+ this.log.warn(`[orchestrator] Step 24 error: ${err.message}`);
881
+ }
882
+ }
883
+ // Step 25: Advocatus Diaboli — challenge a random confirmed principle (every 10 cycles)
884
+ if (this.debateEngine && this.cycleCount % 10 === 0) {
885
+ try {
886
+ ts?.emit('orchestrator', 'reflecting', 'Step 25: Challenging a principle...', 'routine');
887
+ const principles = this.knowledgeDistiller.getPrinciples(undefined, 20);
888
+ if (principles.length > 0) {
889
+ const randomPrinciple = principles[Math.floor(Math.random() * principles.length)];
890
+ const challenge = this.debateEngine.challenge(randomPrinciple.statement);
891
+ this.journal.write({
892
+ type: 'reflection',
893
+ title: `Principle challenged: resilience=${(challenge.resilienceScore * 100).toFixed(0)}% → ${challenge.outcome}`,
894
+ content: `"${challenge.principleStatement.substring(0, 100)}" — Supporting: ${challenge.supportingEvidence.length}, Contradicting: ${challenge.contradictingEvidence.length}`,
895
+ tags: ['challenge', challenge.outcome],
896
+ references: [],
897
+ significance: challenge.outcome === 'disproved' ? 'notable' : 'routine',
898
+ data: { challenge },
899
+ });
900
+ }
901
+ if (this.metaCognitionLayer)
902
+ this.metaCognitionLayer.recordStep('advocatus_diaboli', this.cycleCount, { insights: 1 });
903
+ }
904
+ catch (err) {
905
+ this.log.warn(`[orchestrator] Step 25 error: ${err.message}`);
906
+ }
907
+ }
908
+ // Step 26: Dream Retrospective — analyze pruning regret (every 20 cycles)
909
+ if (this.dreamEngine && this.cycleCount % 20 === 0) {
910
+ try {
911
+ ts?.emit('orchestrator', 'reflecting', 'Step 26: Analyzing dream retrospective...', 'routine');
912
+ const retrospectives = this.dreamEngine.analyzeRetrospective(5);
913
+ for (const r of retrospectives) {
914
+ if (r.regretScore > 0.3) {
915
+ this.journal.write({
916
+ type: 'reflection',
917
+ title: `Dream regret: ${(r.regretScore * 100).toFixed(0)}% of pruned items reappeared`,
918
+ content: r.lesson,
919
+ tags: ['dream', 'retrospective'],
920
+ references: [],
921
+ significance: r.regretScore > 0.5 ? 'notable' : 'routine',
922
+ data: { retrospective: r },
923
+ });
924
+ }
925
+ }
926
+ if (this.metaCognitionLayer)
927
+ this.metaCognitionLayer.recordStep('dream_retrospective', this.cycleCount, { insights: retrospectives.length });
928
+ }
929
+ catch (err) {
930
+ this.log.warn(`[orchestrator] Step 26 error: ${err.message}`);
931
+ }
932
+ }
933
+ // Step 27: Cross-Brain Dialogue — formulate and answer questions across domains (every 10 cycles)
934
+ if (this.transferEngine && this.cycleCount % 10 === 0) {
935
+ try {
936
+ ts?.emit('orchestrator', 'correlating', 'Step 27: Cross-brain dialogue...', 'routine');
937
+ let topic = 'general knowledge';
938
+ if (this.attentionEngine) {
939
+ const topTopics = this.attentionEngine.getTopTopics(5);
940
+ if (topTopics.length > 0)
941
+ topic = topTopics[0].topic;
942
+ }
943
+ const question = this.transferEngine.formulateQuestion(topic);
944
+ const answer = this.transferEngine.answerQuestion(question);
945
+ this.transferEngine.recordDialogue(this.brainName, 'self', question, answer, `cycle:${this.cycleCount}`);
946
+ if (this.metaCognitionLayer)
947
+ this.metaCognitionLayer.recordStep('cross_brain_dialogue', this.cycleCount, { insights: 1 });
948
+ }
949
+ catch (err) {
950
+ this.log.warn(`[orchestrator] Step 27 error: ${err.message}`);
951
+ }
952
+ }
953
+ // Step 28: Self-Test — test understanding depth of principles (every 10 cycles)
954
+ if (this.selfTestEngine && this.cycleCount % 10 === 0) {
955
+ try {
956
+ ts?.emit('orchestrator', 'analyzing', 'Step 28: Self-testing principles...', 'routine');
957
+ const results = this.selfTestEngine.testAll();
958
+ const shallow = results.filter(r => r.understandingDepth < 0.3);
959
+ for (const s of shallow) {
960
+ this.researchAgenda.ask(`Deepen understanding: "${s.principleStatement.substring(0, 60)}" — shallow depth (${(s.understandingDepth * 100).toFixed(0)}%), need more predictions/experiments`, 'knowledge_gap');
961
+ }
962
+ if (this.metaCognitionLayer)
963
+ this.metaCognitionLayer.recordStep('self_test', this.cycleCount, { insights: results.length, journal_entries: shallow.length });
964
+ }
965
+ catch (err) {
966
+ this.log.warn(`[orchestrator] Step 28 error: ${err.message}`);
967
+ }
968
+ }
969
+ // Step 29: DataScout — scout external data sources (every 20 cycles)
970
+ if (this.dataScout && this.cycleCount % 20 === 0) {
971
+ try {
972
+ ts?.emit('orchestrator', 'exploring', 'Step 29: Scouting external data...', 'routine');
973
+ const discoveries = await this.dataScout.scout();
974
+ for (const d of discoveries.slice(0, 3)) {
975
+ this.journal.write({
976
+ type: 'discovery',
977
+ title: `Scout: ${d.title}`,
978
+ content: `Source: ${d.source}, Relevance: ${(d.relevanceScore * 100).toFixed(0)}%. ${d.description.substring(0, 200)}`,
979
+ tags: ['scout', d.source],
980
+ references: [],
981
+ significance: d.relevanceScore > 0.7 ? 'notable' : 'routine',
982
+ data: { discovery: d },
983
+ });
984
+ }
985
+ if (this.metaCognitionLayer)
986
+ this.metaCognitionLayer.recordStep('data_scout', this.cycleCount, { insights: discoveries.length });
987
+ }
988
+ catch (err) {
989
+ this.log.warn(`[orchestrator] Step 29 error: ${err.message}`);
990
+ }
991
+ }
992
+ // Step 30: Emergence Explanation — explain unexplained emergence events (every 5 cycles)
993
+ if (this.emergenceEngine && this.cycleCount % 5 === 0) {
994
+ try {
995
+ ts?.emit('orchestrator', 'analyzing', 'Step 30: Explaining recent emergence events...', 'routine');
996
+ const events = this.emergenceEngine.getEvents(5);
997
+ let explained = 0;
998
+ for (const e of events) {
999
+ if (!e.id)
1000
+ continue;
1001
+ const existing = this.emergenceEngine.getExplanation(e.id);
1002
+ if (!existing) {
1003
+ this.emergenceEngine.explain(e.id);
1004
+ explained++;
1005
+ }
1006
+ }
1007
+ if (this.metaCognitionLayer)
1008
+ this.metaCognitionLayer.recordStep('emergence_explain', this.cycleCount, { insights: explained });
1009
+ }
1010
+ catch (err) {
1011
+ this.log.warn(`[orchestrator] Step 30 error: ${err.message}`);
1012
+ }
1013
+ }
1014
+ // Step 31: Meta-Trends — record system-wide trend data every cycle
1015
+ if (this.metaCognitionLayer) {
1016
+ try {
1017
+ const totalPrinciples = this.knowledgeDistiller.getPrinciples(undefined, 1000).length;
1018
+ const hypothesisSummary = this.hypothesisEngine.getSummary();
1019
+ const totalHypotheses = hypothesisSummary.total ?? 0;
1020
+ const predictionAccuracy = 0; // Will be filled if prediction engine available
1021
+ let closedGaps = 0;
1022
+ if (this.curiosityEngine) {
1023
+ const status = this.curiosityEngine.getStatus();
1024
+ closedGaps = status.totalGaps - status.activeGaps;
1025
+ }
1026
+ const emergenceCount = this.emergenceEngine ? this.emergenceEngine.getStatus().totalEvents : 0;
1027
+ this.metaCognitionLayer.recordTrend(this.cycleCount, {
1028
+ newPrinciples: totalPrinciples,
1029
+ newHypotheses: totalHypotheses,
1030
+ predictionAccuracy,
1031
+ closedGaps,
1032
+ totalPrinciples,
1033
+ totalHypotheses,
1034
+ emergenceCount,
1035
+ });
1036
+ }
1037
+ catch (err) {
1038
+ this.log.warn(`[orchestrator] Step 31 error: ${err.message}`);
1039
+ }
1040
+ }
1041
+ // Step 32: Simulation — run what-if scenarios (every 20 cycles)
1042
+ if (this.simulationEngine && this.cycleCount % 20 === 0) {
1043
+ try {
1044
+ ts?.emit('orchestrator', 'hypothesizing', 'Step 32: Running what-if simulations...', 'routine');
1045
+ const scenarios = ['error_rate doubles', 'learning_rate halves', 'prediction_accuracy increases by 20%'];
1046
+ const scenario = scenarios[this.cycleCount % scenarios.length];
1047
+ const sim = this.simulationEngine.simulate(scenario);
1048
+ this.journal.write({
1049
+ type: 'insight',
1050
+ title: `Simulation: "${scenario}"`,
1051
+ content: `Predicted ${sim.predictedOutcomes.length} outcomes. ${sim.predictedOutcomes.map(o => `${o.metric}: ${o.direction} (${(o.confidence * 100).toFixed(0)}%)`).join(', ')}`,
1052
+ tags: ['simulation', 'what-if'],
1053
+ references: [],
1054
+ significance: 'routine',
1055
+ data: { simulation: sim },
1056
+ });
1057
+ if (this.metaCognitionLayer)
1058
+ this.metaCognitionLayer.recordStep('simulation', this.cycleCount, { predictions: sim.predictedOutcomes.length });
1059
+ }
1060
+ catch (err) {
1061
+ this.log.warn(`[orchestrator] Step 32 error: ${err.message}`);
1062
+ }
1063
+ }
824
1064
  const duration = Date.now() - start;
825
1065
  ts?.emit('orchestrator', 'reflecting', `Feedback Cycle #${this.cycleCount} complete (${duration}ms)`);
826
1066
  this.log.info(`[orchestrator] ─── Feedback Cycle #${this.cycleCount} complete (${duration}ms) ───`);
@@ -1380,6 +1620,10 @@ export class ResearchOrchestrator {
1380
1620
  metacognition: this.metaCognitionLayer?.getStatus() ?? null,
1381
1621
  autoExperiment: this.autoExperimentEngine?.getStatus(this.cycleCount) ?? null,
1382
1622
  parameterRegistry: this.parameterRegistry?.getStatus() ?? null,
1623
+ selfTest: this.selfTestEngine?.getStatus() ?? null,
1624
+ teach: this.teachEngine?.getStatus() ?? null,
1625
+ dataScout: this.dataScout?.getStatus() ?? null,
1626
+ simulation: this.simulationEngine?.getStatus() ?? null,
1383
1627
  };
1384
1628
  }
1385
1629
  }