@theihtisham/agent-shadow-brain 1.2.0 → 3.0.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 (117) 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/accessibility-checker.d.ts +10 -0
  15. package/dist/brain/accessibility-checker.d.ts.map +1 -0
  16. package/dist/brain/accessibility-checker.js +379 -0
  17. package/dist/brain/accessibility-checker.js.map +1 -0
  18. package/dist/brain/adr-engine.d.ts +58 -0
  19. package/dist/brain/adr-engine.d.ts.map +1 -0
  20. package/dist/brain/adr-engine.js +400 -0
  21. package/dist/brain/adr-engine.js.map +1 -0
  22. package/dist/brain/api-contract-analyzer.d.ts +19 -0
  23. package/dist/brain/api-contract-analyzer.d.ts.map +1 -0
  24. package/dist/brain/api-contract-analyzer.js +251 -0
  25. package/dist/brain/api-contract-analyzer.js.map +1 -0
  26. package/dist/brain/ast-analyzer.d.ts +23 -0
  27. package/dist/brain/ast-analyzer.d.ts.map +1 -0
  28. package/dist/brain/ast-analyzer.js +462 -0
  29. package/dist/brain/ast-analyzer.js.map +1 -0
  30. package/dist/brain/code-age-analyzer.d.ts +11 -0
  31. package/dist/brain/code-age-analyzer.d.ts.map +1 -0
  32. package/dist/brain/code-age-analyzer.js +152 -0
  33. package/dist/brain/code-age-analyzer.js.map +1 -0
  34. package/dist/brain/code-similarity.d.ts +43 -0
  35. package/dist/brain/code-similarity.d.ts.map +1 -0
  36. package/dist/brain/code-similarity.js +227 -0
  37. package/dist/brain/code-similarity.js.map +1 -0
  38. package/dist/brain/config-drift-detector.d.ts +13 -0
  39. package/dist/brain/config-drift-detector.d.ts.map +1 -0
  40. package/dist/brain/config-drift-detector.js +198 -0
  41. package/dist/brain/config-drift-detector.js.map +1 -0
  42. package/dist/brain/context-completion.d.ts +39 -0
  43. package/dist/brain/context-completion.d.ts.map +1 -0
  44. package/dist/brain/context-completion.js +851 -0
  45. package/dist/brain/context-completion.js.map +1 -0
  46. package/dist/brain/dead-code-eliminator.d.ts +16 -0
  47. package/dist/brain/dead-code-eliminator.d.ts.map +1 -0
  48. package/dist/brain/dead-code-eliminator.js +359 -0
  49. package/dist/brain/dead-code-eliminator.js.map +1 -0
  50. package/dist/brain/dependency-graph.d.ts +35 -0
  51. package/dist/brain/dependency-graph.d.ts.map +1 -0
  52. package/dist/brain/dependency-graph.js +310 -0
  53. package/dist/brain/dependency-graph.js.map +1 -0
  54. package/dist/brain/env-analyzer.d.ts +13 -0
  55. package/dist/brain/env-analyzer.d.ts.map +1 -0
  56. package/dist/brain/env-analyzer.js +277 -0
  57. package/dist/brain/env-analyzer.js.map +1 -0
  58. package/dist/brain/i18n-detector.d.ts +12 -0
  59. package/dist/brain/i18n-detector.d.ts.map +1 -0
  60. package/dist/brain/i18n-detector.js +242 -0
  61. package/dist/brain/i18n-detector.js.map +1 -0
  62. package/dist/brain/learning-engine.d.ts +54 -0
  63. package/dist/brain/learning-engine.d.ts.map +1 -0
  64. package/dist/brain/learning-engine.js +855 -0
  65. package/dist/brain/learning-engine.js.map +1 -0
  66. package/dist/brain/license-compliance.d.ts +13 -0
  67. package/dist/brain/license-compliance.d.ts.map +1 -0
  68. package/dist/brain/license-compliance.js +213 -0
  69. package/dist/brain/license-compliance.js.map +1 -0
  70. package/dist/brain/llm-client.d.ts.map +1 -1
  71. package/dist/brain/llm-client.js +3 -0
  72. package/dist/brain/llm-client.js.map +1 -1
  73. package/dist/brain/mcp-server.d.ts +30 -0
  74. package/dist/brain/mcp-server.d.ts.map +1 -0
  75. package/dist/brain/mcp-server.js +408 -0
  76. package/dist/brain/mcp-server.js.map +1 -0
  77. package/dist/brain/multi-project.d.ts +13 -0
  78. package/dist/brain/multi-project.d.ts.map +1 -0
  79. package/dist/brain/multi-project.js +163 -0
  80. package/dist/brain/multi-project.js.map +1 -0
  81. package/dist/brain/mutation-advisor.d.ts +11 -0
  82. package/dist/brain/mutation-advisor.d.ts.map +1 -0
  83. package/dist/brain/mutation-advisor.js +154 -0
  84. package/dist/brain/mutation-advisor.js.map +1 -0
  85. package/dist/brain/neural-mesh.d.ts +69 -0
  86. package/dist/brain/neural-mesh.d.ts.map +1 -0
  87. package/dist/brain/neural-mesh.js +677 -0
  88. package/dist/brain/neural-mesh.js.map +1 -0
  89. package/dist/brain/orchestrator.d.ts +159 -2
  90. package/dist/brain/orchestrator.d.ts.map +1 -1
  91. package/dist/brain/orchestrator.js +478 -0
  92. package/dist/brain/orchestrator.js.map +1 -1
  93. package/dist/brain/perf-profiler.d.ts +14 -0
  94. package/dist/brain/perf-profiler.d.ts.map +1 -0
  95. package/dist/brain/perf-profiler.js +289 -0
  96. package/dist/brain/perf-profiler.js.map +1 -0
  97. package/dist/brain/semantic-analyzer.d.ts +46 -0
  98. package/dist/brain/semantic-analyzer.d.ts.map +1 -0
  99. package/dist/brain/semantic-analyzer.js +496 -0
  100. package/dist/brain/semantic-analyzer.js.map +1 -0
  101. package/dist/brain/team-mode.d.ts +27 -0
  102. package/dist/brain/team-mode.d.ts.map +1 -0
  103. package/dist/brain/team-mode.js +262 -0
  104. package/dist/brain/team-mode.js.map +1 -0
  105. package/dist/brain/type-safety.d.ts +13 -0
  106. package/dist/brain/type-safety.d.ts.map +1 -0
  107. package/dist/brain/type-safety.js +217 -0
  108. package/dist/brain/type-safety.js.map +1 -0
  109. package/dist/cli.js +998 -3
  110. package/dist/cli.js.map +1 -1
  111. package/dist/index.d.ts +25 -1
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +29 -1
  114. package/dist/index.js.map +1 -1
  115. package/dist/types.d.ts +379 -2
  116. package/dist/types.d.ts.map +1 -1
  117. 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,10 @@
1
+ import { BrainInsight, A11yIssue } from '../types.js';
2
+ export declare class AccessibilityChecker {
3
+ private projectDir;
4
+ constructor(projectDir: string);
5
+ analyzeProject(maxFiles?: number): Promise<BrainInsight[]>;
6
+ analyzeFile(filePath: string): A11yIssue[];
7
+ private issueToInsight;
8
+ private collectTemplateFiles;
9
+ }
10
+ //# sourceMappingURL=accessibility-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessibility-checker.d.ts","sourceRoot":"","sources":["../../src/brain/accessibility-checker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA0TtD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAIxB,cAAc,CAAC,QAAQ,GAAE,MAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAYrE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;IAoB1C,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,oBAAoB;CAqB7B"}