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.
- package/dist/ai/agent.d.ts +14 -5
- package/dist/ai/agent.d.ts.map +1 -1
- package/dist/ai/agent.js +52 -36
- package/dist/ai/agent.js.map +1 -1
- package/dist/commands/scan.d.ts +2 -2
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +225 -251
- package/dist/commands/scan.js.map +1 -1
- package/package.json +1 -1
package/dist/ai/agent.d.ts
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 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,
|
|
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
|
/**
|
package/dist/ai/agent.d.ts.map
CHANGED
|
@@ -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,
|
|
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,
|
|
28
|
+
async analyze(scanResult, progress) {
|
|
29
29
|
const startTime = Date.now();
|
|
30
30
|
const sections = [];
|
|
31
31
|
let totalTokens = 0;
|
|
32
|
-
//
|
|
33
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
56
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
84
|
-
|
|
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
|
|
89
|
+
// Skip unreadable files
|
|
94
90
|
}
|
|
95
91
|
}
|
|
96
|
-
// Build
|
|
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
|
-
//
|
|
101
|
-
|
|
102
|
-
//
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
package/dist/ai/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/ai/agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAmB,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/ai/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/scan.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Scan Command -
|
|
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
|
|
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;
|
|
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"}
|
package/dist/commands/scan.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Scan Command -
|
|
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
|
|
15
|
+
import { estimateScanCost } from '../utils/token-estimator.js';
|
|
16
16
|
import fs from 'fs';
|
|
17
17
|
import inquirer from 'inquirer';
|
|
18
|
-
//
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
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
|
-
//
|
|
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
|
-
|
|
47
|
+
console.log(chalk.green(' โ API token found'));
|
|
52
48
|
}
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
-
|
|
100
|
+
console.log(chalk.yellow(' โ No changes detected, running full scan'));
|
|
112
101
|
scanResult = await scanRepository(repoRoot, framework);
|
|
113
102
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
|
131
|
-
|
|
132
|
-
process.exit(0);
|
|
117
|
+
if (scanResult.files.length > 20) {
|
|
118
|
+
console.log(chalk.gray(` ... and ${scanResult.files.length - 20} more`));
|
|
133
119
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
173
|
+
console.log(chalk.green(` โ No critical vulnerabilities`));
|
|
190
174
|
}
|
|
191
175
|
}
|
|
192
|
-
|
|
193
|
-
|
|
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
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
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
|
-
|
|
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":"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"}
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|