@theihtisham/agent-shadow-brain 1.1.1 → 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.
- package/README.md +738 -138
- package/dist/adapters/aider.d.ts +11 -0
- package/dist/adapters/aider.d.ts.map +1 -0
- package/dist/adapters/aider.js +149 -0
- package/dist/adapters/aider.js.map +1 -0
- package/dist/adapters/index.d.ts +3 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +5 -3
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/roo-code.d.ts +14 -0
- package/dist/adapters/roo-code.d.ts.map +1 -0
- package/dist/adapters/roo-code.js +186 -0
- package/dist/adapters/roo-code.js.map +1 -0
- package/dist/brain/adr-engine.d.ts +58 -0
- package/dist/brain/adr-engine.d.ts.map +1 -0
- package/dist/brain/adr-engine.js +400 -0
- package/dist/brain/adr-engine.js.map +1 -0
- package/dist/brain/auto-update.d.ts +9 -0
- package/dist/brain/auto-update.d.ts.map +1 -0
- package/dist/brain/auto-update.js +59 -0
- package/dist/brain/auto-update.js.map +1 -0
- package/dist/brain/code-metrics.d.ts +18 -0
- package/dist/brain/code-metrics.d.ts.map +1 -0
- package/dist/brain/code-metrics.js +224 -0
- package/dist/brain/code-metrics.js.map +1 -0
- package/dist/brain/code-similarity.d.ts +43 -0
- package/dist/brain/code-similarity.d.ts.map +1 -0
- package/dist/brain/code-similarity.js +227 -0
- package/dist/brain/code-similarity.js.map +1 -0
- package/dist/brain/context-completion.d.ts +39 -0
- package/dist/brain/context-completion.d.ts.map +1 -0
- package/dist/brain/context-completion.js +851 -0
- package/dist/brain/context-completion.js.map +1 -0
- package/dist/brain/custom-rules.d.ts +14 -0
- package/dist/brain/custom-rules.d.ts.map +1 -0
- package/dist/brain/custom-rules.js +108 -0
- package/dist/brain/custom-rules.js.map +1 -0
- package/dist/brain/dependency-graph.d.ts +35 -0
- package/dist/brain/dependency-graph.d.ts.map +1 -0
- package/dist/brain/dependency-graph.js +310 -0
- package/dist/brain/dependency-graph.js.map +1 -0
- package/dist/brain/learning-engine.d.ts +54 -0
- package/dist/brain/learning-engine.d.ts.map +1 -0
- package/dist/brain/learning-engine.js +855 -0
- package/dist/brain/learning-engine.js.map +1 -0
- package/dist/brain/mcp-server.d.ts +30 -0
- package/dist/brain/mcp-server.d.ts.map +1 -0
- package/dist/brain/mcp-server.js +408 -0
- package/dist/brain/mcp-server.js.map +1 -0
- package/dist/brain/multi-project.d.ts +13 -0
- package/dist/brain/multi-project.d.ts.map +1 -0
- package/dist/brain/multi-project.js +163 -0
- package/dist/brain/multi-project.js.map +1 -0
- package/dist/brain/neural-mesh.d.ts +69 -0
- package/dist/brain/neural-mesh.d.ts.map +1 -0
- package/dist/brain/neural-mesh.js +677 -0
- package/dist/brain/neural-mesh.js.map +1 -0
- package/dist/brain/notifier.d.ts +26 -0
- package/dist/brain/notifier.d.ts.map +1 -0
- package/dist/brain/notifier.js +151 -0
- package/dist/brain/notifier.js.map +1 -0
- package/dist/brain/orchestrator.d.ts +148 -1
- package/dist/brain/orchestrator.d.ts.map +1 -1
- package/dist/brain/orchestrator.js +428 -0
- package/dist/brain/orchestrator.js.map +1 -1
- package/dist/brain/perf-profiler.d.ts +14 -0
- package/dist/brain/perf-profiler.d.ts.map +1 -0
- package/dist/brain/perf-profiler.js +289 -0
- package/dist/brain/perf-profiler.js.map +1 -0
- package/dist/brain/pr-generator.d.ts +19 -0
- package/dist/brain/pr-generator.d.ts.map +1 -0
- package/dist/brain/pr-generator.js +199 -0
- package/dist/brain/pr-generator.js.map +1 -0
- package/dist/brain/project-config.d.ts +14 -0
- package/dist/brain/project-config.d.ts.map +1 -0
- package/dist/brain/project-config.js +121 -0
- package/dist/brain/project-config.js.map +1 -0
- package/dist/brain/semantic-analyzer.d.ts +46 -0
- package/dist/brain/semantic-analyzer.d.ts.map +1 -0
- package/dist/brain/semantic-analyzer.js +496 -0
- package/dist/brain/semantic-analyzer.js.map +1 -0
- package/dist/brain/team-mode.d.ts +27 -0
- package/dist/brain/team-mode.d.ts.map +1 -0
- package/dist/brain/team-mode.js +262 -0
- package/dist/brain/team-mode.js.map +1 -0
- package/dist/brain/type-safety.d.ts +13 -0
- package/dist/brain/type-safety.d.ts.map +1 -0
- package/dist/brain/type-safety.js +217 -0
- package/dist/brain/type-safety.js.map +1 -0
- package/dist/brain/vuln-scanner.d.ts +16 -0
- package/dist/brain/vuln-scanner.d.ts.map +1 -0
- package/dist/brain/vuln-scanner.js +279 -0
- package/dist/brain/vuln-scanner.js.map +1 -0
- package/dist/cli.js +813 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +24 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +320 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +88 -77
|
@@ -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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"}
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/adapters/index.js
CHANGED
|
@@ -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
|
|
14
|
-
'aider': () => new
|
|
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,
|
|
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"}
|