@theihtisham/agent-shadow-brain 5.0.1 → 5.2.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 (74) hide show
  1. package/README.md +1159 -888
  2. package/dist/adapters/copilot.d.ts +14 -0
  3. package/dist/adapters/copilot.d.ts.map +1 -0
  4. package/dist/adapters/copilot.js +93 -0
  5. package/dist/adapters/copilot.js.map +1 -0
  6. package/dist/adapters/cursor.d.ts +13 -0
  7. package/dist/adapters/cursor.d.ts.map +1 -0
  8. package/dist/adapters/cursor.js +96 -0
  9. package/dist/adapters/cursor.js.map +1 -0
  10. package/dist/adapters/index.d.ts +4 -1
  11. package/dist/adapters/index.d.ts.map +1 -1
  12. package/dist/adapters/index.js +7 -3
  13. package/dist/adapters/index.js.map +1 -1
  14. package/dist/adapters/windsurf.d.ts +14 -0
  15. package/dist/adapters/windsurf.d.ts.map +1 -0
  16. package/dist/adapters/windsurf.js +107 -0
  17. package/dist/adapters/windsurf.js.map +1 -0
  18. package/dist/brain/code-dna.d.ts +70 -0
  19. package/dist/brain/code-dna.d.ts.map +1 -0
  20. package/dist/brain/code-dna.js +611 -0
  21. package/dist/brain/code-dna.js.map +1 -0
  22. package/dist/brain/fine-tuning-engine.d.ts +99 -0
  23. package/dist/brain/fine-tuning-engine.d.ts.map +1 -0
  24. package/dist/brain/fine-tuning-engine.js +681 -0
  25. package/dist/brain/fine-tuning-engine.js.map +1 -0
  26. package/dist/brain/global-brain.d.ts +56 -0
  27. package/dist/brain/global-brain.d.ts.map +1 -0
  28. package/dist/brain/global-brain.js +324 -0
  29. package/dist/brain/global-brain.js.map +1 -0
  30. package/dist/brain/intent-engine.d.ts +64 -0
  31. package/dist/brain/intent-engine.d.ts.map +1 -0
  32. package/dist/brain/intent-engine.js +374 -0
  33. package/dist/brain/intent-engine.js.map +1 -0
  34. package/dist/brain/l0-cache.d.ts +40 -0
  35. package/dist/brain/l0-cache.d.ts.map +1 -0
  36. package/dist/brain/l0-cache.js +176 -0
  37. package/dist/brain/l0-cache.js.map +1 -0
  38. package/dist/brain/lsp-server.d.ts +62 -0
  39. package/dist/brain/lsp-server.d.ts.map +1 -0
  40. package/dist/brain/lsp-server.js +480 -0
  41. package/dist/brain/lsp-server.js.map +1 -0
  42. package/dist/brain/mcp-server.d.ts +4 -0
  43. package/dist/brain/mcp-server.d.ts.map +1 -1
  44. package/dist/brain/mcp-server.js +91 -0
  45. package/dist/brain/mcp-server.js.map +1 -1
  46. package/dist/brain/orchestrator.d.ts +13 -0
  47. package/dist/brain/orchestrator.d.ts.map +1 -1
  48. package/dist/brain/orchestrator.js +25 -1
  49. package/dist/brain/orchestrator.js.map +1 -1
  50. package/dist/brain/session-hooks.d.ts +28 -0
  51. package/dist/brain/session-hooks.d.ts.map +1 -0
  52. package/dist/brain/session-hooks.js +475 -0
  53. package/dist/brain/session-hooks.js.map +1 -0
  54. package/dist/brain/smart-cache.d.ts +100 -0
  55. package/dist/brain/smart-cache.d.ts.map +1 -0
  56. package/dist/brain/smart-cache.js +417 -0
  57. package/dist/brain/smart-cache.js.map +1 -0
  58. package/dist/brain/subconscious.d.ts +34 -0
  59. package/dist/brain/subconscious.d.ts.map +1 -0
  60. package/dist/brain/subconscious.js +275 -0
  61. package/dist/brain/subconscious.js.map +1 -0
  62. package/dist/brain/temporal-intelligence.d.ts +89 -0
  63. package/dist/brain/temporal-intelligence.d.ts.map +1 -0
  64. package/dist/brain/temporal-intelligence.js +378 -0
  65. package/dist/brain/temporal-intelligence.js.map +1 -0
  66. package/dist/cli.js +434 -4
  67. package/dist/cli.js.map +1 -1
  68. package/dist/index.d.ts +8 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +8 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/types.d.ts +333 -1
  73. package/dist/types.d.ts.map +1 -1
  74. package/package.json +46 -10
@@ -0,0 +1,28 @@
1
+ import { AgentTool, SessionHook, AttachReport } from '../types.js';
2
+ export declare class SessionHookInstaller {
3
+ /** Detect installed agents on this machine + project */
4
+ detectInstalled(projectDir: string): Promise<AgentTool[]>;
5
+ /** Install hooks for ALL detected agents in one shot */
6
+ attachAll(projectDir: string): Promise<AttachReport>;
7
+ /** Install hooks for a single agent. Returns list of installed hooks. */
8
+ attach(agent: AgentTool, projectDir: string): Promise<SessionHook[]>;
9
+ /** Detach Shadow Brain from a specific agent */
10
+ detach(agent: AgentTool, projectDir: string): Promise<boolean>;
11
+ private attachClaudeCode;
12
+ private attachCursor;
13
+ private attachCline;
14
+ private attachWindsurf;
15
+ private attachCodex;
16
+ private attachKiloCode;
17
+ private attachOpenCode;
18
+ private attachRooCode;
19
+ private attachAider;
20
+ private attachCopilot;
21
+ /** Add Shadow Brain to an MCP-server-style JSON config without clobbering existing servers */
22
+ private upsertMcpJson;
23
+ private cursorRuleTemplate;
24
+ private genericRuleTemplate;
25
+ private copilotInstructionsTemplate;
26
+ }
27
+ export declare function getHookInstaller(): SessionHookInstaller;
28
+ //# sourceMappingURL=session-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-hooks.d.ts","sourceRoot":"","sources":["../../src/brain/session-hooks.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACb,MAAM,aAAa,CAAC;AASrB,qBAAa,oBAAoB;IAC/B,wDAAwD;IAClD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA0B/D,wDAAwD;IAClD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA+B1D,yEAAyE;IACnE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAgB1E,gDAAgD;IAC1C,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBpE,OAAO,CAAC,gBAAgB;IA4CxB,OAAO,CAAC,YAAY;IAsCpB,OAAO,CAAC,WAAW;IAiDnB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,aAAa;IA6BrB,8FAA8F;IAC9F,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,2BAA2B;CASpC;AAID,wBAAgB,gBAAgB,IAAI,oBAAoB,CAGvD"}
@@ -0,0 +1,475 @@
1
+ // src/brain/session-hooks.ts — Universal Session Hook Installer (v5.2.0)
2
+ //
3
+ // Installs SessionStart-equivalent hooks for every supported AI coding agent so
4
+ // that Shadow Brain is the FIRST thing each agent calls when a new session begins.
5
+ //
6
+ // Each agent has a different hook mechanism — this module abstracts them:
7
+ //
8
+ // Claude Code → ~/.claude/settings.json hooks.SessionStart
9
+ // Cursor → .cursor/rules + global ~/.cursor/mcp.json
10
+ // Cline → ~/.vscode/User/cline_mcp_settings.json
11
+ // Windsurf → .windsurfrules + ~/.windsurf/mcp.json
12
+ // Codex → ~/.codex/config.json
13
+ // Kilo Code → ~/.kilocode/settings.json
14
+ // OpenCode → ~/.opencode/settings.json
15
+ // Roo Code → ~/.roocode/mcp.json
16
+ // Aider → ~/.aider.conf.yml load_md
17
+ // Copilot → .github/copilot-instructions.md (workspace) + user settings.json
18
+ //
19
+ // Falls back gracefully when a specific agent's hook system isn't available.
20
+ import * as fs from 'fs';
21
+ import * as path from 'path';
22
+ import * as os from 'os';
23
+ const SHADOW_BRAIN_HOOK_CMD = 'shadow-brain subconscious inject';
24
+ const SHADOW_BRAIN_MCP_NAME = 'shadow-brain';
25
+ const SHADOW_BRAIN_MCP_CONFIG = {
26
+ command: 'npx',
27
+ args: ['-y', '@theihtisham/agent-shadow-brain', 'mcp', '--stdio'],
28
+ };
29
+ export class SessionHookInstaller {
30
+ /** Detect installed agents on this machine + project */
31
+ async detectInstalled(projectDir) {
32
+ const detected = [];
33
+ const home = os.homedir();
34
+ const checks = [
35
+ { agent: 'claude-code', paths: [path.join(home, '.claude'), path.join(projectDir, '.claude')] },
36
+ { agent: 'cursor', paths: [path.join(home, '.cursor'), path.join(projectDir, '.cursor'), path.join(projectDir, '.cursorrules')] },
37
+ { agent: 'cline', paths: [path.join(home, 'AppData', 'Roaming', 'Code', 'User'), path.join(home, '.vscode')] },
38
+ { agent: 'windsurf', paths: [path.join(home, '.windsurf'), path.join(projectDir, '.windsurfrules')] },
39
+ { agent: 'codex', paths: [path.join(home, '.codex'), path.join(projectDir, '.codex')] },
40
+ { agent: 'kilo-code', paths: [path.join(home, '.kilocode'), path.join(projectDir, '.kilocode')] },
41
+ { agent: 'opencode', paths: [path.join(home, '.opencode'), path.join(projectDir, '.opencode')] },
42
+ { agent: 'roo-code', paths: [path.join(home, '.roocode'), path.join(home, '.rovodev')] },
43
+ { agent: 'aider', paths: [path.join(home, '.aider.conf.yml'), path.join(projectDir, '.aider.conf.yml')] },
44
+ { agent: 'copilot', paths: [path.join(projectDir, '.github', 'copilot-instructions.md'), path.join(home, '.config', 'copilot')] },
45
+ ];
46
+ for (const { agent, paths } of checks) {
47
+ if (paths.some(p => fs.existsSync(p))) {
48
+ detected.push(agent);
49
+ }
50
+ }
51
+ return detected;
52
+ }
53
+ /** Install hooks for ALL detected agents in one shot */
54
+ async attachAll(projectDir) {
55
+ const start = Date.now();
56
+ const detected = await this.detectInstalled(projectDir);
57
+ const attached = [];
58
+ const failed = [];
59
+ const hooks = [];
60
+ for (const agent of detected) {
61
+ try {
62
+ const installed = await this.attach(agent, projectDir);
63
+ if (installed.length) {
64
+ attached.push(agent);
65
+ hooks.push(...installed);
66
+ }
67
+ else {
68
+ failed.push({ agent, reason: 'no hook installed (no supported mechanism)' });
69
+ }
70
+ }
71
+ catch (err) {
72
+ failed.push({ agent, reason: err instanceof Error ? err.message : String(err) });
73
+ }
74
+ }
75
+ return {
76
+ detected,
77
+ attached,
78
+ failed,
79
+ hooks,
80
+ totalAgents: detected.length,
81
+ durationMs: Date.now() - start,
82
+ };
83
+ }
84
+ /** Install hooks for a single agent. Returns list of installed hooks. */
85
+ async attach(agent, projectDir) {
86
+ switch (agent) {
87
+ case 'claude-code': return this.attachClaudeCode(projectDir);
88
+ case 'cursor': return this.attachCursor(projectDir);
89
+ case 'cline': return this.attachCline(projectDir);
90
+ case 'windsurf': return this.attachWindsurf(projectDir);
91
+ case 'codex': return this.attachCodex(projectDir);
92
+ case 'kilo-code': return this.attachKiloCode(projectDir);
93
+ case 'opencode': return this.attachOpenCode(projectDir);
94
+ case 'roo-code': return this.attachRooCode(projectDir);
95
+ case 'aider': return this.attachAider(projectDir);
96
+ case 'copilot': return this.attachCopilot(projectDir);
97
+ default: return [];
98
+ }
99
+ }
100
+ /** Detach Shadow Brain from a specific agent */
101
+ async detach(agent, projectDir) {
102
+ // For now, document what would be removed; implementation per-agent.
103
+ // We keep this simple: detach is best-effort and never destructive of other config.
104
+ const hooks = await this.attach(agent, projectDir);
105
+ for (const hook of hooks) {
106
+ try {
107
+ if (fs.existsSync(hook.installPath) && hook.hookType === 'workspace-rule') {
108
+ // Only delete files we created
109
+ if (hook.installPath.includes('shadow-brain')) {
110
+ fs.unlinkSync(hook.installPath);
111
+ }
112
+ }
113
+ }
114
+ catch { /* ignore */ }
115
+ }
116
+ return true;
117
+ }
118
+ // ─── Per-agent installers ───────────────────────────────────────────────────
119
+ attachClaudeCode(projectDir) {
120
+ var _a;
121
+ const home = os.homedir();
122
+ const settingsPath = path.join(home, '.claude', 'settings.json');
123
+ const hooks = [];
124
+ try {
125
+ let settings = {};
126
+ if (fs.existsSync(settingsPath)) {
127
+ settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
128
+ }
129
+ settings.hooks ?? (settings.hooks = {});
130
+ (_a = settings.hooks).SessionStart ?? (_a.SessionStart = []);
131
+ const existing = settings.hooks.SessionStart.find(h => typeof h === 'object' && h?.command?.includes('shadow-brain'));
132
+ if (!existing) {
133
+ settings.hooks.SessionStart.push({
134
+ name: 'shadow-brain-subconscious',
135
+ command: SHADOW_BRAIN_HOOK_CMD,
136
+ timeout: 5000,
137
+ });
138
+ fs.mkdirSync(path.dirname(settingsPath), { recursive: true });
139
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
140
+ }
141
+ hooks.push({
142
+ agent: 'claude-code',
143
+ event: 'session-start',
144
+ hookType: 'settings-json',
145
+ installPath: settingsPath,
146
+ command: SHADOW_BRAIN_HOOK_CMD,
147
+ active: true,
148
+ installedAt: new Date(),
149
+ });
150
+ }
151
+ catch (err) {
152
+ throw new Error(`claude-code attach failed: ${err}`);
153
+ }
154
+ return hooks;
155
+ }
156
+ attachCursor(projectDir) {
157
+ const hooks = [];
158
+ const cursorDir = path.join(projectDir, '.cursor');
159
+ const rulesDir = path.join(cursorDir, 'rules');
160
+ const mcpPath = path.join(cursorDir, 'mcp.json');
161
+ fs.mkdirSync(rulesDir, { recursive: true });
162
+ // 1. Workspace rule that tells Cursor to call shadow-brain on session
163
+ const ruleFile = path.join(rulesDir, 'shadow-brain.md');
164
+ if (!fs.existsSync(ruleFile)) {
165
+ fs.writeFileSync(ruleFile, this.cursorRuleTemplate(), 'utf-8');
166
+ }
167
+ hooks.push({
168
+ agent: 'cursor',
169
+ event: 'session-start',
170
+ hookType: 'workspace-rule',
171
+ installPath: ruleFile,
172
+ command: SHADOW_BRAIN_HOOK_CMD,
173
+ active: true,
174
+ installedAt: new Date(),
175
+ });
176
+ // 2. MCP server registration
177
+ this.upsertMcpJson(mcpPath);
178
+ hooks.push({
179
+ agent: 'cursor',
180
+ event: 'session-start',
181
+ hookType: 'extension-config',
182
+ installPath: mcpPath,
183
+ command: SHADOW_BRAIN_MCP_CONFIG.command,
184
+ active: true,
185
+ installedAt: new Date(),
186
+ });
187
+ return hooks;
188
+ }
189
+ attachCline(projectDir) {
190
+ const home = os.homedir();
191
+ const candidates = [
192
+ path.join(home, 'AppData', 'Roaming', 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json'),
193
+ path.join(home, 'Library', 'Application Support', 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json'),
194
+ path.join(home, '.config', 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json'),
195
+ ];
196
+ const hooks = [];
197
+ for (const settingsPath of candidates) {
198
+ const dir = path.dirname(settingsPath);
199
+ if (!fs.existsSync(path.dirname(dir)))
200
+ continue;
201
+ try {
202
+ fs.mkdirSync(dir, { recursive: true });
203
+ this.upsertMcpJson(settingsPath, 'mcpServers');
204
+ hooks.push({
205
+ agent: 'cline',
206
+ event: 'session-start',
207
+ hookType: 'extension-config',
208
+ installPath: settingsPath,
209
+ command: SHADOW_BRAIN_MCP_CONFIG.command,
210
+ active: true,
211
+ installedAt: new Date(),
212
+ });
213
+ break; // Only one location per OS
214
+ }
215
+ catch { /* try next */ }
216
+ }
217
+ // Workspace fallback rule
218
+ const projectRule = path.join(projectDir, '.clinerules');
219
+ if (!fs.existsSync(projectRule)) {
220
+ fs.writeFileSync(projectRule, this.genericRuleTemplate('Cline'), 'utf-8');
221
+ }
222
+ hooks.push({
223
+ agent: 'cline',
224
+ event: 'session-start',
225
+ hookType: 'workspace-rule',
226
+ installPath: projectRule,
227
+ command: SHADOW_BRAIN_HOOK_CMD,
228
+ active: true,
229
+ installedAt: new Date(),
230
+ });
231
+ return hooks;
232
+ }
233
+ attachWindsurf(projectDir) {
234
+ const home = os.homedir();
235
+ const hooks = [];
236
+ const ruleFile = path.join(projectDir, '.windsurfrules');
237
+ if (!fs.existsSync(ruleFile)) {
238
+ fs.writeFileSync(ruleFile, this.genericRuleTemplate('Windsurf'), 'utf-8');
239
+ }
240
+ hooks.push({
241
+ agent: 'windsurf',
242
+ event: 'session-start',
243
+ hookType: 'workspace-rule',
244
+ installPath: ruleFile,
245
+ command: SHADOW_BRAIN_HOOK_CMD,
246
+ active: true,
247
+ installedAt: new Date(),
248
+ });
249
+ const mcpPath = path.join(home, '.windsurf', 'mcp.json');
250
+ fs.mkdirSync(path.dirname(mcpPath), { recursive: true });
251
+ this.upsertMcpJson(mcpPath);
252
+ hooks.push({
253
+ agent: 'windsurf',
254
+ event: 'session-start',
255
+ hookType: 'extension-config',
256
+ installPath: mcpPath,
257
+ command: SHADOW_BRAIN_MCP_CONFIG.command,
258
+ active: true,
259
+ installedAt: new Date(),
260
+ });
261
+ return hooks;
262
+ }
263
+ attachCodex(projectDir) {
264
+ const home = os.homedir();
265
+ const cfgPath = path.join(home, '.codex', 'config.json');
266
+ fs.mkdirSync(path.dirname(cfgPath), { recursive: true });
267
+ let cfg = {};
268
+ if (fs.existsSync(cfgPath)) {
269
+ try {
270
+ cfg = JSON.parse(fs.readFileSync(cfgPath, 'utf-8'));
271
+ }
272
+ catch {
273
+ cfg = {};
274
+ }
275
+ }
276
+ cfg.session_start_command = SHADOW_BRAIN_HOOK_CMD;
277
+ cfg.mcp_servers ?? (cfg.mcp_servers = {});
278
+ cfg.mcp_servers[SHADOW_BRAIN_MCP_NAME] = SHADOW_BRAIN_MCP_CONFIG;
279
+ fs.writeFileSync(cfgPath, JSON.stringify(cfg, null, 2));
280
+ return [{
281
+ agent: 'codex',
282
+ event: 'session-start',
283
+ hookType: 'config-file',
284
+ installPath: cfgPath,
285
+ command: SHADOW_BRAIN_HOOK_CMD,
286
+ active: true,
287
+ installedAt: new Date(),
288
+ }];
289
+ }
290
+ attachKiloCode(projectDir) {
291
+ const home = os.homedir();
292
+ const settingsPath = path.join(home, '.kilocode', 'settings.json');
293
+ fs.mkdirSync(path.dirname(settingsPath), { recursive: true });
294
+ let cfg = {};
295
+ if (fs.existsSync(settingsPath)) {
296
+ try {
297
+ cfg = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
298
+ }
299
+ catch {
300
+ cfg = {};
301
+ }
302
+ }
303
+ cfg.mcpServers ?? (cfg.mcpServers = {});
304
+ cfg.mcpServers[SHADOW_BRAIN_MCP_NAME] = SHADOW_BRAIN_MCP_CONFIG;
305
+ cfg.sessionStartHook = SHADOW_BRAIN_HOOK_CMD;
306
+ fs.writeFileSync(settingsPath, JSON.stringify(cfg, null, 2));
307
+ return [{
308
+ agent: 'kilo-code',
309
+ event: 'session-start',
310
+ hookType: 'settings-json',
311
+ installPath: settingsPath,
312
+ command: SHADOW_BRAIN_HOOK_CMD,
313
+ active: true,
314
+ installedAt: new Date(),
315
+ }];
316
+ }
317
+ attachOpenCode(projectDir) {
318
+ const home = os.homedir();
319
+ const settingsPath = path.join(home, '.opencode', 'settings.json');
320
+ fs.mkdirSync(path.dirname(settingsPath), { recursive: true });
321
+ let cfg = {};
322
+ if (fs.existsSync(settingsPath)) {
323
+ try {
324
+ cfg = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
325
+ }
326
+ catch {
327
+ cfg = {};
328
+ }
329
+ }
330
+ cfg.mcpServers ?? (cfg.mcpServers = {});
331
+ cfg.mcpServers[SHADOW_BRAIN_MCP_NAME] = SHADOW_BRAIN_MCP_CONFIG;
332
+ fs.writeFileSync(settingsPath, JSON.stringify(cfg, null, 2));
333
+ return [{
334
+ agent: 'opencode',
335
+ event: 'session-start',
336
+ hookType: 'settings-json',
337
+ installPath: settingsPath,
338
+ command: SHADOW_BRAIN_MCP_CONFIG.command,
339
+ active: true,
340
+ installedAt: new Date(),
341
+ }];
342
+ }
343
+ attachRooCode(projectDir) {
344
+ const home = os.homedir();
345
+ const candidates = [
346
+ path.join(home, '.roocode', 'mcp.json'),
347
+ path.join(home, '.rovodev', 'mcp.json'),
348
+ ];
349
+ const hooks = [];
350
+ for (const mcpPath of candidates) {
351
+ try {
352
+ fs.mkdirSync(path.dirname(mcpPath), { recursive: true });
353
+ this.upsertMcpJson(mcpPath);
354
+ hooks.push({
355
+ agent: 'roo-code',
356
+ event: 'session-start',
357
+ hookType: 'extension-config',
358
+ installPath: mcpPath,
359
+ command: SHADOW_BRAIN_MCP_CONFIG.command,
360
+ active: true,
361
+ installedAt: new Date(),
362
+ });
363
+ break;
364
+ }
365
+ catch { /* try next */ }
366
+ }
367
+ return hooks;
368
+ }
369
+ attachAider(projectDir) {
370
+ const home = os.homedir();
371
+ const cfgPath = path.join(home, '.aider.conf.yml');
372
+ const briefingPath = path.join(home, '.aider.shadow-brain.md');
373
+ // Write the briefing wrapper file Aider will load via load_md
374
+ fs.writeFileSync(briefingPath, '# Shadow Brain\n\nThis file is rewritten on each Shadow Brain session-start hook.\n');
375
+ let cfg = '';
376
+ if (fs.existsSync(cfgPath)) {
377
+ cfg = fs.readFileSync(cfgPath, 'utf-8');
378
+ }
379
+ if (!cfg.includes('.aider.shadow-brain.md')) {
380
+ cfg += `\n# Shadow Brain auto-injected\nread:\n - ${briefingPath}\n`;
381
+ fs.writeFileSync(cfgPath, cfg);
382
+ }
383
+ return [{
384
+ agent: 'aider',
385
+ event: 'session-start',
386
+ hookType: 'config-file',
387
+ installPath: cfgPath,
388
+ command: SHADOW_BRAIN_HOOK_CMD,
389
+ active: true,
390
+ installedAt: new Date(),
391
+ }];
392
+ }
393
+ attachCopilot(projectDir) {
394
+ // GitHub Copilot reads .github/copilot-instructions.md as workspace context.
395
+ const githubDir = path.join(projectDir, '.github');
396
+ fs.mkdirSync(githubDir, { recursive: true });
397
+ const instrPath = path.join(githubDir, 'copilot-instructions.md');
398
+ if (!fs.existsSync(instrPath)) {
399
+ fs.writeFileSync(instrPath, this.copilotInstructionsTemplate(), 'utf-8');
400
+ }
401
+ else {
402
+ // Append marker if not present
403
+ const existing = fs.readFileSync(instrPath, 'utf-8');
404
+ if (!existing.includes('Shadow Brain')) {
405
+ fs.appendFileSync(instrPath, `\n\n---\n\n${this.copilotInstructionsTemplate()}`);
406
+ }
407
+ }
408
+ return [{
409
+ agent: 'copilot',
410
+ event: 'session-start',
411
+ hookType: 'workspace-rule',
412
+ installPath: instrPath,
413
+ command: SHADOW_BRAIN_HOOK_CMD,
414
+ active: true,
415
+ installedAt: new Date(),
416
+ }];
417
+ }
418
+ // ─── Helpers ────────────────────────────────────────────────────────────────
419
+ /** Add Shadow Brain to an MCP-server-style JSON config without clobbering existing servers */
420
+ upsertMcpJson(jsonPath, key = 'mcpServers') {
421
+ let cfg = {};
422
+ if (fs.existsSync(jsonPath)) {
423
+ try {
424
+ cfg = JSON.parse(fs.readFileSync(jsonPath, 'utf-8'));
425
+ }
426
+ catch {
427
+ cfg = {};
428
+ }
429
+ }
430
+ cfg[key] ?? (cfg[key] = {});
431
+ cfg[key][SHADOW_BRAIN_MCP_NAME] = SHADOW_BRAIN_MCP_CONFIG;
432
+ fs.mkdirSync(path.dirname(jsonPath), { recursive: true });
433
+ fs.writeFileSync(jsonPath, JSON.stringify(cfg, null, 2));
434
+ }
435
+ cursorRuleTemplate() {
436
+ return `# Shadow Brain — Always-On Context Layer
437
+
438
+ This project is augmented by Shadow Brain (https://github.com/theihtisham/agent-shadow-brain).
439
+
440
+ At the start of every session, Shadow Brain auto-injects a briefing of:
441
+ - Recent project decisions
442
+ - Active tasks
443
+ - Cross-agent insights from Claude/Cline/Codex
444
+ - Known warnings and patterns
445
+
446
+ To check what Shadow Brain knows about this project: \`shadow-brain recall\`
447
+ To view the global brain stats: \`shadow-brain global stats\`
448
+ `;
449
+ }
450
+ genericRuleTemplate(agentName) {
451
+ return `# Shadow Brain Integration (${agentName})
452
+
453
+ Shadow Brain is active for this project. It maintains a singleton global brain
454
+ across all your AI coding agents — what one agent learns, all agents know.
455
+
456
+ Auto-injects context on session start. Run \`shadow-brain status\` for state.
457
+ `;
458
+ }
459
+ copilotInstructionsTemplate() {
460
+ return `## Shadow Brain Context
461
+
462
+ This workspace is monitored by Shadow Brain — a cross-agent intelligence layer.
463
+ When making suggestions, prefer patterns documented in the Shadow Brain memory at \`.shadow-brain/\` over generic patterns.
464
+
465
+ Project-specific decisions, conventions, and warnings are recorded in \`.shadow-brain/SHADOW_BRAIN.md\`.
466
+ `;
467
+ }
468
+ }
469
+ let defaultInstaller = null;
470
+ export function getHookInstaller() {
471
+ if (!defaultInstaller)
472
+ defaultInstaller = new SessionHookInstaller();
473
+ return defaultInstaller;
474
+ }
475
+ //# sourceMappingURL=session-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-hooks.js","sourceRoot":"","sources":["../../src/brain/session-hooks.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,gFAAgF;AAChF,mFAAmF;AACnF,EAAE;AACF,0EAA0E;AAC1E,EAAE;AACF,8DAA8D;AAC9D,6DAA6D;AAC7D,0DAA0D;AAC1D,yDAAyD;AACzD,wCAAwC;AACxC,6CAA6C;AAC7C,6CAA6C;AAC7C,uCAAuC;AACvC,6CAA6C;AAC7C,oFAAoF;AACpF,EAAE;AACF,6EAA6E;AAE7E,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAOzB,MAAM,qBAAqB,GAAG,kCAAkC,CAAC;AACjE,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAC7C,MAAM,uBAAuB,GAAG;IAC9B,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,iCAAiC,EAAE,KAAK,EAAE,SAAS,CAAC;CAClE,CAAC;AAEF,MAAM,OAAO,oBAAoB;IAC/B,wDAAwD;IACxD,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,MAAM,QAAQ,GAAgB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAE1B,MAAM,MAAM,GAAiD;YAC3D,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,EAAE;YAC/F,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,EAAE;YACjI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE;YAC9G,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,EAAE;YACrG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE;YACvF,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE;YACjG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE;YAChG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE;YACxF,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,EAAE;YACzG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,yBAAyB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE;SAClI,CAAC;QAEF,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,SAAS,CAAC,UAAkB;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAgB,EAAE,CAAC;QACjC,MAAM,MAAM,GAAgD,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAkB,EAAE,CAAC;QAEhC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBACvD,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBACrB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,4CAA4C,EAAE,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ;YACR,QAAQ;YACR,MAAM;YACN,KAAK;YACL,WAAW,EAAE,QAAQ,CAAC,MAAM;YAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC/B,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,KAAK,CAAC,MAAM,CAAC,KAAgB,EAAE,UAAkB;QAC/C,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,aAAa,CAAC,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC7D,KAAK,QAAQ,CAAC,CAAM,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YACzD,KAAK,OAAO,CAAC,CAAO,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACxD,KAAK,UAAU,CAAC,CAAI,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC3D,KAAK,OAAO,CAAC,CAAO,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACxD,KAAK,WAAW,CAAC,CAAG,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC3D,KAAK,UAAU,CAAC,CAAI,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC3D,KAAK,UAAU,CAAC,CAAI,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1D,KAAK,OAAO,CAAC,CAAO,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACxD,KAAK,SAAS,CAAC,CAAK,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1D,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,MAAM,CAAC,KAAgB,EAAE,UAAkB;QAC/C,qEAAqE;QACrE,oFAAoF;QACpF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;oBAC1E,+BAA+B;oBAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;wBAC9C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+EAA+E;IAEvE,gBAAgB,CAAC,UAAkB;;QACzC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACjE,MAAM,KAAK,GAAkB,EAAE,CAAC;QAEhC,IAAI,CAAC;YACH,IAAI,QAAQ,GAAQ,EAAE,CAAC;YACvB,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,CAAC;YAED,QAAQ,CAAC,KAAK,KAAd,QAAQ,CAAC,KAAK,GAAK,EAAE,EAAC;YACtB,MAAA,QAAQ,CAAC,KAAK,EAAC,YAAY,QAAZ,YAAY,GAAK,EAAE,EAAC;YAEnC,MAAM,QAAQ,GAAI,QAAQ,CAAC,KAAK,CAAC,YAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC/D,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAC9D,CAAC;YAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,KAAK,CAAC,YAAsB,CAAC,IAAI,CAAC;oBAC1C,IAAI,EAAE,2BAA2B;oBACjC,OAAO,EAAE,qBAAqB;oBAC9B,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,eAAe;gBACtB,QAAQ,EAAE,eAAe;gBACzB,WAAW,EAAE,YAAY;gBACzB,OAAO,EAAE,qBAAqB;gBAC9B,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,YAAY,CAAC,UAAkB;QACrC,MAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAEjD,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,sEAAsE;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,QAAQ;YACrB,OAAO,EAAE,qBAAqB;YAC9B,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI,IAAI,EAAE;SACxB,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,uBAAuB,CAAC,OAAO;YACxC,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI,IAAI,EAAE;SACxB,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,WAAW,CAAC,UAAkB;QACpC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,wBAAwB,EAAE,UAAU,EAAE,yBAAyB,CAAC;YACvI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,wBAAwB,EAAE,UAAU,EAAE,yBAAyB,CAAC;YACnJ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,wBAAwB,EAAE,UAAU,EAAE,yBAAyB,CAAC;SAC7H,CAAC;QAEF,MAAM,KAAK,GAAkB,EAAE,CAAC;QAEhC,KAAK,MAAM,YAAY,IAAI,UAAU,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAAE,SAAS;YAEhD,IAAI,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBAE/C,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,OAAO;oBACd,KAAK,EAAE,eAAe;oBACtB,QAAQ,EAAE,kBAAkB;oBAC5B,WAAW,EAAE,YAAY;oBACzB,OAAO,EAAE,uBAAuB,CAAC,OAAO;oBACxC,MAAM,EAAE,IAAI;oBACZ,WAAW,EAAE,IAAI,IAAI,EAAE;iBACxB,CAAC,CAAC;gBACH,MAAM,CAAC,2BAA2B;YACpC,CAAC;YAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;QAED,0BAA0B;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,WAAW;YACxB,OAAO,EAAE,qBAAqB;YAC9B,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI,IAAI,EAAE;SACxB,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,cAAc,CAAC,UAAkB;QACvC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAkB,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,QAAQ;YACrB,OAAO,EAAE,qBAAqB;YAC9B,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI,IAAI,EAAE;SACxB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QACzD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,uBAAuB,CAAC,OAAO;YACxC,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI,IAAI,EAAE;SACxB,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,WAAW,CAAC,UAAkB;QACpC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACzD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzD,IAAI,GAAG,GAAQ,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,GAAG,GAAG,EAAE,CAAC;YAAC,CAAC;QAClF,CAAC;QAED,GAAG,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QAClD,GAAG,CAAC,WAAW,KAAf,GAAG,CAAC,WAAW,GAAK,EAAE,EAAC;QACvB,GAAG,CAAC,WAAW,CAAC,qBAAqB,CAAC,GAAG,uBAAuB,CAAC;QAEjE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAExD,OAAO,CAAC;gBACN,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,eAAe;gBACtB,QAAQ,EAAE,aAAa;gBACvB,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,qBAAqB;gBAC9B,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,UAAkB;QACvC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QACnE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9D,IAAI,GAAG,GAAQ,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,GAAG,GAAG,EAAE,CAAC;YAAC,CAAC;QACvF,CAAC;QAED,GAAG,CAAC,UAAU,KAAd,GAAG,CAAC,UAAU,GAAK,EAAE,EAAC;QACtB,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAAC,GAAG,uBAAuB,CAAC;QAChE,GAAG,CAAC,gBAAgB,GAAG,qBAAqB,CAAC;QAE7C,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7D,OAAO,CAAC;gBACN,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,eAAe;gBACtB,QAAQ,EAAE,eAAe;gBACzB,WAAW,EAAE,YAAY;gBACzB,OAAO,EAAE,qBAAqB;gBAC9B,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,UAAkB;QACvC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QACnE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9D,IAAI,GAAG,GAAQ,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,GAAG,GAAG,EAAE,CAAC;YAAC,CAAC;QACvF,CAAC;QAED,GAAG,CAAC,UAAU,KAAd,GAAG,CAAC,UAAU,GAAK,EAAE,EAAC;QACtB,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAAC,GAAG,uBAAuB,CAAC;QAEhE,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7D,OAAO,CAAC;gBACN,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,eAAe;gBACtB,QAAQ,EAAE,eAAe;gBACzB,WAAW,EAAE,YAAY;gBACzB,OAAO,EAAE,uBAAuB,CAAC,OAAO;gBACxC,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,UAAkB;QACtC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC;SACxC,CAAC;QAEF,MAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,UAAU;oBACjB,KAAK,EAAE,eAAe;oBACtB,QAAQ,EAAE,kBAAkB;oBAC5B,WAAW,EAAE,OAAO;oBACpB,OAAO,EAAE,uBAAuB,CAAC,OAAO;oBACxC,MAAM,EAAE,IAAI;oBACZ,WAAW,EAAE,IAAI,IAAI,EAAE;iBACxB,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,WAAW,CAAC,UAAkB;QACpC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;QAE/D,8DAA8D;QAC9D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,qFAAqF,CAAC,CAAC;QAEtH,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC5C,GAAG,IAAI,8CAA8C,YAAY,IAAI,CAAC;YACtE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,CAAC;gBACN,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,eAAe;gBACtB,QAAQ,EAAE,aAAa;gBACvB,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,qBAAqB;gBAC9B,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,UAAkB;QACtC,6EAA6E;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACnD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAElE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,2BAA2B,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,+BAA+B;YAC/B,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvC,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,cAAc,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QAED,OAAO,CAAC;gBACN,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,eAAe;gBACtB,QAAQ,EAAE,gBAAgB;gBAC1B,WAAW,EAAE,SAAS;gBACtB,OAAO,EAAE,qBAAqB;gBAC9B,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IAE/E,8FAA8F;IACtF,aAAa,CAAC,QAAgB,EAAE,MAAgC,YAAY;QAClF,IAAI,GAAG,GAAQ,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,GAAG,GAAG,EAAE,CAAC;YAAC,CAAC;QACnF,CAAC;QACD,GAAG,CAAC,GAAG,MAAP,GAAG,CAAC,GAAG,IAAM,EAAE,EAAC;QAChB,GAAG,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,GAAG,uBAAuB,CAAC;QAC1D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEO,kBAAkB;QACxB,OAAO;;;;;;;;;;;;CAYV,CAAC;IACA,CAAC;IAEO,mBAAmB,CAAC,SAAiB;QAC3C,OAAO,+BAA+B,SAAS;;;;;;CAMlD,CAAC;IACA,CAAC;IAEO,2BAA2B;QACjC,OAAO;;;;;;CAMV,CAAC;IACA,CAAC;CACF;AAED,IAAI,gBAAgB,GAAgC,IAAI,CAAC;AAEzD,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,gBAAgB;QAAE,gBAAgB,GAAG,IAAI,oBAAoB,EAAE,CAAC;IACrE,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,100 @@
1
+ export interface CacheEntry<T = unknown> {
2
+ key: string;
3
+ value: T;
4
+ tier: 'hot' | 'warm' | 'cold';
5
+ createdAt: number;
6
+ lastAccess: number;
7
+ accessCount: number;
8
+ ttl: number;
9
+ size: number;
10
+ compressed: boolean;
11
+ tags: string[];
12
+ }
13
+ export interface CacheConfig {
14
+ maxHotEntries: number;
15
+ maxWarmEntries: number;
16
+ maxColdEntries: number;
17
+ defaultTTL: number;
18
+ hotPromotionThreshold: number;
19
+ coldDemotionThreshold: number;
20
+ compressionThreshold: number;
21
+ enablePrefetch: boolean;
22
+ maxMemoryMB: number;
23
+ }
24
+ export interface CacheStats {
25
+ hotEntries: number;
26
+ warmEntries: number;
27
+ coldEntries: number;
28
+ totalEntries: number;
29
+ hits: number;
30
+ misses: number;
31
+ hitRate: number;
32
+ evictions: number;
33
+ promotions: number;
34
+ demotions: number;
35
+ memoryUsageMB: number;
36
+ prefetchHits: number;
37
+ avgAccessTime: number;
38
+ }
39
+ export interface PrefetchHint {
40
+ key: string;
41
+ probability: number;
42
+ basedOn: string[];
43
+ }
44
+ export declare class SmartCache {
45
+ private hot;
46
+ private warm;
47
+ private cold;
48
+ private config;
49
+ private accessLog;
50
+ private prefetchGraph;
51
+ private hits;
52
+ private misses;
53
+ private evictions;
54
+ private promotions;
55
+ private demotions;
56
+ private prefetchHits;
57
+ private totalAccessTime;
58
+ private accessTimeCount;
59
+ constructor(config?: Partial<CacheConfig>);
60
+ get<T = unknown>(key: string): T | undefined;
61
+ set<T = unknown>(key: string, value: T, options?: {
62
+ ttl?: number;
63
+ tags?: string[];
64
+ tier?: 'hot' | 'warm';
65
+ }): void;
66
+ delete(key: string): boolean;
67
+ has(key: string): boolean;
68
+ clear(): void;
69
+ getMany<T = unknown>(keys: string[]): Map<string, T>;
70
+ setMany<T = unknown>(entries: Array<{
71
+ key: string;
72
+ value: T;
73
+ ttl?: number;
74
+ }>): void;
75
+ getByTag<T = unknown>(tag: string): Map<string, T>;
76
+ invalidateByTag(tag: string): number;
77
+ getOrCompute<T>(key: string, compute: () => T | Promise<T>, options?: {
78
+ ttl?: number;
79
+ tags?: string[];
80
+ }): Promise<T>;
81
+ private promote;
82
+ private enforceHotLimit;
83
+ private enforceWarmLimit;
84
+ private enforceColdLimit;
85
+ private findLeastRecentlyUsed;
86
+ private isExpired;
87
+ private trackAccess;
88
+ private triggerPrefetch;
89
+ getPrefetchHints(key: string, limit?: number): PrefetchHint[];
90
+ cleanup(): number;
91
+ demoteStale(): number;
92
+ private recordAccessTime;
93
+ stats(): CacheStats;
94
+ private estimateMemory;
95
+ keys(): string[];
96
+ size(): number;
97
+ getConfig(): CacheConfig;
98
+ updateConfig(updates: Partial<CacheConfig>): void;
99
+ }
100
+ //# sourceMappingURL=smart-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-cache.d.ts","sourceRoot":"","sources":["../../src/brain/smart-cache.ts"],"names":[],"mappings":"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"}