agent-security-scanner-mcp 4.0.1 → 4.1.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 (67) hide show
  1. package/code-review-agent/README.md +25 -4
  2. package/code-review-agent/bin/cr-agent.ts +7 -1
  3. package/code-review-agent/dist/bin/cr-agent.js +6 -0
  4. package/code-review-agent/dist/bin/cr-agent.js.map +1 -1
  5. package/code-review-agent/dist/src/analyzer/engine.d.ts +5 -0
  6. package/code-review-agent/dist/src/analyzer/engine.d.ts.map +1 -1
  7. package/code-review-agent/dist/src/analyzer/engine.js +30 -3
  8. package/code-review-agent/dist/src/analyzer/engine.js.map +1 -1
  9. package/code-review-agent/dist/src/analyzer/postprocess.d.ts +15 -0
  10. package/code-review-agent/dist/src/analyzer/postprocess.d.ts.map +1 -0
  11. package/code-review-agent/dist/src/analyzer/postprocess.js +275 -0
  12. package/code-review-agent/dist/src/analyzer/postprocess.js.map +1 -0
  13. package/code-review-agent/dist/src/analyzer/semantic.d.ts +5 -1
  14. package/code-review-agent/dist/src/analyzer/semantic.d.ts.map +1 -1
  15. package/code-review-agent/dist/src/analyzer/semantic.js +80 -20
  16. package/code-review-agent/dist/src/analyzer/semantic.js.map +1 -1
  17. package/code-review-agent/dist/src/context/assembler.d.ts +8 -2
  18. package/code-review-agent/dist/src/context/assembler.d.ts.map +1 -1
  19. package/code-review-agent/dist/src/context/assembler.js +33 -1
  20. package/code-review-agent/dist/src/context/assembler.js.map +1 -1
  21. package/code-review-agent/dist/src/context/file.d.ts.map +1 -1
  22. package/code-review-agent/dist/src/context/file.js +11 -23
  23. package/code-review-agent/dist/src/context/file.js.map +1 -1
  24. package/code-review-agent/dist/src/context/security-summary.d.ts +19 -0
  25. package/code-review-agent/dist/src/context/security-summary.d.ts.map +1 -0
  26. package/code-review-agent/dist/src/context/security-summary.js +199 -0
  27. package/code-review-agent/dist/src/context/security-summary.js.map +1 -0
  28. package/code-review-agent/dist/src/graph/dependency.d.ts.map +1 -1
  29. package/code-review-agent/dist/src/graph/dependency.js +8 -1
  30. package/code-review-agent/dist/src/graph/dependency.js.map +1 -1
  31. package/code-review-agent/dist/src/graph/resolver.d.ts.map +1 -1
  32. package/code-review-agent/dist/src/graph/resolver.js +14 -5
  33. package/code-review-agent/dist/src/graph/resolver.js.map +1 -1
  34. package/code-review-agent/dist/src/index.d.ts +4 -1
  35. package/code-review-agent/dist/src/index.d.ts.map +1 -1
  36. package/code-review-agent/dist/src/index.js +2 -0
  37. package/code-review-agent/dist/src/index.js.map +1 -1
  38. package/code-review-agent/dist/src/llm/claude-cli.d.ts.map +1 -1
  39. package/code-review-agent/dist/src/llm/claude-cli.js +2 -1
  40. package/code-review-agent/dist/src/llm/claude-cli.js.map +1 -1
  41. package/code-review-agent/dist/src/types/config.d.ts +3 -0
  42. package/code-review-agent/dist/src/types/config.d.ts.map +1 -1
  43. package/code-review-agent/dist/src/types/config.js +9 -0
  44. package/code-review-agent/dist/src/types/config.js.map +1 -1
  45. package/code-review-agent/src/analyzer/engine.ts +36 -2
  46. package/code-review-agent/src/analyzer/postprocess.ts +311 -0
  47. package/code-review-agent/src/analyzer/semantic.ts +87 -18
  48. package/code-review-agent/src/context/assembler.ts +44 -2
  49. package/code-review-agent/src/context/file.ts +13 -18
  50. package/code-review-agent/src/context/security-summary.ts +225 -0
  51. package/code-review-agent/src/graph/dependency.ts +8 -1
  52. package/code-review-agent/src/graph/resolver.ts +14 -5
  53. package/code-review-agent/src/index.ts +4 -0
  54. package/code-review-agent/src/llm/claude-cli.ts +2 -1
  55. package/code-review-agent/src/types/config.ts +16 -0
  56. package/code-review-agent/tests/analyzer/engine.test.ts +5 -0
  57. package/code-review-agent/tests/analyzer/postprocess.test.ts +450 -0
  58. package/code-review-agent/tests/analyzer/prompt-routing.test.ts +137 -0
  59. package/code-review-agent/tests/config-mode.test.ts +71 -0
  60. package/code-review-agent/tests/context/file.test.ts +16 -1
  61. package/code-review-agent/tests/context/security-summary.test.ts +181 -0
  62. package/code-review-agent/tests/fixtures/guarded-agent/router.py +6 -0
  63. package/code-review-agent/tests/fixtures/guarded-agent/tools/executor.py +10 -0
  64. package/code-review-agent/tests/fixtures/guarded-agent/tools/guard.py +4 -0
  65. package/code-review-agent/tests/fixtures/guarded-agent/vuln-tool.py +6 -0
  66. package/code-review-agent/tests/graph/dependency.test.ts +76 -0
  67. package/package.json +1 -1
@@ -23,14 +23,20 @@ npm run build
23
23
  ### Analyze a project
24
24
 
25
25
  ```bash
26
- # Text output (default)
26
+ # Text output (default — review mode)
27
27
  npx tsx bin/cr-agent.ts analyze ./path/to/project
28
28
 
29
+ # Security-only mode — focused on exploitable vulnerabilities
30
+ npx tsx bin/cr-agent.ts analyze ./path/to/project --mode security
31
+
32
+ # Shorthand for security mode
33
+ npx tsx bin/cr-agent.ts analyze ./path/to/project --security-only
34
+
29
35
  # JSON output
30
36
  npx tsx bin/cr-agent.ts analyze ./path/to/project --format json
31
37
 
32
- # SARIF output
33
- npx tsx bin/cr-agent.ts analyze ./path/to/project --format sarif
38
+ # SARIF output (recommended with --mode security for CI)
39
+ npx tsx bin/cr-agent.ts analyze ./path/to/project --format sarif --mode security
34
40
 
35
41
  # Custom confidence threshold
36
42
  npx tsx bin/cr-agent.ts analyze ./path/to/project --confidence 0.8
@@ -39,6 +45,17 @@ npx tsx bin/cr-agent.ts analyze ./path/to/project --confidence 0.8
39
45
  npx tsx bin/cr-agent.ts analyze ./path/to/project --provider openai
40
46
  ```
41
47
 
48
+ ### Analysis modes
49
+
50
+ | Mode | Description |
51
+ |------|-------------|
52
+ | `review` (default) | Broad semantic review: logic bugs, security, race conditions, null refs, boundary issues, unhandled exceptions |
53
+ | `security` | Focused security scanner: exploitable vulnerabilities only, sink-localized findings, carrier suppression, CWE mapping |
54
+
55
+ **Review mode** is best for human code review workflows where you want to catch all types of real bugs.
56
+
57
+ **Security mode** is best for CI pipelines, SARIF integrations, and security-focused audits where you want clean, actionable vulnerability reports without generic code quality noise.
58
+
42
59
  ### View intent profile
43
60
 
44
61
  ```bash
@@ -64,6 +81,7 @@ Or create a `.cr-agent.json` in your project root:
64
81
 
65
82
  ```json
66
83
  {
84
+ "mode": "review",
67
85
  "provider": "anthropic",
68
86
  "model": "claude-sonnet-4-20250514",
69
87
  "triageModel": "claude-haiku-4-5-20251001",
@@ -78,6 +96,8 @@ Or create a `.cr-agent.json` in your project root:
78
96
 
79
97
  | Flag | Description | Default |
80
98
  |------|-------------|---------|
99
+ | `--mode` | Analysis mode (`review` or `security`) | `review` |
100
+ | `--security-only` | Shorthand for `--mode security` | — |
81
101
  | `-p, --provider` | LLM provider (`anthropic` or `openai`) | `anthropic` |
82
102
  | `-m, --model` | Analysis model | `claude-sonnet-4-20250514` / `gpt-4o` |
83
103
  | `--triage-model` | Triage model | `claude-haiku-4-5-20251001` / `gpt-4o-mini` |
@@ -92,7 +112,8 @@ Or create a `.cr-agent.json` in your project root:
92
112
  ```
93
113
  Pipeline: discover files → build dependency graph → profile intent
94
114
  → triage (parallel, cheap model) → analyze (parallel, analysis model)
95
- → dedup → filter by confidence sort by severity → output
115
+ → dedup → mode-aware post-filter → carrier suppression (security mode)
116
+ → filter by confidence → sort by severity → output
96
117
  ```
97
118
 
98
119
  ### Components
@@ -13,7 +13,7 @@ import { ModelRouter } from '../src/llm/router.js';
13
13
  import { DependencyGraphBuilder } from '../src/graph/dependency.js';
14
14
  import { buildProjectContext } from '../src/context/project.js';
15
15
  import { loadConfig, resolveOptions } from '../src/types/config.js';
16
- import type { AnalysisOptions } from '../src/types/config.js';
16
+ import type { AnalysisOptions, AnalysisMode } from '../src/types/config.js';
17
17
  import type { AnalysisResult, Finding } from '../src/index.js';
18
18
 
19
19
  const program = new Command();
@@ -27,6 +27,8 @@ program
27
27
  .command('analyze')
28
28
  .description('Analyze a file or directory for bugs and vulnerabilities')
29
29
  .argument('<target>', 'File or directory to analyze')
30
+ .option('--mode <mode>', 'Analysis mode (review|security)')
31
+ .option('--security-only', 'Shorthand for --mode security')
30
32
  .option('-p, --provider <provider>', 'LLM provider (anthropic|openai|claude-cli)')
31
33
  .option('-m, --model <model>', 'Model to use for analysis')
32
34
  .option('--triage-model <model>', 'Model to use for triage')
@@ -43,8 +45,12 @@ program
43
45
  ? resolvedTarget
44
46
  : findProjectRoot(resolvedTarget);
45
47
  const config = loadConfig(targetProjectRoot);
48
+ const mode: AnalysisMode | undefined = flags.securityOnly
49
+ ? 'security'
50
+ : (flags.mode as AnalysisMode | undefined);
46
51
  const options = resolveOptions(
47
52
  {
53
+ mode,
48
54
  provider: flags.provider as AnalysisOptions['provider'] | undefined,
49
55
  model: flags.model as string | undefined,
50
56
  triageModel: flags.triageModel as string | undefined,
@@ -20,6 +20,8 @@ program
20
20
  .command('analyze')
21
21
  .description('Analyze a file or directory for bugs and vulnerabilities')
22
22
  .argument('<target>', 'File or directory to analyze')
23
+ .option('--mode <mode>', 'Analysis mode (review|security)')
24
+ .option('--security-only', 'Shorthand for --mode security')
23
25
  .option('-p, --provider <provider>', 'LLM provider (anthropic|openai|claude-cli)')
24
26
  .option('-m, --model <model>', 'Model to use for analysis')
25
27
  .option('--triage-model <model>', 'Model to use for triage')
@@ -36,7 +38,11 @@ program
36
38
  ? resolvedTarget
37
39
  : findProjectRoot(resolvedTarget);
38
40
  const config = loadConfig(targetProjectRoot);
41
+ const mode = flags.securityOnly
42
+ ? 'security'
43
+ : flags.mode;
39
44
  const options = resolveOptions({
45
+ mode,
40
46
  provider: flags.provider,
41
47
  model: flags.model,
42
48
  triageModel: flags.triageModel,
@@ -1 +1 @@
1
- {"version":3,"file":"cr-agent.js","sourceRoot":"","sources":["../../bin/cr-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cr-agent.js","sourceRoot":"","sources":["../../bin/cr-agent.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,11 @@ export declare class AnalysisEngine {
9
9
  analyze(targetPath: string): Promise<AnalysisResult>;
10
10
  private discoverFiles;
11
11
  private dedup;
12
+ /**
13
+ * Generate a dedup signature that's more precise than just category.
14
+ * Priority: CWE (most specific) > normalized title > category fallback.
15
+ */
16
+ private dedupSignature;
12
17
  private mergeOverlapping;
13
18
  private countBySeverity;
14
19
  private runParallel;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/analyzer/engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAuB1D,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvE,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAmB;gBAEzB,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,gBAAgB;IAM7D,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAyM1D,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,KAAK;IAoBb,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,eAAe;YAQT,WAAW;CAuB1B"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/analyzer/engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAwB1D,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvE,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAmB;gBAEzB,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,gBAAgB;IAM7D,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAoN1D,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,KAAK;IAoBb;;;OAGG;IACH,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,eAAe;YAQT,WAAW;CAwB1B"}
@@ -6,6 +6,7 @@ import { SemanticAnalyzer } from './semantic.js';
6
6
  import { buildProjectContext } from '../context/project.js';
7
7
  import { buildFileContext } from '../context/file.js';
8
8
  import { DependencyGraphBuilder } from '../graph/dependency.js';
9
+ import { postFilterFindings, suppressCarrierFindings } from './postprocess.js';
9
10
  const CODE_EXTENSIONS = new Set([
10
11
  '.js', '.mjs', '.cjs', '.jsx',
11
12
  '.ts', '.tsx',
@@ -64,7 +65,7 @@ export class AnalysisEngine {
64
65
  const graph = graphBuilder.build(targetFiles.map((f) => path.relative(projectRoot, f)));
65
66
  this.onProgress('graph', `Graph: ${graph.nodes.size} node(s)`);
66
67
  // Create analyzer
67
- const analyzer = new SemanticAnalyzer(this.router.getAnalysisProvider(), this.router.getTriageProvider());
68
+ const analyzer = new SemanticAnalyzer(this.router.getAnalysisProvider(), this.router.getTriageProvider(), this.options.mode, projectRoot, graph);
68
69
  // Triage files in parallel
69
70
  this.onProgress('triage', `Triaging ${targetFiles.length} file(s)...`);
70
71
  let triageCount = 0;
@@ -153,6 +154,13 @@ export class AnalysisEngine {
153
154
  // Dedup
154
155
  this.onProgress('finalize', `Deduplicating ${allFindings.length} raw finding(s)`);
155
156
  allFindings = this.dedup(allFindings);
157
+ // Mode-aware post-filtering
158
+ const beforePostFilter = allFindings.length;
159
+ allFindings = postFilterFindings(allFindings, this.options.mode);
160
+ if (this.options.mode === 'security') {
161
+ allFindings = suppressCarrierFindings(allFindings);
162
+ this.onProgress('finalize', `Security filter: ${beforePostFilter} → ${allFindings.length}`);
163
+ }
156
164
  // Filter by confidence
157
165
  const beforeFilter = allFindings.length;
158
166
  allFindings = allFindings.filter((f) => f.confidence >= this.options.confidenceThreshold);
@@ -220,21 +228,39 @@ export class AnalysisEngine {
220
228
  return files;
221
229
  }
222
230
  dedup(findings) {
231
+ // Phase 1: group by file + rich signature (CWE > normalized title > category)
223
232
  const groups = new Map();
224
233
  for (const finding of findings) {
225
- const key = `${finding.location.file}:${finding.category}`;
234
+ const key = `${finding.location.file}:${this.dedupSignature(finding)}`;
226
235
  const group = groups.get(key) ?? [];
227
236
  group.push(finding);
228
237
  groups.set(key, group);
229
238
  }
230
239
  const result = [];
231
240
  for (const group of groups.values()) {
232
- // Merge overlapping line ranges, keep highest confidence
233
241
  const merged = this.mergeOverlapping(group);
234
242
  result.push(...merged);
235
243
  }
236
244
  return result;
237
245
  }
246
+ /**
247
+ * Generate a dedup signature that's more precise than just category.
248
+ * Priority: CWE (most specific) > normalized title > category fallback.
249
+ */
250
+ dedupSignature(finding) {
251
+ if (finding.cwe) {
252
+ return `cwe:${finding.cwe.toLowerCase()}`;
253
+ }
254
+ // Normalize the title: lowercase, strip numbers/punctuation, collapse whitespace
255
+ const normalized = finding.title
256
+ .toLowerCase()
257
+ .replace(/\b(line|col|at)\s*\d+/g, '')
258
+ .replace(/[^a-z0-9\s]/g, '')
259
+ .replace(/\s+/g, ' ')
260
+ .trim();
261
+ // Use first 60 chars of normalized title + category for grouping
262
+ return `${finding.category}:${normalized.slice(0, 60)}`;
263
+ }
238
264
  mergeOverlapping(findings) {
239
265
  if (findings.length <= 1)
240
266
  return findings;
@@ -285,6 +311,7 @@ export class AnalysisEngine {
285
311
  let index = 0;
286
312
  const runNext = async () => {
287
313
  while (index < items.length) {
314
+ // Safe: index++ between awaits is non-concurrent in single-threaded JS
288
315
  const currentIndex = index++;
289
316
  results[currentIndex] = await fn(items[currentIndex]);
290
317
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/analyzer/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/analyzer/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Finding } from '../types/findings.js';
2
+ import type { AnalysisMode } from '../types/config.js';
3
+ /**
4
+ * Apply mode-aware post-filtering to findings.
5
+ * In review mode, returns findings unchanged.
6
+ * In security mode, drops non-security findings and suppresses weak evidence.
7
+ */
8
+ export declare function postFilterFindings(findings: Finding[], mode: AnalysisMode): Finding[];
9
+ /**
10
+ * Suppress carrier findings when a sink-localized equivalent exists.
11
+ * A carrier finding describes data flowing through a file, while the sink
12
+ * finding describes the actual dangerous operation in a downstream file.
13
+ */
14
+ export declare function suppressCarrierFindings(findings: Finding[]): Finding[];
15
+ //# sourceMappingURL=postprocess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postprocess.d.ts","sourceRoot":"","sources":["../../../src/analyzer/postprocess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA8CvD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,EAAE,CAMX;AAmID;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAuFtE"}
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Categories that are never security-relevant on their own.
3
+ * In security mode these are dropped unless they have explicit security evidence.
4
+ */
5
+ const NON_SECURITY_CATEGORIES = new Set([
6
+ 'logic-bug',
7
+ 'type-error',
8
+ 'unhandled-exception',
9
+ 'null-ref',
10
+ 'other',
11
+ ]);
12
+ /**
13
+ * Categories always kept in security mode.
14
+ */
15
+ const SECURITY_CATEGORIES = new Set([
16
+ 'security',
17
+ 'boundary',
18
+ 'race-condition',
19
+ ]);
20
+ /**
21
+ * Keywords in title/reasoning that indicate security relevance
22
+ * even when the category is generic.
23
+ */
24
+ const SECURITY_KEYWORDS = /\b(injection|xss|csrf|ssrf|auth|privilege|escal|rce|command.?exec|deserialization|path.?traversal|directory.?traversal|overflow|underflow|sqli|lfi|rfi|open.?redirect|insecure|credential|secret|token.?leak|session.?fixation|sandbox.?escape)\b/i;
25
+ /**
26
+ * Patterns in reasoning/title indicating strong guard evidence.
27
+ * Presence of these + no described bypass → suppress the finding.
28
+ */
29
+ const STRONG_GUARD_PATTERNS = /\b(allowlist|allow.?list|whitelist|white.?list|hardcoded.*(commands?|hosts?|paths?|domains?)|shell\s*=\s*false|shell.?false|parameterized\s*(query|queries|statement)|bound\s*param|prepared\s*statement|host.?allowlist|scheme.?allowlist|immutable.*(list|set|array)|subprocess\.run\s*\(\s*\[)\b/i;
30
+ /**
31
+ * Patterns suggesting the finding is about a guard module, not a sink.
32
+ */
33
+ const GUARD_MODULE_PATTERNS = /\b(guard|policy|validator|validation|sanitiz|allowlist|denylist|blocklist|safelist|permission|authorize)\b/i;
34
+ /**
35
+ * Phrases indicating the finding describes a weak/theoretical bypass
36
+ * rather than a concrete exploit path.
37
+ */
38
+ const WEAK_BYPASS_PHRASES = /\b(could\s+(potentially|theoretically|possibly)|may\s+be\s+bypass\w*|policy\s+(may|could|might)\s+(change|be\s+(expanded|modified|updated))|theoretically|in\s+theory|if\s+the\s+(allowlist|whitelist|policy)\s+(is|were|was)\s+(expanded|changed|modified)|future\s+changes?\s+(could|may|might))\b/i;
39
+ /**
40
+ * Apply mode-aware post-filtering to findings.
41
+ * In review mode, returns findings unchanged.
42
+ * In security mode, drops non-security findings and suppresses weak evidence.
43
+ */
44
+ export function postFilterFindings(findings, mode) {
45
+ if (mode !== 'security')
46
+ return findings;
47
+ return findings
48
+ .filter((f) => isSecurityRelevant(f))
49
+ .filter((f) => !isWeakGuardFinding(f));
50
+ }
51
+ /**
52
+ * Detect findings that describe guarded code with no concrete bypass.
53
+ * These are the "policy may be bypassed" false positives.
54
+ */
55
+ function isWeakGuardFinding(finding) {
56
+ const text = `${finding.title} ${finding.reasoning}`;
57
+ // Check if the finding mentions strong guard evidence
58
+ const hasStrongGuard = STRONG_GUARD_PATTERNS.test(text);
59
+ // Check if the finding is about a guard module rather than a sink
60
+ const isAboutGuard = GUARD_MODULE_PATTERNS.test(finding.title) ||
61
+ GUARD_MODULE_PATTERNS.test(finding.location.file);
62
+ // Check if the bypass description is weak/theoretical
63
+ const hasWeakBypass = WEAK_BYPASS_PHRASES.test(finding.reasoning);
64
+ // Strong guard + weak/theoretical bypass language → suppress
65
+ // Low confidence alone is NOT enough — the model may be cautious but correct
66
+ if (hasStrongGuard && hasWeakBypass) {
67
+ return true;
68
+ }
69
+ // Finding is about a guard module + weak bypass language + low confidence → suppress
70
+ if (isAboutGuard && hasWeakBypass && finding.confidence < 0.8) {
71
+ return true;
72
+ }
73
+ return false;
74
+ }
75
+ /**
76
+ * Determines whether a finding should survive security-mode filtering.
77
+ */
78
+ function isSecurityRelevant(finding) {
79
+ // Always keep explicit security categories
80
+ if (SECURITY_CATEGORIES.has(finding.category))
81
+ return true;
82
+ // For non-security categories, check for evidence of real security impact
83
+ if (NON_SECURITY_CATEGORIES.has(finding.category)) {
84
+ // Has a CWE — the LLM mapped it to a known weakness
85
+ if (finding.cwe)
86
+ return true;
87
+ // Has an OWASP mapping
88
+ if (finding.owasp)
89
+ return true;
90
+ // Title or reasoning contains security-specific language
91
+ if (SECURITY_KEYWORDS.test(finding.title) || SECURITY_KEYWORDS.test(finding.reasoning)) {
92
+ return true;
93
+ }
94
+ // Violates intent — could indicate a security issue, but only keep if high confidence
95
+ if (finding.intentAlignment === 'violates-intent' && finding.confidence >= 0.8) {
96
+ return true;
97
+ }
98
+ // Not enough security evidence — drop it
99
+ return false;
100
+ }
101
+ // Unknown category — keep if it has any security indicator
102
+ return !!(finding.cwe || finding.owasp || SECURITY_KEYWORDS.test(finding.title));
103
+ }
104
+ /**
105
+ * Patterns in file paths that suggest the file is a carrier/router, not a sink.
106
+ */
107
+ const CARRIER_FILE_PATTERNS = /\b(router|route|planner|controller|handler|middleware|dispatch|orchestrat|wrapper|proxy|gateway|facade|adapter)\b/i;
108
+ /**
109
+ * Patterns in file paths that suggest the file contains a dangerous sink.
110
+ */
111
+ const SINK_FILE_PATTERNS = /\b(tool|service|executor|worker|client|db|database|query|fetch|request|command|process|infra|util)\b/i;
112
+ /**
113
+ * Language in finding titles/reasoning that suggests carrier (pass-through) behavior.
114
+ */
115
+ const CARRIER_LANGUAGE = /\b(passed\s+to|forwarded|through|reaches|via\s+(router|wrapper|handler|middleware|planner|controller)|routed\s+to|dispatched|delegates?\s+to|calls?\s+into|relayed|proxied)\b/i;
116
+ /**
117
+ * Language suggesting the finding is at the actual dangerous operation.
118
+ */
119
+ const SINK_LANGUAGE = /\b(execut(es?|ed|ing)|calls?\s+(subprocess|exec|eval|system|popen|spawn)|queries|fetche[sd]|request[sd]?\s+(to|from)|writes?\s+to|reads?\s+from|sends?\s+(request|query)|connects?\s+to|opens?\s+(file|connection|socket))\b/i;
120
+ /**
121
+ * CWEs that are typically associated with sinks, not carriers.
122
+ */
123
+ const SINK_CWES = new Set([
124
+ 'cwe-78', // OS command injection
125
+ 'cwe-79', // XSS
126
+ 'cwe-89', // SQL injection
127
+ 'cwe-90', // LDAP injection
128
+ 'cwe-91', // XML injection
129
+ 'cwe-94', // Code injection
130
+ 'cwe-95', // Eval injection
131
+ 'cwe-98', // Remote file inclusion
132
+ 'cwe-918', // SSRF
133
+ 'cwe-22', // Path traversal
134
+ 'cwe-77', // Command injection
135
+ 'cwe-502', // Deserialization
136
+ 'cwe-611', // XXE
137
+ ]);
138
+ /**
139
+ * Compute a carrier/sink score for a finding.
140
+ * Positive = more sink-like, negative = more carrier-like.
141
+ */
142
+ function carrierSinkScore(finding) {
143
+ let score = 0;
144
+ const text = `${finding.title} ${finding.reasoning}`;
145
+ const filePath = finding.location.file.toLowerCase();
146
+ // File path signals
147
+ if (CARRIER_FILE_PATTERNS.test(filePath))
148
+ score -= 2;
149
+ if (SINK_FILE_PATTERNS.test(filePath))
150
+ score += 2;
151
+ // Language signals
152
+ if (CARRIER_LANGUAGE.test(text))
153
+ score -= 2;
154
+ if (SINK_LANGUAGE.test(text))
155
+ score += 2;
156
+ // CWE-based signals — sink CWEs found in a tool/service file are strong sink signals
157
+ if (finding.cwe && SINK_CWES.has(finding.cwe.toLowerCase()))
158
+ score += 1;
159
+ // Confidence as tiebreaker
160
+ score += finding.confidence;
161
+ return score;
162
+ }
163
+ /**
164
+ * Suppress carrier findings when a sink-localized equivalent exists.
165
+ * A carrier finding describes data flowing through a file, while the sink
166
+ * finding describes the actual dangerous operation in a downstream file.
167
+ */
168
+ export function suppressCarrierFindings(findings) {
169
+ if (findings.length <= 1)
170
+ return findings;
171
+ // Phase 1: group by CWE (cross-file) or per-file title
172
+ const groups = new Map();
173
+ for (const f of findings) {
174
+ const key = findingSignature(f);
175
+ const group = groups.get(key) ?? [];
176
+ group.push(f);
177
+ groups.set(key, group);
178
+ }
179
+ // Phase 2: for no-CWE findings, merge cross-file groups when carrier/sink signals
180
+ // indicate they describe the same issue flowing across files.
181
+ const titleGroups = new Map();
182
+ for (const f of findings) {
183
+ if (f.cwe)
184
+ continue;
185
+ const key = normalizedTitle(f);
186
+ const group = titleGroups.get(key) ?? [];
187
+ group.push(f);
188
+ titleGroups.set(key, group);
189
+ }
190
+ // If a cross-file title group has at least one carrier and one sink signal,
191
+ // collapse it — otherwise leave per-file groups intact.
192
+ const suppressedFiles = new Set();
193
+ for (const group of titleGroups.values()) {
194
+ if (group.length <= 1)
195
+ continue;
196
+ // Check if group spans multiple files
197
+ const files = new Set(group.map((f) => f.location.file));
198
+ if (files.size <= 1)
199
+ continue;
200
+ // Require language signals in the finding text, not just file-path patterns.
201
+ // File path alone is too aggressive — a "Missing authorization check" in
202
+ // controller/users.js and service/admin.js are likely distinct real findings.
203
+ const hasCarrier = group.some((f) => {
204
+ const text = `${f.title} ${f.reasoning}`;
205
+ return CARRIER_LANGUAGE.test(text);
206
+ });
207
+ const hasSink = group.some((f) => {
208
+ const text = `${f.title} ${f.reasoning}`;
209
+ return SINK_LANGUAGE.test(text);
210
+ });
211
+ if (hasCarrier && hasSink) {
212
+ // Collapse: keep the most sink-like finding
213
+ const scored = group.map((f) => ({ finding: f, score: carrierSinkScore(f) }));
214
+ scored.sort((a, b) => b.score - a.score);
215
+ // Mark all but the winner for suppression
216
+ for (let i = 1; i < scored.length; i++) {
217
+ const f = scored[i].finding;
218
+ suppressedFiles.add(`${f.location.file}:${f.location.startLine}:${f.title}`);
219
+ }
220
+ }
221
+ }
222
+ // Phase 3: collapse CWE-based groups as before, and apply no-CWE suppression
223
+ const result = [];
224
+ for (const [key, group] of groups) {
225
+ if (group.length <= 1) {
226
+ const f = group[0];
227
+ const suppKey = `${f.location.file}:${f.location.startLine}:${f.title}`;
228
+ if (!suppressedFiles.has(suppKey)) {
229
+ result.push(f);
230
+ }
231
+ continue;
232
+ }
233
+ // For multi-item groups: filter out suppressed findings first, then score
234
+ const unsuppressed = group.filter((f) => {
235
+ const suppKey = `${f.location.file}:${f.location.startLine}:${f.title}`;
236
+ return !suppressedFiles.has(suppKey);
237
+ });
238
+ if (unsuppressed.length === 0)
239
+ continue;
240
+ if (unsuppressed.length === 1) {
241
+ result.push(unsuppressed[0]);
242
+ continue;
243
+ }
244
+ // CWE groups or remaining multi-item: score and keep best
245
+ const scored = unsuppressed.map((f) => ({ finding: f, score: carrierSinkScore(f) }));
246
+ scored.sort((a, b) => b.score - a.score);
247
+ result.push(scored[0].finding);
248
+ }
249
+ return result;
250
+ }
251
+ /**
252
+ * Normalize a title for grouping (strips noise, lowercases).
253
+ */
254
+ function normalizedTitle(f) {
255
+ return f.title
256
+ .toLowerCase()
257
+ .replace(/\b(line|col|at)\s*\d+/g, '')
258
+ .replace(/[^a-z0-9\s]/g, '')
259
+ .replace(/\s+/g, ' ')
260
+ .trim();
261
+ }
262
+ /**
263
+ * Generate a normalized signature for grouping related findings.
264
+ * CWE-based grouping is cross-file (carrier/sink suppression).
265
+ * Title-based grouping is per-file to avoid collapsing distinct findings
266
+ * with generic titles like "Missing authorization check" in different files.
267
+ */
268
+ function findingSignature(f) {
269
+ // Use CWE as primary grouping key — cross-file is intentional for carrier/sink dedup
270
+ if (f.cwe)
271
+ return `cwe:${f.cwe.toLowerCase()}`;
272
+ // Per-file title grouping: prevents collapsing distinct findings across files
273
+ return `title:${f.location.file}:${normalizedTitle(f)}`;
274
+ }
275
+ //# sourceMappingURL=postprocess.js.map