vantaverse-ai-reviewer 0.2.1 โ†’ 0.2.2

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * AI Agent - Orchestrates the analysis pipeline
2
+ * AI Agent - Orchestrates the analysis pipeline with detailed logging
3
3
  */
4
4
  import type { GeminiClient } from './gemini-client.js';
5
5
  import type { ScanResult } from '../core/scanner.js';
@@ -27,19 +27,28 @@ export interface AgentResult {
27
27
  totalTokens: number;
28
28
  duration: number;
29
29
  }
30
+ export interface ProgressCallback {
31
+ onPhaseStart: (phase: string, description: string) => void;
32
+ onPhaseComplete: (phase: string, result: string) => void;
33
+ onFileRead: (file: string) => void;
34
+ onFileComplete: (file: string) => void;
35
+ onAIStart: (phase: string, fileCount: number) => void;
36
+ onAIThinking: (message: string) => void;
37
+ onAIComplete: (phase: string, tokensUsed: number) => void;
38
+ }
30
39
  /**
31
- * AI Agent that orchestrates analysis
40
+ * AI Agent that orchestrates analysis with detailed progress logging
32
41
  */
33
42
  export declare class AIAgent {
34
43
  private client;
35
44
  private config;
36
45
  constructor(client: GeminiClient, config: AgentConfig);
37
46
  /**
38
- * Run the full analysis pipeline
47
+ * Run the full analysis pipeline with progress callbacks
39
48
  */
40
- analyze(scanResult: ScanResult, onProgress?: (stage: string, detail?: string) => void): Promise<AgentResult>;
49
+ analyze(scanResult: ScanResult, progress?: Partial<ProgressCallback>): Promise<AgentResult>;
41
50
  /**
42
- * Run a single analysis type
51
+ * Run a single analysis type with file-by-file progress
43
52
  */
44
53
  private runAnalysis;
45
54
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/ai/agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAIlF,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,aAAa,CAAC;IACzB,aAAa,EAAE,UAAU,EAAE,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAWD;;GAEG;AACH,qBAAa,OAAO;IAChB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW;IAKrD;;OAEG;IACG,OAAO,CACT,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,GACtD,OAAO,CAAC,WAAW,CAAC;IAsDvB;;OAEG;YACW,WAAW;IAoDzB;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAgCrC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,WAAW,CAAC,GAAG,OAAO,CASrI"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/ai/agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAIlF,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,aAAa,CAAC;IACzB,aAAa,EAAE,UAAU,EAAE,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC7B,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAWD;;GAEG;AACH,qBAAa,OAAO;IAChB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW;IAKrD;;OAEG;IACG,OAAO,CACT,UAAU,EAAE,UAAU,EACtB,QAAQ,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACrC,OAAO,CAAC,WAAW,CAAC;IAsDvB;;OAEG;YACW,WAAW;IA0EzB;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAgCrC;AAED;;GAEG;AACH,wBAAgB,WAAW,CACvB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,WAAW,CAAC,GAC3E,OAAO,CAST"}
package/dist/ai/agent.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * AI Agent - Orchestrates the analysis pipeline
2
+ * AI Agent - Orchestrates the analysis pipeline with detailed logging
3
3
  */
4
4
  import { getPrompt, createContextualPrompt } from './prompts.js';
5
5
  import { safeReadFile } from '../core/security.js';
@@ -13,7 +13,7 @@ const SECTION_TITLES = {
13
13
  overview: '๐Ÿ“‹ Project Overview'
14
14
  };
15
15
  /**
16
- * AI Agent that orchestrates analysis
16
+ * AI Agent that orchestrates analysis with detailed progress logging
17
17
  */
18
18
  export class AIAgent {
19
19
  client;
@@ -23,42 +23,39 @@ export class AIAgent {
23
23
  this.config = config;
24
24
  }
25
25
  /**
26
- * Run the full analysis pipeline
26
+ * Run the full analysis pipeline with progress callbacks
27
27
  */
28
- async analyze(scanResult, onProgress) {
28
+ async analyze(scanResult, progress) {
29
29
  const startTime = Date.now();
30
30
  const sections = [];
31
31
  let totalTokens = 0;
32
- // PHASE 1 OPTIMIZATION: Run local checks in parallel
33
- onProgress?.('local', 'โšก Running local checks in parallel...');
32
+ // Phase 1: Run local checks in parallel
33
+ progress?.onPhaseStart?.('local', 'Running local checks (git, tsc, eslint)...');
34
34
  const [context, typeErrors, lintIssues] = await Promise.all([
35
35
  gatherRepoContext(this.config.repoRoot),
36
36
  runTypeCheck(this.config.repoRoot),
37
37
  runLint(this.config.repoRoot)
38
38
  ]);
39
- // Add check results to context
39
+ // Report results
40
40
  if (typeErrors.length > 0) {
41
41
  context['type_errors'] = `${typeErrors.length} TypeScript errors found`;
42
- onProgress?.('local', `โš ๏ธ Found ${typeErrors.length} TypeScript errors`);
43
42
  }
44
43
  if (lintIssues.length > 0) {
45
44
  context['lint_issues'] = `${lintIssues.length} lint issues found`;
46
- onProgress?.('local', `โš ๏ธ Found ${lintIssues.length} lint issues`);
47
45
  }
48
- // Determine which files to analyze for each type
46
+ progress?.onPhaseComplete?.('local', `TSC: ${typeErrors.length} errors, ESLint: ${lintIssues.length} issues`);
47
+ // Categorize files for each analysis type
49
48
  const filesByType = this.categorizeFilesForAnalysis(scanResult);
50
- // Run each analysis type with progress updates
49
+ // Run each analysis type
51
50
  for (const analysisType of this.config.analysisTypes) {
52
51
  const files = filesByType[analysisType] || scanResult.files.slice(0, 20);
53
52
  if (files.length === 0)
54
53
  continue;
55
- // Report start of this analysis phase
56
- onProgress?.(analysisType, `๐Ÿ” Analyzing ${files.length} files...`);
57
- const section = await this.runAnalysis(analysisType, files, context, onProgress);
54
+ progress?.onPhaseStart?.(analysisType, `${SECTION_TITLES[analysisType]}`);
55
+ const section = await this.runAnalysis(analysisType, files, context, progress);
58
56
  sections.push(section);
59
57
  totalTokens += section.tokensUsed;
60
- // Report completion
61
- onProgress?.(analysisType, `โœ… ${SECTION_TITLES[analysisType]} complete`);
58
+ progress?.onPhaseComplete?.(analysisType, `${section.filesAnalyzed.length} files, ${section.tokensUsed.toLocaleString()} tokens`);
62
59
  }
63
60
  return {
64
61
  sections,
@@ -70,44 +67,63 @@ export class AIAgent {
70
67
  };
71
68
  }
72
69
  /**
73
- * Run a single analysis type
70
+ * Run a single analysis type with file-by-file progress
74
71
  */
75
- async runAnalysis(type, files, context, onProgress) {
76
- // Read file contents with progress updates
72
+ async runAnalysis(type, files, context, progress) {
77
73
  const fileContents = new Map();
78
74
  let totalChars = 0;
75
+ // Read files with progress updates
79
76
  for (const file of files) {
80
77
  if (totalChars >= this.config.maxCharsPerBatch)
81
78
  break;
82
79
  try {
83
- // Report file being read
84
- onProgress?.(type, `๐Ÿ“„ Reading ${file.relativePath}...`);
85
- const content = await safeReadFile(file.path, this.config.repoRoot, 100 * 1024 // 100KB max per file
86
- );
80
+ progress?.onFileRead?.(file.relativePath);
81
+ const content = await safeReadFile(file.path, this.config.repoRoot, 100 * 1024);
87
82
  if (totalChars + content.length <= this.config.maxCharsPerBatch) {
88
83
  fileContents.set(file.relativePath, content);
89
84
  totalChars += content.length;
85
+ progress?.onFileComplete?.(file.relativePath);
90
86
  }
91
87
  }
92
88
  catch {
93
- // Skip files that can't be read
89
+ // Skip unreadable files
94
90
  }
95
91
  }
96
- // Build contextual prompt
92
+ // Build prompt
97
93
  const basePrompt = getPrompt(type);
98
94
  const frameworkHints = this.config.framework.description;
99
95
  const prompt = createContextualPrompt(basePrompt, frameworkHints, context);
100
- // Report AI thinking
101
- onProgress?.(type, `๐Ÿค– AI is analyzing ${fileContents.size} files...`);
102
- // Run analysis
103
- const result = await this.client.analyzeMultiple(prompt, fileContents, '');
104
- return {
105
- type,
106
- title: SECTION_TITLES[type],
107
- content: result.content,
108
- tokensUsed: result.tokensUsed,
109
- filesAnalyzed: Array.from(fileContents.keys())
110
- };
96
+ // AI analysis phase
97
+ progress?.onAIStart?.(type, fileContents.size);
98
+ // Show thinking messages
99
+ const thinkingMessages = [
100
+ '๐Ÿค– Sending code to Gemini AI...',
101
+ '๐Ÿง  AI is analyzing patterns...',
102
+ '๐Ÿ’ญ Processing code structure...',
103
+ '๐Ÿ” Identifying issues...',
104
+ 'โœจ Generating insights...'
105
+ ];
106
+ let thinkingIdx = 0;
107
+ const thinkingInterval = setInterval(() => {
108
+ progress?.onAIThinking?.(thinkingMessages[thinkingIdx % thinkingMessages.length]);
109
+ thinkingIdx++;
110
+ }, 2000);
111
+ try {
112
+ const result = await this.client.analyzeMultiple(prompt, fileContents, '');
113
+ clearInterval(thinkingInterval);
114
+ progress?.onAIComplete?.(type, result.tokensUsed);
115
+ return {
116
+ type,
117
+ title: SECTION_TITLES[type],
118
+ content: result.content,
119
+ tokensUsed: result.tokensUsed,
120
+ filesAnalyzed: Array.from(fileContents.keys())
121
+ };
122
+ }
123
+ catch (error) {
124
+ clearInterval(thinkingInterval);
125
+ throw error;
126
+ }
111
127
  }
112
128
  /**
113
129
  * Categorize files for each analysis type
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/ai/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/ai/agent.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Scan Command - Main analysis command with interactive CLI
2
+ * Scan Command - Production-ready CLI with multi-line progress logs
3
3
  */
4
4
  export interface ScanOptions {
5
5
  output?: string;
@@ -13,7 +13,7 @@ export interface ScanOptions {
13
13
  security?: boolean;
14
14
  }
15
15
  /**
16
- * Execute the scan command with interactive CLI
16
+ * Execute the scan command with production-ready logging
17
17
  */
18
18
  export declare function scan(options?: ScanOptions): Promise<void>;
19
19
  //# sourceMappingURL=scan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAuBD;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmSnE"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAaD;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgSnE"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Scan Command - Main analysis command with interactive CLI
2
+ * Scan Command - Production-ready CLI with multi-line progress logs
3
3
  */
4
4
  import path from 'path';
5
5
  import chalk from 'chalk';
@@ -12,292 +12,266 @@ import { createAgent } from '../ai/agent.js';
12
12
  import { generateMarkdownReport, writeReport, generateJsonReport } from '../reporters/markdown.js';
13
13
  import { getChangedFiles, getRelatedFiles } from '../core/diff-analyzer.js';
14
14
  import { runSecurityScan } from '../core/security-scanner.js';
15
- import { estimateScanCost, formatEstimate } from '../utils/token-estimator.js';
15
+ import { estimateScanCost } from '../utils/token-estimator.js';
16
16
  import fs from 'fs';
17
17
  import inquirer from 'inquirer';
18
- // Phase icons for display
19
- const PHASE_ICONS = {
20
- local: 'โšก',
21
- overview: '๐Ÿ“‹',
22
- security: '๐Ÿ”',
23
- codeQuality: '๐Ÿงน',
24
- accessibility: 'โ™ฟ',
25
- uiux: '๐ŸŽจ',
26
- testing: '๐Ÿงช'
18
+ // File type icons
19
+ const FILE_ICONS = {
20
+ 'ts': '๐Ÿ“˜', 'tsx': 'โš›๏ธ', 'js': '๐Ÿ“™', 'jsx': 'โš›๏ธ',
21
+ 'py': '๐Ÿ', 'vue': '๐Ÿ’š', 'svelte': '๐Ÿงก', 'css': '๐ŸŽจ',
22
+ 'scss': '๐ŸŽจ', 'html': '๐Ÿ“„', 'json': '๐Ÿ“‹', 'md': '๐Ÿ“'
27
23
  };
28
- // Agentic thinking messages
29
- const THINKING_MESSAGES = [
30
- '๐Ÿค– AI is thinking deeply...',
31
- '๐Ÿง  Processing code patterns...',
32
- '๐Ÿ’ญ Formulating insights...',
33
- '๐Ÿ”ฎ Generating recommendations...',
34
- 'โœจ Almost there...',
35
- '๐ŸŽฏ Focusing on key issues...'
36
- ];
24
+ function getFileIcon(ext) {
25
+ return FILE_ICONS[ext] || '๐Ÿ“„';
26
+ }
37
27
  /**
38
- * Execute the scan command with interactive CLI
28
+ * Execute the scan command with production-ready logging
39
29
  */
40
30
  export async function scan(options = {}) {
41
31
  const repoRoot = process.cwd();
32
+ const verbose = options.verbose || false;
42
33
  logger.banner();
43
- // Check if token exists first (without spinner)
34
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
35
+ // PHASE 1: Authentication
36
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
37
+ console.log(chalk.bold.cyan('\nโ”โ”โ” Authentication โ”โ”โ”'));
44
38
  const existingToken = getToken();
45
39
  let token;
46
40
  if (!existingToken) {
41
+ console.log(chalk.yellow(' โ—‹ No API token found'));
47
42
  token = await ensureToken();
43
+ console.log(chalk.green(' โœ“ Token configured'));
48
44
  }
49
45
  else {
50
46
  token = existingToken;
51
- logger.success('Gemini API token found');
47
+ console.log(chalk.green(' โœ“ API token found'));
52
48
  }
53
- const spin = logger.spinner('Validating API access...');
54
- spin.start();
55
- try {
56
- // Validate token
57
- const client = createGeminiClient(token);
58
- const validation = await client.validateKey();
59
- if (!validation.valid) {
60
- spin.fail('Invalid Gemini API token');
61
- if (validation.error) {
62
- logger.error(`Error: ${validation.error}`);
63
- }
64
- logger.error('Please check your token and try again.');
65
- logger.info('Get a new key at: https://aistudio.google.com/apikey');
66
- logger.info('To reset token, run: npx vantaverse-ai-reviewer config --action reset');
67
- process.exit(1);
49
+ const client = createGeminiClient(token);
50
+ console.log(chalk.gray(' โ†’ Validating API access...'));
51
+ const validation = await client.validateKey();
52
+ if (!validation.valid) {
53
+ console.log(chalk.red(' โœ— Invalid API token'));
54
+ if (validation.error) {
55
+ console.log(chalk.red(` Error: ${validation.error}`));
68
56
  }
69
- spin.succeed('API access validated');
70
- // Detect framework
71
- spin.start('๐Ÿ” Detecting project framework...');
72
- const framework = await detectFramework(repoRoot);
73
- spin.succeed(`Detected: ${chalk.cyan(framework.displayName)}`);
74
- if (options.verbose) {
75
- logger.info(`Framework hints: ${getFrameworkHints(framework.name)}`);
76
- }
77
- // Diff-based or full scanning
78
- let scanResult;
79
- let diffMode = false;
80
- if (options.diff && !options.full) {
81
- spin.start('๐Ÿ“Š Analyzing git changes...');
82
- const diffResult = await getChangedFiles(repoRoot, options.base || 'main');
83
- if (diffResult.hasChanges) {
84
- diffMode = true;
85
- spin.succeed(`Diff mode: ${chalk.green(diffResult.summary)}`);
86
- const relatedFiles = await getRelatedFiles(repoRoot, diffResult.changedFiles);
87
- const allRelevantFiles = [...new Set([...diffResult.changedFiles, ...relatedFiles])];
88
- if (options.verbose) {
89
- logger.info(`Changed: ${diffResult.changedFiles.length}, Related: ${relatedFiles.length}`);
90
- }
91
- spin.start('๐Ÿ“‚ Scanning changed files...');
92
- const fullScan = await scanRepository(repoRoot, framework);
93
- scanResult = {
94
- ...fullScan,
95
- files: fullScan.files.filter(f => allRelevantFiles.some(cf => f.relativePath.endsWith(cf) || cf.endsWith(f.relativePath)))
96
- };
97
- scanResult.byCategory = {
98
- component: [], page: [], api: [], utility: [],
99
- config: [], test: [], style: [], type: [], other: []
100
- };
101
- for (const file of scanResult.files) {
102
- scanResult.byCategory[file.category].push(file);
103
- }
104
- }
105
- else {
106
- spin.info('No changes detected, running full scan');
107
- scanResult = await scanRepository(repoRoot, framework);
57
+ console.log(chalk.gray(' Get a new key: https://aistudio.google.com/apikey'));
58
+ process.exit(1);
59
+ }
60
+ console.log(chalk.green(' โœ“ API access validated'));
61
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
62
+ // PHASE 2: Framework Detection
63
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
64
+ console.log(chalk.bold.cyan('\nโ”โ”โ” Framework Detection โ”โ”โ”'));
65
+ console.log(chalk.gray(' โ†’ Analyzing project structure...'));
66
+ const framework = await detectFramework(repoRoot);
67
+ console.log(chalk.green(` โœ“ Detected: ${chalk.white.bold(framework.displayName)}`));
68
+ if (verbose) {
69
+ console.log(chalk.gray(` Hints: ${getFrameworkHints(framework.name)}`));
70
+ }
71
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
72
+ // PHASE 3: File Scanning
73
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
74
+ console.log(chalk.bold.cyan('\nโ”โ”โ” File Scanning โ”โ”โ”'));
75
+ let scanResult;
76
+ let diffMode = false;
77
+ if (options.diff && !options.full) {
78
+ console.log(chalk.gray(' โ†’ Analyzing git changes...'));
79
+ const diffResult = await getChangedFiles(repoRoot, options.base || 'main');
80
+ if (diffResult.hasChanges) {
81
+ diffMode = true;
82
+ console.log(chalk.green(` โœ“ ${diffResult.changedFiles.length} changed files found`));
83
+ const relatedFiles = await getRelatedFiles(repoRoot, diffResult.changedFiles);
84
+ console.log(chalk.gray(` + ${relatedFiles.length} related files`));
85
+ const allRelevantFiles = [...new Set([...diffResult.changedFiles, ...relatedFiles])];
86
+ const fullScan = await scanRepository(repoRoot, framework);
87
+ scanResult = {
88
+ ...fullScan,
89
+ files: fullScan.files.filter(f => allRelevantFiles.some(cf => f.relativePath.endsWith(cf) || cf.endsWith(f.relativePath)))
90
+ };
91
+ scanResult.byCategory = {
92
+ component: [], page: [], api: [], utility: [],
93
+ config: [], test: [], style: [], type: [], other: []
94
+ };
95
+ for (const file of scanResult.files) {
96
+ scanResult.byCategory[file.category].push(file);
108
97
  }
109
98
  }
110
99
  else {
111
- spin.start('๐Ÿ“‚ Scanning repository...');
100
+ console.log(chalk.yellow(' โ—‹ No changes detected, running full scan'));
112
101
  scanResult = await scanRepository(repoRoot, framework);
113
102
  }
114
- spin.succeed(`Found ${chalk.cyan(scanResult.files.length)} files${diffMode ? chalk.gray(' (diff mode)') : ''}`);
115
- // Show scanned files in verbose mode
116
- if (options.verbose) {
117
- console.log();
118
- console.log(chalk.gray(' Scanned files:'));
119
- const displayFiles = scanResult.files.slice(0, 15);
120
- for (const file of displayFiles) {
121
- const ext = file.extension || 'file';
122
- const icon = getFileIcon(ext);
123
- console.log(` ${icon} ${chalk.gray(file.relativePath)} ${chalk.green('[scanned]')}`);
124
- }
125
- if (scanResult.files.length > 15) {
126
- console.log(chalk.gray(` ... and ${scanResult.files.length - 15} more files`));
127
- }
128
- console.log();
103
+ }
104
+ else {
105
+ console.log(chalk.gray(' โ†’ Scanning repository...'));
106
+ scanResult = await scanRepository(repoRoot, framework);
107
+ }
108
+ console.log(chalk.green(` โœ“ Found ${chalk.white.bold(scanResult.files.length)} files`));
109
+ // Show file list in verbose mode
110
+ if (verbose && scanResult.files.length > 0) {
111
+ console.log(chalk.gray('\n Files to analyze:'));
112
+ const displayFiles = scanResult.files.slice(0, 20);
113
+ for (const file of displayFiles) {
114
+ const icon = getFileIcon(file.extension);
115
+ console.log(chalk.gray(` ${icon} ${file.relativePath}`));
129
116
  }
130
- if (scanResult.files.length === 0) {
131
- logger.warn('No files found to analyze. Check your project structure.');
132
- process.exit(0);
117
+ if (scanResult.files.length > 20) {
118
+ console.log(chalk.gray(` ... and ${scanResult.files.length - 20} more`));
133
119
  }
134
- // Parse analysis types
135
- const analysisTypes = options.types
136
- ? options.types.split(',')
137
- : ['overview', 'security', 'codeQuality', 'accessibility'];
138
- // Token estimation
139
- const estimate = estimateScanCost(scanResult.files, analysisTypes);
140
- if (options.verbose) {
141
- console.log(formatEstimate(estimate));
142
- console.log();
120
+ }
121
+ if (scanResult.files.length === 0) {
122
+ console.log(chalk.yellow('\n โš  No files found to analyze'));
123
+ process.exit(0);
124
+ }
125
+ // Parse analysis types
126
+ const analysisTypes = options.types
127
+ ? options.types.split(',')
128
+ : ['overview', 'security', 'codeQuality', 'accessibility'];
129
+ // Token estimation
130
+ const estimate = estimateScanCost(scanResult.files, analysisTypes);
131
+ if (verbose) {
132
+ console.log(chalk.gray(`\n Token estimate: ~${(estimate.totalTokens / 1000).toFixed(1)}k tokens ($${estimate.estimatedCost.toFixed(4)})`));
133
+ }
134
+ // Budget check
135
+ if (options.budget && estimate.estimatedCost > options.budget) {
136
+ console.log(chalk.yellow(`\n โš  Estimated cost exceeds budget ($${options.budget})`));
137
+ const { proceed } = await inquirer.prompt([
138
+ {
139
+ type: 'confirm',
140
+ name: 'proceed',
141
+ message: 'Proceed anyway?',
142
+ default: false
143
+ }
144
+ ]);
145
+ if (!proceed) {
146
+ console.log(chalk.yellow(' Cancelled. Try --diff mode to reduce cost.'));
147
+ process.exit(0);
143
148
  }
144
- // Budget check
145
- if (options.budget && estimate.estimatedCost > options.budget) {
146
- logger.warn(`Estimated cost ($${estimate.estimatedCost.toFixed(4)}) exceeds budget ($${options.budget.toFixed(2)})`);
147
- const { proceed } = await inquirer.prompt([
148
- {
149
- type: 'confirm',
150
- name: 'proceed',
151
- message: 'Do you want to proceed anyway?',
152
- default: false
153
- }
154
- ]);
155
- if (!proceed) {
156
- logger.info('Scan cancelled. Try using --diff mode to reduce cost.');
157
- process.exit(0);
149
+ }
150
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
151
+ // PHASE 4: Free Security Checks
152
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
153
+ if (options.security !== false) {
154
+ console.log(chalk.bold.cyan('\nโ”โ”โ” Security Checks (Free) โ”โ”โ”'));
155
+ console.log(chalk.gray(' โ†’ Scanning for secrets...'));
156
+ const securityScan = await runSecurityScan(scanResult.files, repoRoot);
157
+ if (securityScan.secrets.length > 0) {
158
+ console.log(chalk.red(` โœ— ${securityScan.secrets.length} potential secrets found`));
159
+ for (const secret of securityScan.secrets.slice(0, 3)) {
160
+ console.log(chalk.red(` โ€ข ${secret.file}:${secret.line} - ${secret.type}`));
158
161
  }
159
162
  }
160
- // Free security scanning
161
- if (options.security !== false) {
162
- spin.start('๐Ÿ” Running free security checks...');
163
- const securityScan = await runSecurityScan(scanResult.files, repoRoot);
164
- if (securityScan.hasIssues) {
165
- spin.warn('Security issues found');
166
- console.log();
167
- if (securityScan.secrets.length > 0) {
168
- logger.error(`๐Ÿ”ด ${securityScan.secrets.length} potential secrets detected:`);
169
- for (const secret of securityScan.secrets.slice(0, 5)) {
170
- console.log(` ${secret.file}:${secret.line} - ${secret.type} (${secret.severity})`);
171
- }
172
- if (securityScan.secrets.length > 5) {
173
- console.log(` ... and ${securityScan.secrets.length - 5} more`);
174
- }
175
- console.log();
176
- }
177
- if (securityScan.vulnerabilities.length > 0) {
178
- const critical = securityScan.vulnerabilities.filter(v => v.severity === 'critical' || v.severity === 'high');
179
- if (critical.length > 0) {
180
- logger.warn(`โš ๏ธ ${critical.length} critical/high npm vulnerabilities:`);
181
- for (const vuln of critical.slice(0, 5)) {
182
- console.log(` ${vuln.name}: ${vuln.description} (${vuln.severity})`);
183
- }
184
- console.log();
185
- }
186
- }
163
+ else {
164
+ console.log(chalk.green(' โœ“ No secrets detected'));
165
+ }
166
+ console.log(chalk.gray(' โ†’ Checking npm vulnerabilities...'));
167
+ if (securityScan.vulnerabilities.length > 0) {
168
+ const critical = securityScan.vulnerabilities.filter(v => v.severity === 'critical' || v.severity === 'high');
169
+ if (critical.length > 0) {
170
+ console.log(chalk.yellow(` โš  ${critical.length} high/critical vulnerabilities`));
187
171
  }
188
172
  else {
189
- spin.succeed('No secrets or critical vulnerabilities detected');
173
+ console.log(chalk.green(` โœ“ No critical vulnerabilities`));
190
174
  }
191
175
  }
192
- // Run AI analysis with interactive progress
193
- console.log();
194
- logger.header('๐Ÿค– Running AI Analysis');
195
- console.log(chalk.gray(` Analysis types: ${analysisTypes.join(', ')}`));
196
- if (diffMode) {
197
- console.log(chalk.gray(` Mode: Diff-based (${scanResult.files.length} files)`));
176
+ else {
177
+ console.log(chalk.green(' โœ“ No vulnerabilities found'));
198
178
  }
199
- console.log();
200
- // Create agentic progress display
201
- let currentPhase = '';
202
- let thinkingIndex = 0;
203
- let thinkingInterval = null;
204
- const agentSpin = logger.spinner('Starting analysis...');
205
- agentSpin.start();
206
- const agent = createAgent(client, {
207
- repoRoot,
208
- framework,
209
- analysisTypes
210
- });
211
- const result = await agent.analyze(scanResult, (phase, detail) => {
212
- const icon = PHASE_ICONS[phase] || '๐Ÿ”„';
213
- if (phase !== currentPhase) {
214
- currentPhase = phase;
215
- // Show phase transition
216
- if (thinkingInterval) {
217
- clearInterval(thinkingInterval);
218
- thinkingInterval = null;
219
- }
179
+ }
180
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
181
+ // PHASE 5: AI Analysis
182
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
183
+ console.log(chalk.bold.cyan('\nโ”โ”โ” AI Analysis โ”โ”โ”'));
184
+ console.log(chalk.gray(` Types: ${analysisTypes.join(', ')}`));
185
+ if (diffMode) {
186
+ console.log(chalk.magenta(` Mode: Diff-based (optimized)`));
187
+ }
188
+ const agent = createAgent(client, {
189
+ repoRoot,
190
+ framework,
191
+ analysisTypes
192
+ });
193
+ // Progress callbacks for multi-line logging
194
+ let currentPhase = '';
195
+ let fileCount = 0;
196
+ const progressCallbacks = {
197
+ onPhaseStart: (phase, description) => {
198
+ console.log(chalk.bold.white(`\n โ”Œโ”€ ${description}`));
199
+ currentPhase = phase;
200
+ fileCount = 0;
201
+ },
202
+ onPhaseComplete: (phase, result) => {
203
+ console.log(chalk.green(` โ””โ”€ โœ“ Complete (${result})`));
204
+ },
205
+ onFileRead: (file) => {
206
+ if (verbose) {
207
+ const ext = file.split('.').pop() || '';
208
+ const icon = getFileIcon(ext);
209
+ process.stdout.write(chalk.gray(` โ”‚ ${icon} Reading ${file}...`));
220
210
  }
221
- if (detail) {
222
- // Check if this is an AI thinking phase
223
- if (detail.includes('AI is analyzing')) {
224
- // Start rotating thinking messages
225
- thinkingIndex = 0;
226
- thinkingInterval = setInterval(() => {
227
- agentSpin.text = `${icon} ${THINKING_MESSAGES[thinkingIndex % THINKING_MESSAGES.length]}`;
228
- thinkingIndex++;
229
- }, 1500);
230
- }
231
- else {
232
- agentSpin.text = `${icon} ${detail}`;
233
- }
211
+ fileCount++;
212
+ },
213
+ onFileComplete: (file) => {
214
+ if (verbose) {
215
+ process.stdout.write(chalk.green(' โœ“\n'));
234
216
  }
235
- });
236
- if (thinkingInterval) {
237
- clearInterval(thinkingInterval);
238
- }
239
- agentSpin.succeed(`Analysis complete in ${chalk.cyan((result.duration / 1000).toFixed(1) + 's')}`);
240
- // Generate report
241
- const outputFile = options.output || 'AI_REVIEW_REPORT.md';
242
- const metadata = {
243
- framework,
244
- scanResult,
245
- generatedAt: new Date(),
246
- modelName: client.getModelName()
247
- };
248
- if (options.json) {
249
- const jsonReport = generateJsonReport(result, metadata);
250
- const jsonPath = outputFile.replace('.md', '.json');
251
- await fs.promises.writeFile(path.resolve(jsonPath), JSON.stringify(jsonReport, null, 2), 'utf-8');
252
- logger.success(`JSON report generated: ${jsonPath}`);
253
- }
254
- const markdownReport = generateMarkdownReport(result, metadata);
255
- const reportPath = await writeReport(markdownReport, outputFile);
256
- logger.success(`Report generated: ${outputFile}`);
257
- // Summary box
258
- console.log();
259
- console.log(chalk.cyan(' โ”Œ' + 'โ”€'.repeat(50) + 'โ”'));
260
- console.log(chalk.cyan(' โ”‚') + chalk.white.bold(' ๐Ÿ“Š Analysis Summary'.padEnd(50)) + chalk.cyan('โ”‚'));
261
- console.log(chalk.cyan(' โ”œ' + 'โ”€'.repeat(50) + 'โ”ค'));
262
- console.log(chalk.cyan(' โ”‚') + ` Files Analyzed: ${chalk.green(scanResult.files.length)}`.padEnd(59) + chalk.cyan('โ”‚'));
263
- console.log(chalk.cyan(' โ”‚') + ` Tokens Used: ${chalk.yellow(result.totalTokens.toLocaleString())}`.padEnd(59) + chalk.cyan('โ”‚'));
264
- console.log(chalk.cyan(' โ”‚') + ` Est. Cost: ${chalk.gray('$' + estimate.estimatedCost.toFixed(4))}`.padEnd(59) + chalk.cyan('โ”‚'));
265
- console.log(chalk.cyan(' โ”‚') + ` Duration: ${chalk.cyan((result.duration / 1000).toFixed(1) + 's')}`.padEnd(59) + chalk.cyan('โ”‚'));
266
- console.log(chalk.cyan(' โ”‚') + ` Report: ${chalk.green(reportPath)}`.padEnd(59) + chalk.cyan('โ”‚'));
267
- if (diffMode) {
268
- console.log(chalk.cyan(' โ”‚') + ` Mode: ${chalk.magenta('Diff-based (optimized)')}`.padEnd(59) + chalk.cyan('โ”‚'));
217
+ },
218
+ onAIStart: (phase, count) => {
219
+ console.log(chalk.gray(` โ”‚`));
220
+ console.log(chalk.yellow(` โ”‚ ๐Ÿค– Sending ${count} files to Gemini AI...`));
221
+ },
222
+ onAIThinking: (message) => {
223
+ process.stdout.write(`\r โ”‚ ${chalk.cyan(message)} `);
224
+ },
225
+ onAIComplete: (phase, tokens) => {
226
+ process.stdout.write('\r');
227
+ console.log(chalk.green(` โ”‚ โœ“ AI analysis complete (${tokens.toLocaleString()} tokens)`));
269
228
  }
270
- console.log(chalk.cyan(' โ””' + 'โ”€'.repeat(50) + 'โ”˜'));
271
- console.log();
272
- logger.success('Analysis complete! ๐ŸŽ‰');
229
+ };
230
+ const startTime = Date.now();
231
+ const result = await agent.analyze(scanResult, progressCallbacks);
232
+ const duration = ((Date.now() - startTime) / 1000).toFixed(1);
233
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
234
+ // PHASE 6: Report Generation
235
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
236
+ console.log(chalk.bold.cyan('\nโ”โ”โ” Report Generation โ”โ”โ”'));
237
+ const outputFile = options.output || 'AI_REVIEW_REPORT.md';
238
+ const metadata = {
239
+ framework,
240
+ scanResult,
241
+ generatedAt: new Date(),
242
+ modelName: client.getModelName()
243
+ };
244
+ console.log(chalk.gray(` โ†’ Generating Markdown report...`));
245
+ const markdownReport = generateMarkdownReport(result, metadata);
246
+ const reportPath = await writeReport(markdownReport, outputFile);
247
+ console.log(chalk.green(` โœ“ ${outputFile}`));
248
+ if (options.json) {
249
+ console.log(chalk.gray(` โ†’ Generating JSON report...`));
250
+ const jsonReport = generateJsonReport(result, metadata);
251
+ const jsonPath = outputFile.replace('.md', '.json');
252
+ await fs.promises.writeFile(path.resolve(jsonPath), JSON.stringify(jsonReport, null, 2), 'utf-8');
253
+ console.log(chalk.green(` โœ“ ${jsonPath}`));
273
254
  }
274
- catch (error) {
275
- spin.fail('Analysis failed');
276
- logger.error(error instanceof Error ? error.message : 'Unknown error');
277
- if (options.verbose && error instanceof Error) {
278
- console.error(error.stack);
279
- }
280
- process.exit(1);
255
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
256
+ // Summary
257
+ // โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
258
+ console.log(chalk.bold.cyan('\nโ”โ”โ” Summary โ”โ”โ”'));
259
+ console.log();
260
+ console.log(chalk.cyan(' โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—'));
261
+ console.log(chalk.cyan(' โ•‘') + chalk.white.bold(' ๐Ÿ“Š Analysis Complete ') + chalk.cyan('โ•‘'));
262
+ console.log(chalk.cyan(' โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ'));
263
+ console.log(chalk.cyan(' โ•‘') + ` Framework: ${chalk.white(framework.displayName.padEnd(23))}` + chalk.cyan('โ•‘'));
264
+ console.log(chalk.cyan(' โ•‘') + ` Files Analyzed: ${chalk.green(String(scanResult.files.length).padEnd(23))}` + chalk.cyan('โ•‘'));
265
+ console.log(chalk.cyan(' โ•‘') + ` Tokens Used: ${chalk.yellow(result.totalTokens.toLocaleString().padEnd(23))}` + chalk.cyan('โ•‘'));
266
+ console.log(chalk.cyan(' โ•‘') + ` Est. Cost: ${chalk.gray('$' + estimate.estimatedCost.toFixed(4).padEnd(22))}` + chalk.cyan('โ•‘'));
267
+ console.log(chalk.cyan(' โ•‘') + ` Duration: ${chalk.cyan((duration + 's').padEnd(23))}` + chalk.cyan('โ•‘'));
268
+ console.log(chalk.cyan(' โ•‘') + ` Report: ${chalk.green(outputFile.padEnd(23))}` + chalk.cyan('โ•‘'));
269
+ if (diffMode) {
270
+ console.log(chalk.cyan(' โ•‘') + ` Mode: ${chalk.magenta('Diff-based'.padEnd(23))}` + chalk.cyan('โ•‘'));
281
271
  }
282
- }
283
- /**
284
- * Get icon for file extension
285
- */
286
- function getFileIcon(ext) {
287
- const icons = {
288
- 'ts': '๐Ÿ“˜',
289
- 'tsx': 'โš›๏ธ',
290
- 'js': '๐Ÿ“™',
291
- 'jsx': 'โš›๏ธ',
292
- 'py': '๐Ÿ',
293
- 'vue': '๐Ÿ’š',
294
- 'svelte': '๐Ÿงก',
295
- 'css': '๐ŸŽจ',
296
- 'scss': '๐ŸŽจ',
297
- 'html': '๐Ÿ“„',
298
- 'json': '๐Ÿ“‹',
299
- 'md': '๐Ÿ“'
300
- };
301
- return icons[ext] || '๐Ÿ“„';
272
+ console.log(chalk.cyan(' โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•'));
273
+ console.log();
274
+ console.log(chalk.green.bold(' โœ… Analysis complete!'));
275
+ console.log();
302
276
  }
303
277
  //# sourceMappingURL=scan.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,cAAc,EAAmC,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG/E,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAchC,0BAA0B;AAC1B,MAAM,WAAW,GAA2B;IACxC,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,GAAG;IAClB,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;CAChB,CAAC;AAEF,4BAA4B;AAC5B,MAAM,iBAAiB,GAAG;IACtB,6BAA6B;IAC7B,gCAAgC;IAChC,4BAA4B;IAC5B,kCAAkC;IAClC,mBAAmB;IACnB,8BAA8B;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,UAAuB,EAAE;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE/B,MAAM,CAAC,MAAM,EAAE,CAAC;IAEhB,gDAAgD;IAChD,MAAM,aAAa,GAAG,QAAQ,EAAE,CAAC;IACjC,IAAI,KAAa,CAAC;IAElB,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,KAAK,GAAG,MAAM,WAAW,EAAE,CAAC;IAChC,CAAC;SAAM,CAAC;QACJ,KAAK,GAAG,aAAa,CAAC;QACtB,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;IAEb,IAAI,CAAC;QACD,iBAAiB;QACjB,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAE9C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,KAAK,CAAC,UAAU,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACpE,MAAM,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAErC,mBAAmB;QACnB,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAE/D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,oBAAoB,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,8BAA8B;QAC9B,IAAI,UAAsB,CAAC;QAC3B,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;YAE3E,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;gBACxB,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAE9D,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;gBAC9E,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,YAAY,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAErF,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBAClB,MAAM,CAAC,IAAI,CAAC,YAAY,UAAU,CAAC,YAAY,CAAC,MAAM,cAAc,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/F,CAAC;gBAED,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAE3D,UAAU,GAAG;oBACT,GAAG,QAAQ;oBACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7B,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAC1F;iBACJ,CAAC;gBAEF,UAAU,CAAC,UAAU,GAAG;oBACpB,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;oBAC7C,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;iBACvD,CAAC;gBACF,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;oBAClC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpD,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBACpD,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC3D,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACxC,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhH,qCAAqC;QACrC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC5C,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;gBACrC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,uBAAuB;QACvB,MAAM,aAAa,GAAiB,OAAO,CAAC,KAAK;YAC7C,CAAC,CAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAkB;YAC5C,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;QAE/D,mBAAmB;QACnB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAEnE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;QAED,eAAe;QACf,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,oBAAoB,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAErH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAuB;gBAC5D;oBACI,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,gCAAgC;oBACzC,OAAO,EAAE,KAAK;iBACjB;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;QAED,yBAAyB;QACzB,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAEvE,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,EAAE,CAAC;gBAEd,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,MAAM,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,8BAA8B,CAAC,CAAC;oBAC9E,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;wBACpD,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;oBAC1F,CAAC;oBACD,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAClC,OAAO,CAAC,GAAG,CAAC,cAAc,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;oBACtE,CAAC;oBACD,OAAO,CAAC,GAAG,EAAE,CAAC;gBAClB,CAAC;gBAED,IAAI,YAAY,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,MAAM,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrD,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CACrD,CAAC;oBACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,qCAAqC,CAAC,CAAC;wBACxE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;4BACtC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;wBAC3E,CAAC;wBACD,OAAO,CAAC,GAAG,EAAE,CAAC;oBAClB,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC;YACpE,CAAC;QACL,CAAC;QAED,4CAA4C;QAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,kCAAkC;QAClC,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,gBAAgB,GAA0B,IAAI,CAAC;QAEnD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACzD,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE;YAC9B,QAAQ;YACR,SAAS;YACT,aAAa;SAChB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAa,EAAE,MAAe,EAAE,EAAE;YAC9E,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;YAExC,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;gBACzB,YAAY,GAAG,KAAK,CAAC;gBACrB,wBAAwB;gBACxB,IAAI,gBAAgB,EAAE,CAAC;oBACnB,aAAa,CAAC,gBAAgB,CAAC,CAAC;oBAChC,gBAAgB,GAAG,IAAI,CAAC;gBAC5B,CAAC;YACL,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACT,wCAAwC;gBACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBACrC,mCAAmC;oBACnC,aAAa,GAAG,CAAC,CAAC;oBAClB,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;wBAChC,SAAS,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,iBAAiB,CAAC,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC1F,aAAa,EAAE,CAAC;oBACpB,CAAC,EAAE,IAAI,CAAC,CAAC;gBACb,CAAC;qBAAM,CAAC;oBACJ,SAAS,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;gBACzC,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,gBAAgB,EAAE,CAAC;YACnB,aAAa,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC;QAED,SAAS,CAAC,OAAO,CAAC,wBAAwB,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;QAEnG,kBAAkB;QAClB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,qBAAqB,CAAC;QAC3D,MAAM,QAAQ,GAAG;YACb,SAAS;YACT,UAAU;YACV,WAAW,EAAE,IAAI,IAAI,EAAE;YACvB,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE;SACnC,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACvB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EACtB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EACnC,OAAO,CACV,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,cAAc,GAAG,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAEjE,MAAM,CAAC,OAAO,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;QAElD,cAAc;QACd,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACvG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,qBAAqB,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1H,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,kBAAkB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACpI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,gBAAgB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACpI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,eAAe,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,aAAa,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrG,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,WAAW,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACvH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAE5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAEvE,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,GAAW;IAC5B,MAAM,KAAK,GAA2B;QAClC,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;KACb,CAAC;IACF,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vantaverse-ai-reviewer",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "AI-powered code review CLI - analyze your codebase with Gemini AI",
5
5
  "type": "module",
6
6
  "bin": {