lamps-code-review 0.2.2 → 0.2.4
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/cli/commands/review.d.ts.map +1 -1
- package/dist/cli/commands/review.js +27 -53
- package/dist/cli/commands/review.js.map +1 -1
- package/dist/cli/index.js +15 -13
- package/dist/cli/index.js.map +1 -1
- package/dist/core/analyzer/ai/context.d.ts.map +1 -1
- package/dist/core/analyzer/ai/context.js +29 -66
- package/dist/core/analyzer/ai/context.js.map +1 -1
- package/dist/core/analyzer/ai/index.js +24 -30
- package/dist/core/analyzer/ai/index.js.map +1 -1
- package/dist/core/analyzer/ai/openrouter.js +3 -9
- package/dist/core/analyzer/ai/openrouter.js.map +1 -1
- package/dist/core/analyzer/ai/passes.d.ts.map +1 -1
- package/dist/core/analyzer/ai/passes.js +59 -38
- package/dist/core/analyzer/ai/passes.js.map +1 -1
- package/dist/core/analyzer/ai/prompts.js +3 -8
- package/dist/core/analyzer/ai/prompts.js.map +1 -1
- package/dist/core/analyzer/ai/slices.js +5 -12
- package/dist/core/analyzer/ai/slices.js.map +1 -1
- package/dist/core/analyzer/dependency/index.js +8 -47
- package/dist/core/analyzer/dependency/index.js.map +1 -1
- package/dist/core/analyzer/index.js +11 -32
- package/dist/core/analyzer/index.js.map +1 -1
- package/dist/core/analyzer/static/index.js +3 -8
- package/dist/core/analyzer/static/index.js.map +1 -1
- package/dist/core/analyzer/types.js +1 -5
- package/dist/core/analyzer/types.js.map +1 -1
- package/dist/core/config/index.d.ts.map +1 -1
- package/dist/core/config/index.js +19 -51
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/detector/index.js +3 -39
- package/dist/core/detector/index.js.map +1 -1
- package/dist/core/reporter/formats/json.js +2 -6
- package/dist/core/reporter/formats/json.js.map +1 -1
- package/dist/core/reporter/index.js +6 -13
- package/dist/core/reporter/index.js.map +1 -1
- package/dist/core/scanner/ignore-rules.js +3 -39
- package/dist/core/scanner/ignore-rules.js.map +1 -1
- package/dist/core/scanner/index.js +14 -51
- package/dist/core/scanner/index.js.map +1 -1
- package/dist/index.js +24 -38
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -4
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +14 -64
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.d.ts +0 -2
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +1 -16
- package/dist/utils/logger.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* AI Analyzer module
|
|
4
3
|
* Multi-pass AI-powered code review using OpenRouter
|
|
5
4
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const passes_js_1 = require("./passes.js");
|
|
14
|
-
const prompts_js_1 = require("./prompts.js");
|
|
15
|
-
const logger_js_1 = require("../../../utils/logger.js");
|
|
5
|
+
import { BaseAnalyzer } from '../types.js';
|
|
6
|
+
import { chat, OpenRouterError } from './openrouter.js';
|
|
7
|
+
import { getOpenRouterKey, hasOpenRouterKey } from '../../config/index.js';
|
|
8
|
+
import { buildArchitectureContext, buildDeepDiveContext, buildSecurityContext, getDependencyGraphFromResults, createEmptyGraph, } from './context.js';
|
|
9
|
+
import { PASS_SYSTEM_PROMPTS, buildPassPrompt } from './passes.js';
|
|
10
|
+
import { parseAIResponse } from './prompts.js';
|
|
11
|
+
import { createLogger } from '../../../utils/logger.js';
|
|
16
12
|
/**
|
|
17
13
|
* Multi-pass AI-powered code analyzer using OpenRouter
|
|
18
14
|
*/
|
|
19
|
-
class AIAnalyzer extends
|
|
15
|
+
export class AIAnalyzer extends BaseAnalyzer {
|
|
20
16
|
constructor(config) {
|
|
21
17
|
super();
|
|
22
18
|
this.config = config;
|
|
@@ -28,9 +24,9 @@ class AIAnalyzer extends types_js_1.BaseAnalyzer {
|
|
|
28
24
|
}
|
|
29
25
|
async analyze(context) {
|
|
30
26
|
const startTime = Date.now();
|
|
31
|
-
const logger =
|
|
27
|
+
const logger = context.logger || createLogger(false);
|
|
32
28
|
// Check for API key
|
|
33
|
-
if (!
|
|
29
|
+
if (!hasOpenRouterKey()) {
|
|
34
30
|
logger.warn('OPENROUTER_API_KEY not set - skipping AI analysis');
|
|
35
31
|
return this.createResult([
|
|
36
32
|
{
|
|
@@ -53,7 +49,7 @@ class AIAnalyzer extends types_js_1.BaseAnalyzer {
|
|
|
53
49
|
logger.step(`Model: ${this.config.model}`);
|
|
54
50
|
logger.step(`Files in codebase: ${context.files.length}`);
|
|
55
51
|
// Get dependency graph from static phase results (if available)
|
|
56
|
-
const graph = this.getDependencyGraph(context) ||
|
|
52
|
+
const graph = this.getDependencyGraph(context) || createEmptyGraph(context.files);
|
|
57
53
|
// Log graph stats
|
|
58
54
|
const graphStats = {
|
|
59
55
|
entryPoints: graph.entryPoints.length,
|
|
@@ -108,7 +104,7 @@ class AIAnalyzer extends types_js_1.BaseAnalyzer {
|
|
|
108
104
|
}
|
|
109
105
|
catch (error) {
|
|
110
106
|
// Handle errors gracefully
|
|
111
|
-
const errorMessage = error instanceof
|
|
107
|
+
const errorMessage = error instanceof OpenRouterError
|
|
112
108
|
? error.message
|
|
113
109
|
: error instanceof Error
|
|
114
110
|
? error.message
|
|
@@ -128,18 +124,18 @@ class AIAnalyzer extends types_js_1.BaseAnalyzer {
|
|
|
128
124
|
* Run a single AI pass
|
|
129
125
|
*/
|
|
130
126
|
async runPass(passType, context, graph, previousFindings) {
|
|
131
|
-
const logger =
|
|
127
|
+
const logger = context.logger || createLogger(false);
|
|
132
128
|
// Build context for this pass
|
|
133
129
|
let reviewContext;
|
|
134
130
|
switch (passType) {
|
|
135
131
|
case 'architecture':
|
|
136
|
-
reviewContext = await
|
|
132
|
+
reviewContext = await buildArchitectureContext(context, graph);
|
|
137
133
|
break;
|
|
138
134
|
case 'deep-dive':
|
|
139
|
-
reviewContext = await
|
|
135
|
+
reviewContext = await buildDeepDiveContext(context, graph, this.staticFindings, previousFindings.filter((f) => f.ruleId.startsWith('ai/arch')));
|
|
140
136
|
break;
|
|
141
137
|
case 'security':
|
|
142
|
-
reviewContext = await
|
|
138
|
+
reviewContext = await buildSecurityContext(context, graph);
|
|
143
139
|
break;
|
|
144
140
|
}
|
|
145
141
|
// Log context details
|
|
@@ -165,17 +161,17 @@ class AIAnalyzer extends types_js_1.BaseAnalyzer {
|
|
|
165
161
|
};
|
|
166
162
|
}
|
|
167
163
|
// Build prompts
|
|
168
|
-
const systemPrompt =
|
|
169
|
-
const userPrompt =
|
|
164
|
+
const systemPrompt = PASS_SYSTEM_PROMPTS[passType];
|
|
165
|
+
const userPrompt = buildPassPrompt(reviewContext, this.config.customPrompt);
|
|
170
166
|
// Call AI
|
|
171
167
|
logger.detail('Calling AI...');
|
|
172
168
|
const callStart = Date.now();
|
|
173
|
-
const apiKey =
|
|
174
|
-
const response = await
|
|
169
|
+
const apiKey = getOpenRouterKey();
|
|
170
|
+
const response = await chat(systemPrompt, userPrompt, this.config, apiKey);
|
|
175
171
|
const callDuration = Date.now() - callStart;
|
|
176
172
|
logger.detail(`AI responded in ${(callDuration / 1000).toFixed(1)}s`);
|
|
177
173
|
// Parse response
|
|
178
|
-
const parsed =
|
|
174
|
+
const parsed = parseAIResponse(response);
|
|
179
175
|
// Convert to findings with proper severity types
|
|
180
176
|
const findings = parsed.findings.map((f) => ({
|
|
181
177
|
ruleId: f.ruleId,
|
|
@@ -199,7 +195,7 @@ class AIAnalyzer extends types_js_1.BaseAnalyzer {
|
|
|
199
195
|
// after the static phase runs
|
|
200
196
|
const metadata = context._previousResults;
|
|
201
197
|
if (metadata) {
|
|
202
|
-
return
|
|
198
|
+
return getDependencyGraphFromResults(metadata);
|
|
203
199
|
}
|
|
204
200
|
return null;
|
|
205
201
|
}
|
|
@@ -252,14 +248,12 @@ class AIAnalyzer extends types_js_1.BaseAnalyzer {
|
|
|
252
248
|
.slice(0, 50);
|
|
253
249
|
}
|
|
254
250
|
}
|
|
255
|
-
exports.AIAnalyzer = AIAnalyzer;
|
|
256
251
|
/**
|
|
257
252
|
* Create an AI analyzer with the given configuration
|
|
258
253
|
*/
|
|
259
|
-
function createAIAnalyzer(config) {
|
|
254
|
+
export function createAIAnalyzer(config) {
|
|
260
255
|
return new AIAnalyzer(config);
|
|
261
256
|
}
|
|
262
257
|
// Re-export for convenience
|
|
263
|
-
|
|
264
|
-
Object.defineProperty(exports, "OpenRouterError", { enumerable: true, get: function () { return openrouter_js_2.OpenRouterError; } });
|
|
258
|
+
export { OpenRouterError } from './openrouter.js';
|
|
265
259
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* OpenRouter API client
|
|
4
3
|
* Handles communication with OpenRouter for AI model access
|
|
5
4
|
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.OpenRouterError = void 0;
|
|
8
|
-
exports.callOpenRouter = callOpenRouter;
|
|
9
|
-
exports.chat = chat;
|
|
10
5
|
/** OpenRouter API endpoint */
|
|
11
6
|
const OPENROUTER_API_URL = 'https://openrouter.ai/api/v1/chat/completions';
|
|
12
7
|
/** Error from OpenRouter API */
|
|
13
|
-
class OpenRouterError extends Error {
|
|
8
|
+
export class OpenRouterError extends Error {
|
|
14
9
|
constructor(message, code, status) {
|
|
15
10
|
super(message);
|
|
16
11
|
this.code = code;
|
|
@@ -18,11 +13,10 @@ class OpenRouterError extends Error {
|
|
|
18
13
|
this.name = 'OpenRouterError';
|
|
19
14
|
}
|
|
20
15
|
}
|
|
21
|
-
exports.OpenRouterError = OpenRouterError;
|
|
22
16
|
/**
|
|
23
17
|
* Call OpenRouter API with a prompt
|
|
24
18
|
*/
|
|
25
|
-
async function callOpenRouter(messages, config, apiKey) {
|
|
19
|
+
export async function callOpenRouter(messages, config, apiKey) {
|
|
26
20
|
const response = await fetch(OPENROUTER_API_URL, {
|
|
27
21
|
method: 'POST',
|
|
28
22
|
headers: {
|
|
@@ -67,7 +61,7 @@ async function callOpenRouter(messages, config, apiKey) {
|
|
|
67
61
|
/**
|
|
68
62
|
* Simple helper to create a chat completion
|
|
69
63
|
*/
|
|
70
|
-
async function chat(systemPrompt, userPrompt, config, apiKey) {
|
|
64
|
+
export async function chat(systemPrompt, userPrompt, config, apiKey) {
|
|
71
65
|
const messages = [
|
|
72
66
|
{ role: 'system', content: systemPrompt },
|
|
73
67
|
{ role: 'user', content: userPrompt },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/openrouter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/openrouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8BAA8B;AAC9B,MAAM,kBAAkB,GAAG,+CAA+C,CAAC;AA6B3E,gCAAgC;AAChC,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YACE,OAAe,EACC,IAAa,EACb,MAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAS;QACb,WAAM,GAAN,MAAM,CAAS;QAG/B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAuB,EACvB,MAAgB,EAChB,MAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,EAAE;QAC/C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,sCAAsC;YACtD,SAAS,EAAE,iBAAiB;SAC7B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ;YACR,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,YAAY,GAAG,yBAAyB,QAAQ,CAAC,MAAM,EAAE,CAAC;QAE9D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBAC7B,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;YACzC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;YACjC,IAAI,SAAS,EAAE,CAAC;gBACd,YAAY,GAAG,SAAS,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,MAAM,IAAI,eAAe,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;IAE3D,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,eAAe,CAAC,2BAA2B,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,YAAoB,EACpB,UAAkB,EAClB,MAAgB,EAChB,MAAc;IAEd,MAAM,QAAQ,GAAkB;QAC9B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;QACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;KACtC,CAAC;IAEF,OAAO,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passes.d.ts","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/passes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEtF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"passes.d.ts","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/passes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEtF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAsE1D,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAgCrF"}
|
|
@@ -1,62 +1,83 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Pass-Specific Prompts
|
|
4
3
|
* Tailored prompts for each AI review pass
|
|
5
4
|
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.PASS_SYSTEM_PROMPTS = void 0;
|
|
8
|
-
exports.buildPassPrompt = buildPassPrompt;
|
|
9
5
|
/**
|
|
10
6
|
* System prompts for each pass type
|
|
11
7
|
*/
|
|
12
|
-
|
|
8
|
+
export const PASS_SYSTEM_PROMPTS = {
|
|
13
9
|
architecture: `You are an expert software architect reviewing a codebase's structure and organization.
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
1.
|
|
17
|
-
2.
|
|
18
|
-
3.
|
|
19
|
-
4. **Configuration** - Are configs complete? Missing environment handling?
|
|
20
|
-
5. **Architecture Patterns** - Consistent patterns? Clear separation of concerns?
|
|
21
|
-
6. **Scalability Concerns** - Any obvious bottlenecks or limitations?
|
|
11
|
+
CRITICAL RULES:
|
|
12
|
+
1. The file tree provided shows ALL files that EXIST in this codebase. Do NOT report files as missing if they appear in the file tree - they exist.
|
|
13
|
+
2. NEVER claim that an AI model, API, library version, or service "doesn't exist" or is "invalid". Your training data is outdated. Always assume the user's configuration is correct.
|
|
14
|
+
3. Only report genuinely missing files if the code imports something that doesn't exist in the tree.
|
|
22
15
|
|
|
23
|
-
|
|
16
|
+
Focus on REAL architectural issues:
|
|
17
|
+
1. **Dependency Issues** - Circular dependencies, outdated packages, missing peer deps
|
|
18
|
+
2. **Architecture Patterns** - Inconsistent patterns, poor separation of concerns
|
|
19
|
+
3. **Configuration** - Missing required configs, insecure defaults
|
|
20
|
+
4. **Scalability** - Obvious bottlenecks, hardcoded limits
|
|
21
|
+
|
|
22
|
+
DO NOT report:
|
|
23
|
+
- Files shown in the file tree as "missing" - they exist
|
|
24
|
+
- Style preferences or minor suggestions
|
|
25
|
+
- Anything that's working correctly
|
|
26
|
+
|
|
27
|
+
Keep findings to 5 or fewer. Only report significant architectural concerns.
|
|
24
28
|
|
|
25
29
|
Respond with valid JSON only. No markdown, no explanations outside the JSON.`,
|
|
26
|
-
'deep-dive': `You are an expert senior software engineer conducting a
|
|
30
|
+
'deep-dive': `You are an expert senior software engineer conducting a code review.
|
|
31
|
+
|
|
32
|
+
CRITICAL: NEVER claim that an AI model, API, library version, or service "doesn't exist" or is "invalid". Your training data is outdated. Always assume the user's configuration is correct.
|
|
33
|
+
|
|
34
|
+
Focus ONLY on actual bugs and significant issues:
|
|
35
|
+
1. **Real Bugs** - Logic errors that will cause incorrect behavior
|
|
36
|
+
2. **Crash Risks** - Unhandled nulls that WILL throw, not theoretical ones
|
|
37
|
+
3. **Security Holes** - Actual vulnerabilities, not theoretical concerns
|
|
38
|
+
4. **Performance Problems** - Measurable issues like O(n²) in hot paths
|
|
27
39
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
40
|
+
DO NOT report:
|
|
41
|
+
- Style issues or formatting preferences
|
|
42
|
+
- "Could be improved" suggestions unless critical
|
|
43
|
+
- Missing error handling for unlikely edge cases
|
|
44
|
+
- Type annotations or documentation suggestions
|
|
45
|
+
- Things that are technically correct but could be "better"
|
|
34
46
|
|
|
35
|
-
|
|
47
|
+
QUALITY OVER QUANTITY: Report 10 or fewer findings. Only include issues that would fail a code review or cause production bugs. If the code is well-written, return fewer findings.
|
|
48
|
+
|
|
49
|
+
Be specific: include file paths and line numbers.
|
|
36
50
|
|
|
37
51
|
Respond with valid JSON only. No markdown, no explanations outside the JSON.`,
|
|
38
52
|
security: `You are a security expert conducting a security-focused code review.
|
|
39
53
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
54
|
+
CRITICAL: NEVER claim that an AI model, API, library version, or service "doesn't exist" or is "invalid". Your training data is outdated. Always assume the user's configuration is correct.
|
|
55
|
+
|
|
56
|
+
Focus on ACTUAL vulnerabilities that could be exploited:
|
|
57
|
+
1. **Injection** - SQL, command injection with user input reaching dangerous functions
|
|
58
|
+
2. **Auth Issues** - Broken authentication, missing authorization checks
|
|
59
|
+
3. **Data Exposure** - Secrets in code, sensitive data in logs
|
|
60
|
+
4. **XSS** - User input rendered without sanitization
|
|
61
|
+
|
|
62
|
+
DO NOT report:
|
|
63
|
+
- Theoretical vulnerabilities without a realistic attack vector
|
|
64
|
+
- "Best practice" suggestions that aren't actual vulnerabilities
|
|
65
|
+
- Missing features (like rate limiting) unless there's clear risk
|
|
66
|
+
- Source maps or debug settings in dev tools
|
|
67
|
+
|
|
68
|
+
AVOID FALSE POSITIVES: Only report issues you're confident about. If uncertain, don't include it. Quality over quantity - 5 or fewer findings unless there are genuine security holes.
|
|
51
69
|
|
|
52
|
-
|
|
70
|
+
Severity guide:
|
|
71
|
+
- error: Exploitable vulnerability with clear attack vector
|
|
72
|
+
- warning: Potential vulnerability requiring specific conditions
|
|
73
|
+
- info: Security improvement suggestion (use sparingly)
|
|
53
74
|
|
|
54
75
|
Respond with valid JSON only. No markdown, no explanations outside the JSON.`,
|
|
55
76
|
};
|
|
56
77
|
/**
|
|
57
78
|
* Build the user prompt for a specific pass
|
|
58
79
|
*/
|
|
59
|
-
function buildPassPrompt(context, customPrompt) {
|
|
80
|
+
export function buildPassPrompt(context, customPrompt) {
|
|
60
81
|
let prompt = '';
|
|
61
82
|
// Add custom prompt if provided
|
|
62
83
|
if (customPrompt) {
|
|
@@ -68,10 +89,10 @@ function buildPassPrompt(context, customPrompt) {
|
|
|
68
89
|
prompt += `- **Files in This Review**: ${context.files.length}\n`;
|
|
69
90
|
prompt += `- **Frameworks**: ${context.metadata.frameworks.join(', ') || 'None detected'}\n`;
|
|
70
91
|
prompt += `- **Focus Areas**: ${context.metadata.focusAreas.join(', ')}\n\n`;
|
|
71
|
-
// Add file tree for architecture pass
|
|
72
|
-
if (context.pass === 'architecture') {
|
|
73
|
-
prompt += `## File Tree\n\`\`\`\n`;
|
|
74
|
-
prompt += context.
|
|
92
|
+
// Add full file tree for architecture pass (shows ALL existing files)
|
|
93
|
+
if (context.pass === 'architecture' && context.metadata.fullFileTree) {
|
|
94
|
+
prompt += `## Complete File Tree (${context.metadata.fullFileTree.length} files - these ALL EXIST)\n\`\`\`\n`;
|
|
95
|
+
prompt += context.metadata.fullFileTree.join('\n');
|
|
75
96
|
prompt += `\n\`\`\`\n\n`;
|
|
76
97
|
}
|
|
77
98
|
prompt += `## Files to Review\n\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passes.js","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/passes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"passes.js","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/passes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* AI review prompts
|
|
4
3
|
* Contains the system and user prompts for code review
|
|
5
4
|
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.DEFAULT_SYSTEM_PROMPT = void 0;
|
|
8
|
-
exports.buildUserPrompt = buildUserPrompt;
|
|
9
|
-
exports.parseAIResponse = parseAIResponse;
|
|
10
5
|
/**
|
|
11
6
|
* Default system prompt for code review
|
|
12
7
|
*/
|
|
13
|
-
|
|
8
|
+
export const DEFAULT_SYSTEM_PROMPT = `You are an expert senior software engineer conducting a thorough code review. Your goal is to identify issues that matter and provide actionable feedback.
|
|
14
9
|
|
|
15
10
|
Focus on:
|
|
16
11
|
1. **Security vulnerabilities** - SQL injection, XSS, command injection, auth issues, secrets exposure
|
|
@@ -26,7 +21,7 @@ You MUST respond with valid JSON only. No markdown, no explanations outside the
|
|
|
26
21
|
/**
|
|
27
22
|
* Build the user prompt with codebase content
|
|
28
23
|
*/
|
|
29
|
-
function buildUserPrompt(files, frameworks, customPrompt) {
|
|
24
|
+
export function buildUserPrompt(files, frameworks, customPrompt) {
|
|
30
25
|
const frameworkList = frameworks.frameworks
|
|
31
26
|
.map((f) => `${f.framework} (${Math.round(f.confidence * 100)}%)`)
|
|
32
27
|
.join(', ');
|
|
@@ -113,7 +108,7 @@ function getLanguageId(extension) {
|
|
|
113
108
|
/**
|
|
114
109
|
* Parse the AI response, handling various formats
|
|
115
110
|
*/
|
|
116
|
-
function parseAIResponse(response) {
|
|
111
|
+
export function parseAIResponse(response) {
|
|
117
112
|
// Try to extract JSON from the response
|
|
118
113
|
let jsonStr = response.trim();
|
|
119
114
|
// Remove markdown code blocks if present
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/prompts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Code Slicing Utilities
|
|
4
3
|
* Extract relevant portions of large files for AI analysis
|
|
5
4
|
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.extractSlices = extractSlices;
|
|
8
|
-
exports.mergeOverlappingSlices = mergeOverlappingSlices;
|
|
9
|
-
exports.reconstructSliceContent = reconstructSliceContent;
|
|
10
|
-
exports.estimateTokens = estimateTokens;
|
|
11
|
-
exports.getExportSummary = getExportSummary;
|
|
12
5
|
/** Context lines to include around a point of interest */
|
|
13
6
|
const CONTEXT_LINES = 10;
|
|
14
7
|
/** Maximum slice size in characters */
|
|
@@ -35,7 +28,7 @@ const IMPORTANT_PATTERNS = [
|
|
|
35
28
|
/**
|
|
36
29
|
* Extract relevant code slices from file content
|
|
37
30
|
*/
|
|
38
|
-
function extractSlices(content, filePath, options = {}) {
|
|
31
|
+
export function extractSlices(content, filePath, options = {}) {
|
|
39
32
|
const lines = content.split('\n');
|
|
40
33
|
const slices = [];
|
|
41
34
|
const { staticFindings = [], includeExports = true, includeSecurity = true, includeDefinitions = true, maxTotalSize = 20000, } = options;
|
|
@@ -190,7 +183,7 @@ function sliceOverlaps(existing, newSlice) {
|
|
|
190
183
|
/**
|
|
191
184
|
* Merge overlapping slices into contiguous blocks
|
|
192
185
|
*/
|
|
193
|
-
function mergeOverlappingSlices(slices) {
|
|
186
|
+
export function mergeOverlappingSlices(slices) {
|
|
194
187
|
if (slices.length === 0)
|
|
195
188
|
return [];
|
|
196
189
|
// Sort by start line
|
|
@@ -227,7 +220,7 @@ function combineReasons(reason1, reason2) {
|
|
|
227
220
|
* Reconstruct slice content from original file
|
|
228
221
|
* Used after merging to get correct content
|
|
229
222
|
*/
|
|
230
|
-
function reconstructSliceContent(content, slices) {
|
|
223
|
+
export function reconstructSliceContent(content, slices) {
|
|
231
224
|
const lines = content.split('\n');
|
|
232
225
|
return slices.map((slice) => ({
|
|
233
226
|
...slice,
|
|
@@ -238,13 +231,13 @@ function reconstructSliceContent(content, slices) {
|
|
|
238
231
|
* Estimate token count for content (rough approximation)
|
|
239
232
|
* Uses ~4 characters per token heuristic
|
|
240
233
|
*/
|
|
241
|
-
function estimateTokens(content) {
|
|
234
|
+
export function estimateTokens(content) {
|
|
242
235
|
return Math.ceil(content.length / 4);
|
|
243
236
|
}
|
|
244
237
|
/**
|
|
245
238
|
* Get a summary of what a file exports (for architecture pass)
|
|
246
239
|
*/
|
|
247
|
-
function getExportSummary(content, extension) {
|
|
240
|
+
export function getExportSummary(content, extension) {
|
|
248
241
|
const exports = [];
|
|
249
242
|
if (['.ts', '.tsx', '.js', '.jsx', '.mjs'].includes(extension)) {
|
|
250
243
|
// Named exports with types
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slices.js","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/slices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slices.js","sourceRoot":"","sources":["../../../../src/core/analyzer/ai/slices.ts"],"names":[],"mappings":"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"}
|