@timmeck/brain-core 2.36.24 → 2.36.26

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 (117) hide show
  1. package/dist/active-learning/__tests__/active-learning.test.d.ts +1 -0
  2. package/dist/active-learning/__tests__/active-learning.test.js +132 -0
  3. package/dist/active-learning/__tests__/active-learning.test.js.map +1 -0
  4. package/dist/active-learning/active-learner.d.ts +79 -0
  5. package/dist/active-learning/active-learner.js +224 -0
  6. package/dist/active-learning/active-learner.js.map +1 -0
  7. package/dist/active-learning/index.d.ts +2 -0
  8. package/dist/active-learning/index.js +2 -0
  9. package/dist/active-learning/index.js.map +1 -0
  10. package/dist/code-health/__tests__/code-health.test.d.ts +1 -0
  11. package/dist/code-health/__tests__/code-health.test.js +123 -0
  12. package/dist/code-health/__tests__/code-health.test.js.map +1 -0
  13. package/dist/code-health/health-monitor.d.ts +55 -0
  14. package/dist/code-health/health-monitor.js +180 -0
  15. package/dist/code-health/health-monitor.js.map +1 -0
  16. package/dist/code-health/index.d.ts +2 -0
  17. package/dist/code-health/index.js +2 -0
  18. package/dist/code-health/index.js.map +1 -0
  19. package/dist/consensus/__tests__/consensus.test.d.ts +1 -0
  20. package/dist/consensus/__tests__/consensus.test.js +159 -0
  21. package/dist/consensus/__tests__/consensus.test.js.map +1 -0
  22. package/dist/consensus/consensus-engine.d.ts +81 -0
  23. package/dist/consensus/consensus-engine.js +237 -0
  24. package/dist/consensus/consensus-engine.js.map +1 -0
  25. package/dist/consensus/index.d.ts +2 -0
  26. package/dist/consensus/index.js +2 -0
  27. package/dist/consensus/index.js.map +1 -0
  28. package/dist/feedback/__tests__/feedback-engine.test.d.ts +1 -0
  29. package/dist/feedback/__tests__/feedback-engine.test.js +156 -0
  30. package/dist/feedback/__tests__/feedback-engine.test.js.map +1 -0
  31. package/dist/feedback/feedback-engine.d.ts +61 -0
  32. package/dist/feedback/feedback-engine.js +203 -0
  33. package/dist/feedback/feedback-engine.js.map +1 -0
  34. package/dist/feedback/index.d.ts +2 -0
  35. package/dist/feedback/index.js +2 -0
  36. package/dist/feedback/index.js.map +1 -0
  37. package/dist/index.d.ts +32 -0
  38. package/dist/index.js +27 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/knowledge-graph/__tests__/knowledge-graph.test.d.ts +1 -0
  41. package/dist/knowledge-graph/__tests__/knowledge-graph.test.js +215 -0
  42. package/dist/knowledge-graph/__tests__/knowledge-graph.test.js.map +1 -0
  43. package/dist/knowledge-graph/fact-extractor.d.ts +23 -0
  44. package/dist/knowledge-graph/fact-extractor.js +70 -0
  45. package/dist/knowledge-graph/fact-extractor.js.map +1 -0
  46. package/dist/knowledge-graph/graph-engine.d.ts +78 -0
  47. package/dist/knowledge-graph/graph-engine.js +276 -0
  48. package/dist/knowledge-graph/graph-engine.js.map +1 -0
  49. package/dist/knowledge-graph/index.d.ts +4 -0
  50. package/dist/knowledge-graph/index.js +3 -0
  51. package/dist/knowledge-graph/index.js.map +1 -0
  52. package/dist/proactive/__tests__/proactive-engine.test.d.ts +1 -0
  53. package/dist/proactive/__tests__/proactive-engine.test.js +183 -0
  54. package/dist/proactive/__tests__/proactive-engine.test.js.map +1 -0
  55. package/dist/proactive/index.d.ts +2 -0
  56. package/dist/proactive/index.js +2 -0
  57. package/dist/proactive/index.js.map +1 -0
  58. package/dist/proactive/proactive-engine.d.ts +86 -0
  59. package/dist/proactive/proactive-engine.js +252 -0
  60. package/dist/proactive/proactive-engine.js.map +1 -0
  61. package/dist/rag/__tests__/rag-engine.test.d.ts +1 -0
  62. package/dist/rag/__tests__/rag-engine.test.js +235 -0
  63. package/dist/rag/__tests__/rag-engine.test.js.map +1 -0
  64. package/dist/rag/index.d.ts +4 -0
  65. package/dist/rag/index.js +3 -0
  66. package/dist/rag/index.js.map +1 -0
  67. package/dist/rag/rag-engine.d.ts +98 -0
  68. package/dist/rag/rag-engine.js +310 -0
  69. package/dist/rag/rag-engine.js.map +1 -0
  70. package/dist/rag/rag-indexer.d.ts +52 -0
  71. package/dist/rag/rag-indexer.js +144 -0
  72. package/dist/rag/rag-indexer.js.map +1 -0
  73. package/dist/research/__tests__/semantic-compressor.test.d.ts +1 -0
  74. package/dist/research/__tests__/semantic-compressor.test.js +153 -0
  75. package/dist/research/__tests__/semantic-compressor.test.js.map +1 -0
  76. package/dist/research/semantic-compressor.d.ts +55 -0
  77. package/dist/research/semantic-compressor.js +227 -0
  78. package/dist/research/semantic-compressor.js.map +1 -0
  79. package/dist/teaching/__tests__/teaching.test.d.ts +1 -0
  80. package/dist/teaching/__tests__/teaching.test.js +151 -0
  81. package/dist/teaching/__tests__/teaching.test.js.map +1 -0
  82. package/dist/teaching/curriculum.d.ts +32 -0
  83. package/dist/teaching/curriculum.js +89 -0
  84. package/dist/teaching/curriculum.js.map +1 -0
  85. package/dist/teaching/index.d.ts +4 -0
  86. package/dist/teaching/index.js +3 -0
  87. package/dist/teaching/index.js.map +1 -0
  88. package/dist/teaching/teaching-protocol.d.ts +74 -0
  89. package/dist/teaching/teaching-protocol.js +164 -0
  90. package/dist/teaching/teaching-protocol.js.map +1 -0
  91. package/dist/tool-learning/__tests__/tool-learning.test.d.ts +1 -0
  92. package/dist/tool-learning/__tests__/tool-learning.test.js +187 -0
  93. package/dist/tool-learning/__tests__/tool-learning.test.js.map +1 -0
  94. package/dist/tool-learning/index.d.ts +4 -0
  95. package/dist/tool-learning/index.js +3 -0
  96. package/dist/tool-learning/index.js.map +1 -0
  97. package/dist/tool-learning/tool-patterns.d.ts +47 -0
  98. package/dist/tool-learning/tool-patterns.js +125 -0
  99. package/dist/tool-learning/tool-patterns.js.map +1 -0
  100. package/dist/tool-learning/tool-tracker.d.ts +58 -0
  101. package/dist/tool-learning/tool-tracker.js +135 -0
  102. package/dist/tool-learning/tool-tracker.js.map +1 -0
  103. package/dist/user-model/__tests__/user-model.test.d.ts +1 -0
  104. package/dist/user-model/__tests__/user-model.test.js +142 -0
  105. package/dist/user-model/__tests__/user-model.test.js.map +1 -0
  106. package/dist/user-model/adaptive-context.d.ts +18 -0
  107. package/dist/user-model/adaptive-context.js +46 -0
  108. package/dist/user-model/adaptive-context.js.map +1 -0
  109. package/dist/user-model/index.d.ts +4 -0
  110. package/dist/user-model/index.js +3 -0
  111. package/dist/user-model/index.js.map +1 -0
  112. package/dist/user-model/user-model.d.ts +53 -0
  113. package/dist/user-model/user-model.js +204 -0
  114. package/dist/user-model/user-model.js.map +1 -0
  115. package/dist/utils/logger.js +4 -3
  116. package/dist/utils/logger.js.map +1 -1
  117. package/package.json +1 -1
@@ -0,0 +1,53 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { ThoughtStream } from '../consciousness/thought-stream.js';
3
+ export type SkillLevel = 'beginner' | 'intermediate' | 'expert';
4
+ export interface UserProfile {
5
+ skillDomains: Map<string, SkillLevel>;
6
+ topTools: string[];
7
+ activeHours: number[];
8
+ errorPatterns: string[];
9
+ }
10
+ export interface UserModelConfig {
11
+ brainName: string;
12
+ }
13
+ export interface UserModelStatus {
14
+ totalKeys: number;
15
+ domains: number;
16
+ lastUpdated: string | null;
17
+ }
18
+ export declare function runUserModelMigration(db: Database.Database): void;
19
+ export declare class UserModel {
20
+ private db;
21
+ private config;
22
+ private ts;
23
+ private log;
24
+ private stmtUpsert;
25
+ private stmtGet;
26
+ private stmtCountKeys;
27
+ private stmtCountDomains;
28
+ private stmtLastUpdated;
29
+ private stmtAllDomains;
30
+ private stmtAllKeys;
31
+ constructor(db: Database.Database, config: UserModelConfig);
32
+ /** Set the ThoughtStream for consciousness integration. */
33
+ setThoughtStream(stream: ThoughtStream): void;
34
+ /**
35
+ * Update profile from a tool interaction.
36
+ * Tracks tool frequency per domain, infers skill levels.
37
+ */
38
+ updateFromInteraction(toolName: string, context: string | null, outcome: string): void;
39
+ /** Build and return the full user profile. */
40
+ getProfile(): UserProfile;
41
+ /** Set an explicit user preference. */
42
+ setPreference(key: string, value: string): void;
43
+ /** Get a stored user preference, or null if not set. */
44
+ getPreference(key: string): string | null;
45
+ /** Get model status summary. */
46
+ getStatus(): UserModelStatus;
47
+ /** Store a key-value pair with confidence. */
48
+ _setKey(key: string, value: string, confidence: number): void;
49
+ /** Retrieve a value by key, or null if not found. */
50
+ _getKey(key: string): string | null;
51
+ /** Infer skill level from successful interaction count. */
52
+ private inferSkillLevel;
53
+ }
@@ -0,0 +1,204 @@
1
+ // ── User Model — Skill Tracking & Preference Storage ─────────
2
+ //
3
+ // Tracks user interactions to infer skill levels per domain,
4
+ // stores explicit preferences, and builds a user profile.
5
+ import { getLogger } from '../utils/logger.js';
6
+ // ── Migration ───────────────────────────────────────────
7
+ export function runUserModelMigration(db) {
8
+ db.exec(`
9
+ CREATE TABLE IF NOT EXISTS user_profile (
10
+ id INTEGER PRIMARY KEY,
11
+ key TEXT UNIQUE NOT NULL,
12
+ value TEXT NOT NULL,
13
+ confidence REAL DEFAULT 0.5,
14
+ updated_at TEXT DEFAULT (datetime('now'))
15
+ );
16
+ `);
17
+ }
18
+ // ── Engine ──────────────────────────────────────────────
19
+ export class UserModel {
20
+ db;
21
+ config;
22
+ ts = null;
23
+ log = getLogger();
24
+ // Prepared statements
25
+ stmtUpsert;
26
+ stmtGet;
27
+ stmtCountKeys;
28
+ stmtCountDomains;
29
+ stmtLastUpdated;
30
+ stmtAllDomains;
31
+ stmtAllKeys;
32
+ constructor(db, config) {
33
+ this.db = db;
34
+ this.config = config;
35
+ runUserModelMigration(db);
36
+ // Prepare all statements
37
+ this.stmtUpsert = db.prepare(`
38
+ INSERT INTO user_profile (key, value, confidence, updated_at)
39
+ VALUES (?, ?, ?, datetime('now'))
40
+ ON CONFLICT(key) DO UPDATE SET
41
+ value = excluded.value,
42
+ confidence = excluded.confidence,
43
+ updated_at = datetime('now')
44
+ `);
45
+ this.stmtGet = db.prepare(`
46
+ SELECT * FROM user_profile WHERE key = ?
47
+ `);
48
+ this.stmtCountKeys = db.prepare(`
49
+ SELECT COUNT(*) AS total FROM user_profile
50
+ `);
51
+ this.stmtCountDomains = db.prepare(`
52
+ SELECT COUNT(*) AS cnt FROM user_profile WHERE key LIKE 'domain:%'
53
+ `);
54
+ this.stmtLastUpdated = db.prepare(`
55
+ SELECT MAX(updated_at) AS last FROM user_profile
56
+ `);
57
+ this.stmtAllDomains = db.prepare(`
58
+ SELECT key, value, confidence FROM user_profile WHERE key LIKE 'domain:%' ORDER BY confidence DESC
59
+ `);
60
+ this.stmtAllKeys = db.prepare(`
61
+ SELECT key, value FROM user_profile ORDER BY updated_at DESC
62
+ `);
63
+ this.log.info(`[user-model] Initialized for ${config.brainName}`);
64
+ }
65
+ /** Set the ThoughtStream for consciousness integration. */
66
+ setThoughtStream(stream) {
67
+ this.ts = stream;
68
+ }
69
+ /**
70
+ * Update profile from a tool interaction.
71
+ * Tracks tool frequency per domain, infers skill levels.
72
+ */
73
+ updateFromInteraction(toolName, context, outcome) {
74
+ // Extract domain from tool name (e.g., "mcp.search" → "mcp", "trading.analyze" → "trading")
75
+ const domain = toolName.includes('.') ? toolName.split('.')[0] : 'general';
76
+ // Update tool frequency
77
+ const toolKey = `tool_freq:${toolName}`;
78
+ const existing = this._getKey(toolKey);
79
+ const currentCount = existing ? parseInt(existing, 10) : 0;
80
+ const newCount = currentCount + 1;
81
+ this._setKey(toolKey, String(newCount), Math.min(newCount / 20, 1.0));
82
+ // Update domain usage count
83
+ const domainKey = `domain_uses:${domain}`;
84
+ const domainExisting = this._getKey(domainKey);
85
+ const domainCount = domainExisting ? parseInt(domainExisting, 10) : 0;
86
+ const newDomainCount = domainCount + 1;
87
+ // Only count successful outcomes toward skill level
88
+ const successKey = `domain_success:${domain}`;
89
+ const successExisting = this._getKey(successKey);
90
+ const successCount = successExisting ? parseInt(successExisting, 10) : 0;
91
+ const newSuccessCount = outcome === 'success' ? successCount + 1 : successCount;
92
+ this._setKey(domainKey, String(newDomainCount), Math.min(newDomainCount / 20, 1.0));
93
+ this._setKey(successKey, String(newSuccessCount), Math.min(newSuccessCount / 20, 1.0));
94
+ // Infer skill level based on successful uses
95
+ const skillLevel = this.inferSkillLevel(newSuccessCount);
96
+ this._setKey(`domain:${domain}`, skillLevel, Math.min(newSuccessCount / 15, 1.0));
97
+ // Track active hour
98
+ const hour = new Date().getHours();
99
+ const hourKey = `active_hour:${hour}`;
100
+ const hourExisting = this._getKey(hourKey);
101
+ const hourCount = hourExisting ? parseInt(hourExisting, 10) : 0;
102
+ this._setKey(hourKey, String(hourCount + 1), 0.5);
103
+ // Track error patterns
104
+ if (outcome === 'failure' && context) {
105
+ const errorKey = `error_pattern:${domain}`;
106
+ const patterns = this._getKey(errorKey);
107
+ const patternList = patterns ? JSON.parse(patterns) : [];
108
+ const snippet = context.substring(0, 100);
109
+ if (!patternList.includes(snippet)) {
110
+ patternList.push(snippet);
111
+ if (patternList.length > 10)
112
+ patternList.shift();
113
+ this._setKey(errorKey, JSON.stringify(patternList), 0.5);
114
+ }
115
+ }
116
+ this.ts?.emit('user-model', 'analyzing', `Updated profile: ${domain} (${skillLevel}), tool ${toolName}`, 'routine');
117
+ }
118
+ /** Build and return the full user profile. */
119
+ getProfile() {
120
+ // Skill domains
121
+ const domainRows = this.stmtAllDomains.all();
122
+ const skillDomains = new Map();
123
+ for (const row of domainRows) {
124
+ const domainName = row.key.replace('domain:', '');
125
+ skillDomains.set(domainName, row.value);
126
+ }
127
+ // Top tools (by frequency)
128
+ const allKeys = this.stmtAllKeys.all();
129
+ const toolFreqs = [];
130
+ for (const row of allKeys) {
131
+ if (row.key.startsWith('tool_freq:')) {
132
+ toolFreqs.push({
133
+ tool: row.key.replace('tool_freq:', ''),
134
+ count: parseInt(row.value, 10),
135
+ });
136
+ }
137
+ }
138
+ toolFreqs.sort((a, b) => b.count - a.count);
139
+ const topTools = toolFreqs.slice(0, 10).map(t => t.tool);
140
+ // Active hours
141
+ const activeHours = [];
142
+ for (const row of allKeys) {
143
+ if (row.key.startsWith('active_hour:')) {
144
+ const hour = parseInt(row.key.replace('active_hour:', ''), 10);
145
+ const count = parseInt(row.value, 10);
146
+ if (count > 0)
147
+ activeHours.push(hour);
148
+ }
149
+ }
150
+ activeHours.sort((a, b) => a - b);
151
+ // Error patterns
152
+ const errorPatterns = [];
153
+ for (const row of allKeys) {
154
+ if (row.key.startsWith('error_pattern:')) {
155
+ try {
156
+ const patterns = JSON.parse(row.value);
157
+ errorPatterns.push(...patterns);
158
+ }
159
+ catch {
160
+ // Ignore malformed entries
161
+ }
162
+ }
163
+ }
164
+ return { skillDomains, topTools, activeHours, errorPatterns };
165
+ }
166
+ /** Set an explicit user preference. */
167
+ setPreference(key, value) {
168
+ this._setKey(`pref:${key}`, value, 1.0);
169
+ }
170
+ /** Get a stored user preference, or null if not set. */
171
+ getPreference(key) {
172
+ return this._getKey(`pref:${key}`);
173
+ }
174
+ /** Get model status summary. */
175
+ getStatus() {
176
+ const totalKeys = this.stmtCountKeys.get().total;
177
+ const domains = this.stmtCountDomains.get().cnt;
178
+ const lastUpdated = this.stmtLastUpdated.get().last;
179
+ return {
180
+ totalKeys,
181
+ domains,
182
+ lastUpdated,
183
+ };
184
+ }
185
+ // ── Internal ──────────────────────────────────────────
186
+ /** Store a key-value pair with confidence. */
187
+ _setKey(key, value, confidence) {
188
+ this.stmtUpsert.run(key, value, confidence);
189
+ }
190
+ /** Retrieve a value by key, or null if not found. */
191
+ _getKey(key) {
192
+ const row = this.stmtGet.get(key);
193
+ return row ? row.value : null;
194
+ }
195
+ /** Infer skill level from successful interaction count. */
196
+ inferSkillLevel(successfulUses) {
197
+ if (successfulUses > 10)
198
+ return 'expert';
199
+ if (successfulUses >= 3)
200
+ return 'intermediate';
201
+ return 'beginner';
202
+ }
203
+ }
204
+ //# sourceMappingURL=user-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-model.js","sourceRoot":"","sources":["../../src/user-model/user-model.ts"],"names":[],"mappings":"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"}
@@ -28,10 +28,11 @@ export function createLogger(opts) {
28
28
  const consoleTransport = new winston.transports.Console({
29
29
  format: combine(colorize(), timestamp(), logFormat),
30
30
  });
31
- // Silently swallow EPIPE errors (closed pipe in daemon mode)
31
+ // On EPIPE (closed pipe in daemon mode), remove the console transport entirely
32
32
  consoleTransport.on('error', (err) => {
33
- if (err.code === 'EPIPE')
34
- return;
33
+ if (err.code === 'EPIPE' && loggerInstance) {
34
+ loggerInstance.remove(consoleTransport);
35
+ }
35
36
  });
36
37
  transports.push(consoleTransport);
37
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;AAEhE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;IAClE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,OAAO,GAAG,SAAS,KAAK,KAAK,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,cAAc,GAA0B,IAAI,CAAC;AAejD,MAAM,UAAU,YAAY,CAAC,IAAoB;IAC/C,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAE1C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,iBAAiB,CAAC;IACjD,MAAM,eAAe,GAAG,IAAI,EAAE,eAAe,IAAI,WAAW,CAAC;IAE7D,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC3G,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;IAC1D,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC;IAErC,MAAM,UAAU,GAAwB;QACtC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YAC1B,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,OAAO;YAChB,QAAQ;YACR,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC;SACxC,CAAC;KACH,CAAC;IAEF,sFAAsF;IACtF,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;QACzE,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;YACtD,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC;SACpD,CAAC,CAAC;QACH,6DAA6D;QAC7D,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;YAC1D,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO;QACnC,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAC7D,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timmeck/brain-core",
3
- "version": "2.36.24",
3
+ "version": "2.36.26",
4
4
  "description": "Shared core infrastructure for the Brain ecosystem — IPC, MCP, CLI, DB connection, and utilities",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",