@theihtisham/agent-shadow-brain 1.0.0 → 1.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 CHANGED
@@ -1,12 +1,27 @@
1
1
  # Agent Shadow Brain
2
2
 
3
+ <div align="center">
4
+ <img src="docs/images/banner.svg" alt="Agent Shadow Brain Banner" width="100%" />
5
+ </div>
6
+
7
+ <br/>
8
+
9
+ <div align="center">
10
+
3
11
  [![npm version](https://img.shields.io/npm/v/@theihtisham/agent-shadow-brain.svg)](https://www.npmjs.com/package/@theihtisham/agent-shadow-brain)
12
+ [![npm downloads](https://img.shields.io/npm/dm/@theihtisham/agent-shadow-brain.svg)](https://www.npmjs.com/package/@theihtisham/agent-shadow-brain)
4
13
  [![license](https://img.shields.io/npm/l/@theihtisham/agent-shadow-brain.svg)](https://github.com/theihtisham/agent-shadow-brain/blob/main/LICENSE)
5
14
  [![node](https://img.shields.io/node/v/@theihtisham/agent-shadow-brain.svg)](https://www.npmjs.com/package/@theihtisham/agent-shadow-brain)
6
15
 
7
- A shadow AI brain that runs alongside your coding agent — watching, reviewing, and injecting intelligence in real-time.
16
+ **A shadow AI brain that runs alongside your coding agent — watching, reviewing, and injecting intelligence in real-time.**
17
+
18
+ Works with **Claude Code** · **Kilo Code** · **Cline** · **OpenCode** · **Codex CLI** · and more
19
+
20
+ [Quick Start](#install) · [How It Works](#how-it-works) · [CLI Reference](#cli-reference) · [Personalities](#brain-personalities) · [API](#programmatic-api)
21
+
22
+ </div>
8
23
 
9
- Works with **Claude Code**, **Kilo Code**, **Cline**, **OpenCode**, **Codex CLI**, and more.
24
+ ---
10
25
 
11
26
  ## Install
12
27
 
@@ -14,41 +29,82 @@ Works with **Claude Code**, **Kilo Code**, **Cline**, **OpenCode**, **Codex CLI*
14
29
  npm install -g @theihtisham/agent-shadow-brain
15
30
  ```
16
31
 
17
- Or use directly:
32
+ Or use directly without installing:
18
33
 
19
34
  ```bash
20
35
  npx @theihtisham/agent-shadow-brain start .
21
36
  ```
22
37
 
38
+ ### First-time setup
39
+
40
+ ```bash
41
+ shadow-brain setup
42
+ ```
43
+
44
+ Runs an interactive wizard to configure your LLM provider, personality, and review depth.
45
+
46
+ ### Health check
47
+
48
+ ```bash
49
+ shadow-brain doctor
50
+ ```
51
+
52
+ Verifies your configuration, tests provider connectivity, and detects running agents.
53
+
54
+ ---
55
+
56
+ ## How It Works
57
+
58
+ <div align="center">
59
+ <img src="docs/images/architecture.svg" alt="Architecture Diagram" width="100%" />
60
+ </div>
61
+
62
+ Shadow Brain watches your project files and git activity in real-time, reads what your coding agent is doing, and uses an LLM (with a smart rule-based fallback) to generate insights. It then injects those insights directly into the agent's memory files so the agent picks them up automatically.
63
+
64
+ **Pipeline:** `File/Git Watcher` → `Orchestrator (debounce)` → `Brain Analyzer (LLM + rules)` → `Personality Engine` → `Smart Injection into agent memory`
65
+
66
+ ### Key Features
67
+
68
+ - **Real-time monitoring** — watches file changes and git activity as they happen
69
+ - **Multi-provider LLM** — supports Ollama (free/local), Anthropic, OpenAI, and OpenRouter
70
+ - **Smart fallback** — 20+ rule-based patterns work without any LLM (secrets detection, SQL injection, N+1 queries, and more)
71
+ - **6 brain personalities** — mentor, critic, architect, security, performance, or balanced
72
+ - **Auto-injection** — insights go directly into your agent's memory/rules files
73
+ - **5 agent adapters** — works with Claude Code, Kilo Code, Cline, OpenCode, and Codex
74
+ - **3 review depths** — quick (4K), standard (8K), deep (16K tokens)
75
+
76
+ ---
77
+
23
78
  ## CLI Reference
24
79
 
25
80
  ### `shadow-brain start [project-dir]`
26
81
 
27
- Start watching a project in real-time with a live terminal dashboard.
82
+ Start watching a project with a live terminal dashboard.
28
83
 
29
84
  ```bash
30
85
  shadow-brain start . # Watch current directory
31
- shadow-brain start . -p anthropic -k $API_KEY # Use Anthropic as LLM
32
- shadow-brain start . --personality security # Security-focused reviews
86
+ shadow-brain start . -p anthropic -k $API_KEY # Use Anthropic
87
+ shadow-brain start . --personality security # Security-focused
33
88
  shadow-brain start . --depth deep # Deep analysis
34
89
  shadow-brain start . --agents claude-code,codex # Watch specific agents
35
90
  ```
36
91
 
37
- Options:
38
- - `-p, --provider <provider>` — LLM provider: `anthropic`, `openai`, `ollama`, `openrouter`
39
- - `-m, --model <model>` LLM model name
40
- - `-k, --api-key <key>` API key
41
- - `--personality <type>` Brain personality (see below)
42
- - `--depth <depth>` Review depth: `quick`, `standard`, `deep`
43
- - `--agents <agents>` Comma-separated agent list
44
- - `--no-inject` Disable auto-injection of insights
92
+ | Option | Description |
93
+ |--------|-------------|
94
+ | `-p, --provider` | LLM provider: `anthropic`, `openai`, `ollama`, `openrouter` |
95
+ | `-m, --model` | LLM model name |
96
+ | `-k, --api-key` | API key |
97
+ | `--personality` | Brain personality (see below) |
98
+ | `--depth` | Review depth: `quick`, `standard`, `deep` |
99
+ | `--agents` | Comma-separated agent list |
100
+ | `--no-inject` | Disable auto-injection |
45
101
 
46
102
  ### `shadow-brain review [project-dir]`
47
103
 
48
104
  One-shot project analysis without watch mode.
49
105
 
50
106
  ```bash
51
- shadow-brain review . # Text output
107
+ shadow-brain review . # Text output (default)
52
108
  shadow-brain review . --output json # JSON output
53
109
  shadow-brain review . --output markdown # Markdown output
54
110
  shadow-brain review . --depth deep # Thorough analysis
@@ -80,6 +136,16 @@ shadow-brain config personality architect
80
136
  shadow-brain config --reset
81
137
  ```
82
138
 
139
+ ### `shadow-brain setup`
140
+
141
+ Interactive setup wizard for first-time configuration.
142
+
143
+ ### `shadow-brain doctor`
144
+
145
+ Health check — verifies config, tests provider connectivity, detects agents.
146
+
147
+ ---
148
+
83
149
  ## Supported Agents
84
150
 
85
151
  | Agent | Detection | Injection Target |
@@ -90,59 +156,54 @@ shadow-brain config --reset
90
156
  | **OpenCode** | `.opencode/`, `opencode.json`, process | `.opencode/rules/`, `AGENTS.md` |
91
157
  | **Codex CLI** | `.codex/`, `AGENTS.md`, process | `AGENTS.md` |
92
158
 
159
+ ---
160
+
93
161
  ## Brain Personalities
94
162
 
163
+ <div align="center">
164
+ <img src="docs/images/personalities.svg" alt="Brain Personalities" width="100%" />
165
+ </div>
166
+
95
167
  | Personality | Focus |
96
168
  |------------|-------|
97
- | `mentor` | Teaches and explains — focuses on code quality and best practices |
98
- | `critic` | Thorough code reviews — catches bugs, logic errors, edge cases |
169
+ | `mentor` | Teaches and explains — code quality, best practices, learning tips |
170
+ | `critic` | Thorough code reviews — bugs, logic errors, edge cases, dead code |
99
171
  | `architect` | Big-picture thinking — modularity, scalability, design patterns |
100
- | `security` | Paranoid about vulnerabilities — OWASP top 10, attack vectors |
172
+ | `security` | Paranoid about vulnerabilities — OWASP top 10, injection attacks, secret leaks |
101
173
  | `performance` | Optimization focused — N+1 queries, memory leaks, bundle size |
102
174
  | `balanced` | Mix of all perspectives (default) |
103
175
 
104
- ## How It Works
176
+ ---
105
177
 
106
- ```
107
- ┌─────────────────────────────────────────────────┐
108
- Shadow Brain
109
- │ │
110
- │ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
111
- │ │ File │ │ Git │ │ Agent │ │
112
- │ │ Watcher │ │ Watcher │ │ Adapters │ │
113
- │ └────┬─────┘ └────┬─────┘ └──────┬────────┘ │
114
- │ │ │ │ │
115
- │ └──────┬───────┘ │ │
116
- │ ▼ │ │
117
- │ ┌──────────────┐ │ │
118
- │ │ Orchestrator │ │ │
119
- │ │ (debounce) │ │ │
120
- │ └──────┬───────┘ │ │
121
- │ ▼ │ │
122
- │ ┌──────────────┐ │ │
123
- │ │ Analyzer │ │ │
124
- │ │ (LLM + rules)│ │ │
125
- │ └──────┬───────┘ │ │
126
- │ │ Insights │ │
127
- │ └──────────────────────┘ │
128
- │ ▼ │
129
- │ Inject into agent memory │
130
- └─────────────────────────────────────────────────┘
131
- ```
178
+ ## Rule-Based Detection Patterns
179
+
180
+ Even without an LLM configured, Shadow Brain detects **20+ code patterns**:
181
+
182
+ **Security:** hardcoded secrets, API keys, private keys, SQL injection, XSS (dangerouslySetInnerHTML), eval/Function usage, .env file changes, database credential exposure
183
+
184
+ **Code Quality:** large batch changes, deleted files, code changes without tests, missing .gitignore, missing tsconfig.json, framework mismatches, excessive console.log
185
+
186
+ **Performance:** N+1 query patterns, synchronous file I/O, async/await in loops
132
187
 
133
- Shadow Brain watches your project files and git activity, reads what your coding agent is doing, and uses an LLM (with rule-based fallback) to generate insights. It then injects those insights directly into the agent's memory files so the agent picks them up automatically.
188
+ **Architecture:** multiple config file changes, database migrations, infrastructure/deployment files, API endpoint changes, lock file drift
189
+
190
+ ---
134
191
 
135
192
  ## LLM Providers
136
193
 
137
- - **Ollama** (default, free) runs locally, no API key needed
138
- - **Anthropic** — Claude models via API
139
- - **OpenAI** GPT-4o via API
140
- - **OpenRouter** Access to many models through one API
194
+ | Provider | Setup | Cost |
195
+ |----------|-------|------|
196
+ | **Ollama** (default) | `ollama serve` + `ollama pull llama3` | Free, local |
197
+ | **Anthropic** | Set API key via `shadow-brain config apiKey sk-...` | Pay per token |
198
+ | **OpenAI** | Set provider + API key | Pay per token |
199
+ | **OpenRouter** | Set provider + API key | Pay per token |
200
+
201
+ ---
141
202
 
142
203
  ## Programmatic API
143
204
 
144
205
  ```typescript
145
- import { Orchestrator, createAdapter, LLMClient } from '@theihtisham/agent-shadow-brain';
206
+ import { Orchestrator, createAdapter, LLMClient, Analyzer, PromptBuilder } from '@theihtisham/agent-shadow-brain';
146
207
 
147
208
  const orchestrator = new Orchestrator({
148
209
  provider: 'ollama',
@@ -161,6 +222,16 @@ orchestrator.on('insights', ({ insights }) => {
161
222
  await orchestrator.start();
162
223
  ```
163
224
 
225
+ ---
226
+
227
+ ## Contributing
228
+
229
+ 1. Fork the repository
230
+ 2. Create your feature branch: `git checkout -b feature/my-feature`
231
+ 3. Commit your changes: `git commit -m 'Add my feature'`
232
+ 4. Push to the branch: `git push origin feature/my-feature`
233
+ 5. Open a Pull Request
234
+
164
235
  ## License
165
236
 
166
- MIT
237
+ [MIT](LICENSE) © 2025 theihtisham
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/brain/analyzer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAWrH,KAAK,WAAW,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAEjD,UAAU,cAAc;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,WAAW,CAAc;gBAErB,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW;IAMnF,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqB9D,OAAO,CAAC,iBAAiB;CA8G1B;AAED,qBAAa,aAAa;IACxB,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM;IA4C/D,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM;CA6D3E"}
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/brain/analyzer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAWrH,KAAK,WAAW,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAEjD,UAAU,cAAc;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,WAAW,CAAc;gBAErB,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW;IAMnF,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqB9D,OAAO,CAAC,iBAAiB;CAoV1B;AAED,qBAAa,aAAa;IACxB,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM;IA4C/D,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM;CA6D3E"}
@@ -32,7 +32,9 @@ export class Analyzer {
32
32
  ruleBasedAnalysis(changes, context) {
33
33
  const insights = [];
34
34
  const now = new Date();
35
- // Security: .env file changes
35
+ const allContent = changes.map(c => c.content || c.diff || '').join('\n');
36
+ // === SECURITY RULES ===
37
+ // .env file changes
36
38
  const envChanges = changes.filter(c => c.path.includes('.env') && !c.path.includes('.example'));
37
39
  if (envChanges.length > 0) {
38
40
  insights.push({
@@ -44,25 +46,114 @@ export class Analyzer {
44
46
  timestamp: now,
45
47
  });
46
48
  }
47
- // Dependency changes
48
- const pkgChanges = changes.filter(c => c.path.endsWith('package.json') || c.path.endsWith('requirements.txt') || c.path.endsWith('Cargo.toml'));
49
+ // Hardcoded secrets detection
50
+ const secretPatterns = [
51
+ { pattern: /(?:api[_-]?key|apikey)\s*[:=]\s*['"][^'"]{10,}/i, name: 'API key' },
52
+ { pattern: /(?:password|passwd|pwd)\s*[:=]\s*['"][^'"]{6,}/i, name: 'password' },
53
+ { pattern: /(?:secret|token)\s*[:=]\s*['"][^'"]{10,}/i, name: 'secret/token' },
54
+ { pattern: /(?:AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}/, name: 'AWS access key' },
55
+ { pattern: /sk-[a-zA-Z0-9]{32,}/, name: 'OpenAI/Anthropic API key' },
56
+ { pattern: /ghp_[a-zA-Z0-9]{36}/, name: 'GitHub PAT' },
57
+ { pattern: /-----BEGIN (?:RSA |EC )?PRIVATE KEY-----/, name: 'private key' },
58
+ { pattern: /mongodb(\+srv)?:\/\/[^:]+:[^@]+@/i, name: 'MongoDB connection string with credentials' },
59
+ { pattern: /postgres(?:ql)?:\/\/[^:]+:[^@]+@/i, name: 'PostgreSQL connection string with credentials' },
60
+ { pattern: /mysql:\/\/[^:]+:[^@]+@/i, name: 'MySQL connection string with credentials' },
61
+ ];
62
+ for (const { pattern, name } of secretPatterns) {
63
+ if (pattern.test(allContent)) {
64
+ insights.push({
65
+ type: 'warning',
66
+ priority: 'critical',
67
+ title: `Possible ${name} exposed in code`,
68
+ content: `Detected what appears to be a hardcoded ${name}. Never commit secrets to version control. Use environment variables or a secrets manager instead.`,
69
+ timestamp: now,
70
+ });
71
+ break; // one secret warning is enough
72
+ }
73
+ }
74
+ // SQL injection risk
75
+ const sqlInjectionPatterns = [
76
+ /query\s*\(\s*[`'"]\s*SELECT.*\$\{/,
77
+ /query\s*\(\s*[`'"]\s*INSERT.*\$\{/,
78
+ /query\s*\(\s*[`'"]\s*UPDATE.*\$\{/,
79
+ /query\s*\(\s*[`'"]\s*DELETE.*\$\{/,
80
+ /\.raw\s*\(\s*[`'"].*\+|string concatenation in SQL/,
81
+ /execute\s*\(\s*[`'"].*\$\{/,
82
+ ];
83
+ if (sqlInjectionPatterns.some(p => p.test(allContent))) {
84
+ insights.push({
85
+ type: 'warning',
86
+ priority: 'critical',
87
+ title: 'Potential SQL injection vulnerability',
88
+ content: 'String interpolation or concatenation detected in SQL queries. Use parameterized queries instead. Example: `query("SELECT * FROM users WHERE id = $1", [userId])` instead of template literals.',
89
+ timestamp: now,
90
+ });
91
+ }
92
+ // XSS risk — dangerouslySetInnerHTML or unescaped output
93
+ if (allContent.includes('dangerouslySetInnerHTML') || allContent.includes('v-html')) {
94
+ insights.push({
95
+ type: 'warning',
96
+ priority: 'high',
97
+ title: 'XSS risk: raw HTML injection',
98
+ content: 'Raw HTML injection detected (dangerouslySetInnerHTML/v-html). Ensure the content is sanitized before rendering to prevent cross-site scripting attacks. Use DOMPurify or similar.',
99
+ timestamp: now,
100
+ });
101
+ }
102
+ // eval/Function usage
103
+ if (/\beval\s*\(|new\s+Function\s*\(/.test(allContent)) {
104
+ insights.push({
105
+ type: 'warning',
106
+ priority: 'critical',
107
+ title: 'Dangerous eval/Function usage',
108
+ content: 'eval() or new Function() detected. These allow arbitrary code execution and are a major security risk. Use safer alternatives like JSON.parse() for data parsing.',
109
+ timestamp: now,
110
+ });
111
+ }
112
+ // === DEPENDENCY RULES ===
113
+ const pkgChanges = changes.filter(c => c.path.endsWith('package.json') || c.path.endsWith('requirements.txt') ||
114
+ c.path.endsWith('Cargo.toml') || c.path.endsWith('go.mod') ||
115
+ c.path.endsWith('pom.xml') || c.path.endsWith('build.gradle'));
49
116
  if (pkgChanges.length > 0) {
50
117
  insights.push({
51
118
  type: 'suggestion',
52
119
  priority: 'medium',
53
120
  title: 'Dependencies updated — consider audit',
54
- content: 'A dependency manifest was modified. Review the changes for: version pinning, known vulnerabilities, license compatibility, and unnecessary additions.',
121
+ content: 'A dependency manifest was modified. Review for: version pinning, known vulnerabilities (run `npm audit` or equivalent), license compatibility, and unnecessary additions.',
55
122
  files: pkgChanges.map(c => c.path),
56
123
  timestamp: now,
57
124
  });
58
125
  }
126
+ // Lock file changes without manifest changes = potential version drift
127
+ const lockChanges = changes.filter(c => c.path.endsWith('package-lock.json') || c.path.endsWith('yarn.lock') ||
128
+ c.path.endsWith('pnpm-lock.yaml') || c.path.endsWith('Poetry.lock'));
129
+ if (lockChanges.length > 0 && pkgChanges.length === 0) {
130
+ insights.push({
131
+ type: 'review',
132
+ priority: 'medium',
133
+ title: 'Lock file changed without manifest update',
134
+ content: 'A lock file was modified but no dependency manifest changed. This could indicate version drift or an indirect dependency update. Verify this is intentional.',
135
+ files: lockChanges.map(c => c.path),
136
+ timestamp: now,
137
+ });
138
+ }
139
+ // === CODE QUALITY RULES ===
59
140
  // Large batch of changes
60
- if (changes.length > 10) {
141
+ if (changes.length > 15) {
61
142
  insights.push({
62
143
  type: 'review',
63
144
  priority: 'high',
64
- title: 'Large batch of changes detected',
65
- content: `${changes.length} files changed at once. Consider splitting into smaller, focused commits for easier review and rollback. Large batches increase the risk of introducing bugs.`,
145
+ title: 'Very large batch of changes detected',
146
+ content: `${changes.length} files changed at once — high risk of introducing bugs. Consider splitting into smaller, focused PRs. Each PR should address one concern for easier review and rollback.`,
147
+ files: changes.slice(0, 5).map(c => c.path),
148
+ timestamp: now,
149
+ });
150
+ }
151
+ else if (changes.length > 8) {
152
+ insights.push({
153
+ type: 'review',
154
+ priority: 'medium',
155
+ title: 'Large batch of changes',
156
+ content: `${changes.length} files changed. Consider splitting into smaller, focused commits for easier review and rollback.`,
66
157
  files: changes.slice(0, 5).map(c => c.path),
67
158
  timestamp: now,
68
159
  });
@@ -74,34 +165,93 @@ export class Analyzer {
74
165
  type: 'warning',
75
166
  priority: 'high',
76
167
  title: 'Files deleted',
77
- content: `Files were deleted: ${deletedFiles.map(f => f.path).join(', ')}. Verify these deletions are intentional and no other code depends on them.`,
168
+ content: `Files were deleted: ${deletedFiles.map(f => f.path).join(', ')}. Verify these deletions are intentional and no other code depends on them. Search for imports/references to these files.`,
78
169
  files: deletedFiles.map(c => c.path),
79
170
  timestamp: now,
80
171
  });
81
172
  }
82
- // New test files — positive note
83
- const testFiles = changes.filter(c => c.type === 'add' && (c.path.includes('.test.') || c.path.includes('.spec.') || c.path.includes('_test.')));
173
+ // New test files — positive reinforcement
174
+ const testFiles = changes.filter(c => c.type === 'add' && (c.path.includes('.test.') || c.path.includes('.spec.') || c.path.includes('_test.') || c.path.includes('.test_')));
84
175
  if (testFiles.length > 0) {
85
176
  insights.push({
86
177
  type: 'context',
87
178
  priority: 'low',
88
179
  title: 'New test files added',
89
- content: `Test files created: ${testFiles.map(f => f.path).join(', ')}. Good practice — ensure tests cover edge cases and failure modes.`,
180
+ content: `Test files created: ${testFiles.map(f => f.path).join(', ')}. Good practice — ensure tests cover edge cases, error paths, and boundary conditions.`,
90
181
  files: testFiles.map(c => c.path),
91
182
  timestamp: now,
92
183
  });
93
184
  }
185
+ // Code changes without corresponding tests
186
+ const srcFiles = changes.filter(c => c.type === 'modify' && !c.path.includes('.test.') && !c.path.includes('.spec.') &&
187
+ !c.path.includes('node_modules') && !c.path.includes('.d.ts') &&
188
+ /\.(ts|tsx|js|jsx|py|go|rs|java)$/.test(c.path));
189
+ if (srcFiles.length >= 3 && testFiles.length === 0) {
190
+ insights.push({
191
+ type: 'suggestion',
192
+ priority: 'medium',
193
+ title: 'Code changes without test updates',
194
+ content: `${srcFiles.length} source files modified but no test files were updated. Consider adding or updating tests to cover the changed behavior.`,
195
+ files: srcFiles.slice(0, 3).map(c => c.path),
196
+ timestamp: now,
197
+ });
198
+ }
199
+ // === PERFORMANCE ANTI-PATTERNS ===
200
+ // N+1 query pattern (ORM loops)
201
+ if (/for\s*\(.*await.*find|\.map\s*\(.*await|forEach\s*\(.*await/.test(allContent)) {
202
+ insights.push({
203
+ type: 'suggestion',
204
+ priority: 'high',
205
+ title: 'Possible N+1 query pattern',
206
+ content: 'Async/await inside a loop detected. This is a common source of N+1 queries and performance issues. Consider batching queries, using Promise.all() for parallel operations, or eager loading.',
207
+ timestamp: now,
208
+ });
209
+ }
210
+ // Synchronous file I/O
211
+ if (/\breadFileSync\b|\bwriteFileSync\b|\breaddirSync\b|\bstatSync\b/.test(allContent)) {
212
+ insights.push({
213
+ type: 'suggestion',
214
+ priority: 'medium',
215
+ title: 'Synchronous file I/O detected',
216
+ content: 'Synchronous fs methods (readFileSync, writeFileSync) block the event loop. In production code, use async equivalents (readFile, writeFile) or streams for better performance.',
217
+ timestamp: now,
218
+ });
219
+ }
220
+ // Console.log left in production code
221
+ const consoleLogCount = (allContent.match(/console\.log\s*\(/g) || []).length;
222
+ if (consoleLogCount > 3) {
223
+ insights.push({
224
+ type: 'suggestion',
225
+ priority: 'low',
226
+ title: 'Excessive console.log statements',
227
+ content: `${consoleLogCount} console.log() calls detected. Consider using a proper logging library (winston, pino) with log levels, or remove debug logs before production.`,
228
+ timestamp: now,
229
+ });
230
+ }
231
+ // === ARCHITECTURE RULES ===
94
232
  // Missing .gitignore
95
233
  if (!context.structure.some(f => f.includes('.gitignore'))) {
96
234
  insights.push({
97
235
  type: 'suggestion',
98
236
  priority: 'medium',
99
237
  title: 'No .gitignore found',
100
- content: 'Project does not have a .gitignore file. Consider adding one to prevent committing build artifacts, dependencies, and secrets.',
238
+ content: 'Project does not have a .gitignore file. Add one to prevent committing build artifacts, dependencies, and secrets.',
101
239
  files: [],
102
240
  timestamp: now,
103
241
  });
104
242
  }
243
+ // Missing TypeScript config when .ts files exist
244
+ if (changes.some(c => c.path.endsWith('.ts') || c.path.endsWith('.tsx'))) {
245
+ if (!context.structure.some(f => f.includes('tsconfig.json'))) {
246
+ insights.push({
247
+ type: 'suggestion',
248
+ priority: 'medium',
249
+ title: 'TypeScript files without tsconfig.json',
250
+ content: 'TypeScript files detected but no tsconfig.json found. Add one for proper compiler configuration and type checking.',
251
+ timestamp: now,
252
+ });
253
+ }
254
+ }
105
255
  // Language/framework mismatch
106
256
  if (context.framework === 'Express' && changes.some(c => c.path.includes('pages/'))) {
107
257
  insights.push({
@@ -113,6 +263,56 @@ export class Analyzer {
113
263
  timestamp: now,
114
264
  });
115
265
  }
266
+ // Config file changes
267
+ const configChanges = changes.filter(c => /\.(json|yaml|yml|toml|ini|conf|config\.(ts|js))$/.test(c.path) &&
268
+ !c.path.includes('node_modules') && !c.path.includes('package-lock'));
269
+ if (configChanges.length > 2) {
270
+ insights.push({
271
+ type: 'review',
272
+ priority: 'medium',
273
+ title: 'Multiple config files changed',
274
+ content: `${configChanges.length} configuration files modified. Double-check values, especially for production environments. Config mistakes are hard to debug.`,
275
+ files: configChanges.map(c => c.path),
276
+ timestamp: now,
277
+ });
278
+ }
279
+ // Database migration files
280
+ const migrationFiles = changes.filter(c => /migration|schema\.sql|\.sql$/.test(c.path) && c.path.includes('migrate'));
281
+ if (migrationFiles.length > 0) {
282
+ insights.push({
283
+ type: 'warning',
284
+ priority: 'high',
285
+ title: 'Database migration changed',
286
+ content: 'Database migration files modified. Ensure migrations are backwards-compatible. Test on a copy of production data before deploying. Consider if a rollback migration is needed.',
287
+ files: migrationFiles.map(c => c.path),
288
+ timestamp: now,
289
+ });
290
+ }
291
+ // Docker/deployment changes
292
+ const deployChanges = changes.filter(c => /Dockerfile|docker-compose|\.kube|\.tf$|\.terraform|serverless\./.test(c.path));
293
+ if (deployChanges.length > 0) {
294
+ insights.push({
295
+ type: 'review',
296
+ priority: 'high',
297
+ title: 'Infrastructure/deployment files changed',
298
+ content: 'Infrastructure configuration modified. Verify: exposed ports, environment variables, resource limits, health checks, and security groups are correct.',
299
+ files: deployChanges.map(c => c.path),
300
+ timestamp: now,
301
+ });
302
+ }
303
+ // API endpoint changes
304
+ const apiFiles = changes.filter(c => /route|controller|api|endpoint|handler/.test(c.path.toLowerCase()) &&
305
+ /\.(ts|js|py|go|rs|java)$/.test(c.path));
306
+ if (apiFiles.length > 0) {
307
+ insights.push({
308
+ type: 'suggestion',
309
+ priority: 'medium',
310
+ title: 'API endpoint files changed',
311
+ content: 'API endpoint code was modified. Verify: input validation, authentication, rate limiting, proper error responses (no stack traces), and API documentation is updated.',
312
+ files: apiFiles.map(c => c.path),
313
+ timestamp: now,
314
+ });
315
+ }
116
316
  // Ensure at least one insight
117
317
  if (insights.length === 0) {
118
318
  insights.push({
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/brain/analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/brain/analyzer.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,EAAE,CAAC,EAAa,MAAM,KAAK,CAAC;AAInC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACtF,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AACH,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAWtE,MAAM,OAAO,QAAQ;IAKnB,YAAY,SAAoB,EAAE,WAA6B,EAAE,WAAwB;QACvF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAsB;QAClC,MAAM,YAAY,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,aAAa,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3E,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CACjD,UAAU,EACV,mBAAqC,EACrC,YAAY,CACb,CAAC;YAEF,OAAQ,GAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACpC,GAAG,OAAO;gBACV,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC,CAAmB,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;YAC1D,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,OAAqB,EAAE,OAAuB;QACtE,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1E,yBAAyB;QAEzB,oBAAoB;QACpB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QAChG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,UAAU;gBACpB,KAAK,EAAE,gCAAgC;gBACvC,OAAO,EAAE,qJAAqJ;gBAC9J,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClC,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,8BAA8B;QAC9B,MAAM,cAAc,GAAG;YACrB,EAAE,OAAO,EAAE,iDAAiD,EAAE,IAAI,EAAE,SAAS,EAAE;YAC/E,EAAE,OAAO,EAAE,iDAAiD,EAAE,IAAI,EAAE,UAAU,EAAE;YAChF,EAAE,OAAO,EAAE,2CAA2C,EAAE,IAAI,EAAE,cAAc,EAAE;YAC9E,EAAE,OAAO,EAAE,yDAAyD,EAAE,IAAI,EAAE,gBAAgB,EAAE;YAC9F,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,0BAA0B,EAAE;YACpE,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,YAAY,EAAE;YACtD,EAAE,OAAO,EAAE,0CAA0C,EAAE,IAAI,EAAE,aAAa,EAAE;YAC5E,EAAE,OAAO,EAAE,mCAAmC,EAAE,IAAI,EAAE,4CAA4C,EAAE;YACpG,EAAE,OAAO,EAAE,mCAAmC,EAAE,IAAI,EAAE,+CAA+C,EAAE;YACvG,EAAE,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,0CAA0C,EAAE;SACzF,CAAC;QACF,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,cAAc,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,SAAS;oBACf,QAAQ,EAAE,UAAU;oBACpB,KAAK,EAAE,YAAY,IAAI,kBAAkB;oBACzC,OAAO,EAAE,2CAA2C,IAAI,oGAAoG;oBAC5J,SAAS,EAAE,GAAG;iBACf,CAAC,CAAC;gBACH,MAAM,CAAC,+BAA+B;YACxC,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,MAAM,oBAAoB,GAAG;YAC3B,mCAAmC;YACnC,mCAAmC;YACnC,mCAAmC;YACnC,mCAAmC;YACnC,oDAAoD;YACpD,4BAA4B;SAC7B,CAAC;QACF,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACvD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,UAAU;gBACpB,KAAK,EAAE,uCAAuC;gBAC9C,OAAO,EAAE,iMAAiM;gBAC1M,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,yDAAyD;QACzD,IAAI,UAAU,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpF,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,8BAA8B;gBACrC,OAAO,EAAE,mLAAmL;gBAC5L,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,IAAI,iCAAiC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,UAAU;gBACpB,KAAK,EAAE,+BAA+B;gBACtC,OAAO,EAAE,mKAAmK;gBAC5K,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAE3B,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACpC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACtE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC1D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC9D,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,uCAAuC;gBAC9C,OAAO,EAAE,2KAA2K;gBACpL,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClC,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,uEAAuE;QACvE,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YACpE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CACpE,CAAC;QACF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,2CAA2C;gBAClD,OAAO,EAAE,8JAA8J;gBACvK,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnC,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,6BAA6B;QAE7B,yBAAyB;QACzB,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,sCAAsC;gBAC7C,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,0KAA0K;gBACpM,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC3C,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,wBAAwB;gBAC/B,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,kGAAkG;gBAC5H,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC3C,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB;QAChB,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC9D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,uBAAuB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2HAA2H;gBACnM,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpC,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,0CAA0C;QAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACnC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CACvI,CAAC;QACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,sBAAsB;gBAC7B,OAAO,EAAE,uBAAuB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,wFAAwF;gBAC7J,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjC,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAClC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/E,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC7D,kCAAkC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAChD,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,mCAAmC;gBAC1C,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,yHAAyH;gBACpJ,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5C,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,oCAAoC;QAEpC,gCAAgC;QAChC,IAAI,6DAA6D,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACnF,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,4BAA4B;gBACnC,OAAO,EAAE,8LAA8L;gBACvM,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,uBAAuB;QACvB,IAAI,iEAAiE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACvF,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,+BAA+B;gBACtC,OAAO,EAAE,+KAA+K;gBACxL,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,sCAAsC;QACtC,MAAM,eAAe,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC9E,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,kCAAkC;gBACzC,OAAO,EAAE,GAAG,eAAe,iJAAiJ;gBAC5K,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,6BAA6B;QAE7B,qBAAqB;QACrB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,qBAAqB;gBAC5B,OAAO,EAAE,oHAAoH;gBAC7H,KAAK,EAAE,EAAE;gBACT,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,iDAAiD;QACjD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;gBAC9D,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,wCAAwC;oBAC/C,OAAO,EAAE,oHAAoH;oBAC7H,SAAS,EAAE,GAAG;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACpF,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,6BAA6B;gBACpC,OAAO,EAAE,8IAA8I;gBACvJ,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtE,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACvC,kDAAkD,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/D,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CACrE,CAAC;QACF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,+BAA+B;gBACtC,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,gIAAgI;gBAChK,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrC,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxC,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC1E,CAAC;QACF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,4BAA4B;gBACnC,OAAO,EAAE,gLAAgL;gBACzL,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtC,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,4BAA4B;QAC5B,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACvC,iEAAiE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAC/E,CAAC;QACF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,yCAAyC;gBAChD,OAAO,EAAE,uJAAuJ;gBAChK,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrC,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,uBAAuB;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAClC,uCAAuC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAClE,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CACxC,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,4BAA4B;gBACnC,OAAO,EAAE,sKAAsK;gBAC/K,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAChC,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,8BAA8B;QAC9B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,mBAAmB;gBAC1B,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,+BAA+B,OAAO,CAAC,IAAI,+CAA+C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;gBAC1M,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC/B,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IACxB,MAAM,CAAC,iBAAiB,CAAC,WAA6B;QACpD,MAAM,IAAI,GAAG;;;4MAG2L,CAAC;QAEzM,MAAM,aAAa,GAAqC;YACtD,MAAM,EAAE;;;;;kEAKoD;YAE5D,MAAM,EAAE;;;;iEAImD;YAE3D,SAAS,EAAE;;;;uEAIsD;YAEjE,QAAQ,EAAE;;;oDAGoC;YAE9C,WAAW,EAAE;;uDAEoC;YAEjD,QAAQ,EAAE;;;gEAGgD;SAC3D,CAAC;QAEF,OAAO,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,MAAsB,EAAE,KAAkB;QAC/D,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;QAE3D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,kBAAkB;QAClB,QAAQ,CAAC,IAAI,CAAC;UACR,OAAO,CAAC,IAAI;eACP,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS;eACxC,OAAO,CAAC,SAAS,IAAI,SAAS;qBACxB,OAAO,CAAC,cAAc,IAAI,SAAS;YAC5C,OAAO,CAAC,SAAS,IAAI,KAAK;gBACtB,OAAO,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;QAE1C,eAAe;QACf,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;YAE3D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,KAAK,GAAG,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;gBAE/D,IAAI,KAAK,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBACxC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtC,KAAK,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;wBAAE,KAAK,IAAI,UAAU,KAAK,CAAC,MAAM,GAAG,GAAG,cAAc,CAAC;gBAC9E,CAAC;qBAAM,IAAI,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC3C,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC9B,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAChD,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3D,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,MAAM,aAAa,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,eAAe;QACf,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC1E,QAAQ,CAAC,IAAI,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,wBAAwB;QACxB,MAAM,WAAW,GAAgC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC9F,MAAM,UAAU,GAAG,yBAAyB,WAAW,CAAC,KAAK,CAAC,qCAAqC,CAAC;QACpG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1B,uBAAuB;QACvB,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,gCAAgC;QACzE,IAAI,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,6CAA6C,CAAC;QACrF,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -8,6 +8,7 @@ export declare class Orchestrator extends EventEmitter {
8
8
  private fileWatcher;
9
9
  private gitWatcher;
10
10
  private adapters;
11
+ private patternMemory;
11
12
  private running;
12
13
  private analyzing;
13
14
  private pendingChanges;
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/brain/orchestrator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAStC,OAAO,EACL,WAAW,EAAE,YAAY,EAAE,YAAY,EACxC,MAAM,aAAa,CAAC;AAErB,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,SAAS,CAAK;gBAEV,MAAM,EAAE,WAAW;IAczB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiDtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAcrB,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA4C3C,UAAU,IAAI,YAAY,GAAG,IAAI;IAIjC,SAAS;;;;;;;;;;;;IAeT,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,gBAAgB;YAWV,WAAW;YA0DX,cAAc;YAgBd,aAAa;IAqB3B,OAAO,CAAC,SAAS;CA2BlB"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/brain/orchestrator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAUtC,OAAO,EACL,WAAW,EAAE,YAAY,EAAE,YAAY,EACxC,MAAM,aAAa,CAAC;AAErB,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,SAAS,CAAK;gBAEV,MAAM,EAAE,WAAW;IAezB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoDtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAerB,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA4C3C,UAAU,IAAI,YAAY,GAAG,IAAI;IAIjC,SAAS;;;;;;;;;;;;IAeT,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,gBAAgB;YAWV,WAAW;YAqEX,cAAc;YAgBd,aAAa;IAqB3B,OAAO,CAAC,SAAS;CA2BlB"}