@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.
@@ -4,6 +4,7 @@ import * as crypto from 'crypto';
4
4
  import { LLMClient } from './llm-client.js';
5
5
  import { ProjectContextBuilder } from './project-context.js';
6
6
  import { Analyzer } from './analyzer.js';
7
+ import { PatternMemory } from './pattern-memory.js';
7
8
  import { FileWatcher } from '../watchers/file-watcher.js';
8
9
  import { GitWatcher } from '../watchers/git-watcher.js';
9
10
  import { createAdapter, detectRunningAgents } from '../adapters/index.js';
@@ -25,12 +26,15 @@ export class Orchestrator extends EventEmitter {
25
26
  });
26
27
  this.contextBuilder = new ProjectContextBuilder(config.projectDir);
27
28
  this.analyzer = new Analyzer(this.llmClient, config.brainPersonality, config.reviewDepth);
29
+ this.patternMemory = new PatternMemory();
28
30
  this.fileWatcher = new FileWatcher(config.projectDir);
29
31
  this.gitWatcher = new GitWatcher(config.projectDir);
30
32
  }
31
33
  async start() {
32
34
  if (this.running)
33
35
  return;
36
+ // Load pattern memory
37
+ await this.patternMemory.load();
34
38
  this.startTime = Date.now();
35
39
  this.currentSession = {
36
40
  id: crypto.randomUUID(),
@@ -89,6 +93,7 @@ export class Orchestrator extends EventEmitter {
89
93
  this.gitWatcher.stop();
90
94
  }
91
95
  catch { /* ignore */ }
96
+ await this.patternMemory.save();
92
97
  this.emit('stopped');
93
98
  }
94
99
  async reviewOnce() {
@@ -204,6 +209,15 @@ export class Orchestrator extends EventEmitter {
204
209
  activity: activities,
205
210
  agentMemory,
206
211
  });
212
+ // Enhance with pattern memory insights
213
+ const patternInsights = this.patternMemory.getPatternInsights(changes);
214
+ insights.push(...patternInsights);
215
+ // Record patterns
216
+ this.patternMemory.recordFileCorrelation(changes);
217
+ this.patternMemory.recordChangeFrequency(changes);
218
+ for (const insight of insights) {
219
+ this.patternMemory.recordErrorPattern(insight);
220
+ }
207
221
  for (const insight of insights) {
208
222
  insight.timestamp = new Date();
209
223
  }
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/brain/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/brain/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { BrainInsight, FileChange, ProjectContext } from '../types.js';
2
+ interface ProjectSummary {
3
+ name: string;
4
+ languages: string[];
5
+ framework?: string;
6
+ totalFilesWatched: number;
7
+ totalInsightsGenerated: number;
8
+ topInsightTypes: Record<string, number>;
9
+ lastAnalyzed: Date;
10
+ }
11
+ export declare class PatternMemory {
12
+ private storePath;
13
+ private store;
14
+ private dirty;
15
+ private saveTimer;
16
+ constructor(storeDir?: string);
17
+ load(): Promise<void>;
18
+ save(): Promise<void>;
19
+ scheduleSave(): void;
20
+ /** Record file correlation patterns (files that change together) */
21
+ recordFileCorrelation(changes: FileChange[]): void;
22
+ /** Record error patterns from insights */
23
+ recordErrorPattern(insight: BrainInsight): void;
24
+ /** Record which files change most frequently */
25
+ recordChangeFrequency(changes: FileChange[]): void;
26
+ /** Record project analysis summary */
27
+ recordProjectSummary(context: ProjectContext, insightCount: number, insightTypes: Record<string, number>): void;
28
+ /** Get insights based on learned patterns for current changes */
29
+ getPatternInsights(changes: FileChange[]): BrainInsight[];
30
+ /** Get project summary for a directory */
31
+ getProjectSummary(projectDir: string): ProjectSummary | null;
32
+ /** Get pattern statistics */
33
+ getStats(): {
34
+ totalPatterns: number;
35
+ byType: Record<string, number>;
36
+ projectCount: number;
37
+ };
38
+ /** Clean up old patterns (called periodically) */
39
+ cleanup(maxAgeDays?: number): void;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=pattern-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-memory.d.ts","sourceRoot":"","sources":["../../src/brain/pattern-memory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAmBvE,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAA8C;gBAEnD,QAAQ,CAAC,EAAE,MAAM;IAWvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,YAAY,IAAI,IAAI;IAOpB,oEAAoE;IACpE,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IA6BlD,0CAA0C;IAC1C,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAkC/C,gDAAgD;IAChD,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IA2BlD,sCAAsC;IACtC,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAkB/G,iEAAiE;IACjE,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE;IAmEzD,0CAA0C;IAC1C,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAK5D,6BAA6B;IAC7B,QAAQ,IAAI;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IAY3F,kDAAkD;IAClD,OAAO,CAAC,UAAU,SAAK,GAAG,IAAI;CAW/B"}
@@ -0,0 +1,234 @@
1
+ // src/brain/pattern-memory.ts — Pattern learning system that persists across sessions
2
+ import { promises as fs } from 'fs';
3
+ import { join } from 'path';
4
+ import { homedir } from 'os';
5
+ export class PatternMemory {
6
+ constructor(storeDir) {
7
+ this.dirty = false;
8
+ this.saveTimer = null;
9
+ const dir = storeDir || join(homedir(), '.shadow-brain');
10
+ this.storePath = join(dir, 'patterns.json');
11
+ this.store = {
12
+ version: 1,
13
+ patterns: [],
14
+ projectSummaries: {},
15
+ lastCleanup: new Date(),
16
+ };
17
+ }
18
+ async load() {
19
+ try {
20
+ const data = await fs.readFile(this.storePath, 'utf-8');
21
+ const parsed = JSON.parse(data);
22
+ this.store = {
23
+ version: parsed.version || 1,
24
+ patterns: (parsed.patterns || []).map((p) => ({
25
+ ...p,
26
+ lastSeen: new Date(p.lastSeen),
27
+ })),
28
+ projectSummaries: parsed.projectSummaries || {},
29
+ lastCleanup: new Date(parsed.lastCleanup || Date.now()),
30
+ };
31
+ }
32
+ catch {
33
+ // No existing store — start fresh
34
+ }
35
+ }
36
+ async save() {
37
+ if (!this.dirty)
38
+ return;
39
+ try {
40
+ const dir = join(this.storePath, '..');
41
+ await fs.mkdir(dir, { recursive: true });
42
+ await fs.writeFile(this.storePath, JSON.stringify(this.store, null, 2), 'utf-8');
43
+ this.dirty = false;
44
+ }
45
+ catch {
46
+ // Silently fail — pattern memory is best-effort
47
+ }
48
+ }
49
+ scheduleSave() {
50
+ if (this.saveTimer)
51
+ clearTimeout(this.saveTimer);
52
+ this.saveTimer = setTimeout(() => this.save(), 5000);
53
+ }
54
+ // === PATTERN RECORDING ===
55
+ /** Record file correlation patterns (files that change together) */
56
+ recordFileCorrelation(changes) {
57
+ if (changes.length < 2)
58
+ return;
59
+ const files = changes.map(c => c.path).sort();
60
+ const patternKey = files.join('|');
61
+ const existing = this.store.patterns.find(p => p.type === 'file_correlation' && p.pattern === patternKey);
62
+ if (existing) {
63
+ existing.occurrences++;
64
+ existing.lastSeen = new Date();
65
+ }
66
+ else {
67
+ this.store.patterns.push({
68
+ id: `corr_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`,
69
+ type: 'file_correlation',
70
+ pattern: patternKey,
71
+ occurrences: 1,
72
+ lastSeen: new Date(),
73
+ context: { fileCount: String(files.length) },
74
+ insightTemplate: `These ${files.length} files frequently change together. Consider refactoring into a shared module or ensuring changes are coordinated.`,
75
+ });
76
+ }
77
+ this.dirty = true;
78
+ this.scheduleSave();
79
+ }
80
+ /** Record error patterns from insights */
81
+ recordErrorPattern(insight) {
82
+ if (insight.priority !== 'critical' && insight.priority !== 'high')
83
+ return;
84
+ const patternKey = `${insight.type}:${insight.title.replace(/\s+/g, '_').toLowerCase()}`;
85
+ const existing = this.store.patterns.find(p => p.type === 'error_pattern' && p.pattern === patternKey);
86
+ if (existing) {
87
+ existing.occurrences++;
88
+ existing.lastSeen = new Date();
89
+ if (insight.files) {
90
+ existing.context.files = [...new Set([...(existing.context.files?.split(',') || []), ...insight.files])].join(',');
91
+ }
92
+ }
93
+ else {
94
+ this.store.patterns.push({
95
+ id: `err_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`,
96
+ type: 'error_pattern',
97
+ pattern: patternKey,
98
+ occurrences: 1,
99
+ lastSeen: new Date(),
100
+ context: {
101
+ title: insight.title,
102
+ priority: insight.priority,
103
+ files: insight.files?.join(',') || '',
104
+ },
105
+ });
106
+ }
107
+ this.dirty = true;
108
+ this.scheduleSave();
109
+ }
110
+ /** Record which files change most frequently */
111
+ recordChangeFrequency(changes) {
112
+ for (const change of changes) {
113
+ const patternKey = `freq:${change.path}`;
114
+ const existing = this.store.patterns.find(p => p.type === 'change_frequency' && p.pattern === patternKey);
115
+ if (existing) {
116
+ existing.occurrences++;
117
+ existing.lastSeen = new Date();
118
+ }
119
+ else {
120
+ this.store.patterns.push({
121
+ id: `freq_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`,
122
+ type: 'change_frequency',
123
+ pattern: patternKey,
124
+ occurrences: 1,
125
+ lastSeen: new Date(),
126
+ context: { path: change.path, type: change.type },
127
+ });
128
+ }
129
+ }
130
+ this.dirty = true;
131
+ this.scheduleSave();
132
+ }
133
+ /** Record project analysis summary */
134
+ recordProjectSummary(context, insightCount, insightTypes) {
135
+ const key = context.rootDir.replace(/[\/\\]/g, '_');
136
+ this.store.projectSummaries[key] = {
137
+ name: context.name,
138
+ languages: context.language,
139
+ framework: context.framework,
140
+ totalFilesWatched: (this.store.projectSummaries[key]?.totalFilesWatched || 0) + context.recentChanges.length,
141
+ totalInsightsGenerated: (this.store.projectSummaries[key]?.totalInsightsGenerated || 0) + insightCount,
142
+ topInsightTypes: { ...this.store.projectSummaries[key]?.topInsightTypes, ...insightTypes },
143
+ lastAnalyzed: new Date(),
144
+ };
145
+ this.dirty = true;
146
+ this.scheduleSave();
147
+ }
148
+ // === PATTERN RETRIEVAL ===
149
+ /** Get insights based on learned patterns for current changes */
150
+ getPatternInsights(changes) {
151
+ const insights = [];
152
+ const now = new Date();
153
+ const changedPaths = new Set(changes.map(c => c.path));
154
+ // Check file correlations — if some files in a known group changed, warn about the others
155
+ const correlations = this.store.patterns
156
+ .filter(p => p.type === 'file_correlation' && p.occurrences >= 3);
157
+ for (const corr of correlations) {
158
+ const files = corr.pattern.split('|');
159
+ const changedInGroup = files.filter(f => changedPaths.has(f));
160
+ const unchangedInGroup = files.filter(f => !changedPaths.has(f));
161
+ if (changedInGroup.length > 0 && unchangedInGroup.length > 0) {
162
+ insights.push({
163
+ type: 'pattern',
164
+ priority: 'medium',
165
+ title: 'Related files may need updating',
166
+ content: `These files frequently change together. You changed ${changedInGroup.join(', ')} but did NOT update: ${unchangedInGroup.join(', ')}. Verify they don't need coordinated changes.`,
167
+ files: unchangedInGroup,
168
+ timestamp: now,
169
+ });
170
+ }
171
+ }
172
+ // Check for recurring error patterns in the same files
173
+ const errorPatterns = this.store.patterns
174
+ .filter(p => p.type === 'error_pattern' && p.occurrences >= 2);
175
+ for (const err of errorPatterns) {
176
+ const errFiles = err.context.files?.split(',').filter(Boolean) || [];
177
+ const overlap = errFiles.some(f => changedPaths.has(f));
178
+ if (overlap) {
179
+ insights.push({
180
+ type: 'warning',
181
+ priority: 'high',
182
+ title: `Recurring issue: ${err.context.title}`,
183
+ content: `This pattern has been flagged ${err.occurrences} times before. The issue "${err.context.title}" keeps recurring in these files. Consider a more fundamental fix.`,
184
+ files: errFiles,
185
+ timestamp: now,
186
+ });
187
+ }
188
+ }
189
+ // Check hot spots — files that change very frequently
190
+ const hotFiles = this.store.patterns
191
+ .filter(p => p.type === 'change_frequency' && p.occurrences >= 5)
192
+ .sort((a, b) => b.occurrences - a.occurrences)
193
+ .slice(0, 3);
194
+ for (const hot of hotFiles) {
195
+ if (changedPaths.has(hot.context.path)) {
196
+ insights.push({
197
+ type: 'pattern',
198
+ priority: 'low',
199
+ title: 'Frequently changed file',
200
+ content: `${hot.context.path} has been modified ${hot.occurrences} times. Consider whether this file has too many responsibilities or if there's an unstable requirement.`,
201
+ files: [hot.context.path],
202
+ timestamp: now,
203
+ });
204
+ }
205
+ }
206
+ return insights;
207
+ }
208
+ /** Get project summary for a directory */
209
+ getProjectSummary(projectDir) {
210
+ const key = projectDir.replace(/[\/\\]/g, '_');
211
+ return this.store.projectSummaries[key] || null;
212
+ }
213
+ /** Get pattern statistics */
214
+ getStats() {
215
+ const byType = {};
216
+ for (const p of this.store.patterns) {
217
+ byType[p.type] = (byType[p.type] || 0) + 1;
218
+ }
219
+ return {
220
+ totalPatterns: this.store.patterns.length,
221
+ byType,
222
+ projectCount: Object.keys(this.store.projectSummaries).length,
223
+ };
224
+ }
225
+ /** Clean up old patterns (called periodically) */
226
+ cleanup(maxAgeDays = 30) {
227
+ const cutoff = new Date(Date.now() - maxAgeDays * 24 * 60 * 60 * 1000);
228
+ this.store.patterns = this.store.patterns.filter(p => p.lastSeen > cutoff || p.occurrences >= 3);
229
+ this.store.lastCleanup = new Date();
230
+ this.dirty = true;
231
+ this.scheduleSave();
232
+ }
233
+ }
234
+ //# sourceMappingURL=pattern-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-memory.js","sourceRoot":"","sources":["../../src/brain/pattern-memory.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -45,7 +45,7 @@ const startCmd = new Command('start')
45
45
  .option('--agents <agents>', 'Comma-separated list of agents to watch')
46
46
  .action(async (projectDir, opts) => {
47
47
  const brainConfig = mergeConfig({ ...opts, projectDir });
48
- console.log(chalk.magenta.bold('\n SHADOW BRAIN v1.0.0'));
48
+ console.log(chalk.magenta.bold('\n SHADOW BRAIN v1.1.0'));
49
49
  console.log(chalk.dim(' Watching: ') + chalk.cyan(brainConfig.projectDir));
50
50
  console.log(chalk.dim(' Provider: ') + chalk.cyan(brainConfig.provider));
51
51
  console.log(chalk.dim(' Personality: ') + chalk.cyan(brainConfig.brainPersonality));
@@ -239,16 +239,170 @@ const configCmd = new Command('config')
239
239
  console.log(chalk.dim(' shadow-brain config --list'));
240
240
  console.log(chalk.dim(' shadow-brain config --reset'));
241
241
  });
242
+ // SETUP command — interactive first-time setup
243
+ const setupCmd = new Command('setup')
244
+ .description('Interactive setup wizard for first-time configuration')
245
+ .action(async () => {
246
+ const readline = await import('readline');
247
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
248
+ const ask = (q) => new Promise(res => rl.question(q, res));
249
+ console.log(chalk.magenta.bold('\n SHADOW BRAIN Setup Wizard\n'));
250
+ console.log(chalk.dim(' This will configure your Shadow Brain installation.\n'));
251
+ // Provider
252
+ console.log(chalk.cyan(' LLM Providers:'));
253
+ console.log(chalk.dim(' 1. ollama (free, local — default)'));
254
+ console.log(chalk.dim(' 2. anthropic (Claude API)'));
255
+ console.log(chalk.dim(' 3. openai (GPT-4o API)'));
256
+ console.log(chalk.dim(' 4. openrouter (multi-model gateway)'));
257
+ const provider = await ask(chalk.yellow(' Choose provider [1-4] (default: 1): '));
258
+ const providerMap = { '1': 'ollama', '2': 'anthropic', '3': 'openai', '4': 'openrouter' };
259
+ const chosenProvider = providerMap[provider.trim() || '1'] || 'ollama';
260
+ config.set('provider', chosenProvider);
261
+ console.log(chalk.green(` ✓ Provider: ${chosenProvider}\n`));
262
+ // API key (if not ollama)
263
+ if (chosenProvider !== 'ollama') {
264
+ const apiKey = await ask(chalk.yellow(` Enter ${chosenProvider} API key: `));
265
+ if (apiKey.trim()) {
266
+ config.set('apiKey', apiKey.trim());
267
+ console.log(chalk.green(' ✓ API key saved\n'));
268
+ }
269
+ else {
270
+ console.log(chalk.yellow(' ⚠ No API key provided — you can set it later with: shadow-brain config apiKey <key>\n'));
271
+ }
272
+ }
273
+ else {
274
+ console.log(chalk.dim(' Ollama runs locally — no API key needed.\n'));
275
+ }
276
+ // Personality
277
+ console.log(chalk.cyan(' Brain Personalities:'));
278
+ console.log(chalk.dim(' 1. balanced (all perspectives — default)'));
279
+ console.log(chalk.dim(' 2. mentor (teaches & guides)'));
280
+ console.log(chalk.dim(' 3. critic (thorough code review)'));
281
+ console.log(chalk.dim(' 4. architect (big-picture design)'));
282
+ console.log(chalk.dim(' 5. security (paranoid about vulns)'));
283
+ console.log(chalk.dim(' 6. performance (optimization focused)'));
284
+ const personality = await ask(chalk.yellow(' Choose personality [1-6] (default: 1): '));
285
+ const personalityMap = { '1': 'balanced', '2': 'mentor', '3': 'critic', '4': 'architect', '5': 'security', '6': 'performance' };
286
+ const chosenPersonality = personalityMap[personality.trim() || '1'] || 'balanced';
287
+ config.set('brainPersonality', chosenPersonality);
288
+ console.log(chalk.green(` ✓ Personality: ${chosenPersonality}\n`));
289
+ // Review depth
290
+ console.log(chalk.cyan(' Review Depth:'));
291
+ console.log(chalk.dim(' 1. standard (balanced — default)'));
292
+ console.log(chalk.dim(' 2. quick (fast, minimal context)'));
293
+ console.log(chalk.dim(' 3. deep (thorough, full diffs)'));
294
+ const depth = await ask(chalk.yellow(' Choose depth [1-3] (default: 1): '));
295
+ const depthMap = { '1': 'standard', '2': 'quick', '3': 'deep' };
296
+ config.set('reviewDepth', depthMap[depth.trim() || '1'] || 'standard');
297
+ console.log(chalk.green(' ✓ Review depth saved\n'));
298
+ // Auto-inject
299
+ const inject = await ask(chalk.yellow(' Enable auto-injection? [Y/n] (default: Y): '));
300
+ config.set('autoInject', inject.trim().toLowerCase() !== 'n');
301
+ console.log(chalk.green(` ✓ Auto-injection: ${inject.trim().toLowerCase() !== 'n' ? 'enabled' : 'disabled'}\n`));
302
+ rl.close();
303
+ // Summary
304
+ console.log(chalk.magenta.bold(' Setup complete!\n'));
305
+ console.log(chalk.dim(' Configuration saved to: ') + chalk.cyan(config.path));
306
+ console.log();
307
+ console.log(chalk.dim(' Next steps:'));
308
+ console.log(chalk.cyan(' shadow-brain start .') + chalk.dim(' # Start watching a project'));
309
+ console.log(chalk.cyan(' shadow-brain review .') + chalk.dim(' # One-shot analysis'));
310
+ console.log(chalk.cyan(' shadow-brain doctor') + chalk.dim(' # Check health'));
311
+ console.log();
312
+ });
313
+ // DOCTOR command — health check and diagnostics
314
+ const doctorCmd = new Command('doctor')
315
+ .description('Run health check and diagnostics')
316
+ .action(async () => {
317
+ console.log(chalk.magenta.bold('\n SHADOW BRAIN Doctor\n'));
318
+ const checks = [];
319
+ // Check 1: Config exists
320
+ try {
321
+ const saved = config.store;
322
+ checks.push({ name: 'Configuration', status: 'ok', detail: `provider=${saved.provider}, personality=${saved.brainPersonality}` });
323
+ }
324
+ catch {
325
+ checks.push({ name: 'Configuration', status: 'fail', detail: 'Could not read config. Run `shadow-brain setup`.' });
326
+ }
327
+ // Check 2: Provider connectivity
328
+ const provider = config.get('provider') || 'ollama';
329
+ if (provider === 'ollama') {
330
+ try {
331
+ const resp = await fetch('http://localhost:11434/api/tags', { signal: AbortSignal.timeout(3000) });
332
+ if (resp.ok) {
333
+ const data = await resp.json();
334
+ const modelCount = data.models?.length || 0;
335
+ checks.push({ name: 'Ollama', status: modelCount > 0 ? 'ok' : 'warn', detail: modelCount > 0 ? `${modelCount} model(s) available` : 'Ollama running but no models installed. Run: ollama pull llama3' });
336
+ }
337
+ else {
338
+ checks.push({ name: 'Ollama', status: 'fail', detail: 'Ollama returned error. Is it running? Start with: ollama serve' });
339
+ }
340
+ }
341
+ catch {
342
+ checks.push({ name: 'Ollama', status: 'fail', detail: 'Cannot connect to Ollama at localhost:11434. Start with: ollama serve' });
343
+ }
344
+ }
345
+ else {
346
+ const apiKey = config.get('apiKey');
347
+ if (apiKey) {
348
+ checks.push({ name: `${provider} API key`, status: 'ok', detail: 'Key is set (' + apiKey.slice(0, 4) + '...)' });
349
+ }
350
+ else {
351
+ checks.push({ name: `${provider} API key`, status: 'fail', detail: 'No API key configured. Run: shadow-brain config apiKey <key>' });
352
+ }
353
+ }
354
+ // Check 3: Node.js version
355
+ const nodeVersion = process.version;
356
+ const major = parseInt(nodeVersion.slice(1).split('.')[0]);
357
+ checks.push({ name: 'Node.js', status: major >= 18 ? 'ok' : 'warn', detail: `${nodeVersion} ${major >= 18 ? '(supported)' : '(recommend v18+)'}` });
358
+ // Check 4: Project directory
359
+ const projectDir = config.get('projectDir') || process.cwd();
360
+ try {
361
+ const fs = await import('fs');
362
+ const stat = fs.statSync(projectDir);
363
+ checks.push({ name: 'Project directory', status: stat.isDirectory() ? 'ok' : 'fail', detail: projectDir });
364
+ }
365
+ catch {
366
+ checks.push({ name: 'Project directory', status: 'warn', detail: `${projectDir} (will use cwd at runtime)` });
367
+ }
368
+ // Check 5: Agent detection
369
+ try {
370
+ const detected = await detectRunningAgents(projectDir);
371
+ checks.push({ name: 'Agent detection', status: detected.length > 0 ? 'ok' : 'warn', detail: detected.length > 0 ? `${detected.length} agent(s) detected: ${detected.map((a) => a.displayName).join(', ')}` : 'No agents detected in current project' });
372
+ }
373
+ catch {
374
+ checks.push({ name: 'Agent detection', status: 'warn', detail: 'Could not scan for agents' });
375
+ }
376
+ // Display results
377
+ for (const check of checks) {
378
+ const icon = check.status === 'ok' ? chalk.green('✓') : check.status === 'warn' ? chalk.yellow('⚠') : chalk.red('✗');
379
+ console.log(` ${icon} ${chalk.bold(check.name)}: ${chalk.dim(check.detail)}`);
380
+ }
381
+ const failCount = checks.filter(c => c.status === 'fail').length;
382
+ const warnCount = checks.filter(c => c.status === 'warn').length;
383
+ console.log();
384
+ if (failCount === 0 && warnCount === 0) {
385
+ console.log(chalk.green.bold(' All checks passed! Shadow Brain is ready.\n'));
386
+ }
387
+ else if (failCount === 0) {
388
+ console.log(chalk.yellow(` ${warnCount} warning(s). Shadow Brain will work but review the items above.\n`));
389
+ }
390
+ else {
391
+ console.log(chalk.red(` ${failCount} issue(s) found. Fix them before running Shadow Brain.\n`));
392
+ }
393
+ });
242
394
  // Main program
243
395
  const program = new Command();
244
396
  program
245
397
  .name('shadow-brain')
246
398
  .description('Shadow Brain — AI agent watcher and intelligence injector')
247
- .version('1.0.0');
399
+ .version('1.1.0');
248
400
  program.addCommand(startCmd);
249
401
  program.addCommand(reviewCmd);
250
402
  program.addCommand(injectCmd);
251
403
  program.addCommand(statusCmd);
252
404
  program.addCommand(configCmd);
405
+ program.addCommand(setupCmd);
406
+ program.addCommand(doctorCmd);
253
407
  program.parse();
254
408
  //# sourceMappingURL=cli.js.map