@theihtisham/agent-shadow-brain 1.2.0 → 2.1.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 +837 -73
  2. package/dist/adapters/aider.d.ts +11 -0
  3. package/dist/adapters/aider.d.ts.map +1 -0
  4. package/dist/adapters/aider.js +149 -0
  5. package/dist/adapters/aider.js.map +1 -0
  6. package/dist/adapters/index.d.ts +3 -1
  7. package/dist/adapters/index.d.ts.map +1 -1
  8. package/dist/adapters/index.js +5 -3
  9. package/dist/adapters/index.js.map +1 -1
  10. package/dist/adapters/roo-code.d.ts +14 -0
  11. package/dist/adapters/roo-code.d.ts.map +1 -0
  12. package/dist/adapters/roo-code.js +186 -0
  13. package/dist/adapters/roo-code.js.map +1 -0
  14. package/dist/brain/adr-engine.d.ts +58 -0
  15. package/dist/brain/adr-engine.d.ts.map +1 -0
  16. package/dist/brain/adr-engine.js +400 -0
  17. package/dist/brain/adr-engine.js.map +1 -0
  18. package/dist/brain/code-similarity.d.ts +43 -0
  19. package/dist/brain/code-similarity.d.ts.map +1 -0
  20. package/dist/brain/code-similarity.js +227 -0
  21. package/dist/brain/code-similarity.js.map +1 -0
  22. package/dist/brain/context-completion.d.ts +39 -0
  23. package/dist/brain/context-completion.d.ts.map +1 -0
  24. package/dist/brain/context-completion.js +851 -0
  25. package/dist/brain/context-completion.js.map +1 -0
  26. package/dist/brain/dependency-graph.d.ts +35 -0
  27. package/dist/brain/dependency-graph.d.ts.map +1 -0
  28. package/dist/brain/dependency-graph.js +310 -0
  29. package/dist/brain/dependency-graph.js.map +1 -0
  30. package/dist/brain/learning-engine.d.ts +54 -0
  31. package/dist/brain/learning-engine.d.ts.map +1 -0
  32. package/dist/brain/learning-engine.js +855 -0
  33. package/dist/brain/learning-engine.js.map +1 -0
  34. package/dist/brain/mcp-server.d.ts +30 -0
  35. package/dist/brain/mcp-server.d.ts.map +1 -0
  36. package/dist/brain/mcp-server.js +408 -0
  37. package/dist/brain/mcp-server.js.map +1 -0
  38. package/dist/brain/multi-project.d.ts +13 -0
  39. package/dist/brain/multi-project.d.ts.map +1 -0
  40. package/dist/brain/multi-project.js +163 -0
  41. package/dist/brain/multi-project.js.map +1 -0
  42. package/dist/brain/neural-mesh.d.ts +69 -0
  43. package/dist/brain/neural-mesh.d.ts.map +1 -0
  44. package/dist/brain/neural-mesh.js +677 -0
  45. package/dist/brain/neural-mesh.js.map +1 -0
  46. package/dist/brain/orchestrator.d.ts +111 -1
  47. package/dist/brain/orchestrator.d.ts.map +1 -1
  48. package/dist/brain/orchestrator.js +302 -0
  49. package/dist/brain/orchestrator.js.map +1 -1
  50. package/dist/brain/perf-profiler.d.ts +14 -0
  51. package/dist/brain/perf-profiler.d.ts.map +1 -0
  52. package/dist/brain/perf-profiler.js +289 -0
  53. package/dist/brain/perf-profiler.js.map +1 -0
  54. package/dist/brain/semantic-analyzer.d.ts +46 -0
  55. package/dist/brain/semantic-analyzer.d.ts.map +1 -0
  56. package/dist/brain/semantic-analyzer.js +496 -0
  57. package/dist/brain/semantic-analyzer.js.map +1 -0
  58. package/dist/brain/team-mode.d.ts +27 -0
  59. package/dist/brain/team-mode.d.ts.map +1 -0
  60. package/dist/brain/team-mode.js +262 -0
  61. package/dist/brain/team-mode.js.map +1 -0
  62. package/dist/brain/type-safety.d.ts +13 -0
  63. package/dist/brain/type-safety.d.ts.map +1 -0
  64. package/dist/brain/type-safety.js +217 -0
  65. package/dist/brain/type-safety.js.map +1 -0
  66. package/dist/cli.js +593 -3
  67. package/dist/cli.js.map +1 -1
  68. package/dist/index.d.ts +15 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +18 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/types.d.ts +228 -0
  73. package/dist/types.d.ts.map +1 -1
  74. package/package.json +2 -2
@@ -0,0 +1,11 @@
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { AgentTool, AgentPaths, AgentActivity, BrainInsight } from '../types.js';
3
+ export declare class AiderAdapter extends BaseAdapter {
4
+ name: AgentTool;
5
+ displayName: string;
6
+ detect(): Promise<boolean>;
7
+ getConfigPaths(): AgentPaths;
8
+ readActivity(): Promise<AgentActivity[]>;
9
+ injectContext(insight: BrainInsight): Promise<boolean>;
10
+ }
11
+ //# sourceMappingURL=aider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aider.d.ts","sourceRoot":"","sources":["../../src/adapters/aider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEjF,qBAAa,YAAa,SAAQ,WAAW;IAC3C,IAAI,EAAE,SAAS,CAAW;IAC1B,WAAW,SAAW;IAEhB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAmBhC,cAAc,IAAI,UAAU;IAQtB,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IA2DxC,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;CAwD7D"}
@@ -0,0 +1,149 @@
1
+ // src/adapters/aider.ts — Adapter for Aider (AI pair programming CLI)
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { execSync } from 'child_process';
5
+ import { BaseAdapter } from './base-adapter.js';
6
+ export class AiderAdapter extends BaseAdapter {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.name = 'aider';
10
+ this.displayName = 'Aider';
11
+ }
12
+ async detect() {
13
+ // Check for .aider.conf.yml in project
14
+ if (fs.existsSync(path.join(this.projectDir, '.aider.conf.yml')))
15
+ return true;
16
+ // Check for .aiderignore
17
+ if (fs.existsSync(path.join(this.projectDir, '.aiderignore')))
18
+ return true;
19
+ // Check for CONVENTIONS.md (common aider convention file)
20
+ if (fs.existsSync(path.join(this.projectDir, 'CONVENTIONS.md')))
21
+ return true;
22
+ // Try running aider --version as last resort
23
+ try {
24
+ execSync('aider --version', { timeout: 3000, encoding: 'utf-8' });
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ getConfigPaths() {
32
+ return {
33
+ memoryDir: this.projectDir, // Aider reads from project root
34
+ rulesDir: this.projectDir, // Conventions/rules at project root
35
+ configFile: path.join(this.projectDir, '.aider.conf.yml'),
36
+ };
37
+ }
38
+ async readActivity() {
39
+ const activities = [];
40
+ // Aider stores chat history in .aider.chat.history.md and .aider.input.history
41
+ const chatHistoryFile = path.join(this.projectDir, '.aider.chat.history.md');
42
+ const inputFile = path.join(this.projectDir, '.aider.input.history');
43
+ // Parse chat history
44
+ if (fs.existsSync(chatHistoryFile)) {
45
+ try {
46
+ const content = fs.readFileSync(chatHistoryFile, 'utf-8');
47
+ const lines = content.split('\n').filter(l => l.trim());
48
+ for (const line of lines.slice(-30)) {
49
+ // Chat history lines typically contain timestamps and messages
50
+ if (line.startsWith('#') || line.length === 0)
51
+ continue;
52
+ activities.push({
53
+ timestamp: new Date(),
54
+ type: 'conversation',
55
+ detail: line.slice(0, 200),
56
+ });
57
+ }
58
+ }
59
+ catch {
60
+ // Skip unreadable history
61
+ }
62
+ }
63
+ // Parse input history for file operations
64
+ if (fs.existsSync(inputFile)) {
65
+ try {
66
+ const content = fs.readFileSync(inputFile, 'utf-8');
67
+ const lines = content.split('\n').filter(l => l.trim());
68
+ for (const line of lines.slice(-20)) {
69
+ if (line.startsWith('/add') || line.startsWith('/drop')) {
70
+ const filePath = line.split(/\s+/)[1];
71
+ activities.push({
72
+ timestamp: new Date(),
73
+ type: line.startsWith('/add') ? 'file_read' : 'file_edit',
74
+ detail: line,
75
+ file: filePath,
76
+ });
77
+ }
78
+ else if (line.startsWith('/')) {
79
+ activities.push({
80
+ timestamp: new Date(),
81
+ type: 'command',
82
+ detail: line,
83
+ });
84
+ }
85
+ }
86
+ }
87
+ catch {
88
+ // Skip unreadable input history
89
+ }
90
+ }
91
+ return activities;
92
+ }
93
+ async injectContext(insight) {
94
+ const conventionsFile = path.join(this.projectDir, 'CONVENTIONS.md');
95
+ const priorityLabel = {
96
+ critical: 'CRITICAL',
97
+ high: 'HIGH PRIORITY',
98
+ medium: 'SUGGESTION',
99
+ low: 'INFO',
100
+ };
101
+ const insightSection = `
102
+ ## Shadow Brain — ${priorityLabel[insight.priority] ?? insight.priority}
103
+
104
+ > Type: ${insight.type} | Priority: ${insight.priority} | ${insight.timestamp.toISOString()}
105
+
106
+ ${insight.content}
107
+
108
+ ${insight.files?.length ? `### Affected Files\n${insight.files.map(f => `- \`${f}\``).join('\n')}` : ''}
109
+ `;
110
+ try {
111
+ if (fs.existsSync(conventionsFile)) {
112
+ const existing = fs.readFileSync(conventionsFile, 'utf-8');
113
+ // Replace existing section for same priority level or append
114
+ const sectionHeader = `## Shadow Brain — ${priorityLabel[insight.priority] ?? insight.priority}`;
115
+ if (existing.includes(sectionHeader)) {
116
+ const parts = existing.split(sectionHeader);
117
+ // Find where this section ends (next ## heading or end of file)
118
+ const afterHeader = parts.slice(1).join(sectionHeader);
119
+ const nextSection = afterHeader.indexOf('\n## ');
120
+ let replacement;
121
+ if (nextSection !== -1) {
122
+ replacement = parts[0] + insightSection + afterHeader.slice(nextSection);
123
+ }
124
+ else {
125
+ replacement = parts[0] + insightSection;
126
+ }
127
+ fs.writeFileSync(conventionsFile, replacement, 'utf-8');
128
+ }
129
+ else {
130
+ fs.writeFileSync(conventionsFile, existing + '\n' + insightSection, 'utf-8');
131
+ }
132
+ }
133
+ else {
134
+ const header = `# Project Conventions
135
+
136
+ <!-- Auto-generated by Agent Shadow Brain -->
137
+ <!-- Aider reads this file to understand project conventions -->
138
+
139
+ `;
140
+ fs.writeFileSync(conventionsFile, header + insightSection, 'utf-8');
141
+ }
142
+ return true;
143
+ }
144
+ catch {
145
+ return false;
146
+ }
147
+ }
148
+ }
149
+ //# sourceMappingURL=aider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aider.js","sourceRoot":"","sources":["../../src/adapters/aider.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,10 @@ import { KiloCodeAdapter } from './kilo-code.js';
4
4
  import { ClineAdapter } from './cline.js';
5
5
  import { OpenCodeAdapter } from './opencode.js';
6
6
  import { CodexAdapter } from './codex.js';
7
+ import { RooCodeAdapter } from './roo-code.js';
8
+ import { AiderAdapter } from './aider.js';
7
9
  export declare const ALL_ADAPTERS: Record<AgentTool, () => AgentAdapter>;
8
10
  export declare function createAdapter(tool: AgentTool): AgentAdapter;
9
11
  export declare function detectRunningAgents(projectDir: string): Promise<AgentAdapter[]>;
10
- export { ClaudeCodeAdapter, KiloCodeAdapter, ClineAdapter, OpenCodeAdapter, CodexAdapter };
12
+ export { ClaudeCodeAdapter, KiloCodeAdapter, ClineAdapter, OpenCodeAdapter, CodexAdapter, RooCodeAdapter, AiderAdapter };
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,YAAY,CAS9D,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,CAI3D;AAED,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAcrF;AAED,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,YAAY,CAS9D,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,CAI3D;AAED,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAcrF;AAED,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC"}
@@ -4,14 +4,16 @@ import { KiloCodeAdapter } from './kilo-code.js';
4
4
  import { ClineAdapter } from './cline.js';
5
5
  import { OpenCodeAdapter } from './opencode.js';
6
6
  import { CodexAdapter } from './codex.js';
7
+ import { RooCodeAdapter } from './roo-code.js';
8
+ import { AiderAdapter } from './aider.js';
7
9
  export const ALL_ADAPTERS = {
8
10
  'claude-code': () => new ClaudeCodeAdapter(),
9
11
  'kilo-code': () => new KiloCodeAdapter(),
10
12
  'cline': () => new ClineAdapter(),
11
13
  'opencode': () => new OpenCodeAdapter(),
12
14
  'codex': () => new CodexAdapter(),
13
- 'roo-code': () => new KiloCodeAdapter(), // Roo Code is Kilo Code fork
14
- 'aider': () => new OpenCodeAdapter(), // Similar CLI pattern
15
+ 'roo-code': () => new RooCodeAdapter(),
16
+ 'aider': () => new AiderAdapter(),
15
17
  'cursor': () => new ClineAdapter(), // Similar VS Code pattern
16
18
  };
17
19
  export function createAdapter(tool) {
@@ -34,5 +36,5 @@ export async function detectRunningAgents(projectDir) {
34
36
  }
35
37
  return detected;
36
38
  }
37
- export { ClaudeCodeAdapter, KiloCodeAdapter, ClineAdapter, OpenCodeAdapter, CodexAdapter };
39
+ export { ClaudeCodeAdapter, KiloCodeAdapter, ClineAdapter, OpenCodeAdapter, CodexAdapter, RooCodeAdapter, AiderAdapter };
38
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAGxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,CAAC,MAAM,YAAY,GAA0C;IACjE,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,iBAAiB,EAAE;IAC5C,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;IACxC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IACjC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;IACvC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IACjC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE,EAAE,6BAA6B;IACtE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE,EAAK,sBAAsB;IAC/D,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE,EAAO,0BAA0B;CACpE,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IAC7D,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IAC1D,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QACzB,OAAe,CAAC,UAAU,GAAG,UAAU,CAAC;QACzC,IAAI,CAAC;YACH,IAAI,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAGxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,CAAC,MAAM,YAAY,GAA0C;IACjE,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,iBAAiB,EAAE;IAC5C,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;IACxC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IACjC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;IACvC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IACjC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;IACtC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IACjC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE,EAAO,0BAA0B;CACpE,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IAC7D,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IAC1D,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QACzB,OAAe,CAAC,UAAU,GAAG,UAAU,CAAC;QACzC,IAAI,CAAC;YACH,IAAI,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { AgentTool, AgentPaths, AgentActivity, BrainInsight } from '../types.js';
3
+ export declare class RooCodeAdapter extends BaseAdapter {
4
+ name: AgentTool;
5
+ displayName: string;
6
+ private getGlobalStorageDir;
7
+ private getVSCodeExtensionsDir;
8
+ detect(): Promise<boolean>;
9
+ getConfigPaths(): AgentPaths;
10
+ readActivity(): Promise<AgentActivity[]>;
11
+ injectContext(insight: BrainInsight): Promise<boolean>;
12
+ private mapTool;
13
+ }
14
+ //# sourceMappingURL=roo-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roo-code.d.ts","sourceRoot":"","sources":["../../src/adapters/roo-code.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEjF,qBAAa,cAAe,SAAQ,WAAW;IAC7C,IAAI,EAAE,SAAS,CAAc;IAC7B,WAAW,SAAc;IAEzB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,sBAAsB;IAUxB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IA0BhC,cAAc,IAAI,UAAU;IAStB,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAgDxC,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAyD5D,OAAO,CAAC,OAAO;CAYhB"}
@@ -0,0 +1,186 @@
1
+ // src/adapters/roo-code.ts — Adapter for Roo Code (VS Code extension, fork of Cline)
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import * as os from 'os';
5
+ import { BaseAdapter } from './base-adapter.js';
6
+ export class RooCodeAdapter extends BaseAdapter {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.name = 'roo-code';
10
+ this.displayName = 'Roo Code';
11
+ }
12
+ getGlobalStorageDir() {
13
+ const platform = os.platform();
14
+ if (platform === 'win32') {
15
+ return path.join(os.homedir(), 'AppData', 'Roaming', 'Code', 'User', 'globalStorage', 'rooveterinaryinc.roo-cline');
16
+ }
17
+ else if (platform === 'darwin') {
18
+ return path.join(os.homedir(), 'Library', 'Application Support', 'Code', 'User', 'globalStorage', 'rooveterinaryinc.roo-cline');
19
+ }
20
+ return path.join(os.homedir(), '.config', 'Code', 'User', 'globalStorage', 'rooveterinaryinc.roo-cline');
21
+ }
22
+ getVSCodeExtensionsDir() {
23
+ const platform = os.platform();
24
+ if (platform === 'win32') {
25
+ return path.join(os.homedir(), '.vscode', 'extensions');
26
+ }
27
+ else if (platform === 'darwin') {
28
+ return path.join(os.homedir(), '.vscode', 'extensions');
29
+ }
30
+ return path.join(os.homedir(), '.vscode', 'extensions');
31
+ }
32
+ async detect() {
33
+ // Check for .roo/ directory in project
34
+ if (fs.existsSync(path.join(this.projectDir, '.roo')))
35
+ return true;
36
+ // Check for .roo/rules/ directory
37
+ if (fs.existsSync(path.join(this.projectDir, '.roo', 'rules')))
38
+ return true;
39
+ // Check for VS Code extension installed
40
+ const extDir = this.getVSCodeExtensionsDir();
41
+ if (fs.existsSync(extDir)) {
42
+ try {
43
+ const entries = fs.readdirSync(extDir);
44
+ if (entries.some(e => e.startsWith('rooveterinaryinc.roo-cline-'))) {
45
+ return true;
46
+ }
47
+ }
48
+ catch {
49
+ // Permission error, skip
50
+ }
51
+ }
52
+ // Check global storage directory
53
+ if (fs.existsSync(this.getGlobalStorageDir()))
54
+ return true;
55
+ return false;
56
+ }
57
+ getConfigPaths() {
58
+ return {
59
+ memoryDir: path.join(this.projectDir, '.roo'),
60
+ rulesDir: path.join(this.projectDir, '.roo', 'rules'),
61
+ conversationDir: path.join(this.getGlobalStorageDir(), 'tasks'),
62
+ configFile: path.join(this.projectDir, '.roo', 'config.json'),
63
+ };
64
+ }
65
+ async readActivity() {
66
+ const activities = [];
67
+ const tasksDir = path.join(this.getGlobalStorageDir(), 'tasks');
68
+ if (!fs.existsSync(tasksDir))
69
+ return activities;
70
+ try {
71
+ const taskDirs = fs.readdirSync(tasksDir)
72
+ .map(d => path.join(tasksDir, d))
73
+ .filter(d => {
74
+ try {
75
+ return fs.statSync(d).isDirectory();
76
+ }
77
+ catch {
78
+ return false;
79
+ }
80
+ })
81
+ .sort((a, b) => {
82
+ try {
83
+ return fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs;
84
+ }
85
+ catch {
86
+ return 0;
87
+ }
88
+ })
89
+ .slice(0, 5);
90
+ for (const taskDir of taskDirs) {
91
+ const historyFile = path.join(taskDir, 'api_conversation_history.json');
92
+ if (fs.existsSync(historyFile)) {
93
+ try {
94
+ const data = JSON.parse(fs.readFileSync(historyFile, 'utf-8'));
95
+ for (const msg of (data || []).slice(-20)) {
96
+ if (msg.role === 'assistant' && Array.isArray(msg.content)) {
97
+ for (const block of msg.content) {
98
+ if (block.type === 'tool_use') {
99
+ activities.push({
100
+ timestamp: new Date(),
101
+ type: this.mapTool(block.name),
102
+ detail: `${block.name}: ${JSON.stringify(block.input || {}).slice(0, 200)}`,
103
+ file: block.input?.path,
104
+ });
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ catch {
111
+ // Skip malformed task files
112
+ }
113
+ }
114
+ }
115
+ }
116
+ catch {
117
+ // Permission or other filesystem errors
118
+ }
119
+ return activities;
120
+ }
121
+ async injectContext(insight) {
122
+ const rulesDir = path.join(this.projectDir, '.roo', 'rules');
123
+ try {
124
+ fs.mkdirSync(rulesDir, { recursive: true });
125
+ const rulesFile = path.join(rulesDir, 'shadow-brain.md');
126
+ const priorityLabel = {
127
+ critical: 'CRITICAL',
128
+ high: 'HIGH PRIORITY',
129
+ medium: 'SUGGESTION',
130
+ low: 'INFO',
131
+ };
132
+ const ruleContent = `---
133
+ description: Shadow Brain insights for Roo Code
134
+ globs:
135
+ alwaysApply: true
136
+ ---
137
+
138
+ # Shadow Brain — ${priorityLabel[insight.priority] ?? insight.priority}
139
+
140
+ **Type:** ${insight.type}
141
+ **Priority:** ${insight.priority}
142
+ **Time:** ${insight.timestamp.toISOString()}
143
+ ${insight.files?.length ? `**Files:** ${insight.files.join(', ')}` : ''}
144
+
145
+ ---
146
+
147
+ ${insight.content}
148
+
149
+ ${insight.files?.length ? `## Affected Files\n${insight.files.map(f => `- \`${f}\``).join('\n')}` : ''}
150
+ `;
151
+ // If file exists, append section; otherwise create new file
152
+ if (fs.existsSync(rulesFile)) {
153
+ const existing = fs.readFileSync(rulesFile, 'utf-8');
154
+ // Replace the section for this insight type+priority or append
155
+ const sectionMarker = `## Shadow Brain — ${priorityLabel[insight.priority] ?? insight.priority}`;
156
+ if (existing.includes(sectionMarker)) {
157
+ const before = existing.split(sectionMarker)[0];
158
+ fs.writeFileSync(rulesFile, before + ruleContent, 'utf-8');
159
+ }
160
+ else {
161
+ fs.writeFileSync(rulesFile, existing + '\n\n---\n\n' + ruleContent, 'utf-8');
162
+ }
163
+ }
164
+ else {
165
+ fs.writeFileSync(rulesFile, ruleContent, 'utf-8');
166
+ }
167
+ return true;
168
+ }
169
+ catch {
170
+ return false;
171
+ }
172
+ }
173
+ mapTool(name) {
174
+ if (name.includes('write') || name.includes('edit') || name.includes('replace') || name.includes('apply_diff')) {
175
+ return 'file_edit';
176
+ }
177
+ if (name.includes('read') || name.includes('list') || name.includes('search')) {
178
+ return 'file_read';
179
+ }
180
+ if (name.includes('execute') || name.includes('command') || name.includes('terminal')) {
181
+ return 'command';
182
+ }
183
+ return 'search';
184
+ }
185
+ }
186
+ //# sourceMappingURL=roo-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roo-code.js","sourceRoot":"","sources":["../../src/adapters/roo-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { ADRDecision } from '../types.js';
2
+ export declare class ADREngine {
3
+ private projectDir;
4
+ private llmClient;
5
+ private adrDir;
6
+ constructor(projectDir: string, llmClient: any);
7
+ /**
8
+ * Load all ADR markdown files from the ADR directory.
9
+ * Returns parsed ADRDecision objects sorted by ID.
10
+ */
11
+ loadADRs(): Promise<ADRDecision[]>;
12
+ /**
13
+ * Write an ADR to the docs/adr/ directory in standard markdown format.
14
+ * Filename pattern: NNNN-kebab-case-title.md
15
+ */
16
+ saveADR(adr: ADRDecision): Promise<void>;
17
+ /**
18
+ * Analyse file changes to detect architectural decisions.
19
+ * Uses heuristic rules, and optionally an LLM client for deeper analysis.
20
+ */
21
+ detectDecisions(changes: Array<{
22
+ path: string;
23
+ diff?: string;
24
+ }>): Promise<ADRDecision[]>;
25
+ /**
26
+ * Format an ADRDecision as a standard ADR markdown document.
27
+ */
28
+ private formatADRMd;
29
+ /**
30
+ * Parse a markdown ADR file into an ADRDecision object.
31
+ */
32
+ private parseADR;
33
+ /**
34
+ * Get the next sequence number for ADR filenames.
35
+ */
36
+ private getNextNumber;
37
+ /**
38
+ * Heuristic: detect framework or core library changes.
39
+ */
40
+ private looksLikeFrameworkChange;
41
+ /**
42
+ * Heuristic: detect introduction of new architectural patterns.
43
+ */
44
+ private looksLikeNewPattern;
45
+ /**
46
+ * Heuristic: detect significant refactoring (large diffs with structural changes).
47
+ */
48
+ private looksLikeSignificantRefactor;
49
+ /**
50
+ * Use the LLM client to analyse diffs and detect architectural decisions.
51
+ */
52
+ private detectWithLLM;
53
+ /**
54
+ * Convert a title string to a kebab-case slug for filenames.
55
+ */
56
+ private slugify;
57
+ }
58
+ //# sourceMappingURL=adr-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adr-engine.d.ts","sourceRoot":"","sources":["../../src/brain/adr-engine.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM1C,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,MAAM,CAAS;gBAEX,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;IAkB9C;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAyBxC;;;OAGG;IACG,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAc9C;;;OAGG;IACG,eAAe,CACnB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAC9C,OAAO,CAAC,WAAW,EAAE,CAAC;IA8EzB;;OAEG;IACH,OAAO,CAAC,WAAW;IA4BnB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAwEhB;;OAEG;YACW,aAAa;IAiB3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAsChC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA+BpC;;OAEG;YACW,aAAa;IA2C3B;;OAEG;IACH,OAAO,CAAC,OAAO;CAShB"}