@bouncesecurity/aghast 0.4.4 → 0.6.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 (109) hide show
  1. package/README.md +8 -3
  2. package/config/pricing.json +42 -0
  3. package/config/prompts/false-positive-validation.md +1 -0
  4. package/config/prompts/general-vuln-discovery.md +8 -3
  5. package/config/prompts/generic-instructions.md +3 -2
  6. package/dist/budget.d.ts +62 -0
  7. package/dist/budget.d.ts.map +1 -0
  8. package/dist/budget.js +137 -0
  9. package/dist/budget.js.map +1 -0
  10. package/dist/build-config.d.ts +15 -0
  11. package/dist/build-config.d.ts.map +1 -0
  12. package/dist/build-config.js +568 -0
  13. package/dist/build-config.js.map +1 -0
  14. package/dist/check-library.d.ts +1 -0
  15. package/dist/check-library.d.ts.map +1 -1
  16. package/dist/check-library.js +26 -7
  17. package/dist/check-library.js.map +1 -1
  18. package/dist/check-types.d.ts +1 -1
  19. package/dist/check-types.d.ts.map +1 -1
  20. package/dist/claude-code-provider.d.ts +6 -6
  21. package/dist/claude-code-provider.d.ts.map +1 -1
  22. package/dist/claude-code-provider.js +151 -66
  23. package/dist/claude-code-provider.js.map +1 -1
  24. package/dist/cli.js +19 -3
  25. package/dist/cli.js.map +1 -1
  26. package/dist/colors.js +4 -4
  27. package/dist/colors.js.map +1 -1
  28. package/dist/cost-calculator.d.ts +80 -0
  29. package/dist/cost-calculator.d.ts.map +1 -0
  30. package/dist/cost-calculator.js +226 -0
  31. package/dist/cost-calculator.js.map +1 -0
  32. package/dist/defaults.d.ts +21 -0
  33. package/dist/defaults.d.ts.map +1 -0
  34. package/dist/defaults.js +21 -0
  35. package/dist/defaults.js.map +1 -0
  36. package/dist/discoveries/openant-discovery.d.ts.map +1 -1
  37. package/dist/discoveries/openant-discovery.js +3 -2
  38. package/dist/discoveries/openant-discovery.js.map +1 -1
  39. package/dist/discoveries/sarif-discovery.d.ts.map +1 -1
  40. package/dist/discoveries/sarif-discovery.js +2 -1
  41. package/dist/discoveries/sarif-discovery.js.map +1 -1
  42. package/dist/discoveries/semgrep-discovery.d.ts.map +1 -1
  43. package/dist/discoveries/semgrep-discovery.js +11 -2
  44. package/dist/discoveries/semgrep-discovery.js.map +1 -1
  45. package/dist/discovery.d.ts +8 -2
  46. package/dist/discovery.d.ts.map +1 -1
  47. package/dist/discovery.js +8 -0
  48. package/dist/discovery.js.map +1 -1
  49. package/dist/error-codes.d.ts +3 -1
  50. package/dist/error-codes.d.ts.map +1 -1
  51. package/dist/error-codes.js +10 -3
  52. package/dist/error-codes.js.map +1 -1
  53. package/dist/formatters/types.d.ts +1 -1
  54. package/dist/formatters/types.js +1 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +257 -82
  57. package/dist/index.js.map +1 -1
  58. package/dist/logging.d.ts +1 -1
  59. package/dist/logging.d.ts.map +1 -1
  60. package/dist/logging.js +50 -31
  61. package/dist/logging.js.map +1 -1
  62. package/dist/{mock-ai-provider.d.ts → mock-agent-provider.d.ts} +10 -7
  63. package/dist/mock-agent-provider.d.ts.map +1 -0
  64. package/dist/{mock-ai-provider.js → mock-agent-provider.js} +15 -8
  65. package/dist/mock-agent-provider.js.map +1 -0
  66. package/dist/new-check.js +2 -2
  67. package/dist/new-check.js.map +1 -1
  68. package/dist/opencode-provider.d.ts +63 -0
  69. package/dist/opencode-provider.d.ts.map +1 -0
  70. package/dist/opencode-provider.js +614 -0
  71. package/dist/opencode-provider.js.map +1 -0
  72. package/dist/prompt-template.d.ts.map +1 -1
  73. package/dist/prompt-template.js +2 -1
  74. package/dist/prompt-template.js.map +1 -1
  75. package/dist/provider-registry.d.ts +6 -6
  76. package/dist/provider-registry.d.ts.map +1 -1
  77. package/dist/provider-registry.js +6 -4
  78. package/dist/provider-registry.js.map +1 -1
  79. package/dist/provider-utils.d.ts +52 -0
  80. package/dist/provider-utils.d.ts.map +1 -0
  81. package/dist/provider-utils.js +40 -0
  82. package/dist/provider-utils.js.map +1 -0
  83. package/dist/response-parser.d.ts +8 -6
  84. package/dist/response-parser.d.ts.map +1 -1
  85. package/dist/response-parser.js +8 -6
  86. package/dist/response-parser.js.map +1 -1
  87. package/dist/runtime-config.d.ts +4 -4
  88. package/dist/runtime-config.d.ts.map +1 -1
  89. package/dist/runtime-config.js +107 -8
  90. package/dist/runtime-config.js.map +1 -1
  91. package/dist/scan-history.d.ts +82 -0
  92. package/dist/scan-history.d.ts.map +1 -0
  93. package/dist/scan-history.js +127 -0
  94. package/dist/scan-history.js.map +1 -0
  95. package/dist/scan-runner.d.ts +67 -4
  96. package/dist/scan-runner.d.ts.map +1 -1
  97. package/dist/scan-runner.js +267 -51
  98. package/dist/scan-runner.js.map +1 -1
  99. package/dist/stats.d.ts +11 -0
  100. package/dist/stats.d.ts.map +1 -0
  101. package/dist/stats.js +197 -0
  102. package/dist/stats.js.map +1 -0
  103. package/dist/types.d.ts +74 -8
  104. package/dist/types.d.ts.map +1 -1
  105. package/dist/types.js +3 -3
  106. package/dist/types.js.map +1 -1
  107. package/package.json +6 -4
  108. package/dist/mock-ai-provider.d.ts.map +0 -1
  109. package/dist/mock-ai-provider.js.map +0 -1
@@ -5,22 +5,28 @@
5
5
  */
6
6
  import { readFile } from 'node:fs/promises';
7
7
  import { randomBytes } from 'node:crypto';
8
- import { resolve, dirname } from 'node:path';
8
+ import { resolve, relative, dirname } from 'node:path';
9
9
  import { fileURLToPath } from 'node:url';
10
10
  import { buildPrompt } from './prompt-template.js';
11
- import { parseAIResponse } from './response-parser.js';
11
+ import { parseAgentResponse } from './response-parser.js';
12
12
  import { extractSnippet } from './snippet-extractor.js';
13
13
  import { analyzeRepository } from './repository-analyzer.js';
14
- import { logProgress, logDebug, createTimer } from './logging.js';
14
+ import { logProgress, logDebug, logWarn, createTimer } from './logging.js';
15
15
  import { CHECK_TYPE } from './check-types.js';
16
16
  import { getDiscovery, registerDiscovery } from './discovery.js';
17
+ import { DEFAULT_PROVIDER_NAME } from './provider-registry.js';
17
18
  import { semgrepDiscovery } from './discoveries/semgrep-discovery.js';
18
19
  import { openantDiscovery } from './discoveries/openant-discovery.js';
19
20
  import { sarifDiscovery } from './discoveries/sarif-discovery.js';
20
- import { DEFAULT_AI_MODEL, FatalProviderError, } from './types.js';
21
+ import { DEFAULT_MODEL, FatalProviderError, } from './types.js';
22
+ import { calculateCost } from './cost-calculator.js';
23
+ import { checkBudget, BudgetExceededError } from './budget.js';
21
24
  const __dirname = dirname(fileURLToPath(import.meta.url));
22
25
  const TAG = 'scan';
23
26
  const DEFAULT_CONCURRENCY = 5;
27
+ // Per-target AI call timeout. Without this, a single hung provider request stalls
28
+ // the worker indefinitely; with concurrency=N hangs, the entire check freezes.
29
+ const DEFAULT_TARGET_TIMEOUT_MS = 5 * 60 * 1000;
24
30
  // --- Register built-in discovery implementations ---
25
31
  registerDiscovery(semgrepDiscovery);
26
32
  registerDiscovery(openantDiscovery);
@@ -28,15 +34,34 @@ registerDiscovery(sarifDiscovery);
28
34
  /**
29
35
  * Sum multiple TokenUsage values into one aggregate.
30
36
  * Returns undefined if no inputs have token usage.
37
+ *
38
+ * reportedCost is aggregated only when every contributing call has it — a
39
+ * single missing cost means we cannot produce an accurate total, so we fall
40
+ * back to undefined (which triggers rate-based estimation later).
31
41
  */
32
- function sumTokenUsage(usages) {
42
+ export function sumTokenUsage(usages) {
33
43
  const defined = usages.filter((u) => u !== undefined);
34
44
  if (defined.length === 0)
35
45
  return undefined;
46
+ // Optional fields: sum when at least one is present; preserve undefined when all absent.
47
+ const sumOptional = (getter) => {
48
+ const values = defined.map(getter).filter((v) => v !== undefined);
49
+ return values.length > 0 ? values.reduce((a, b) => a + b, 0) : undefined;
50
+ };
51
+ // reportedCost: only aggregate when every item has it (uniform provider, single source).
52
+ let reportedCost;
53
+ if (defined.every((u) => u.reportedCost !== undefined)) {
54
+ const total = defined.reduce((sum, u) => sum + u.reportedCost.amountUsd, 0);
55
+ reportedCost = { amountUsd: total, source: defined[0].reportedCost.source };
56
+ }
36
57
  return {
37
58
  inputTokens: defined.reduce((sum, u) => sum + u.inputTokens, 0),
38
59
  outputTokens: defined.reduce((sum, u) => sum + u.outputTokens, 0),
60
+ cacheCreationInputTokens: sumOptional((u) => u.cacheCreationInputTokens),
61
+ cacheReadInputTokens: sumOptional((u) => u.cacheReadInputTokens),
62
+ reasoningTokens: sumOptional((u) => u.reasoningTokens),
39
63
  totalTokens: defined.reduce((sum, u) => sum + u.totalTokens, 0),
64
+ ...(reportedCost !== undefined ? { reportedCost } : {}),
40
65
  };
41
66
  }
42
67
  /**
@@ -87,6 +112,54 @@ async function mapWithConcurrency(items, concurrency, fn, abortHandle) {
87
112
  }
88
113
  return results;
89
114
  }
115
+ function createCostTracker(options) {
116
+ return {
117
+ pricing: options.pricing,
118
+ budgetLimits: options.budgetLimits,
119
+ scanHistory: options.scanHistory,
120
+ totalTokens: 0,
121
+ totalCostUsd: 0,
122
+ warned: false,
123
+ lastAction: 'continue',
124
+ };
125
+ }
126
+ /**
127
+ * Record an AI call's token usage against the tracker. Called after each
128
+ * successful executeCheck().
129
+ */
130
+ function recordUsage(tracker, usage, model) {
131
+ if (!usage || !tracker.pricing)
132
+ return;
133
+ const cost = calculateCost(usage, model, tracker.pricing);
134
+ tracker.totalTokens += usage.totalTokens;
135
+ tracker.totalCostUsd += cost.totalCost;
136
+ tracker.lastCostSource = cost.source;
137
+ tracker.lastCostReportedBy = cost.reportedBy;
138
+ tracker.lastCostCoveredBySubscription = cost.coveredBySubscription;
139
+ }
140
+ /**
141
+ * Check the budget before an AI call. Logs a warning the first time the warn
142
+ * threshold is crossed; throws BudgetExceededError when the abort threshold is
143
+ * crossed.
144
+ */
145
+ function preflightBudget(tracker) {
146
+ if (!tracker.budgetLimits)
147
+ return;
148
+ const status = checkBudget({
149
+ currentScanCostUsd: tracker.totalCostUsd,
150
+ currentScanTokens: tracker.totalTokens,
151
+ history: tracker.scanHistory,
152
+ }, tracker.budgetLimits);
153
+ tracker.lastAction = status.action;
154
+ tracker.lastReason = status.reason;
155
+ if (status.action === 'abort') {
156
+ throw new BudgetExceededError(status.reason ?? 'Budget limit exceeded');
157
+ }
158
+ if (status.action === 'warn' && !tracker.warned) {
159
+ tracker.warned = true;
160
+ logProgress(TAG, `Budget warning: ${status.reason ?? 'approaching limit'}`);
161
+ }
162
+ }
90
163
  /**
91
164
  * Generate a scanId in the format: scan-<timestamp>-<hash>
92
165
  */
@@ -96,6 +169,52 @@ export function generateScanId() {
96
169
  const hash = randomBytes(3).toString('hex');
97
170
  return `scan-${ts}-${hash}`;
98
171
  }
172
+ /**
173
+ * Normalize a file path to be relative to the repository root.
174
+ * Handles:
175
+ * - AI-generated paths that include the parent directory name(s) of the target repo
176
+ * (e.g., "test-codebases/test-2-importantvalidations-easy/routes/execute.py" when
177
+ * repo is at "checks-config/test-codebases/test-2-importantvalidations-easy")
178
+ * - Absolute paths: resolves and makes relative
179
+ * - Paths with repository prefix: strips the prefix
180
+ * - Relative paths: returns as-is with forward slashes
181
+ *
182
+ * This ensures consistent path formatting across all findings regardless
183
+ * of how the AI or discovery provider reported the path.
184
+ */
185
+ function normalizeFilePath(filePath, repositoryPath) {
186
+ const normalizedFile = filePath.replace(/\\/g, '/');
187
+ // If the path already looks relative and doesn't contain obvious parent refs,
188
+ // check if it starts with path segments that could be the parent of the repo.
189
+ // AI providers often return paths relative to a working directory that is
190
+ // different from the actual repository root, so we need to strip any
191
+ // prefix that leads to the repo path.
192
+ const normalizedRepo = resolve(repositoryPath);
193
+ const repoParts = normalizedRepo.replace(/\\/g, '/').split('/').filter(Boolean);
194
+ // Try stripping progressively longer trailing suffixes of the repo path from
195
+ // the front of the file path. AI providers often return paths relative to an
196
+ // ancestor directory, e.g. "test-codebases/test-2-easy/routes/run.py" when
197
+ // the repo is at "/abs/path/to/test-codebases/test-2-easy".
198
+ for (let i = 1; i <= repoParts.length; i++) {
199
+ const suffix = repoParts.slice(repoParts.length - i).join('/');
200
+ if (normalizedFile.startsWith(suffix + '/')) {
201
+ const candidate = normalizedFile.slice(suffix.length + 1);
202
+ const candidateResolved = resolve(normalizedRepo, candidate);
203
+ const candidateRelative = relative(normalizedRepo, candidateResolved).replace(/\\/g, '/');
204
+ if (!candidateRelative.startsWith('..')) {
205
+ return candidate;
206
+ }
207
+ }
208
+ }
209
+ // Fallback: resolve against repo and make relative
210
+ const resolved = resolve(normalizedRepo, normalizedFile);
211
+ const rel = relative(normalizedRepo, resolved).replace(/\\/g, '/');
212
+ if (!rel.startsWith('..')) {
213
+ return rel;
214
+ }
215
+ // Last resort: just normalize slashes
216
+ return normalizedFile;
217
+ }
99
218
  /**
100
219
  * Enrich a raw AI issue into a full SecurityIssue.
101
220
  * Extracts code snippets, applies check metadata, and normalizes paths.
@@ -105,7 +224,7 @@ async function enrichIssue(aiIssue, checkId, checkName, repositoryPath, checkMet
105
224
  const issue = {
106
225
  checkId,
107
226
  checkName,
108
- file: aiIssue.file.replace(/\\/g, '/'),
227
+ file: normalizeFilePath(aiIssue.file, repositoryPath),
109
228
  startLine: aiIssue.startLine,
110
229
  endLine: aiIssue.endLine,
111
230
  description: aiIssue.description,
@@ -122,7 +241,7 @@ async function enrichIssue(aiIssue, checkId, checkName, repositoryPath, checkMet
122
241
  if (aiIssue.dataFlow !== undefined) {
123
242
  issue.dataFlow = aiIssue.dataFlow.map((step) => ({
124
243
  ...step,
125
- file: step.file.replace(/\\/g, '/'),
244
+ file: normalizeFilePath(step.file, repositoryPath),
126
245
  }));
127
246
  }
128
247
  return issue;
@@ -131,20 +250,20 @@ async function enrichIssue(aiIssue, checkId, checkName, repositoryPath, checkMet
131
250
  * If the check specifies a per-check model, switch the provider to that model
132
251
  * and return the previous model name so it can be restored after execution.
133
252
  */
134
- function applyPerCheckModel(check, aiProvider, globalModelName) {
135
- if (!check.model || !aiProvider?.setModel)
253
+ function applyPerCheckModel(check, agentProvider, globalModelName) {
254
+ if (!check.model || !agentProvider?.setModel)
136
255
  return undefined;
137
- const previousModel = aiProvider.getModelName?.() ?? globalModelName;
138
- aiProvider.setModel(check.model);
256
+ const previousModel = agentProvider.getModelName?.() ?? globalModelName;
257
+ agentProvider.setModel(check.model);
139
258
  logProgress(TAG, `Using per-check model: ${check.model} (check: ${check.id})`);
140
259
  return previousModel;
141
260
  }
142
261
  /**
143
262
  * Restore the provider's model to the previous value after per-check override.
144
263
  */
145
- function restoreModel(aiProvider, previousModel) {
146
- if (previousModel !== undefined && aiProvider?.setModel) {
147
- aiProvider.setModel(previousModel);
264
+ function restoreModel(agentProvider, previousModel) {
265
+ if (previousModel !== undefined && agentProvider?.setModel) {
266
+ agentProvider.setModel(previousModel);
148
267
  }
149
268
  }
150
269
  /**
@@ -156,7 +275,7 @@ async function mapTargetToIssue(target, checkId, checkName, repositoryPath, chec
156
275
  const issue = {
157
276
  checkId,
158
277
  checkName,
159
- file: target.file.replace(/\\/g, '/'),
278
+ file: normalizeFilePath(target.file, repositoryPath),
160
279
  startLine: target.startLine,
161
280
  endLine: target.endLine,
162
281
  description: target.message || 'Static finding',
@@ -176,22 +295,22 @@ async function mapTargetToIssue(target, checkId, checkName, repositoryPath, chec
176
295
  * Execute a single check against a repository.
177
296
  * Routes to the appropriate execution path based on check type.
178
297
  */
179
- async function executeSingleCheck(check, checkName, checkInstructions, repositoryPath, aiProvider, checkMetadata, concurrency, configDir, genericPrompt) {
298
+ async function executeSingleCheck(check, checkName, checkInstructions, repositoryPath, agentProvider, costTracker, checkMetadata, concurrency, configDir, genericPrompt) {
180
299
  const checkId = check.id;
181
300
  // Route to targeted execution (discovery + AI analysis)
182
301
  if (check.checkTarget?.type === CHECK_TYPE.TARGETED) {
183
- if (!aiProvider) {
184
- throw new Error(`Check "${checkId}" requires an AI provider but none was configured`);
302
+ if (!agentProvider) {
303
+ throw new Error(`Check "${checkId}" requires an agent provider but none was configured`);
185
304
  }
186
- return executeTargetedCheck(check, checkName, checkInstructions, repositoryPath, aiProvider, checkMetadata, concurrency, configDir, genericPrompt);
305
+ return executeTargetedCheck(check, checkName, checkInstructions, repositoryPath, agentProvider, costTracker, checkMetadata, concurrency, configDir, genericPrompt);
187
306
  }
188
307
  // Route to static execution (discovery + direct mapping, no AI)
189
308
  if (check.checkTarget?.type === CHECK_TYPE.STATIC) {
190
309
  return executeStaticCheck(check, checkName, repositoryPath, checkMetadata);
191
310
  }
192
311
  // Repository check (no discovery, AI analyzes whole repo)
193
- if (!aiProvider) {
194
- throw new Error(`Check "${checkId}" requires an AI provider but none was configured`);
312
+ if (!agentProvider) {
313
+ throw new Error(`Check "${checkId}" requires an agent provider but none was configured`);
195
314
  }
196
315
  logProgress(TAG, `Running check: ${checkName}`);
197
316
  const prompt = await buildPrompt(checkInstructions, configDir, genericPrompt);
@@ -200,10 +319,13 @@ async function executeSingleCheck(check, checkName, checkInstructions, repositor
200
319
  let summary;
201
320
  const checkTimer = createTimer();
202
321
  try {
203
- const aiResponse = await aiProvider.executeCheck(prompt, repositoryPath);
322
+ preflightBudget(costTracker);
323
+ const agentResponse = await agentProvider.executeCheck(prompt, repositoryPath);
324
+ const model = agentProvider.getModelName?.() ?? DEFAULT_MODEL;
325
+ recordUsage(costTracker, agentResponse.tokenUsage, model);
204
326
  const executionTime = checkTimer.elapsed();
205
- logDebug(TAG, `AI response: ${aiResponse.raw.length} chars`);
206
- const parsed = aiResponse.parsed ?? parseAIResponse(aiResponse.raw);
327
+ logDebug(TAG, `Agent response: ${agentResponse.raw.length} chars`);
328
+ const parsed = agentResponse.parsed ?? parseAgentResponse(agentResponse.raw);
207
329
  if (!parsed) {
208
330
  logProgress(TAG, 'Result: ERROR (malformed response)');
209
331
  summary = {
@@ -212,9 +334,9 @@ async function executeSingleCheck(check, checkName, checkInstructions, repositor
212
334
  status: 'ERROR',
213
335
  issuesFound: 0,
214
336
  executionTime,
215
- error: 'AI provider returned malformed response',
216
- rawAiResponse: aiResponse.raw,
217
- tokenUsage: aiResponse.tokenUsage,
337
+ error: 'Agent provider returned malformed response',
338
+ rawAiResponse: agentResponse.raw,
339
+ tokenUsage: agentResponse.tokenUsage,
218
340
  };
219
341
  }
220
342
  else if (parsed.issues.length > 0) {
@@ -226,7 +348,7 @@ async function executeSingleCheck(check, checkName, checkInstructions, repositor
226
348
  status: 'FAIL',
227
349
  issuesFound: issues.length,
228
350
  executionTime,
229
- tokenUsage: aiResponse.tokenUsage,
351
+ tokenUsage: agentResponse.tokenUsage,
230
352
  };
231
353
  }
232
354
  else if (parsed.flagged) {
@@ -237,7 +359,7 @@ async function executeSingleCheck(check, checkName, checkInstructions, repositor
237
359
  status: 'FLAG',
238
360
  issuesFound: 0,
239
361
  executionTime,
240
- tokenUsage: aiResponse.tokenUsage,
362
+ tokenUsage: agentResponse.tokenUsage,
241
363
  };
242
364
  }
243
365
  else {
@@ -248,13 +370,13 @@ async function executeSingleCheck(check, checkName, checkInstructions, repositor
248
370
  status: 'PASS',
249
371
  issuesFound: 0,
250
372
  executionTime,
251
- tokenUsage: aiResponse.tokenUsage,
373
+ tokenUsage: agentResponse.tokenUsage,
252
374
  };
253
375
  }
254
376
  }
255
377
  catch (err) {
256
- // Fatal errors must propagate up to abort the entire scan
257
- if (err instanceof FatalProviderError) {
378
+ // Fatal errors and budget aborts must propagate up to stop the scan
379
+ if (err instanceof FatalProviderError || err instanceof BudgetExceededError) {
258
380
  throw err;
259
381
  }
260
382
  const executionTime = checkTimer.elapsed();
@@ -276,7 +398,7 @@ async function executeSingleCheck(check, checkName, checkInstructions, repositor
276
398
  * The execution pipeline is generic — all discovery-specific behavior is
277
399
  * encapsulated in the DiscoveredTarget data from the discovery implementation.
278
400
  */
279
- async function executeTargetedCheck(check, checkName, checkInstructions, repositoryPath, aiProvider, checkMetadata, optionsConcurrency, configDir, genericPromptOverride) {
401
+ async function executeTargetedCheck(check, checkName, checkInstructions, repositoryPath, agentProvider, costTracker, checkMetadata, optionsConcurrency, configDir, genericPromptOverride) {
280
402
  const checkId = check.id;
281
403
  const checkTarget = check.checkTarget;
282
404
  const discoveryName = checkTarget.discovery;
@@ -340,20 +462,52 @@ async function executeTargetedCheck(check, checkName, checkInstructions, reposit
340
462
  targetResults = await mapWithConcurrency(targets, effectiveConcurrency, async (target, _idx) => {
341
463
  inProgressCount++;
342
464
  try {
465
+ try {
466
+ preflightBudget(costTracker);
467
+ }
468
+ catch (budgetErr) {
469
+ if (budgetErr instanceof BudgetExceededError) {
470
+ abortHandle.aborted = true;
471
+ abortHandle.reason = budgetErr;
472
+ throw budgetErr;
473
+ }
474
+ throw budgetErr;
475
+ }
343
476
  const prompt = basePrompt + (target.promptEnrichment ?? '');
344
477
  logDebug(TAG, `${target.label} Analyzing: ${target.file}:${target.startLine}-${target.endLine}`);
345
- const aiResponse = await aiProvider.executeCheck(prompt, repositoryPath, target.label, target.aiOptions);
346
- const parsed = aiResponse.parsed ?? parseAIResponse(aiResponse.raw);
478
+ let timeoutHandle;
479
+ const agentResponse = await Promise.race([
480
+ agentProvider.executeCheck(prompt, repositoryPath, target.label, target.agentOptions),
481
+ new Promise((_, reject) => {
482
+ timeoutHandle = setTimeout(() => reject(new Error(`Agent provider timed out after ${DEFAULT_TARGET_TIMEOUT_MS / 1000}s on target ${target.label}`)), DEFAULT_TARGET_TIMEOUT_MS);
483
+ }),
484
+ ]).finally(() => {
485
+ if (timeoutHandle)
486
+ clearTimeout(timeoutHandle);
487
+ });
488
+ const model = agentProvider.getModelName?.() ?? DEFAULT_MODEL;
489
+ recordUsage(costTracker, agentResponse.tokenUsage, model);
490
+ const parsed = agentResponse.parsed ?? parseAgentResponse(agentResponse.raw);
347
491
  if (!parsed) {
348
492
  logDebug(TAG, `${target.label} Returned malformed response`);
349
- return { issues: [], error: true, flagged: false, tokenUsage: aiResponse.tokenUsage };
493
+ return { issues: [], error: true, flagged: false, tokenUsage: agentResponse.tokenUsage };
350
494
  }
351
- const issues = await Promise.all(parsed.issues.map((aiIssue) => enrichIssue(aiIssue, checkId, checkName, repositoryPath, checkMetadata)));
352
- return { issues, error: false, flagged: parsed.flagged === true, tokenUsage: aiResponse.tokenUsage };
495
+ // Apply optional per-target issue cap (checkTarget.maxIssuesPerTarget).
496
+ // Useful for checks whose prompt expects one combined issue per target;
497
+ // most checks should leave it unset and allow unlimited issues per target.
498
+ const maxIssues = checkTarget.maxIssuesPerTarget;
499
+ const cappedIssues = typeof maxIssues === 'number' && maxIssues >= 0
500
+ ? parsed.issues.slice(0, maxIssues)
501
+ : parsed.issues;
502
+ if (cappedIssues.length < parsed.issues.length) {
503
+ logDebug(TAG, `${target.label} Capping ${parsed.issues.length} issues to ${maxIssues} (maxIssuesPerTarget)`);
504
+ }
505
+ const issues = await Promise.all(cappedIssues.map((aiIssue) => enrichIssue(aiIssue, checkId, checkName, repositoryPath, checkMetadata)));
506
+ return { issues, error: false, flagged: parsed.flagged === true, tokenUsage: agentResponse.tokenUsage };
353
507
  }
354
508
  catch (err) {
355
- // Fatal errors: signal abort and re-throw to stop other workers
356
- if (err instanceof FatalProviderError) {
509
+ // Fatal errors and budget aborts: signal abort and re-throw to stop other workers
510
+ if (err instanceof FatalProviderError || err instanceof BudgetExceededError) {
357
511
  abortHandle.aborted = true;
358
512
  abortHandle.reason = err;
359
513
  throw err;
@@ -415,8 +569,8 @@ async function executeTargetedCheck(check, checkName, checkInstructions, reposit
415
569
  };
416
570
  }
417
571
  catch (err) {
418
- // Fatal errors must propagate up to abort the entire scan
419
- if (err instanceof FatalProviderError) {
572
+ // Fatal errors and budget aborts must propagate up to stop the scan
573
+ if (err instanceof FatalProviderError || err instanceof BudgetExceededError) {
420
574
  throw err;
421
575
  }
422
576
  const executionTime = checkTimer.elapsed();
@@ -507,13 +661,24 @@ async function executeStaticCheck(check, checkName, repositoryPath, checkMetadat
507
661
  * Run multiple security checks and return aggregated ScanResults.
508
662
  */
509
663
  export async function runMultiScan(options) {
510
- const { repositoryPath, checks, aiProvider, aiModelName, aiProviderName, concurrency, configDir, genericPrompt } = options;
664
+ const outcome = await runMultiScanWithCost(options);
665
+ return outcome.results;
666
+ }
667
+ /**
668
+ * Same as runMultiScan but also returns the computed cost summary.
669
+ * Used by the CLI to record scan history.
670
+ */
671
+ export async function runMultiScanWithCost(options) {
672
+ const { repositoryPath, checks, agentProvider, modelName, agentProviderName, concurrency, configDir, genericPrompt } = options;
511
673
  const scanTimer = createTimer();
512
674
  const scanId = generateScanId();
513
675
  const startTime = new Date();
514
676
  const version = await getVersion();
515
677
  logProgress(TAG, `Starting scan ${scanId} (${checks.length} ${checks.length === 1 ? 'check' : 'checks'})`);
516
678
  logDebug(TAG, `Repository: ${repositoryPath}`);
679
+ if (options.isLocalClaude && options.budgetLimits) {
680
+ logWarn(TAG, 'Budget limits in local-Claude mode apply to equivalent API cost, not subscription usage.');
681
+ }
517
682
  // Use pre-analyzed repository info if provided, otherwise analyze here
518
683
  let repositoryInfo;
519
684
  if (options.repositoryInfo) {
@@ -525,10 +690,14 @@ export async function runMultiScan(options) {
525
690
  }
526
691
  const allCheckSummaries = [];
527
692
  const allIssues = [];
693
+ let budgetAborted = false;
694
+ let budgetAbortReason;
695
+ // Cost / budget tracking spans all checks in the scan.
696
+ const costTracker = createCostTracker(options);
528
697
  // Track all models used during the scan
529
698
  const modelsUsed = new Set();
530
- if (aiModelName)
531
- modelsUsed.add(aiModelName);
699
+ if (modelName)
700
+ modelsUsed.add(modelName);
532
701
  // Execute checks sequentially
533
702
  for (let ci = 0; ci < checks.length; ci++) {
534
703
  const { check, details } = checks[ci];
@@ -537,15 +706,42 @@ export async function runMultiScan(options) {
537
706
  confidence: check.confidence,
538
707
  };
539
708
  // Apply per-check model override if specified
540
- const previousModel = applyPerCheckModel(check, aiProvider, aiModelName);
709
+ const previousModel = applyPerCheckModel(check, agentProvider, modelName);
541
710
  if (check.model)
542
711
  modelsUsed.add(check.model);
543
712
  try {
544
- const { summary: checkSummary, issues } = await executeSingleCheck(check, details.name, details.content, repositoryPath, aiProvider, checkMetadata, concurrency, configDir, genericPrompt);
713
+ const { summary: checkSummary, issues } = await executeSingleCheck(check, details.name, details.content, repositoryPath, agentProvider, costTracker, checkMetadata, concurrency, configDir, genericPrompt);
545
714
  allCheckSummaries.push(checkSummary);
546
715
  allIssues.push(...issues);
547
716
  }
548
717
  catch (err) {
718
+ if (err instanceof BudgetExceededError) {
719
+ budgetAborted = true;
720
+ budgetAbortReason = err.message;
721
+ logProgress(TAG, `Budget exceeded during check "${check.id}": ${err.message}`);
722
+ allCheckSummaries.push({
723
+ checkId: check.id,
724
+ checkName: details.name,
725
+ status: 'ERROR',
726
+ issuesFound: 0,
727
+ executionTime: 0,
728
+ error: `Budget exceeded: ${err.message}`,
729
+ });
730
+ for (let ri = ci + 1; ri < checks.length; ri++) {
731
+ const remaining = checks[ri];
732
+ logProgress(TAG, `Skipping check "${remaining.check.id}" due to budget abort`);
733
+ allCheckSummaries.push({
734
+ checkId: remaining.check.id,
735
+ checkName: remaining.details.name,
736
+ status: 'ERROR',
737
+ issuesFound: 0,
738
+ executionTime: 0,
739
+ error: `Scan aborted: budget limit exceeded`,
740
+ });
741
+ }
742
+ restoreModel(agentProvider, previousModel);
743
+ break;
744
+ }
549
745
  if (err instanceof FatalProviderError) {
550
746
  // Record the failing check as ERROR
551
747
  logProgress(TAG, `Fatal error during check "${check.id}": ${err.message}`);
@@ -579,7 +775,7 @@ export async function runMultiScan(options) {
579
775
  }
580
776
  finally {
581
777
  // Restore the global model after per-check override
582
- restoreModel(aiProvider, previousModel);
778
+ restoreModel(agentProvider, previousModel);
583
779
  }
584
780
  }
585
781
  const endTime = new Date();
@@ -606,11 +802,31 @@ export async function runMultiScan(options) {
606
802
  executionTime,
607
803
  startTime: startTime.toISOString(),
608
804
  endTime: endTime.toISOString(),
609
- aiProvider: aiProvider
610
- ? { name: aiProviderName ?? 'claude-code', models: modelsUsed.size > 0 ? [...modelsUsed] : [DEFAULT_AI_MODEL] }
805
+ agentProvider: agentProvider
806
+ ? { name: agentProviderName ?? DEFAULT_PROVIDER_NAME, models: modelsUsed.size > 0 ? [...modelsUsed] : [DEFAULT_MODEL] }
611
807
  : { name: 'none', models: [] },
612
808
  tokenUsage: aggregateTokenUsage,
613
809
  };
614
- return results;
810
+ // Attach cost metadata when pricing was provided.
811
+ if (options.pricing) {
812
+ results.metadata = {
813
+ ...(results.metadata ?? {}),
814
+ cost: {
815
+ totalCostUsd: costTracker.totalCostUsd,
816
+ currency: options.pricing.currency ?? 'USD',
817
+ },
818
+ };
819
+ }
820
+ return {
821
+ results,
822
+ totalCostUsd: costTracker.totalCostUsd,
823
+ currency: options.pricing?.currency ?? 'USD',
824
+ models: [...modelsUsed],
825
+ costSource: costTracker.lastCostSource,
826
+ costReportedBy: costTracker.lastCostReportedBy,
827
+ costCoveredBySubscription: costTracker.lastCostCoveredBySubscription,
828
+ budgetAborted,
829
+ budgetAbortReason,
830
+ };
615
831
  }
616
832
  //# sourceMappingURL=scan-runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan-runner.js","sourceRoot":"","sources":["../src/scan-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scan-runner.js","sourceRoot":"","sources":["../src/scan-runner.ts"],"names":[],"mappings":"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"}