mstro-app 0.4.13 → 0.4.16
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/server/cli/headless/claude-invoker-process.d.ts.map +1 -1
- package/dist/server/cli/headless/claude-invoker-process.js +5 -1
- package/dist/server/cli/headless/claude-invoker-process.js.map +1 -1
- package/dist/server/services/file-explorer-ops.d.ts +1 -1
- package/dist/server/services/file-explorer-ops.d.ts.map +1 -1
- package/dist/server/services/file-explorer-ops.js +7 -2
- package/dist/server/services/file-explorer-ops.js.map +1 -1
- package/dist/server/services/plan/composer.d.ts +1 -1
- package/dist/server/services/plan/composer.d.ts.map +1 -1
- package/dist/server/services/plan/composer.js +3 -2
- package/dist/server/services/plan/composer.js.map +1 -1
- package/dist/server/services/plan/executor.d.ts +5 -0
- package/dist/server/services/plan/executor.d.ts.map +1 -1
- package/dist/server/services/plan/executor.js +32 -1
- package/dist/server/services/plan/executor.js.map +1 -1
- package/dist/server/services/plan/parser-core.d.ts.map +1 -1
- package/dist/server/services/plan/parser-core.js +1 -0
- package/dist/server/services/plan/parser-core.js.map +1 -1
- package/dist/server/services/plan/review-gate.d.ts +2 -0
- package/dist/server/services/plan/review-gate.d.ts.map +1 -1
- package/dist/server/services/plan/review-gate.js +25 -3
- package/dist/server/services/plan/review-gate.js.map +1 -1
- package/dist/server/services/plan/types.d.ts +2 -0
- package/dist/server/services/plan/types.d.ts.map +1 -1
- package/dist/server/services/sandbox-utils.d.ts +3 -1
- package/dist/server/services/sandbox-utils.d.ts.map +1 -1
- package/dist/server/services/sandbox-utils.js +6 -3
- package/dist/server/services/sandbox-utils.js.map +1 -1
- package/dist/server/services/websocket/file-explorer-handlers.js +2 -1
- package/dist/server/services/websocket/file-explorer-handlers.js.map +1 -1
- package/dist/server/services/websocket/git-log-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/git-log-handlers.js +29 -9
- package/dist/server/services/websocket/git-log-handlers.js.map +1 -1
- package/dist/server/services/websocket/git-worktree-handlers.js +8 -0
- package/dist/server/services/websocket/git-worktree-handlers.js.map +1 -1
- package/dist/server/services/websocket/handler.d.ts.map +1 -1
- package/dist/server/services/websocket/handler.js +5 -3
- package/dist/server/services/websocket/handler.js.map +1 -1
- package/dist/server/services/websocket/plan-execution-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/plan-execution-handlers.js +4 -1
- package/dist/server/services/websocket/plan-execution-handlers.js.map +1 -1
- package/dist/server/services/websocket/plan-helpers.js +1 -1
- package/dist/server/services/websocket/plan-helpers.js.map +1 -1
- package/dist/server/services/websocket/quality-handlers.d.ts +1 -1
- package/dist/server/services/websocket/quality-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/quality-handlers.js +67 -14
- package/dist/server/services/websocket/quality-handlers.js.map +1 -1
- package/dist/server/services/websocket/quality-persistence.d.ts +2 -0
- package/dist/server/services/websocket/quality-persistence.d.ts.map +1 -1
- package/dist/server/services/websocket/quality-persistence.js +33 -2
- package/dist/server/services/websocket/quality-persistence.js.map +1 -1
- package/dist/server/services/websocket/quality-review-agent.d.ts +33 -0
- package/dist/server/services/websocket/quality-review-agent.d.ts.map +1 -1
- package/dist/server/services/websocket/quality-review-agent.js +360 -72
- package/dist/server/services/websocket/quality-review-agent.js.map +1 -1
- package/dist/server/services/websocket/quality-types.d.ts +3 -0
- package/dist/server/services/websocket/quality-types.d.ts.map +1 -1
- package/dist/server/services/websocket/quality-types.js.map +1 -1
- package/package.json +1 -1
- package/server/cli/headless/claude-invoker-process.ts +6 -1
- package/server/services/file-explorer-ops.ts +7 -2
- package/server/services/plan/composer.ts +3 -1
- package/server/services/plan/executor.ts +32 -1
- package/server/services/plan/parser-core.ts +1 -0
- package/server/services/plan/review-gate.ts +28 -3
- package/server/services/plan/types.ts +2 -0
- package/server/services/sandbox-utils.ts +7 -3
- package/server/services/websocket/file-explorer-handlers.ts +2 -1
- package/server/services/websocket/git-log-handlers.ts +30 -9
- package/server/services/websocket/git-worktree-handlers.ts +9 -0
- package/server/services/websocket/handler.ts +6 -3
- package/server/services/websocket/plan-execution-handlers.ts +4 -1
- package/server/services/websocket/plan-helpers.ts +1 -1
- package/server/services/websocket/quality-handlers.ts +69 -9
- package/server/services/websocket/quality-persistence.ts +32 -2
- package/server/services/websocket/quality-review-agent.ts +427 -72
- package/server/services/websocket/quality-types.ts +3 -0
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Builds the review prompt, runs the agent, parses findings, and persists results.
|
|
7
7
|
*/
|
|
8
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
9
|
+
import { isAbsolute, join } from 'node:path';
|
|
8
10
|
import { runWithFileLogger } from '../../cli/headless/headless-logger.js';
|
|
9
11
|
import { HeadlessRunner } from '../../cli/headless/index.js';
|
|
10
12
|
import { recomputeWithAiReview } from './quality-service.js';
|
|
@@ -45,11 +47,35 @@ ${cliFindingsSection}
|
|
|
45
47
|
### Performance
|
|
46
48
|
- N+1 queries, unnecessary re-renders, missing memoization, blocking I/O in hot paths, unbounded data structures, missing pagination
|
|
47
49
|
|
|
50
|
+
## CRITICAL — Structured Evidence Requirement
|
|
51
|
+
|
|
52
|
+
For EACH finding, you MUST provide structured evidence that grounds the finding in actual code. This is required to prevent false positives.
|
|
53
|
+
|
|
54
|
+
For each finding, use this reasoning process:
|
|
55
|
+
|
|
56
|
+
1. **PREMISE**: State the observable fact from the code. Quote the exact code you see.
|
|
57
|
+
2. **CONTEXT**: What is the surrounding code doing? Are there guards, fixes, or patterns elsewhere that might handle this?
|
|
58
|
+
3. **COUNTER-CHECK**: Actively look for evidence that CONTRADICTS your finding. Check for:
|
|
59
|
+
- Guards or validation earlier in the call chain
|
|
60
|
+
- Error handling wrapping the code
|
|
61
|
+
- Configuration that changes behavior (e.g., NODE_ENV checks)
|
|
62
|
+
- Comments explaining intentional design choices
|
|
63
|
+
4. **CONCLUSION**: Only report the finding if you could not find contradicting evidence.
|
|
64
|
+
|
|
65
|
+
### Common False Positive Patterns to AVOID
|
|
66
|
+
|
|
67
|
+
- Claiming a function uses API X when it actually uses API Y (e.g., claiming Math.random() when code uses crypto.randomInt()) — ALWAYS quote the actual function call
|
|
68
|
+
- Claiming a header/value is leaked when code already deletes/filters it — READ the full function
|
|
69
|
+
- Claiming there's no guard when a condition check exists nearby — READ surrounding lines
|
|
70
|
+
- Claiming N fields/methods when the actual count differs — COUNT explicitly
|
|
71
|
+
- Claiming a resource leaks when cleanup exists in a different handler — SEARCH for the cleanup code
|
|
72
|
+
|
|
48
73
|
## Rules
|
|
49
74
|
|
|
50
|
-
- Only report findings you are >
|
|
75
|
+
- Only report findings you are >90% confident about after completing the counter-check step.
|
|
51
76
|
- Focus on architecture, SOLID violations, bugs, and security over style nits.
|
|
52
77
|
- Each finding MUST reference a specific file and line number. Do not report vague or file-level issues.
|
|
78
|
+
- Each finding MUST include an "evidence" field with the exact code snippet (1-5 lines) proving the issue exists.
|
|
53
79
|
- Limit to the 25 most important findings, ranked by severity.
|
|
54
80
|
- Do NOT modify any files. This is a read-only review.
|
|
55
81
|
- Be HONEST about the overall quality. A codebase with serious issues should score low.
|
|
@@ -82,7 +108,8 @@ After your analysis, output EXACTLY one JSON code block with your findings. No o
|
|
|
82
108
|
"line": 42,
|
|
83
109
|
"title": "Short title describing the issue",
|
|
84
110
|
"description": "What the problem is and why it matters.",
|
|
85
|
-
"suggestion": "How to fix it."
|
|
111
|
+
"suggestion": "How to fix it.",
|
|
112
|
+
"evidence": "const token = Math.random().toString(36) // exact code from file proving the issue"
|
|
86
113
|
}
|
|
87
114
|
],
|
|
88
115
|
"summary": "Brief 1-2 sentence summary of overall code quality."
|
|
@@ -103,6 +130,7 @@ function normalizeFinding(f) {
|
|
|
103
130
|
title: f.title,
|
|
104
131
|
description: typeof f.description === 'string' ? f.description : '',
|
|
105
132
|
suggestion: typeof f.suggestion === 'string' ? f.suggestion : undefined,
|
|
133
|
+
evidence: typeof f.evidence === 'string' ? f.evidence : undefined,
|
|
106
134
|
};
|
|
107
135
|
}
|
|
108
136
|
function extractJson(response) {
|
|
@@ -133,6 +161,237 @@ export function parseCodeReviewResponse(response) {
|
|
|
133
161
|
return { findings: [], summary: 'Failed to parse code review results.', score: null, grade: null, scoreRationale: null };
|
|
134
162
|
}
|
|
135
163
|
}
|
|
164
|
+
function resolveFilePath(dirPath, filePath) {
|
|
165
|
+
if (isAbsolute(filePath))
|
|
166
|
+
return filePath;
|
|
167
|
+
return join(dirPath, filePath);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Extract keywords/identifiers that the finding's description claims exist in the code.
|
|
171
|
+
* Looks for patterns like: "calls X()", "uses X", "X is called", "X at line N".
|
|
172
|
+
*/
|
|
173
|
+
function extractClaimedIdentifiers(description, title) {
|
|
174
|
+
const identifiers = [];
|
|
175
|
+
const combined = `${title} ${description}`;
|
|
176
|
+
// Match function calls: functionName(), ClassName.method()
|
|
177
|
+
const callPatterns = combined.matchAll(/\b([a-zA-Z_$][\w.$]*)\s*\(/g);
|
|
178
|
+
for (const m of callPatterns) {
|
|
179
|
+
const name = m[1];
|
|
180
|
+
// Skip common English words that look like function calls
|
|
181
|
+
if (!['If', 'When', 'While', 'For', 'This', 'That', 'The', 'Each', 'Uses', 'Has', 'Does', 'Returns', 'Takes', 'Calls'].includes(name)) {
|
|
182
|
+
identifiers.push(name);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Match backtick-quoted code: `someCode`
|
|
186
|
+
const backtickPatterns = combined.matchAll(/`([^`]+)`/g);
|
|
187
|
+
for (const m of backtickPatterns) {
|
|
188
|
+
// Extract identifiers from the backtick content
|
|
189
|
+
const inner = m[1].replace(/[()[\]{};,]/g, ' ').trim();
|
|
190
|
+
if (inner && inner.length < 60) {
|
|
191
|
+
identifiers.push(inner);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return identifiers;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Validate findings against the actual filesystem. Returns findings annotated
|
|
198
|
+
* with validation results. Does NOT remove findings — only marks them.
|
|
199
|
+
*/
|
|
200
|
+
export function validateFindings(findings, dirPath) {
|
|
201
|
+
const validated = [];
|
|
202
|
+
const rejected = [];
|
|
203
|
+
for (const finding of findings) {
|
|
204
|
+
const result = validateSingleFinding(finding, dirPath);
|
|
205
|
+
if (result.valid) {
|
|
206
|
+
validated.push({ ...finding, verified: undefined }); // Don't mark yet — Phase 2 does that
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
rejected.push({ ...finding, verified: false, verificationNote: result.reason });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
validated,
|
|
214
|
+
rejected,
|
|
215
|
+
stats: { total: findings.length, passed: validated.length, failed: rejected.length },
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function readFileContent(filePath) {
|
|
219
|
+
try {
|
|
220
|
+
return readFileSync(filePath, 'utf-8');
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
const COMMON_KEYWORDS = /^(const|let|var|function|return|import|export|from|this|true|false|null|undefined|new|if|else|for|while|try|catch)$/;
|
|
227
|
+
function checkLineInRange(content, line) {
|
|
228
|
+
if (line === null || line <= 0)
|
|
229
|
+
return null;
|
|
230
|
+
const lineCount = content.split('\n').length;
|
|
231
|
+
if (line > lineCount)
|
|
232
|
+
return `Line ${line} exceeds file length (${lineCount} lines)`;
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
function checkEvidenceTokens(content, evidence) {
|
|
236
|
+
if (!evidence)
|
|
237
|
+
return null;
|
|
238
|
+
const evidenceTokens = evidence
|
|
239
|
+
.replace(/['"`;{}[\]()]/g, ' ')
|
|
240
|
+
.split(/\s+/)
|
|
241
|
+
.filter(t => t.length > 3 && !COMMON_KEYWORDS.test(t));
|
|
242
|
+
if (evidenceTokens.length === 0)
|
|
243
|
+
return null;
|
|
244
|
+
const matchCount = evidenceTokens.filter(token => content.includes(token)).length;
|
|
245
|
+
if (matchCount === 0)
|
|
246
|
+
return `Evidence tokens not found in file: ${evidenceTokens.slice(0, 3).join(', ')}`;
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
function checkClaimedIdentifiers(content, finding) {
|
|
250
|
+
const claimedIds = extractClaimedIdentifiers(finding.description, finding.title);
|
|
251
|
+
if (claimedIds.length < 2)
|
|
252
|
+
return null;
|
|
253
|
+
const foundAny = claimedIds.some(id => {
|
|
254
|
+
if (id.includes('.'))
|
|
255
|
+
return content.includes(id);
|
|
256
|
+
return new RegExp(`\\b${id.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`).test(content);
|
|
257
|
+
});
|
|
258
|
+
if (!foundAny)
|
|
259
|
+
return `Claimed identifiers not found in file: ${claimedIds.slice(0, 3).join(', ')}`;
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
function validateSingleFinding(finding, dirPath) {
|
|
263
|
+
const filePath = resolveFilePath(dirPath, finding.file);
|
|
264
|
+
if (!existsSync(filePath)) {
|
|
265
|
+
return { finding, valid: false, reason: `File does not exist: ${finding.file}` };
|
|
266
|
+
}
|
|
267
|
+
const content = readFileContent(filePath);
|
|
268
|
+
if (!content)
|
|
269
|
+
return { finding, valid: true }; // Can't read — don't reject
|
|
270
|
+
const lineErr = checkLineInRange(content, finding.line);
|
|
271
|
+
if (lineErr)
|
|
272
|
+
return { finding, valid: false, reason: lineErr };
|
|
273
|
+
const evidenceErr = checkEvidenceTokens(content, finding.evidence);
|
|
274
|
+
if (evidenceErr)
|
|
275
|
+
return { finding, valid: false, reason: evidenceErr };
|
|
276
|
+
const idErr = checkClaimedIdentifiers(content, finding);
|
|
277
|
+
if (idErr)
|
|
278
|
+
return { finding, valid: false, reason: idErr };
|
|
279
|
+
return { finding, valid: true };
|
|
280
|
+
}
|
|
281
|
+
// ── Phase 2: LLM verification pass ──────────────────────────
|
|
282
|
+
//
|
|
283
|
+
// Runs a second headless Claude pass that independently verifies
|
|
284
|
+
// each finding against the actual code.
|
|
285
|
+
export function buildVerificationPrompt(dirPath, findings) {
|
|
286
|
+
const findingsJson = findings.map((f, i) => ({
|
|
287
|
+
id: i + 1,
|
|
288
|
+
severity: f.severity,
|
|
289
|
+
category: f.category,
|
|
290
|
+
file: f.file,
|
|
291
|
+
line: f.line,
|
|
292
|
+
title: f.title,
|
|
293
|
+
description: f.description,
|
|
294
|
+
evidence: f.evidence || '(none provided)',
|
|
295
|
+
}));
|
|
296
|
+
return `You are an independent code review VERIFIER. A separate reviewer produced the findings below. Your job is to VERIFY each finding against the actual code. You are a skeptic — do NOT trust the original reviewer's claims.
|
|
297
|
+
|
|
298
|
+
IMPORTANT: Your current working directory is "${dirPath}". Only read files within this directory.
|
|
299
|
+
|
|
300
|
+
## Findings to Verify
|
|
301
|
+
|
|
302
|
+
${JSON.stringify(findingsJson, null, 2)}
|
|
303
|
+
|
|
304
|
+
## Verification Process
|
|
305
|
+
|
|
306
|
+
For EACH finding:
|
|
307
|
+
|
|
308
|
+
1. **Read the cited file and line** using the Read tool. Read at least 20 lines around the cited line for context.
|
|
309
|
+
2. **Check the specific claim** in the description. Does the code actually do what the finding claims?
|
|
310
|
+
3. **Search for counter-evidence**:
|
|
311
|
+
- If the finding claims something is missing (no validation, no cleanup, no guard): search for it with Grep
|
|
312
|
+
- If the finding claims an API is used: verify the actual API call at that line
|
|
313
|
+
- If the finding claims a value is leaked/exposed: check if it's filtered/deleted elsewhere in the same function
|
|
314
|
+
4. **Verdict**: Mark as "confirmed" or "rejected" with a brief explanation
|
|
315
|
+
|
|
316
|
+
## Rules
|
|
317
|
+
|
|
318
|
+
- You MUST actually Read each cited file. Do not rely on memory or assumptions.
|
|
319
|
+
- Use Grep to search for patterns the finding claims exist (or don't exist).
|
|
320
|
+
- A finding is "rejected" if:
|
|
321
|
+
- The code does NOT match what the description claims
|
|
322
|
+
- There IS a guard/fix that the finding claims is missing
|
|
323
|
+
- The line number doesn't contain the relevant code
|
|
324
|
+
- The finding is about a different version of the code than what exists now
|
|
325
|
+
- A finding is "confirmed" if you can independently verify the issue exists in the current code.
|
|
326
|
+
- Be thorough but efficient — focus verification effort on high/critical severity findings.
|
|
327
|
+
|
|
328
|
+
## Output
|
|
329
|
+
|
|
330
|
+
Output EXACTLY one JSON code block. No other text after the JSON block.
|
|
331
|
+
|
|
332
|
+
\`\`\`json
|
|
333
|
+
{
|
|
334
|
+
"verifications": [
|
|
335
|
+
{
|
|
336
|
+
"id": 1,
|
|
337
|
+
"verdict": "confirmed|rejected",
|
|
338
|
+
"confidence": 0.95,
|
|
339
|
+
"note": "Brief explanation of what you found when checking the code"
|
|
340
|
+
}
|
|
341
|
+
]
|
|
342
|
+
}
|
|
343
|
+
\`\`\``;
|
|
344
|
+
}
|
|
345
|
+
export function parseVerificationResponse(response) {
|
|
346
|
+
const jsonStr = extractJson(response);
|
|
347
|
+
try {
|
|
348
|
+
const parsed = JSON.parse(jsonStr);
|
|
349
|
+
const raw = Array.isArray(parsed.verifications) ? parsed.verifications : [];
|
|
350
|
+
return raw
|
|
351
|
+
.filter((v) => typeof v.id === 'number' && typeof v.verdict === 'string')
|
|
352
|
+
.map(v => ({
|
|
353
|
+
id: v.id,
|
|
354
|
+
verdict: v.verdict === 'rejected' ? 'rejected' : 'confirmed',
|
|
355
|
+
confidence: typeof v.confidence === 'number' ? v.confidence : 0.5,
|
|
356
|
+
note: typeof v.note === 'string' ? v.note : '',
|
|
357
|
+
}));
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
return [];
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Apply verification verdicts to findings.
|
|
365
|
+
* Confirmed findings get verified=true. Rejected findings are removed.
|
|
366
|
+
*/
|
|
367
|
+
export function applyVerification(findings, verdicts) {
|
|
368
|
+
const verdictMap = new Map(verdicts.map(v => [v.id, v]));
|
|
369
|
+
const verified = [];
|
|
370
|
+
const rejected = [];
|
|
371
|
+
for (let i = 0; i < findings.length; i++) {
|
|
372
|
+
const verdict = verdictMap.get(i + 1);
|
|
373
|
+
if (!verdict) {
|
|
374
|
+
// No verdict — keep finding but mark unverified
|
|
375
|
+
verified.push({ ...findings[i], verified: undefined });
|
|
376
|
+
continue;
|
|
377
|
+
}
|
|
378
|
+
if (verdict.verdict === 'confirmed' && verdict.confidence >= 0.6) {
|
|
379
|
+
verified.push({
|
|
380
|
+
...findings[i],
|
|
381
|
+
verified: true,
|
|
382
|
+
verificationNote: verdict.note || undefined,
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
rejected.push({
|
|
387
|
+
...findings[i],
|
|
388
|
+
verified: false,
|
|
389
|
+
verificationNote: verdict.note || undefined,
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
return { verified, rejected };
|
|
394
|
+
}
|
|
136
395
|
// ── Progress tracking ─────────────────────────────────────────
|
|
137
396
|
const TOOL_START_MESSAGES = {
|
|
138
397
|
Glob: 'Discovering project files...',
|
|
@@ -166,102 +425,131 @@ function createCodeReviewProgressTracker() {
|
|
|
166
425
|
return null;
|
|
167
426
|
};
|
|
168
427
|
}
|
|
428
|
+
function makeProgressSender(ctx, ws, reportPath) {
|
|
429
|
+
return (message) => {
|
|
430
|
+
ctx.send(ws, { type: 'qualityCodeReviewProgress', data: { path: reportPath, message } });
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
function makeToolCallback(send, prefix) {
|
|
434
|
+
const getProgressMessage = createCodeReviewProgressTracker();
|
|
435
|
+
return (event) => {
|
|
436
|
+
const message = getProgressMessage(event);
|
|
437
|
+
if (message)
|
|
438
|
+
send(prefix ? `${prefix}${message}` : message);
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
function loadCliFindings(getPersistence, workingDir, reportPath) {
|
|
442
|
+
try {
|
|
443
|
+
const persistence = getPersistence(workingDir);
|
|
444
|
+
const existingReport = persistence.loadReport(reportPath);
|
|
445
|
+
return existingReport?.findings;
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
return undefined;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
async function runVerificationPass(dirPath, findings, send) {
|
|
452
|
+
send(`Verifying ${findings.length} findings against actual code...`);
|
|
453
|
+
const verificationRunner = new HeadlessRunner({
|
|
454
|
+
workingDir: dirPath,
|
|
455
|
+
directPrompt: buildVerificationPrompt(dirPath, findings),
|
|
456
|
+
stallWarningMs: 120_000,
|
|
457
|
+
stallKillMs: 300_000,
|
|
458
|
+
stallHardCapMs: 600_000,
|
|
459
|
+
toolUseCallback: makeToolCallback(send, 'Verifying: '),
|
|
460
|
+
});
|
|
461
|
+
const verifyResult = await runWithFileLogger('code-review-verify', () => verificationRunner.run());
|
|
462
|
+
const verdicts = parseVerificationResponse(verifyResult.assistantResponse || '');
|
|
463
|
+
if (verdicts.length === 0)
|
|
464
|
+
return findings; // No verdicts — keep all as-is
|
|
465
|
+
const { verified, rejected } = applyVerification(findings, verdicts);
|
|
466
|
+
if (rejected.length > 0) {
|
|
467
|
+
send(`Verification rejected ${rejected.length} inaccurate finding(s)`);
|
|
468
|
+
}
|
|
469
|
+
return verified;
|
|
470
|
+
}
|
|
471
|
+
function persistReviewResults(reviewResult, reportPath, getPersistence, workingDir) {
|
|
472
|
+
const persistence = getPersistence(workingDir);
|
|
473
|
+
const existingReport = persistence.loadReport(reportPath);
|
|
474
|
+
if (!existingReport) {
|
|
475
|
+
persistence.saveCodeReview(reportPath, reviewResult.findings, reviewResult.summary);
|
|
476
|
+
return null;
|
|
477
|
+
}
|
|
478
|
+
let updatedResults;
|
|
479
|
+
if (reviewResult.score !== null && reviewResult.grade !== null) {
|
|
480
|
+
updatedResults = {
|
|
481
|
+
...existingReport,
|
|
482
|
+
overall: reviewResult.score,
|
|
483
|
+
grade: reviewResult.grade,
|
|
484
|
+
codeReview: reviewResult.findings,
|
|
485
|
+
scoreRationale: reviewResult.scoreRationale ?? undefined,
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
updatedResults = recomputeWithAiReview(existingReport, reviewResult.findings);
|
|
490
|
+
updatedResults = { ...updatedResults, codeReview: reviewResult.findings };
|
|
491
|
+
}
|
|
492
|
+
persistence.saveReport(reportPath, updatedResults);
|
|
493
|
+
persistence.appendHistory(updatedResults, reportPath);
|
|
494
|
+
persistence.saveCodeReview(reportPath, reviewResult.findings, reviewResult.summary);
|
|
495
|
+
return updatedResults;
|
|
496
|
+
}
|
|
169
497
|
// ── Handler ───────────────────────────────────────────────────
|
|
170
498
|
export async function handleCodeReview(ctx, ws, reportPath, dirPath, workingDir, activeReviews, getPersistence) {
|
|
171
499
|
if (activeReviews.has(dirPath)) {
|
|
172
|
-
ctx.send(ws, {
|
|
173
|
-
type: 'qualityError',
|
|
174
|
-
data: { path: reportPath, error: 'A code review is already running for this directory.' },
|
|
175
|
-
});
|
|
500
|
+
ctx.send(ws, { type: 'qualityError', data: { path: reportPath, error: 'A code review is already running for this directory.' } });
|
|
176
501
|
return;
|
|
177
502
|
}
|
|
178
503
|
activeReviews.add(dirPath);
|
|
504
|
+
const send = makeProgressSender(ctx, ws, reportPath);
|
|
179
505
|
try {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
});
|
|
184
|
-
// Load CLI findings from the existing report to pass to the AI reviewer
|
|
185
|
-
let cliFindings;
|
|
186
|
-
try {
|
|
187
|
-
const persistence = getPersistence(workingDir);
|
|
188
|
-
const existingReport = persistence.loadReport(reportPath);
|
|
189
|
-
if (existingReport?.findings) {
|
|
190
|
-
cliFindings = existingReport.findings;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
catch {
|
|
194
|
-
// Continue without CLI findings if persistence fails
|
|
195
|
-
}
|
|
506
|
+
send('Starting AI code review...');
|
|
507
|
+
const cliFindings = loadCliFindings(getPersistence, workingDir, reportPath);
|
|
508
|
+
// ── Pass 1: Initial AI code review ──────────────────────
|
|
196
509
|
const runner = new HeadlessRunner({
|
|
197
510
|
workingDir: dirPath,
|
|
198
511
|
directPrompt: buildCodeReviewPrompt(dirPath, cliFindings),
|
|
199
512
|
stallWarningMs: 120_000,
|
|
200
513
|
stallKillMs: 600_000,
|
|
201
514
|
stallHardCapMs: 900_000,
|
|
202
|
-
toolUseCallback: (
|
|
203
|
-
const getProgressMessage = createCodeReviewProgressTracker();
|
|
204
|
-
return (event) => {
|
|
205
|
-
const message = getProgressMessage(event);
|
|
206
|
-
if (message) {
|
|
207
|
-
ctx.send(ws, {
|
|
208
|
-
type: 'qualityCodeReviewProgress',
|
|
209
|
-
data: { path: reportPath, message },
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
})(),
|
|
214
|
-
});
|
|
215
|
-
ctx.send(ws, {
|
|
216
|
-
type: 'qualityCodeReviewProgress',
|
|
217
|
-
data: { path: reportPath, message: 'Claude is analyzing your codebase...' },
|
|
515
|
+
toolUseCallback: makeToolCallback(send),
|
|
218
516
|
});
|
|
517
|
+
send('Claude is analyzing your codebase...');
|
|
219
518
|
const result = await runWithFileLogger('code-review', () => runner.run());
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
519
|
+
const reviewResult = parseCodeReviewResponse(result.assistantResponse || '');
|
|
520
|
+
// ── Phase 3: Deterministic post-validation ──────────────
|
|
521
|
+
send(`Validating ${reviewResult.findings.length} findings against codebase...`);
|
|
522
|
+
const validation = validateFindings(reviewResult.findings, dirPath);
|
|
523
|
+
if (validation.stats.failed > 0) {
|
|
524
|
+
send(`Filtered ${validation.stats.failed} finding(s) with invalid references`);
|
|
525
|
+
}
|
|
526
|
+
// ── Phase 2: LLM verification pass ──────────────────────
|
|
527
|
+
let finalFindings = validation.validated;
|
|
528
|
+
if (finalFindings.length > 0) {
|
|
529
|
+
try {
|
|
530
|
+
finalFindings = await runVerificationPass(dirPath, finalFindings, send);
|
|
531
|
+
}
|
|
532
|
+
catch {
|
|
533
|
+
send('Verification pass skipped (timeout or error)');
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
// ── Persist and send results ─────────────────────────────
|
|
537
|
+
send('Generating review report...');
|
|
538
|
+
const verifiedReviewResult = { ...reviewResult, findings: finalFindings };
|
|
227
539
|
let updatedResults = null;
|
|
228
540
|
try {
|
|
229
|
-
|
|
230
|
-
const existingReport = persistence.loadReport(reportPath);
|
|
231
|
-
if (existingReport) {
|
|
232
|
-
if (reviewResult.score !== null && reviewResult.grade !== null) {
|
|
233
|
-
// Use the AI-determined score and grade directly
|
|
234
|
-
updatedResults = {
|
|
235
|
-
...existingReport,
|
|
236
|
-
overall: reviewResult.score,
|
|
237
|
-
grade: reviewResult.grade,
|
|
238
|
-
codeReview: reviewResult.findings,
|
|
239
|
-
scoreRationale: reviewResult.scoreRationale ?? undefined,
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
// Fallback: recompute with weighted formula
|
|
244
|
-
updatedResults = recomputeWithAiReview(existingReport, reviewResult.findings);
|
|
245
|
-
updatedResults = { ...updatedResults, codeReview: reviewResult.findings };
|
|
246
|
-
}
|
|
247
|
-
persistence.saveReport(reportPath, updatedResults);
|
|
248
|
-
persistence.appendHistory(updatedResults, reportPath);
|
|
249
|
-
}
|
|
250
|
-
persistence.saveCodeReview(reportPath, reviewResult.findings, reviewResult.summary);
|
|
541
|
+
updatedResults = persistReviewResults(verifiedReviewResult, reportPath, getPersistence, workingDir);
|
|
251
542
|
}
|
|
252
543
|
catch {
|
|
253
544
|
// Persistence failure should not break the review flow
|
|
254
545
|
}
|
|
255
546
|
ctx.send(ws, {
|
|
256
547
|
type: 'qualityCodeReview',
|
|
257
|
-
data: { path: reportPath, findings:
|
|
548
|
+
data: { path: reportPath, findings: verifiedReviewResult.findings, summary: verifiedReviewResult.summary, results: updatedResults },
|
|
258
549
|
});
|
|
259
550
|
}
|
|
260
551
|
catch (error) {
|
|
261
|
-
ctx.send(ws, {
|
|
262
|
-
type: 'qualityError',
|
|
263
|
-
data: { path: reportPath, error: error instanceof Error ? error.message : String(error) },
|
|
264
|
-
});
|
|
552
|
+
ctx.send(ws, { type: 'qualityError', data: { path: reportPath, error: error instanceof Error ? error.message : String(error) } });
|
|
265
553
|
}
|
|
266
554
|
finally {
|
|
267
555
|
activeReviews.delete(dirPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality-review-agent.js","sourceRoot":"","sources":["../../../../server/services/websocket/quality-review-agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"quality-review-agent.js","sourceRoot":"","sources":["../../../../server/services/websocket/quality-review-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality-types.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/quality-types.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;CAC7D;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"quality-types.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/quality-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality-types.js","sourceRoot":"","sources":["../../../../server/services/websocket/quality-types.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,gEAAgE;
|
|
1
|
+
{"version":3,"file":"quality-types.js","sourceRoot":"","sources":["../../../../server/services/websocket/quality-types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -95,6 +95,11 @@ export function buildClaudeArgs(
|
|
|
95
95
|
// Reduce Edit-without-Read errors by reminding the model
|
|
96
96
|
args.push('--append-system-prompt', 'IMPORTANT: Always use the Read tool to read a file before using Edit or Write on it. Never edit a file you have not read in this session.');
|
|
97
97
|
|
|
98
|
+
// Sandboxed sessions: restrict all file operations to the working directory
|
|
99
|
+
if (config.sandboxed) {
|
|
100
|
+
args.push('--append-system-prompt', `SECURITY: You are running in sandboxed mode for a shared user. You MUST NOT read, write, list, or access any files or directories outside the working directory (${config.workingDir}). This includes home directories, /etc, /tmp, /proc, and any path that does not start with ${config.workingDir}. If asked to access files outside this boundary, refuse the request and explain that access is restricted to the project directory.`);
|
|
101
|
+
}
|
|
102
|
+
|
|
98
103
|
if (!hasImageAttachments) {
|
|
99
104
|
// Strip null bytes — Node.js spawn rejects args containing \0
|
|
100
105
|
args.push(prompt.replaceAll('\0', ''));
|
|
@@ -147,7 +152,7 @@ export function spawnAndRegister(
|
|
|
147
152
|
);
|
|
148
153
|
|
|
149
154
|
const baseEnv = config.sandboxed
|
|
150
|
-
? sanitizeEnvForSandbox(process.env, config.workingDir)
|
|
155
|
+
? sanitizeEnvForSandbox(process.env, config.workingDir, { overrideHome: false })
|
|
151
156
|
: { ...process.env };
|
|
152
157
|
const spawnEnv = config.extraEnv
|
|
153
158
|
? { ...baseEnv, ...config.extraEnv }
|