@sentry/warden 0.36.0 → 0.37.0

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.
Files changed (123) hide show
  1. package/dist/cli/args.d.ts +1 -2
  2. package/dist/cli/args.d.ts.map +1 -1
  3. package/dist/cli/args.js +0 -4
  4. package/dist/cli/args.js.map +1 -1
  5. package/dist/cli/commands/runs.d.ts.map +1 -1
  6. package/dist/cli/commands/runs.js +10 -10
  7. package/dist/cli/commands/runs.js.map +1 -1
  8. package/dist/cli/main.d.ts +28 -2
  9. package/dist/cli/main.d.ts.map +1 -1
  10. package/dist/cli/main.js +120 -45
  11. package/dist/cli/main.js.map +1 -1
  12. package/dist/cli/output/formatters.d.ts +7 -4
  13. package/dist/cli/output/formatters.d.ts.map +1 -1
  14. package/dist/cli/output/formatters.js +51 -17
  15. package/dist/cli/output/formatters.js.map +1 -1
  16. package/dist/cli/output/index.d.ts +2 -2
  17. package/dist/cli/output/index.d.ts.map +1 -1
  18. package/dist/cli/output/index.js +2 -2
  19. package/dist/cli/output/index.js.map +1 -1
  20. package/dist/cli/output/jsonl-schema-gen.d.ts.map +1 -1
  21. package/dist/cli/output/jsonl-schema-gen.js +15 -4
  22. package/dist/cli/output/jsonl-schema-gen.js.map +1 -1
  23. package/dist/cli/output/jsonl.d.ts +158 -47
  24. package/dist/cli/output/jsonl.d.ts.map +1 -1
  25. package/dist/cli/output/jsonl.js +102 -49
  26. package/dist/cli/output/jsonl.js.map +1 -1
  27. package/dist/cli/output/tasks.d.ts.map +1 -1
  28. package/dist/cli/output/tasks.js +0 -6
  29. package/dist/cli/output/tasks.js.map +1 -1
  30. package/dist/cli/output/usage-breakdown.d.ts +92 -0
  31. package/dist/cli/output/usage-breakdown.d.ts.map +1 -0
  32. package/dist/cli/output/usage-breakdown.js +214 -0
  33. package/dist/cli/output/usage-breakdown.js.map +1 -0
  34. package/dist/cli/terminal.d.ts +0 -1
  35. package/dist/cli/terminal.d.ts.map +1 -1
  36. package/dist/cli/terminal.js +4 -30
  37. package/dist/cli/terminal.js.map +1 -1
  38. package/dist/config/schema.d.ts +5 -13
  39. package/dist/config/schema.d.ts.map +1 -1
  40. package/dist/config/schema.js +0 -4
  41. package/dist/config/schema.js.map +1 -1
  42. package/dist/config/writer.d.ts.map +1 -1
  43. package/dist/config/writer.js +0 -6
  44. package/dist/config/writer.js.map +1 -1
  45. package/dist/index.d.ts +2 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +1 -2
  48. package/dist/index.js.map +1 -1
  49. package/dist/output/github-checks.d.ts.map +1 -1
  50. package/dist/output/github-checks.js +6 -8
  51. package/dist/output/github-checks.js.map +1 -1
  52. package/dist/output/github-issues.d.ts +1 -19
  53. package/dist/output/github-issues.d.ts.map +1 -1
  54. package/dist/output/github-issues.js +0 -142
  55. package/dist/output/github-issues.js.map +1 -1
  56. package/dist/output/issue-renderer.d.ts.map +1 -1
  57. package/dist/output/issue-renderer.js +0 -3
  58. package/dist/output/issue-renderer.js.map +1 -1
  59. package/dist/output/renderer.d.ts.map +1 -1
  60. package/dist/output/renderer.js +3 -16
  61. package/dist/output/renderer.js.map +1 -1
  62. package/dist/output/types.d.ts +0 -1
  63. package/dist/output/types.d.ts.map +1 -1
  64. package/dist/sdk/analyze.d.ts.map +1 -1
  65. package/dist/sdk/analyze.js +17 -3
  66. package/dist/sdk/analyze.js.map +1 -1
  67. package/dist/sdk/haiku.d.ts +4 -0
  68. package/dist/sdk/haiku.d.ts.map +1 -1
  69. package/dist/sdk/haiku.js +56 -15
  70. package/dist/sdk/haiku.js.map +1 -1
  71. package/dist/sdk/otel.d.ts +25 -3
  72. package/dist/sdk/otel.d.ts.map +1 -1
  73. package/dist/sdk/otel.js +67 -6
  74. package/dist/sdk/otel.js.map +1 -1
  75. package/dist/sdk/post-process.d.ts.map +1 -1
  76. package/dist/sdk/post-process.js +12 -25
  77. package/dist/sdk/post-process.js.map +1 -1
  78. package/dist/sdk/prompt.d.ts.map +1 -1
  79. package/dist/sdk/prompt.js +1 -8
  80. package/dist/sdk/prompt.js.map +1 -1
  81. package/dist/sdk/runtimes/claude.d.ts.map +1 -1
  82. package/dist/sdk/runtimes/claude.js +110 -38
  83. package/dist/sdk/runtimes/claude.js.map +1 -1
  84. package/dist/sdk/runtimes/pi.d.ts.map +1 -1
  85. package/dist/sdk/runtimes/pi.js +61 -12
  86. package/dist/sdk/runtimes/pi.js.map +1 -1
  87. package/dist/sdk/runtimes/types.d.ts +8 -2
  88. package/dist/sdk/runtimes/types.d.ts.map +1 -1
  89. package/dist/sdk/runtimes/types.js.map +1 -1
  90. package/dist/sdk/types.d.ts +2 -0
  91. package/dist/sdk/types.d.ts.map +1 -1
  92. package/dist/sdk/types.js.map +1 -1
  93. package/dist/sdk/usage.d.ts +9 -1
  94. package/dist/sdk/usage.d.ts.map +1 -1
  95. package/dist/sdk/usage.js +94 -0
  96. package/dist/sdk/usage.js.map +1 -1
  97. package/dist/sdk/verify.d.ts.map +1 -1
  98. package/dist/sdk/verify.js +0 -6
  99. package/dist/sdk/verify.js.map +1 -1
  100. package/dist/sentry-trace.d.ts +3 -3
  101. package/dist/sentry-trace.d.ts.map +1 -1
  102. package/dist/sentry-trace.js +5 -5
  103. package/dist/sentry-trace.js.map +1 -1
  104. package/dist/sentry.d.ts +2 -1
  105. package/dist/sentry.d.ts.map +1 -1
  106. package/dist/sentry.js +12 -9
  107. package/dist/sentry.js.map +1 -1
  108. package/dist/types/index.d.ts +20 -13
  109. package/dist/types/index.d.ts.map +1 -1
  110. package/dist/types/index.js +9 -6
  111. package/dist/types/index.js.map +1 -1
  112. package/package.json +3 -3
  113. package/src/builtin-skills/code-review/SKILL.md +0 -1
  114. package/src/builtin-skills/code-review/SOURCES.md +0 -1
  115. package/src/builtin-skills/security-review/SKILL.md +0 -1
  116. package/dist/cli/fix.d.ts +0 -39
  117. package/dist/cli/fix.d.ts.map +0 -1
  118. package/dist/cli/fix.js +0 -277
  119. package/dist/cli/fix.js.map +0 -1
  120. package/dist/sdk/fix-quality.d.ts +0 -26
  121. package/dist/sdk/fix-quality.d.ts.map +0 -1
  122. package/dist/sdk/fix-quality.js +0 -188
  123. package/dist/sdk/fix-quality.js.map +0 -1
package/dist/cli/fix.js DELETED
@@ -1,277 +0,0 @@
1
- /**
2
- * Fix application functionality for the warden CLI.
3
- */
4
- import chalk from 'chalk';
5
- import figures from 'figures';
6
- import { formatSeverityBadge, formatConfidenceBadge, pluralize } from './output/index.js';
7
- import { ICON_CHECK } from './output/icons.js';
8
- import { Verbosity } from './output/verbosity.js';
9
- import { applyUnifiedDiff } from './diff-apply.js';
10
- import { readSingleKey } from './input.js';
11
- // Re-export for backward compatibility
12
- export { applyUnifiedDiff } from './diff-apply.js';
13
- /**
14
- * Collect all fixable findings from skill reports.
15
- * A finding is fixable if it has both a suggestedFix.diff and a location.path.
16
- * Findings are sorted by file, then by line number (descending).
17
- */
18
- export function collectFixableFindings(reports) {
19
- const fixable = [];
20
- for (const report of reports) {
21
- for (const finding of report.findings) {
22
- if (finding.suggestedFix?.diff && finding.location?.path) {
23
- fixable.push(finding);
24
- }
25
- }
26
- }
27
- // Sort by file, then by line number descending
28
- // Note: location is guaranteed non-null by the filter above
29
- return fixable.sort((a, b) => {
30
- const aLoc = a.location;
31
- const bLoc = b.location;
32
- if (!aLoc || !bLoc)
33
- return 0;
34
- const pathCompare = aLoc.path.localeCompare(bLoc.path);
35
- if (pathCompare !== 0)
36
- return pathCompare;
37
- // Descending by line number
38
- return bLoc.startLine - aLoc.startLine;
39
- });
40
- }
41
- /**
42
- * Apply all fixes without prompting.
43
- */
44
- export function applyAllFixes(findings) {
45
- const results = [];
46
- let applied = 0;
47
- let failed = 0;
48
- for (const finding of findings) {
49
- const location = finding.location;
50
- const suggestedFix = finding.suggestedFix;
51
- if (!location || !suggestedFix?.diff)
52
- continue;
53
- try {
54
- applyUnifiedDiff(location.path, suggestedFix.diff);
55
- results.push({ success: true, finding });
56
- applied++;
57
- }
58
- catch (err) {
59
- const error = err instanceof Error ? err.message : String(err);
60
- results.push({ success: false, finding, error });
61
- failed++;
62
- }
63
- }
64
- return {
65
- applied,
66
- skipped: 0,
67
- failed,
68
- results,
69
- };
70
- }
71
- /**
72
- * Format a diff for display with colors.
73
- */
74
- function formatDiffForDisplay(diff) {
75
- return diff.split('\n').map((line) => {
76
- if (line.startsWith('+') && !line.startsWith('+++')) {
77
- return chalk.green(line);
78
- }
79
- else if (line.startsWith('-') && !line.startsWith('---')) {
80
- return chalk.red(line);
81
- }
82
- else if (line.startsWith('@@')) {
83
- return chalk.cyan(line);
84
- }
85
- return line;
86
- });
87
- }
88
- /**
89
- * Prompt the user for a fix action.
90
- * Accepts single keypress without requiring Enter.
91
- * Keys: y (apply), n (skip), a (apply all remaining), s/q (skip all remaining).
92
- */
93
- async function promptFixAction(message) {
94
- process.stderr.write(message);
95
- const key = await readSingleKey();
96
- process.stderr.write(key + '\n');
97
- switch (key) {
98
- case 'y':
99
- return 'y';
100
- case 'a':
101
- return 'a';
102
- case 's':
103
- case 'q':
104
- return 's';
105
- default:
106
- return 'n';
107
- }
108
- }
109
- /**
110
- * Run the interactive fix flow.
111
- * Steps through each finding, showing the diff and prompting for action.
112
- * Findings are displayed in reading order (file-asc, line-asc) but applied
113
- * in safe order (file-asc, line-desc) to avoid line number shifts.
114
- */
115
- export async function runInteractiveFixFlow(findings, reporter) {
116
- const results = [];
117
- let applied = 0;
118
- let skipped = 0;
119
- let failed = 0;
120
- // Display in reading order (file-asc, line-asc).
121
- // Input `findings` is sorted file-asc, line-desc for safe application.
122
- // Note: location is guaranteed non-null by collectFixableFindings
123
- const displayOrder = [...findings].sort((a, b) => {
124
- const aLoc = a.location;
125
- const bLoc = b.location;
126
- if (!aLoc || !bLoc)
127
- return 0;
128
- const pathCmp = aLoc.path.localeCompare(bLoc.path);
129
- if (pathCmp !== 0)
130
- return pathCmp;
131
- return aLoc.startLine - bLoc.startLine;
132
- });
133
- // Collect user decisions, then apply in safe order
134
- const accepted = new Set();
135
- let applyAll = false;
136
- let skipAll = false;
137
- reporter.blank();
138
- console.error(chalk.bold(`${findings.length} ${pluralize(findings.length, 'fix', 'fixes')} available`));
139
- for (let idx = 0; idx < displayOrder.length; idx++) {
140
- const finding = displayOrder[idx];
141
- if (!finding)
142
- continue;
143
- const location = finding.location;
144
- const suggestedFix = finding.suggestedFix;
145
- if (!location || !suggestedFix?.diff)
146
- continue;
147
- console.error('');
148
- // Severity + counter + title
149
- const badge = formatSeverityBadge(finding.severity);
150
- console.error(`${badge} ${chalk.bold(`[${idx + 1}/${displayOrder.length}]`)} ${chalk.bold(finding.title)}`);
151
- console.error(chalk.dim(` ${location.path}:${location.startLine}`));
152
- // Description
153
- if (finding.description) {
154
- console.error(` ${chalk.dim(finding.description)}`);
155
- }
156
- // Fix description
157
- if (suggestedFix.description) {
158
- console.error(` ${suggestedFix.description}`);
159
- }
160
- // Confidence
161
- if (finding.confidence) {
162
- console.error('');
163
- console.error(` ${formatConfidenceBadge(finding.confidence)}`);
164
- }
165
- console.error('');
166
- // Display the diff
167
- const diffLines = formatDiffForDisplay(suggestedFix.diff);
168
- for (const line of diffLines) {
169
- console.error(` ${line}`);
170
- }
171
- console.error('');
172
- if (applyAll) {
173
- accepted.add(finding);
174
- console.error(chalk.green(`${ICON_CHECK} Will apply`));
175
- continue;
176
- }
177
- if (skipAll) {
178
- skipped++;
179
- results.push({ success: false, finding });
180
- console.error(chalk.yellow(`${figures.arrowRight} Skipped`));
181
- continue;
182
- }
183
- // Prompt for action
184
- const response = await promptFixAction('[y]es / [n]o / [a]pply all / [s]kip all ');
185
- switch (response) {
186
- case 'y':
187
- accepted.add(finding);
188
- break;
189
- case 'a':
190
- applyAll = true;
191
- accepted.add(finding);
192
- console.error(chalk.dim('Applying all remaining fixes'));
193
- break;
194
- case 's':
195
- skipAll = true;
196
- skipped++;
197
- results.push({ success: false, finding });
198
- console.error(chalk.yellow(`${figures.arrowRight} Skipped`));
199
- break;
200
- case 'n':
201
- default:
202
- skipped++;
203
- results.push({ success: false, finding });
204
- console.error(chalk.yellow(`${figures.arrowRight} Skipped`));
205
- break;
206
- }
207
- }
208
- // Apply accepted fixes in safe order (file-asc, line-desc from original `findings`)
209
- if (accepted.size > 0) {
210
- console.error('');
211
- for (const finding of findings) {
212
- if (!accepted.has(finding))
213
- continue;
214
- const location = finding.location;
215
- const suggestedFix = finding.suggestedFix;
216
- if (!location || !suggestedFix?.diff)
217
- continue;
218
- try {
219
- applyUnifiedDiff(location.path, suggestedFix.diff);
220
- applied++;
221
- results.push({ success: true, finding });
222
- console.error(chalk.green(`${ICON_CHECK} Applied: ${finding.title}`));
223
- }
224
- catch (err) {
225
- const error = err instanceof Error ? err.message : String(err);
226
- failed++;
227
- results.push({ success: false, finding, error });
228
- console.error(chalk.red(`${figures.cross} Failed: ${finding.title}: ${error}`));
229
- }
230
- }
231
- }
232
- return {
233
- applied,
234
- skipped,
235
- failed,
236
- results,
237
- };
238
- }
239
- /**
240
- * Render the fix summary.
241
- */
242
- export function renderFixSummary(summary, reporter) {
243
- if (summary.applied === 0 && summary.failed === 0 && summary.skipped === 0) {
244
- return;
245
- }
246
- reporter.blank();
247
- if (reporter.verbosity === Verbosity.Quiet) {
248
- // Quiet mode: just counts
249
- const parts = [];
250
- if (summary.applied > 0)
251
- parts.push(`${summary.applied} applied`);
252
- if (summary.skipped > 0)
253
- parts.push(`${summary.skipped} skipped`);
254
- if (summary.failed > 0)
255
- parts.push(`${summary.failed} failed`);
256
- console.log(`Fixes: ${parts.join(', ')}`);
257
- return;
258
- }
259
- console.error(chalk.bold('FIXES'));
260
- const parts = [];
261
- if (summary.applied > 0) {
262
- parts.push(chalk.green(`${summary.applied} applied`));
263
- }
264
- if (summary.skipped > 0) {
265
- parts.push(chalk.yellow(`${summary.skipped} skipped`));
266
- }
267
- if (summary.failed > 0) {
268
- parts.push(chalk.red(`${summary.failed} failed`));
269
- }
270
- console.error(parts.join(' '));
271
- // Show failed fix details
272
- const failedResults = summary.results.filter((r) => !r.success && r.error);
273
- for (const result of failedResults) {
274
- console.error(chalk.red(` ${figures.cross} ${result.finding.title}: ${result.error}`));
275
- }
276
- }
277
- //# sourceMappingURL=fix.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/cli/fix.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import type { Finding, UsageStats } from '../types/index.js';
2
- import type { RuntimeName } from './runtimes/index.js';
3
- import type { FindingProcessingEvent } from './types.js';
4
- export interface FixQualityStats {
5
- checked: number;
6
- strippedDeterministic: number;
7
- strippedSemantic: number;
8
- semanticUnavailable: number;
9
- }
10
- export interface SanitizeSuggestedFixesResult {
11
- findings: Finding[];
12
- stats: FixQualityStats;
13
- usage?: UsageStats;
14
- }
15
- interface SanitizeSuggestedFixesOptions {
16
- repoPath: string;
17
- apiKey?: string;
18
- runtime?: RuntimeName;
19
- model?: string;
20
- maxRetries?: number;
21
- agentName?: string;
22
- onFindingProcessing?: (event: FindingProcessingEvent) => void;
23
- }
24
- export declare function sanitizeFindingsSuggestedFixes(findings: Finding[], options: SanitizeSuggestedFixesOptions): Promise<SanitizeSuggestedFixesResult>;
25
- export {};
26
- //# sourceMappingURL=fix-quality.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-quality.d.ts","sourceRoot":"","sources":["../../src/sdk/fix-quality.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,UAAU,6BAA6B;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;CAC/D;AAoJD,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,4BAA4B,CAAC,CAkEvC"}
@@ -1,188 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
- import { join, resolve, sep } from 'node:path';
3
- import { z } from 'zod';
4
- import { parsePatch } from '../diff/parser.js';
5
- import { applyDiffToContent } from '../diff/apply.js';
6
- import { getRuntime } from './runtimes/index.js';
7
- import { aggregateUsage } from './usage.js';
8
- import { canUseRuntimeAuth } from './extract.js';
9
- import { buildJsonOutputSection, buildTaggedSection, joinPromptSections } from './prompt-sections.js';
10
- const SEMANTIC_PROMPT_MAX_CHARS = 4000;
11
- function stripSuggestedFix(finding) {
12
- const { suggestedFix, ...rest } = finding;
13
- void suggestedFix;
14
- return rest;
15
- }
16
- function normalizeDiffPath(rawPath) {
17
- const trimmed = rawPath.trim();
18
- if (trimmed.startsWith('a/') || trimmed.startsWith('b/')) {
19
- return trimmed.slice(2);
20
- }
21
- return trimmed;
22
- }
23
- function extractDiffPaths(diff) {
24
- const oldHeaders = diff.match(/^---\s+([^\n]+)$/gm) ?? [];
25
- const newHeaders = diff.match(/^\+\+\+\s+([^\n]+)$/gm) ?? [];
26
- const headerCount = Math.max(oldHeaders.length, newHeaders.length);
27
- const oldPath = oldHeaders[0]?.replace(/^---\s+/, '');
28
- const newPath = newHeaders[0]?.replace(/^\+\+\+\s+/, '');
29
- return { oldPath, newPath, headerCount };
30
- }
31
- function overlapsAnchor(diff, finding) {
32
- const location = finding.location;
33
- const anchorStart = location?.startLine;
34
- if (!anchorStart || !location)
35
- return false;
36
- const anchorEnd = location.endLine ?? anchorStart;
37
- const hunks = parsePatch(diff);
38
- if (hunks.length === 0)
39
- return false;
40
- return hunks.some((h) => {
41
- // Finding locations are in pre-fix file coordinates, so compare against
42
- // the old-side hunk range to avoid false mismatches when line counts shift.
43
- const start = h.oldStart;
44
- const end = h.oldStart + Math.max(h.oldCount, 1) - 1;
45
- return start <= anchorEnd && end >= anchorStart;
46
- });
47
- }
48
- function runDeterministicGate(finding, repoPath) {
49
- if (!finding.location?.path || !finding.suggestedFix?.diff)
50
- return { pass: false };
51
- const diff = finding.suggestedFix.diff;
52
- const hunks = parsePatch(diff);
53
- if (hunks.length === 0)
54
- return { pass: false };
55
- const { oldPath, newPath, headerCount } = extractDiffPaths(diff);
56
- if (headerCount > 1)
57
- return { pass: false };
58
- const findingPath = finding.location.path;
59
- if (oldPath && oldPath !== '/dev/null' && normalizeDiffPath(oldPath) !== findingPath) {
60
- return { pass: false };
61
- }
62
- if (newPath && newPath !== '/dev/null' && normalizeDiffPath(newPath) !== findingPath) {
63
- return { pass: false };
64
- }
65
- if (oldPath && newPath && oldPath !== '/dev/null' && newPath !== '/dev/null' && normalizeDiffPath(oldPath) !== normalizeDiffPath(newPath)) {
66
- return { pass: false };
67
- }
68
- if (!overlapsAnchor(diff, finding))
69
- return { pass: false };
70
- const fullPath = join(repoPath, findingPath);
71
- const resolvedFull = resolve(fullPath);
72
- const resolvedRepo = resolve(repoPath);
73
- const inRepo = resolvedFull === resolvedRepo || resolvedFull.startsWith(resolvedRepo + sep);
74
- if (!inRepo)
75
- return { pass: false };
76
- let fileContent;
77
- try {
78
- fileContent = readFileSync(fullPath, 'utf-8');
79
- }
80
- catch {
81
- return { pass: false };
82
- }
83
- try {
84
- const patchedContent = applyDiffToContent(fileContent, diff);
85
- return { pass: true, fileContent, patchedContent };
86
- }
87
- catch {
88
- return { pass: false };
89
- }
90
- }
91
- const SemanticFixVerdictSchema = z.object({
92
- verdict: z.enum(['pass', 'fail']),
93
- reason: z.string().min(1),
94
- });
95
- async function runSemanticGate(finding, fileContent, patchedContent, options) {
96
- const { apiKey, runtime, model, maxRetries } = options;
97
- if (!canUseRuntimeAuth(options)) {
98
- return { verdict: 'unavailable' };
99
- }
100
- const originalForPrompt = fileContent.slice(0, SEMANTIC_PROMPT_MAX_CHARS);
101
- const patchedForPrompt = patchedContent.slice(0, SEMANTIC_PROMPT_MAX_CHARS);
102
- const prompt = joinPromptSections([
103
- `<task>
104
- Judge whether this suggested code fix is valid.
105
- </task>`,
106
- `<fix_quality_rule>
107
- Pass only if the diff clearly addresses the stated issue without obvious regressions in the shown code.
108
- </fix_quality_rule>`,
109
- buildTaggedSection('issue', [
110
- `<title>${finding.title}</title>`,
111
- `<description>${finding.description}</description>`,
112
- ]),
113
- buildTaggedSection('original_file', originalForPrompt),
114
- buildTaggedSection('patched_file', patchedForPrompt),
115
- buildTaggedSection('suggested_diff', finding.suggestedFix?.diff ?? ''),
116
- buildJsonOutputSection('{"verdict":"pass|fail","reason":"..."}'),
117
- ]);
118
- const result = await getRuntime(runtime ?? 'claude').runAuxiliary({
119
- task: 'fix_quality',
120
- agentName: options.agentName,
121
- apiKey,
122
- prompt,
123
- schema: SemanticFixVerdictSchema,
124
- model,
125
- maxTokens: 220,
126
- timeout: 8000,
127
- maxRetries: maxRetries ?? 1,
128
- });
129
- if (!result.success) {
130
- return { verdict: 'unavailable', usage: result.usage };
131
- }
132
- return { verdict: result.data.verdict, usage: result.usage };
133
- }
134
- export async function sanitizeFindingsSuggestedFixes(findings, options) {
135
- const stats = {
136
- checked: 0,
137
- strippedDeterministic: 0,
138
- strippedSemantic: 0,
139
- semanticUnavailable: 0,
140
- };
141
- const semanticUsage = [];
142
- const sanitized = [];
143
- for (const finding of findings) {
144
- if (!finding.suggestedFix) {
145
- sanitized.push(finding);
146
- continue;
147
- }
148
- stats.checked++;
149
- const deterministic = runDeterministicGate(finding, options.repoPath);
150
- if (!deterministic.pass) {
151
- stats.strippedDeterministic++;
152
- const stripped = stripSuggestedFix(finding);
153
- options.onFindingProcessing?.({
154
- stage: 'fix_gate',
155
- action: 'stripped_fix',
156
- finding,
157
- replacement: stripped,
158
- reason: 'suggested fix failed deterministic validation',
159
- });
160
- sanitized.push(stripped);
161
- continue;
162
- }
163
- const semantic = await runSemanticGate(finding, deterministic.fileContent, deterministic.patchedContent, options);
164
- if (semantic.usage) {
165
- semanticUsage.push(semantic.usage);
166
- }
167
- if (semantic.verdict === 'fail') {
168
- stats.strippedSemantic++;
169
- const stripped = stripSuggestedFix(finding);
170
- options.onFindingProcessing?.({
171
- stage: 'fix_gate',
172
- action: 'stripped_fix',
173
- finding,
174
- replacement: stripped,
175
- reason: 'suggested fix failed semantic validation',
176
- });
177
- sanitized.push(stripped);
178
- continue;
179
- }
180
- if (semantic.verdict === 'unavailable') {
181
- stats.semanticUnavailable++;
182
- }
183
- sanitized.push(finding);
184
- }
185
- const usage = semanticUsage.length > 0 ? aggregateUsage(semanticUsage) : undefined;
186
- return { findings: sanitized, stats, usage };
187
- }
188
- //# sourceMappingURL=fix-quality.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-quality.js","sourceRoot":"","sources":["../../src/sdk/fix-quality.ts"],"names":[],"mappings":"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"}