vantaverse-ai-reviewer 0.2.0 โ 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 +51 -25
- 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 +230 -180
- package/dist/commands/scan.js.map +1 -1
- package/dist/core/framework-detector.d.ts.map +1 -1
- package/dist/core/framework-detector.js +48 -17
- package/dist/core/framework-detector.js.map +1 -1
- package/dist/utils/interactive-logger.d.ts +49 -0
- package/dist/utils/interactive-logger.d.ts.map +1 -0
- package/dist/utils/interactive-logger.js +190 -0
- package/dist/utils/interactive-logger.js.map +1 -0
- 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,
|
|
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,36 +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
42
|
}
|
|
43
43
|
if (lintIssues.length > 0) {
|
|
44
44
|
context['lint_issues'] = `${lintIssues.length} lint issues found`;
|
|
45
45
|
}
|
|
46
|
-
|
|
46
|
+
progress?.onPhaseComplete?.('local', `TSC: ${typeErrors.length} errors, ESLint: ${lintIssues.length} issues`);
|
|
47
|
+
// Categorize files for each analysis type
|
|
47
48
|
const filesByType = this.categorizeFilesForAnalysis(scanResult);
|
|
48
49
|
// Run each analysis type
|
|
49
50
|
for (const analysisType of this.config.analysisTypes) {
|
|
50
51
|
const files = filesByType[analysisType] || scanResult.files.slice(0, 20);
|
|
51
52
|
if (files.length === 0)
|
|
52
53
|
continue;
|
|
53
|
-
|
|
54
|
+
progress?.onPhaseStart?.(analysisType, `${SECTION_TITLES[analysisType]}`);
|
|
55
|
+
const section = await this.runAnalysis(analysisType, files, context, progress);
|
|
54
56
|
sections.push(section);
|
|
55
57
|
totalTokens += section.tokensUsed;
|
|
58
|
+
progress?.onPhaseComplete?.(analysisType, `${section.filesAnalyzed.length} files, ${section.tokensUsed.toLocaleString()} tokens`);
|
|
56
59
|
}
|
|
57
60
|
return {
|
|
58
61
|
sections,
|
|
@@ -64,40 +67,63 @@ export class AIAgent {
|
|
|
64
67
|
};
|
|
65
68
|
}
|
|
66
69
|
/**
|
|
67
|
-
* Run a single analysis type
|
|
70
|
+
* Run a single analysis type with file-by-file progress
|
|
68
71
|
*/
|
|
69
|
-
async runAnalysis(type, files, context) {
|
|
70
|
-
// Read file contents
|
|
72
|
+
async runAnalysis(type, files, context, progress) {
|
|
71
73
|
const fileContents = new Map();
|
|
72
74
|
let totalChars = 0;
|
|
75
|
+
// Read files with progress updates
|
|
73
76
|
for (const file of files) {
|
|
74
77
|
if (totalChars >= this.config.maxCharsPerBatch)
|
|
75
78
|
break;
|
|
76
79
|
try {
|
|
77
|
-
|
|
78
|
-
);
|
|
80
|
+
progress?.onFileRead?.(file.relativePath);
|
|
81
|
+
const content = await safeReadFile(file.path, this.config.repoRoot, 100 * 1024);
|
|
79
82
|
if (totalChars + content.length <= this.config.maxCharsPerBatch) {
|
|
80
83
|
fileContents.set(file.relativePath, content);
|
|
81
84
|
totalChars += content.length;
|
|
85
|
+
progress?.onFileComplete?.(file.relativePath);
|
|
82
86
|
}
|
|
83
87
|
}
|
|
84
88
|
catch {
|
|
85
|
-
// Skip files
|
|
89
|
+
// Skip unreadable files
|
|
86
90
|
}
|
|
87
91
|
}
|
|
88
|
-
// Build
|
|
92
|
+
// Build prompt
|
|
89
93
|
const basePrompt = getPrompt(type);
|
|
90
94
|
const frameworkHints = this.config.framework.description;
|
|
91
95
|
const prompt = createContextualPrompt(basePrompt, frameworkHints, context);
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
+
}
|
|
101
127
|
}
|
|
102
128
|
/**
|
|
103
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":"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;AAqC/E,MAAM,cAAc,GAA+B;IAC/C,QAAQ,EAAE,sBAAsB;IAChC,WAAW,EAAE,wBAAwB;IACrC,aAAa,EAAE,uBAAuB;IACtC,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,4BAA4B;IACrC,QAAQ,EAAE,qBAAqB;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,OAAO;IACR,MAAM,CAAe;IACrB,MAAM,CAAc;IAE5B,YAAY,MAAoB,EAAE,MAAmB;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACT,UAAsB,EACtB,QAAoC;QAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,wCAAwC;QACxC,QAAQ,EAAE,YAAY,EAAE,CAAC,OAAO,EAAE,4CAA4C,CAAC,CAAC;QAEhF,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACxD,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACvC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;SAChC,CAAC,CAAC;QAEH,iBAAiB;QACjB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,aAAa,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,0BAA0B,CAAC;QAC5E,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,aAAa,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,oBAAoB,CAAC;QACtE,CAAC;QAED,QAAQ,EAAE,eAAe,EAAE,CAAC,OAAO,EAC/B,QAAQ,UAAU,CAAC,MAAM,oBAAoB,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC;QAE7E,0CAA0C;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;QAEhE,yBAAyB;QACzB,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAEzE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEjC,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,GAAG,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAE1E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC/E,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC;YAElC,QAAQ,EAAE,eAAe,EAAE,CAAC,YAAY,EACpC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,WAAW,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAChG,CAAC;QAED,OAAO;YACH,QAAQ;YACR,OAAO;YACP,UAAU;YACV,UAAU;YACV,WAAW;YACX,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CACrB,IAAgB,EAChB,KAAoB,EACpB,OAA+B,EAC/B,QAAoC;QAEpC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC/C,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,mCAAmC;QACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB;gBAAE,MAAM;YAEtD,IAAI,CAAC;gBACD,QAAQ,EAAE,UAAU,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE1C,MAAM,OAAO,GAAG,MAAM,YAAY,CAC9B,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CAAC,QAAQ,EACpB,GAAG,GAAG,IAAI,CACb,CAAC;gBAEF,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBAC9D,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBAC7C,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;oBAC7B,QAAQ,EAAE,cAAc,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAClD,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,wBAAwB;YAC5B,CAAC;QACL,CAAC;QAED,eAAe;QACf,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;QACzD,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QAE3E,oBAAoB;QACpB,QAAQ,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QAE/C,yBAAyB;QACzB,MAAM,gBAAgB,GAAG;YACrB,iCAAiC;YACjC,gCAAgC;YAChC,iCAAiC;YACjC,0BAA0B;YAC1B,0BAA0B;SAC7B,CAAC;QAEF,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,QAAQ,EAAE,YAAY,EAAE,CAAC,gBAAgB,CAAC,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YAClF,WAAW,EAAE,CAAC;QAClB,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;YAE3E,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAChC,QAAQ,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAElD,OAAO;gBACH,IAAI;gBACJ,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;aACjD,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAChC,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;OAEG;IACK,0BAA0B,CAAC,UAAsB;QACrD,OAAO;YACH,QAAQ,EAAE;gBACN,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG;gBAC5B,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC/B,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;oBACnC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CACxC;aACJ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAEd,WAAW,EAAE;gBACT,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO;gBAChC,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG;gBAC5B,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK;aACjC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAEd,aAAa,EAAE;gBACX,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS;gBAClC,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI;aAChC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAEd,IAAI,EAAE;gBACF,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS;gBAClC,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI;aAChC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAEd,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAEtC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SAC1C,CAAC;IACN,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACvB,MAAoB,EACpB,MAA0E;IAE1E,MAAM,UAAU,GAAgB;QAC5B,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,CAAC;QACvE,gBAAgB,EAAE,EAAE;QACpB,gBAAgB,EAAE,KAAK;QACvB,GAAG,MAAM;KACZ,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC"}
|
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
|
|
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,227 +1,277 @@
|
|
|
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
|
+
import chalk from 'chalk';
|
|
5
6
|
import * as logger from '../utils/logger.js';
|
|
6
7
|
import { ensureToken, getToken } from '../auth/token-manager.js';
|
|
7
8
|
import { detectFramework, getFrameworkHints } from '../core/framework-detector.js';
|
|
8
|
-
import { scanRepository
|
|
9
|
+
import { scanRepository } from '../core/scanner.js';
|
|
9
10
|
import { createGeminiClient } from '../ai/gemini-client.js';
|
|
10
11
|
import { createAgent } from '../ai/agent.js';
|
|
11
12
|
import { generateMarkdownReport, writeReport, generateJsonReport } from '../reporters/markdown.js';
|
|
12
13
|
import { getChangedFiles, getRelatedFiles } from '../core/diff-analyzer.js';
|
|
13
14
|
import { runSecurityScan } from '../core/security-scanner.js';
|
|
14
|
-
import { estimateScanCost
|
|
15
|
+
import { estimateScanCost } from '../utils/token-estimator.js';
|
|
15
16
|
import fs from 'fs';
|
|
16
17
|
import inquirer from 'inquirer';
|
|
18
|
+
// File type icons
|
|
19
|
+
const FILE_ICONS = {
|
|
20
|
+
'ts': '๐', 'tsx': 'โ๏ธ', 'js': '๐', 'jsx': 'โ๏ธ',
|
|
21
|
+
'py': '๐', 'vue': '๐', 'svelte': '๐งก', 'css': '๐จ',
|
|
22
|
+
'scss': '๐จ', 'html': '๐', 'json': '๐', 'md': '๐'
|
|
23
|
+
};
|
|
24
|
+
function getFileIcon(ext) {
|
|
25
|
+
return FILE_ICONS[ext] || '๐';
|
|
26
|
+
}
|
|
17
27
|
/**
|
|
18
|
-
* Execute the scan command
|
|
28
|
+
* Execute the scan command with production-ready logging
|
|
19
29
|
*/
|
|
20
30
|
export async function scan(options = {}) {
|
|
21
31
|
const repoRoot = process.cwd();
|
|
32
|
+
const verbose = options.verbose || false;
|
|
22
33
|
logger.banner();
|
|
23
|
-
//
|
|
34
|
+
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
35
|
+
// PHASE 1: Authentication
|
|
36
|
+
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
37
|
+
console.log(chalk.bold.cyan('\nโโโ Authentication โโโ'));
|
|
24
38
|
const existingToken = getToken();
|
|
25
39
|
let token;
|
|
26
40
|
if (!existingToken) {
|
|
27
|
-
|
|
41
|
+
console.log(chalk.yellow(' โ No API token found'));
|
|
28
42
|
token = await ensureToken();
|
|
43
|
+
console.log(chalk.green(' โ Token configured'));
|
|
29
44
|
}
|
|
30
45
|
else {
|
|
31
46
|
token = existingToken;
|
|
32
|
-
|
|
47
|
+
console.log(chalk.green(' โ API token found'));
|
|
33
48
|
}
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
spin.fail('Invalid Gemini API token');
|
|
42
|
-
if (validation.error) {
|
|
43
|
-
logger.error(`Error: ${validation.error}`);
|
|
44
|
-
}
|
|
45
|
-
logger.error('Please check your token and try again.');
|
|
46
|
-
logger.info('Get a new key at: https://aistudio.google.com/apikey');
|
|
47
|
-
logger.info('To reset token, run: npx vantaverse-ai-reviewer config --action reset');
|
|
48
|
-
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}`));
|
|
49
56
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
else {
|
|
91
|
-
spin.info('No changes detected, running full scan');
|
|
92
|
-
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);
|
|
93
97
|
}
|
|
94
98
|
}
|
|
95
99
|
else {
|
|
96
|
-
|
|
97
|
-
spin.start('Scanning repository...');
|
|
100
|
+
console.log(chalk.yellow(' โ No changes detected, running full scan'));
|
|
98
101
|
scanResult = await scanRepository(repoRoot, framework);
|
|
99
102
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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}`));
|
|
104
116
|
}
|
|
105
|
-
if (scanResult.files.length
|
|
106
|
-
|
|
107
|
-
process.exit(0);
|
|
117
|
+
if (scanResult.files.length > 20) {
|
|
118
|
+
console.log(chalk.gray(` ... and ${scanResult.files.length - 20} more`));
|
|
108
119
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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);
|
|
119
148
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
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}`));
|
|
133
161
|
}
|
|
134
162
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
logger.error(`๐ด ${securityScan.secrets.length} potential secrets detected:`);
|
|
144
|
-
for (const secret of securityScan.secrets.slice(0, 5)) {
|
|
145
|
-
console.log(` ${secret.file}:${secret.line} - ${secret.type} (${secret.severity})`);
|
|
146
|
-
}
|
|
147
|
-
if (securityScan.secrets.length > 5) {
|
|
148
|
-
console.log(` ... and ${securityScan.secrets.length - 5} more`);
|
|
149
|
-
}
|
|
150
|
-
console.log();
|
|
151
|
-
}
|
|
152
|
-
if (securityScan.vulnerabilities.length > 0) {
|
|
153
|
-
const critical = securityScan.vulnerabilities.filter(v => v.severity === 'critical' || v.severity === 'high');
|
|
154
|
-
if (critical.length > 0) {
|
|
155
|
-
logger.warn(`โ ๏ธ ${critical.length} critical/high npm vulnerabilities:`);
|
|
156
|
-
for (const vuln of critical.slice(0, 5)) {
|
|
157
|
-
console.log(` ${vuln.name}: ${vuln.description} (${vuln.severity})`);
|
|
158
|
-
}
|
|
159
|
-
console.log();
|
|
160
|
-
}
|
|
161
|
-
}
|
|
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`));
|
|
162
171
|
}
|
|
163
172
|
else {
|
|
164
|
-
|
|
173
|
+
console.log(chalk.green(` โ No critical vulnerabilities`));
|
|
165
174
|
}
|
|
166
175
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
logger.info(`Analysis types: ${analysisTypes.join(', ')}`);
|
|
170
|
-
if (diffMode) {
|
|
171
|
-
logger.info(`Mode: Diff-based (${scanResult.files.length} files)`);
|
|
172
|
-
}
|
|
173
|
-
console.log();
|
|
174
|
-
spin.start('Analyzing code with Gemini AI...');
|
|
175
|
-
const agent = createAgent(client, {
|
|
176
|
-
repoRoot,
|
|
177
|
-
framework,
|
|
178
|
-
analysisTypes
|
|
179
|
-
});
|
|
180
|
-
const result = await agent.analyze(scanResult, (stage) => {
|
|
181
|
-
spin.text = stage;
|
|
182
|
-
});
|
|
183
|
-
spin.succeed(`Analysis complete (${(result.duration / 1000).toFixed(1)}s)`);
|
|
184
|
-
// Generate report
|
|
185
|
-
const outputFile = options.output || 'AI_REVIEW_REPORT.md';
|
|
186
|
-
const metadata = {
|
|
187
|
-
framework,
|
|
188
|
-
scanResult,
|
|
189
|
-
generatedAt: new Date(),
|
|
190
|
-
modelName: client.getModelName()
|
|
191
|
-
};
|
|
192
|
-
if (options.json) {
|
|
193
|
-
const jsonReport = generateJsonReport(result, metadata);
|
|
194
|
-
const jsonPath = outputFile.replace('.md', '.json');
|
|
195
|
-
await fs.promises.writeFile(path.resolve(jsonPath), JSON.stringify(jsonReport, null, 2), 'utf-8');
|
|
196
|
-
logger.success(`JSON report generated: ${jsonPath}`);
|
|
197
|
-
}
|
|
198
|
-
const markdownReport = generateMarkdownReport(result, metadata);
|
|
199
|
-
const reportPath = await writeReport(markdownReport, outputFile);
|
|
200
|
-
logger.success(`Report generated: ${outputFile}`);
|
|
201
|
-
// Summary with cost info
|
|
202
|
-
console.log();
|
|
203
|
-
logger.divider();
|
|
204
|
-
logger.stats({
|
|
205
|
-
'Files Analyzed': scanResult.files.length,
|
|
206
|
-
'Tokens Used': result.totalTokens.toLocaleString(),
|
|
207
|
-
'Est. Cost': `$${estimate.estimatedCost.toFixed(4)}`,
|
|
208
|
-
'Duration': `${(result.duration / 1000).toFixed(1)}s`,
|
|
209
|
-
'Report': reportPath
|
|
210
|
-
});
|
|
211
|
-
if (diffMode) {
|
|
212
|
-
logger.stats({ 'Mode': 'Diff-based (optimized)' });
|
|
176
|
+
else {
|
|
177
|
+
console.log(chalk.green(' โ No vulnerabilities found'));
|
|
213
178
|
}
|
|
214
|
-
logger.divider();
|
|
215
|
-
console.log();
|
|
216
|
-
logger.success('Analysis complete! ๐');
|
|
217
179
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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}...`));
|
|
210
|
+
}
|
|
211
|
+
fileCount++;
|
|
212
|
+
},
|
|
213
|
+
onFileComplete: (file) => {
|
|
214
|
+
if (verbose) {
|
|
215
|
+
process.stdout.write(chalk.green(' โ\n'));
|
|
216
|
+
}
|
|
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)`));
|
|
223
228
|
}
|
|
224
|
-
|
|
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}`));
|
|
254
|
+
}
|
|
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('โ'));
|
|
225
271
|
}
|
|
272
|
+
console.log(chalk.cyan(' โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ'));
|
|
273
|
+
console.log();
|
|
274
|
+
console.log(chalk.green.bold(' โ
Analysis complete!'));
|
|
275
|
+
console.log();
|
|
226
276
|
}
|
|
227
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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework-detector.d.ts","sourceRoot":"","sources":["../../src/core/framework-detector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,MAAM,SAAS,GACf,QAAQ,GACR,OAAO,GACP,MAAM,GACN,SAAS,GACT,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,SAAS,GACT,QAAQ,GACR,SAAS,CAAC;AAEhB,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACvB;AAuED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"framework-detector.d.ts","sourceRoot":"","sources":["../../src/core/framework-detector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,MAAM,SAAS,GACf,QAAQ,GACR,OAAO,GACP,MAAM,GACN,SAAS,GACT,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,SAAS,GACT,QAAQ,GACR,SAAS,CAAC;AAEhB,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACvB;AAuED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA0G9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAgB9D"}
|
|
@@ -84,7 +84,16 @@ export async function detectFramework(repoRoot) {
|
|
|
84
84
|
return false;
|
|
85
85
|
}
|
|
86
86
|
};
|
|
87
|
-
|
|
87
|
+
const readPackageJson = async () => {
|
|
88
|
+
try {
|
|
89
|
+
const content = await fs.promises.readFile(path.join(repoRoot, 'package.json'), 'utf-8');
|
|
90
|
+
return JSON.parse(content);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
// Check for Next.js (config files or package.json)
|
|
88
97
|
if (await exists('next.config.js') || await exists('next.config.ts') || await exists('next.config.mjs')) {
|
|
89
98
|
return { name: 'nextjs', ...FRAMEWORK_CONFIGS.nextjs };
|
|
90
99
|
}
|
|
@@ -92,15 +101,15 @@ export async function detectFramework(repoRoot) {
|
|
|
92
101
|
if (await exists('angular.json')) {
|
|
93
102
|
return { name: 'angular', ...FRAMEWORK_CONFIGS.angular };
|
|
94
103
|
}
|
|
95
|
-
// Check for Vue
|
|
104
|
+
// Check for Vue/Nuxt
|
|
96
105
|
if (await exists('vue.config.js') || await exists('nuxt.config.js') || await exists('nuxt.config.ts')) {
|
|
97
106
|
return { name: 'vue', ...FRAMEWORK_CONFIGS.vue };
|
|
98
107
|
}
|
|
99
|
-
// Check for Svelte
|
|
108
|
+
// Check for Svelte/SvelteKit
|
|
100
109
|
if (await exists('svelte.config.js') || await exists('svelte.config.ts')) {
|
|
101
110
|
return { name: 'svelte', ...FRAMEWORK_CONFIGS.svelte };
|
|
102
111
|
}
|
|
103
|
-
// Check for Vite
|
|
112
|
+
// Check for Vite
|
|
104
113
|
if (await exists('vite.config.js') || await exists('vite.config.ts')) {
|
|
105
114
|
return { name: 'vite', ...FRAMEWORK_CONFIGS.vite };
|
|
106
115
|
}
|
|
@@ -112,23 +121,45 @@ export async function detectFramework(repoRoot) {
|
|
|
112
121
|
if (await exists('manage.py')) {
|
|
113
122
|
return { name: 'django', ...FRAMEWORK_CONFIGS.django };
|
|
114
123
|
}
|
|
115
|
-
// Check for Flask
|
|
124
|
+
// Check for Flask
|
|
116
125
|
if (await exists('app.py') || await exists('wsgi.py')) {
|
|
117
126
|
return { name: 'flask', ...FRAMEWORK_CONFIGS.flask };
|
|
118
127
|
}
|
|
119
|
-
// Check for
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
if (pkg.dependencies?.react || pkg.devDependencies?.react) {
|
|
127
|
-
return { name: 'react', ...FRAMEWORK_CONFIGS.react };
|
|
128
|
-
}
|
|
128
|
+
// Check package.json for dependencies
|
|
129
|
+
const pkg = await readPackageJson();
|
|
130
|
+
if (pkg) {
|
|
131
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
132
|
+
// Next.js via package.json
|
|
133
|
+
if (deps['next']) {
|
|
134
|
+
return { name: 'nextjs', ...FRAMEWORK_CONFIGS.nextjs };
|
|
129
135
|
}
|
|
130
|
-
|
|
131
|
-
|
|
136
|
+
// NestJS via package.json
|
|
137
|
+
if (deps['@nestjs/core']) {
|
|
138
|
+
return { name: 'nestjs', ...FRAMEWORK_CONFIGS.nestjs };
|
|
139
|
+
}
|
|
140
|
+
// Vue via package.json
|
|
141
|
+
if (deps['vue'] || deps['nuxt']) {
|
|
142
|
+
return { name: 'vue', ...FRAMEWORK_CONFIGS.vue };
|
|
143
|
+
}
|
|
144
|
+
// Angular via package.json
|
|
145
|
+
if (deps['@angular/core']) {
|
|
146
|
+
return { name: 'angular', ...FRAMEWORK_CONFIGS.angular };
|
|
147
|
+
}
|
|
148
|
+
// Svelte via package.json
|
|
149
|
+
if (deps['svelte']) {
|
|
150
|
+
return { name: 'svelte', ...FRAMEWORK_CONFIGS.svelte };
|
|
151
|
+
}
|
|
152
|
+
// Express
|
|
153
|
+
if (deps['express']) {
|
|
154
|
+
return { name: 'express', ...FRAMEWORK_CONFIGS.express };
|
|
155
|
+
}
|
|
156
|
+
// React (check after more specific frameworks)
|
|
157
|
+
if (deps['react']) {
|
|
158
|
+
return { name: 'react', ...FRAMEWORK_CONFIGS.react };
|
|
159
|
+
}
|
|
160
|
+
// Vite
|
|
161
|
+
if (deps['vite']) {
|
|
162
|
+
return { name: 'vite', ...FRAMEWORK_CONFIGS.vite };
|
|
132
163
|
}
|
|
133
164
|
}
|
|
134
165
|
return { name: 'unknown', ...FRAMEWORK_CONFIGS.unknown };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework-detector.js","sourceRoot":"","sources":["../../src/core/framework-detector.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"framework-detector.js","sourceRoot":"","sources":["../../src/core/framework-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive Logger - Agentic CLI output with motivating messages
|
|
3
|
+
*/
|
|
4
|
+
import { type Ora } from 'ora';
|
|
5
|
+
declare const AGENTIC_MESSAGES: {
|
|
6
|
+
scanning: string[];
|
|
7
|
+
security: string[];
|
|
8
|
+
codeQuality: string[];
|
|
9
|
+
accessibility: string[];
|
|
10
|
+
uiux: string[];
|
|
11
|
+
testing: string[];
|
|
12
|
+
overview: string[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Create an interactive spinner with rotating agentic messages
|
|
16
|
+
*/
|
|
17
|
+
export declare function createAgenticSpinner(initialText: string): {
|
|
18
|
+
spinner: Ora;
|
|
19
|
+
updatePhase: (phase: keyof typeof AGENTIC_MESSAGES) => void;
|
|
20
|
+
updateFile: (fileName: string, action: string) => void;
|
|
21
|
+
showThinking: () => void;
|
|
22
|
+
stop: () => void;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Display file scanning progress
|
|
26
|
+
*/
|
|
27
|
+
export declare function showFileScanProgress(files: string[], onFile?: (file: string) => void): void;
|
|
28
|
+
/**
|
|
29
|
+
* Show analysis phase header with agentic messaging
|
|
30
|
+
*/
|
|
31
|
+
export declare function showAnalysisPhase(phase: string, fileCount: number): void;
|
|
32
|
+
/**
|
|
33
|
+
* Show analysis complete for a phase
|
|
34
|
+
*/
|
|
35
|
+
export declare function showAnalysisComplete(phase: string, duration: number, findings: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* Show real-time AI thinking indicator
|
|
38
|
+
*/
|
|
39
|
+
export declare function showAIThinking(message: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Display test file detection
|
|
42
|
+
*/
|
|
43
|
+
export declare function showTestFileSearch(pattern: string): void;
|
|
44
|
+
/**
|
|
45
|
+
* Create boxed status display
|
|
46
|
+
*/
|
|
47
|
+
export declare function showStatusBox(items: Record<string, string | number>): void;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=interactive-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-logger.d.ts","sourceRoot":"","sources":["../../src/utils/interactive-logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAGpC,QAAA,MAAM,gBAAgB;;;;;;;;CAkDrB,CAAC;AAgBF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG;IACvD,OAAO,EAAE,GAAG,CAAC;IACb,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,OAAO,gBAAgB,KAAK,IAAI,CAAC;IAC5D,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,IAAI,CAAC;CACpB,CA6CA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,IAAI,CAQN;AA2BD;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAClB,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACjB,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAS1E"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive Logger - Agentic CLI output with motivating messages
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
// Agentic thinking messages for different phases
|
|
7
|
+
const AGENTIC_MESSAGES = {
|
|
8
|
+
scanning: [
|
|
9
|
+
'๐ Scanning project structure...',
|
|
10
|
+
'๐ Discovering source files...',
|
|
11
|
+
'๐งฌ Analyzing file patterns...',
|
|
12
|
+
'๐ Indexing codebase...',
|
|
13
|
+
'๐ Building file tree...'
|
|
14
|
+
],
|
|
15
|
+
security: [
|
|
16
|
+
'๐ Analyzing security patterns...',
|
|
17
|
+
'๐ก๏ธ Checking for vulnerabilities...',
|
|
18
|
+
'๐ Scanning for exposed secrets...',
|
|
19
|
+
'โ ๏ธ Reviewing authentication flows...',
|
|
20
|
+
'๐ Validating access controls...'
|
|
21
|
+
],
|
|
22
|
+
codeQuality: [
|
|
23
|
+
'๐งน Reviewing code quality...',
|
|
24
|
+
'๐ง Analyzing code patterns...',
|
|
25
|
+
'๐ Checking architecture...',
|
|
26
|
+
'๐ฏ Identifying code smells...',
|
|
27
|
+
'โจ Evaluating best practices...'
|
|
28
|
+
],
|
|
29
|
+
accessibility: [
|
|
30
|
+
'โฟ Checking accessibility...',
|
|
31
|
+
'๐จ Reviewing WCAG compliance...',
|
|
32
|
+
'๐ฅ๏ธ Analyzing screen reader support...',
|
|
33
|
+
'โจ๏ธ Testing keyboard navigation...',
|
|
34
|
+
'๐๏ธ Checking color contrast...'
|
|
35
|
+
],
|
|
36
|
+
uiux: [
|
|
37
|
+
'๐จ Analyzing user experience...',
|
|
38
|
+
'๐ฑ Reviewing responsive design...',
|
|
39
|
+
'โก Checking loading states...',
|
|
40
|
+
'๐ซ Reviewing interactions...',
|
|
41
|
+
'๐ญ Analyzing UI patterns...'
|
|
42
|
+
],
|
|
43
|
+
testing: [
|
|
44
|
+
'๐งช Analyzing test coverage...',
|
|
45
|
+
'โ
Reviewing test patterns...',
|
|
46
|
+
'๐ฌ Identifying test gaps...',
|
|
47
|
+
'๐ Suggesting test cases...',
|
|
48
|
+
'๐ฏ Finding edge cases...'
|
|
49
|
+
],
|
|
50
|
+
overview: [
|
|
51
|
+
'๐ Building project overview...',
|
|
52
|
+
'๐๏ธ Analyzing architecture...',
|
|
53
|
+
'๐ Evaluating project health...',
|
|
54
|
+
'๐ฏ Identifying priorities...',
|
|
55
|
+
'๐ก Generating recommendations...'
|
|
56
|
+
]
|
|
57
|
+
};
|
|
58
|
+
// Motivational messages during AI analysis
|
|
59
|
+
const MOTIVATIONAL_MESSAGES = [
|
|
60
|
+
'๐ค AI is thinking deeply...',
|
|
61
|
+
'๐ง Processing code patterns...',
|
|
62
|
+
'๐ญ Formulating insights...',
|
|
63
|
+
'๐ฎ Generating recommendations...',
|
|
64
|
+
'๐ Crafting detailed analysis...',
|
|
65
|
+
'โจ Almost there...',
|
|
66
|
+
'๐ฏ Focusing on key issues...',
|
|
67
|
+
'๐ก Finding improvements...',
|
|
68
|
+
'๐ Deep diving into code...',
|
|
69
|
+
'๐ Building comprehensive report...'
|
|
70
|
+
];
|
|
71
|
+
/**
|
|
72
|
+
* Create an interactive spinner with rotating agentic messages
|
|
73
|
+
*/
|
|
74
|
+
export function createAgenticSpinner(initialText) {
|
|
75
|
+
const spin = ora({
|
|
76
|
+
text: initialText,
|
|
77
|
+
color: 'cyan',
|
|
78
|
+
spinner: 'dots'
|
|
79
|
+
});
|
|
80
|
+
let messageInterval = null;
|
|
81
|
+
let currentPhase = 'scanning';
|
|
82
|
+
let messageIndex = 0;
|
|
83
|
+
const updatePhase = (phase) => {
|
|
84
|
+
currentPhase = phase;
|
|
85
|
+
messageIndex = 0;
|
|
86
|
+
const messages = AGENTIC_MESSAGES[phase];
|
|
87
|
+
if (messages && messages.length > 0) {
|
|
88
|
+
spin.text = messages[0];
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const updateFile = (fileName, action) => {
|
|
92
|
+
const shortName = fileName.length > 40
|
|
93
|
+
? '...' + fileName.slice(-37)
|
|
94
|
+
: fileName;
|
|
95
|
+
spin.text = `${action} ${chalk.cyan(shortName)}`;
|
|
96
|
+
};
|
|
97
|
+
const showThinking = () => {
|
|
98
|
+
if (messageInterval)
|
|
99
|
+
clearInterval(messageInterval);
|
|
100
|
+
let thinkingIndex = 0;
|
|
101
|
+
messageInterval = setInterval(() => {
|
|
102
|
+
spin.text = MOTIVATIONAL_MESSAGES[thinkingIndex % MOTIVATIONAL_MESSAGES.length];
|
|
103
|
+
thinkingIndex++;
|
|
104
|
+
}, 2000);
|
|
105
|
+
};
|
|
106
|
+
const stop = () => {
|
|
107
|
+
if (messageInterval) {
|
|
108
|
+
clearInterval(messageInterval);
|
|
109
|
+
messageInterval = null;
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
return { spinner: spin, updatePhase, updateFile, showThinking, stop };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Display file scanning progress
|
|
116
|
+
*/
|
|
117
|
+
export function showFileScanProgress(files, onFile) {
|
|
118
|
+
for (const file of files) {
|
|
119
|
+
const ext = file.split('.').pop() || '';
|
|
120
|
+
const icon = getFileIcon(ext);
|
|
121
|
+
const shortName = file.length > 50 ? '...' + file.slice(-47) : file;
|
|
122
|
+
console.log(` ${icon} ${chalk.gray(shortName)} ${chalk.green('[scanned]')}`);
|
|
123
|
+
onFile?.(file);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get icon for file extension
|
|
128
|
+
*/
|
|
129
|
+
function getFileIcon(ext) {
|
|
130
|
+
const icons = {
|
|
131
|
+
'ts': '๐',
|
|
132
|
+
'tsx': 'โ๏ธ',
|
|
133
|
+
'js': '๐',
|
|
134
|
+
'jsx': 'โ๏ธ',
|
|
135
|
+
'py': '๐',
|
|
136
|
+
'vue': '๐',
|
|
137
|
+
'svelte': '๐งก',
|
|
138
|
+
'css': '๐จ',
|
|
139
|
+
'scss': '๐จ',
|
|
140
|
+
'html': '๐',
|
|
141
|
+
'json': '๐',
|
|
142
|
+
'md': '๐',
|
|
143
|
+
'yaml': 'โ๏ธ',
|
|
144
|
+
'yml': 'โ๏ธ',
|
|
145
|
+
'test': '๐งช',
|
|
146
|
+
'spec': '๐งช'
|
|
147
|
+
};
|
|
148
|
+
return icons[ext] || '๐';
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Show analysis phase header with agentic messaging
|
|
152
|
+
*/
|
|
153
|
+
export function showAnalysisPhase(phase, fileCount) {
|
|
154
|
+
console.log();
|
|
155
|
+
console.log(chalk.bold.cyan(` โโ ${phase}`));
|
|
156
|
+
console.log(chalk.gray(` โ Analyzing ${fileCount} files...`));
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Show analysis complete for a phase
|
|
160
|
+
*/
|
|
161
|
+
export function showAnalysisComplete(phase, duration, findings) {
|
|
162
|
+
const icon = findings > 0 ? 'โ ๏ธ' : 'โ
';
|
|
163
|
+
console.log(chalk.gray(` โ ${icon} ${findings} findings (${duration}ms)`));
|
|
164
|
+
console.log(chalk.cyan(` โโ Complete`));
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Show real-time AI thinking indicator
|
|
168
|
+
*/
|
|
169
|
+
export function showAIThinking(message) {
|
|
170
|
+
process.stdout.write(`\r ${chalk.yellow('๐ค')} ${chalk.gray(message)} `);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Display test file detection
|
|
174
|
+
*/
|
|
175
|
+
export function showTestFileSearch(pattern) {
|
|
176
|
+
console.log(chalk.gray(` ๐ Searching for ${chalk.cyan(pattern)} files...`));
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Create boxed status display
|
|
180
|
+
*/
|
|
181
|
+
export function showStatusBox(items) {
|
|
182
|
+
const maxKeyLen = Math.max(...Object.keys(items).map(k => k.length));
|
|
183
|
+
console.log(chalk.cyan(' โ' + 'โ'.repeat(50) + 'โ'));
|
|
184
|
+
for (const [key, value] of Object.entries(items)) {
|
|
185
|
+
const paddedKey = key.padEnd(maxKeyLen);
|
|
186
|
+
console.log(chalk.cyan(' โ') + ` ${paddedKey}: ${chalk.white(value)}`.padEnd(50) + chalk.cyan('โ'));
|
|
187
|
+
}
|
|
188
|
+
console.log(chalk.cyan(' โ' + 'โ'.repeat(50) + 'โ'));
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=interactive-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-logger.js","sourceRoot":"","sources":["../../src/utils/interactive-logger.ts"],"names":[],"mappings":"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"}
|