@theihtisham/agent-shadow-brain 5.1.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.
- package/README.md +1159 -1095
- package/dist/adapters/copilot.d.ts +14 -0
- package/dist/adapters/copilot.d.ts.map +1 -0
- package/dist/adapters/copilot.js +93 -0
- package/dist/adapters/copilot.js.map +1 -0
- package/dist/adapters/cursor.d.ts +13 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +96 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/index.d.ts +4 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +7 -3
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/windsurf.d.ts +14 -0
- package/dist/adapters/windsurf.d.ts.map +1 -0
- package/dist/adapters/windsurf.js +107 -0
- package/dist/adapters/windsurf.js.map +1 -0
- package/dist/brain/global-brain.d.ts +56 -0
- package/dist/brain/global-brain.d.ts.map +1 -0
- package/dist/brain/global-brain.js +324 -0
- package/dist/brain/global-brain.js.map +1 -0
- package/dist/brain/l0-cache.d.ts +40 -0
- package/dist/brain/l0-cache.d.ts.map +1 -0
- package/dist/brain/l0-cache.js +176 -0
- package/dist/brain/l0-cache.js.map +1 -0
- package/dist/brain/mcp-server.d.ts +4 -0
- package/dist/brain/mcp-server.d.ts.map +1 -1
- package/dist/brain/mcp-server.js +91 -0
- package/dist/brain/mcp-server.js.map +1 -1
- package/dist/brain/session-hooks.d.ts +28 -0
- package/dist/brain/session-hooks.d.ts.map +1 -0
- package/dist/brain/session-hooks.js +475 -0
- package/dist/brain/session-hooks.js.map +1 -0
- package/dist/brain/subconscious.d.ts +34 -0
- package/dist/brain/subconscious.d.ts.map +1 -0
- package/dist/brain/subconscious.js +275 -0
- package/dist/brain/subconscious.js.map +1 -0
- package/dist/cli.js +167 -2
- package/dist/cli.js.map +1 -1
- package/dist/types.d.ts +128 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +46 -10
|
@@ -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":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AgentTool, SubconsciousConfig, SubconsciousBriefing, SubconsciousStats } from '../types.js';
|
|
2
|
+
import { GlobalBrain } from './global-brain.js';
|
|
3
|
+
export declare class SubconsciousEngine {
|
|
4
|
+
private config;
|
|
5
|
+
private brain;
|
|
6
|
+
private stats;
|
|
7
|
+
constructor(config?: Partial<SubconsciousConfig>, brain?: GlobalBrain);
|
|
8
|
+
/** Generate a session-start briefing for the agent — proactive context injection */
|
|
9
|
+
generateBriefing(opts: {
|
|
10
|
+
agentTool: AgentTool;
|
|
11
|
+
projectDir: string;
|
|
12
|
+
projectId?: string;
|
|
13
|
+
projectName?: string;
|
|
14
|
+
currentTask?: string;
|
|
15
|
+
}): Promise<SubconsciousBriefing>;
|
|
16
|
+
/** Get current stats */
|
|
17
|
+
getStats(): SubconsciousStats;
|
|
18
|
+
/** Update config at runtime */
|
|
19
|
+
configure(patch: Partial<SubconsciousConfig>): void;
|
|
20
|
+
getConfig(): SubconsciousConfig;
|
|
21
|
+
private fetchSection;
|
|
22
|
+
private fetchCrossAgentInsights;
|
|
23
|
+
private fetchProjectStateSummary;
|
|
24
|
+
private fetchSimilarWork;
|
|
25
|
+
private fetchTopPatterns;
|
|
26
|
+
private extractKeywords;
|
|
27
|
+
private formatEntry;
|
|
28
|
+
private assembleBriefing;
|
|
29
|
+
private trimToBudget;
|
|
30
|
+
private emptyBriefing;
|
|
31
|
+
private runningAvg;
|
|
32
|
+
}
|
|
33
|
+
export declare function getSubconscious(config?: Partial<SubconsciousConfig>): SubconsciousEngine;
|
|
34
|
+
//# sourceMappingURL=subconscious.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subconscious.d.ts","sourceRoot":"","sources":["../../src/brain/subconscious.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAkB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAkBhE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,KAAK,CAAoB;gBAErB,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM,EAAE,KAAK,CAAC,EAAE,WAAW;IAazE,oFAAoF;IAC9E,gBAAgB,CAAC,IAAI,EAAE;QAC3B,SAAS,EAAE,SAAS,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA4EjC,wBAAwB;IACxB,QAAQ,IAAI,iBAAiB;IAI7B,+BAA+B;IAC/B,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAInD,SAAS,IAAI,kBAAkB;IAM/B,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,gBAAgB;IA8CxB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,UAAU;CAGnB;AAID,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAIxF"}
|