circle-ir 3.88.1 → 3.90.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.
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Findings instrumentation hook (cognium-dev #145, re-scoped per
3
+ * cognium-ai feedback).
4
+ *
5
+ * Opt-in, off by default. When enabled via `setFindingsInstrumentation(true)`,
6
+ * the per-file analyzer emits one `[finding]` JSON line on stderr for every
7
+ * `SastFinding` produced by the pipeline, plus one `[findings-summary]` line
8
+ * per file with aggregate counts. The payload carries the fields required to
9
+ * re-derive coalesce candidates after the fact (#143):
10
+ * `rule_id`, `file`, `line`, `pass`, `category`, `severity`, `cwe`,
11
+ * `sink_type`, `source_type`, `confidence`, `dedup_group_id`.
12
+ *
13
+ * Browser-safe: no Node-only APIs. `console.error` is universal and bypasses
14
+ * the logger DI by design so the output stays grep-friendly regardless of
15
+ * log level.
16
+ *
17
+ * Read-only contract: this module never mutates the findings array or any
18
+ * other pipeline output. Disabling the flag fully no-ops the emission.
19
+ */
20
+ import type { SastFinding, TaintSource, TaintSink } from '../types/index.js';
21
+ /**
22
+ * Toggle the per-file findings instrumentation on or off. Off by default.
23
+ *
24
+ * The CLI wires this to the `CIRCLE_IR_INSTRUMENT_FINDINGS=1` environment
25
+ * variable; library consumers can call it directly.
26
+ */
27
+ export declare function setFindingsInstrumentation(enabled: boolean): void;
28
+ /**
29
+ * Current state of the instrumentation flag. Exposed for tests and for
30
+ * consumers that want to gate their own diagnostics off the same switch.
31
+ */
32
+ export declare function isFindingsInstrumentationEnabled(): boolean;
33
+ /**
34
+ * Emit one stderr line per `SastFinding` plus one summary line for the file.
35
+ * Cheap no-op when the flag is off.
36
+ *
37
+ * Called by `analyze()` once per file, right after the pipeline has
38
+ * accumulated all findings and right before the per-file result object is
39
+ * assembled. See `src/analyzer.ts`.
40
+ */
41
+ export declare function emitFindingsInstrumentation(filePath: string, findings: readonly SastFinding[], taint: {
42
+ sources: readonly TaintSource[];
43
+ sinks: readonly TaintSink[];
44
+ }): void;
45
+ //# sourceMappingURL=findings-instrumentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings-instrumentation.d.ts","sourceRoot":"","sources":["../../src/analysis/findings-instrumentation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAI7E;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjE;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,IAAI,OAAO,CAE1D;AAWD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,KAAK,EAAE;IAAE,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,GACtE,IAAI,CA2DN"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Findings instrumentation hook (cognium-dev #145, re-scoped per
3
+ * cognium-ai feedback).
4
+ *
5
+ * Opt-in, off by default. When enabled via `setFindingsInstrumentation(true)`,
6
+ * the per-file analyzer emits one `[finding]` JSON line on stderr for every
7
+ * `SastFinding` produced by the pipeline, plus one `[findings-summary]` line
8
+ * per file with aggregate counts. The payload carries the fields required to
9
+ * re-derive coalesce candidates after the fact (#143):
10
+ * `rule_id`, `file`, `line`, `pass`, `category`, `severity`, `cwe`,
11
+ * `sink_type`, `source_type`, `confidence`, `dedup_group_id`.
12
+ *
13
+ * Browser-safe: no Node-only APIs. `console.error` is universal and bypasses
14
+ * the logger DI by design so the output stays grep-friendly regardless of
15
+ * log level.
16
+ *
17
+ * Read-only contract: this module never mutates the findings array or any
18
+ * other pipeline output. Disabling the flag fully no-ops the emission.
19
+ */
20
+ let instrumentEnabled = false;
21
+ /**
22
+ * Toggle the per-file findings instrumentation on or off. Off by default.
23
+ *
24
+ * The CLI wires this to the `CIRCLE_IR_INSTRUMENT_FINDINGS=1` environment
25
+ * variable; library consumers can call it directly.
26
+ */
27
+ export function setFindingsInstrumentation(enabled) {
28
+ instrumentEnabled = enabled;
29
+ }
30
+ /**
31
+ * Current state of the instrumentation flag. Exposed for tests and for
32
+ * consumers that want to gate their own diagnostics off the same switch.
33
+ */
34
+ export function isFindingsInstrumentationEnabled() {
35
+ return instrumentEnabled;
36
+ }
37
+ /**
38
+ * Build a `${file}:${line}:${rule_id}` key for a finding. Matches the dedup
39
+ * convention used elsewhere in the codebase (e.g. ScanSecretsPass) so
40
+ * downstream analysis can group candidates without a second pass.
41
+ */
42
+ function dedupGroupId(f) {
43
+ return `${f.file}:${f.line}:${f.rule_id}`;
44
+ }
45
+ /**
46
+ * Emit one stderr line per `SastFinding` plus one summary line for the file.
47
+ * Cheap no-op when the flag is off.
48
+ *
49
+ * Called by `analyze()` once per file, right after the pipeline has
50
+ * accumulated all findings and right before the per-file result object is
51
+ * assembled. See `src/analyzer.ts`.
52
+ */
53
+ export function emitFindingsInstrumentation(filePath, findings, taint) {
54
+ if (!instrumentEnabled)
55
+ return;
56
+ // Pre-index sinks/sources by line for O(1) lookup. Many findings per file,
57
+ // many sinks per file; nested .find() would be O(F*S) per file.
58
+ const sinkByLine = new Map();
59
+ for (const s of taint.sinks) {
60
+ // First sink at a line wins; matches finding's primary "go-to-line".
61
+ if (!sinkByLine.has(s.line))
62
+ sinkByLine.set(s.line, s);
63
+ }
64
+ const sourceByLine = new Map();
65
+ for (const s of taint.sources) {
66
+ if (!sourceByLine.has(s.line))
67
+ sourceByLine.set(s.line, s);
68
+ }
69
+ const groupCounts = new Map();
70
+ const byRule = new Map();
71
+ const bySeverity = new Map();
72
+ for (const f of findings) {
73
+ const gid = dedupGroupId(f);
74
+ groupCounts.set(gid, (groupCounts.get(gid) ?? 0) + 1);
75
+ byRule.set(f.rule_id, (byRule.get(f.rule_id) ?? 0) + 1);
76
+ bySeverity.set(f.severity, (bySeverity.get(f.severity) ?? 0) + 1);
77
+ const sink = sinkByLine.get(f.line);
78
+ const source = sink ? undefined : sourceByLine.get(f.line);
79
+ const payload = {
80
+ file: f.file,
81
+ line: f.line,
82
+ rule_id: f.rule_id,
83
+ pass: f.pass,
84
+ category: f.category,
85
+ severity: f.severity,
86
+ cwe: f.cwe,
87
+ sink_type: sink?.type,
88
+ source_type: source?.type,
89
+ confidence: sink?.confidence,
90
+ dedup_group_id: gid,
91
+ };
92
+ console.error(`[finding] ${JSON.stringify(payload)}`);
93
+ }
94
+ let maxPerGroup = 0;
95
+ for (const c of groupCounts.values()) {
96
+ if (c > maxPerGroup)
97
+ maxPerGroup = c;
98
+ }
99
+ const summary = {
100
+ file: filePath,
101
+ total: findings.length,
102
+ unique_groups: groupCounts.size,
103
+ max_findings_per_group: maxPerGroup,
104
+ sources_count: taint.sources.length,
105
+ sinks_count: taint.sinks.length,
106
+ by_rule: Object.fromEntries(byRule),
107
+ by_severity: Object.fromEntries(bySeverity),
108
+ };
109
+ console.error(`[findings-summary] ${JSON.stringify(summary)}`);
110
+ }
111
+ //# sourceMappingURL=findings-instrumentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings-instrumentation.js","sourceRoot":"","sources":["../../src/analysis/findings-instrumentation.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export { parseConfig, loadSourceConfigs, loadSinkConfigs, createTaintConfig, get
5
5
  export { analyzeTaint, attachSourceLineCode, } from './taint-matcher.js';
6
6
  export { detectUnresolved, } from './unresolved.js';
7
7
  export { generateFindings, } from './findings.js';
8
+ export { setFindingsInstrumentation, isFindingsInstrumentationEnabled, emitFindingsInstrumentation, } from './findings-instrumentation.js';
8
9
  export { propagateTaint, type TaintPropagationResult, type TaintedVariable, type TaintFlow, } from './taint-propagation.js';
9
10
  export { analyzeInterprocedural, getInterproceduralSummary, findTaintBridges, getMethodTaintPaths, hasMethod, getMethod, isMethodTainted, type InterproceduralResult, type MethodNode, type CallEdge, } from './interprocedural.js';
10
11
  export { analyzeConstantPropagation, isFalsePositive, isCorrelatedPredicateFP, ConstantPropagator, isKnown, createUnknown, createConstant, getNodeText, getNodeLine, type ConstantValue, type ConstantType, type ConstantPropagatorResult, type ConstantPropagationOptions, } from './constant-propagation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,YAAY,EACZ,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,QAAQ,GACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,UAAU,EACV,cAAc,EACd,eAAe,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,WAAW,EACX,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,YAAY,EACZ,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,cAAc,EACd,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,QAAQ,GACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,UAAU,EACV,cAAc,EACd,eAAe,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,WAAW,EACX,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC"}
@@ -5,6 +5,7 @@ export { parseConfig, loadSourceConfigs, loadSinkConfigs, createTaintConfig, get
5
5
  export { analyzeTaint, attachSourceLineCode, } from './taint-matcher.js';
6
6
  export { detectUnresolved, } from './unresolved.js';
7
7
  export { generateFindings, } from './findings.js';
8
+ export { setFindingsInstrumentation, isFindingsInstrumentationEnabled, emitFindingsInstrumentation, } from './findings-instrumentation.js';
8
9
  export { propagateTaint, } from './taint-propagation.js';
9
10
  export { analyzeInterprocedural, getInterproceduralSummary, findTaintBridges, getMethodTaintPaths, hasMethod, getMethod, isMethodTainted, } from './interprocedural.js';
10
11
  export { analyzeConstantPropagation, isFalsePositive, isCorrelatedPredicateFP, ConstantPropagator, isKnown, createUnknown, createConstant, getNodeText, getNodeLine, } from './constant-propagation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,YAAY,EACZ,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,GAIf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,eAAe,GAIhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,GAKZ,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,UAAU,EACV,cAAc,EACd,eAAe,GAKhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,WAAW,EACX,eAAe,GAKhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,EACf,mBAAmB,GAEpB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,YAAY,EACZ,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,cAAc,GAIf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,eAAe,GAIhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,GAKZ,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,UAAU,EACV,cAAc,EACd,eAAe,GAKhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,WAAW,EACX,eAAe,GAKhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,EACf,mBAAmB,GAEpB,MAAM,aAAa,CAAC"}
@@ -19,10 +19,27 @@ export interface CrossFilePassResult {
19
19
  taintPaths: TaintPath[];
20
20
  /** Type hierarchy across all files. */
21
21
  typeHierarchy: TypeHierarchy;
22
+ /**
23
+ * Set when the cross-file budget (`options.budgetMs`) was exceeded
24
+ * mid-phase. When `true`, `taintPaths` may be incomplete — remaining
25
+ * sub-phases were skipped. Added in 3.89.0 (#141).
26
+ */
27
+ budgetExceeded?: boolean;
28
+ }
29
+ export interface CrossFilePassOptions {
30
+ /**
31
+ * Wall-time budget (ms) for the entire cross-file phase. `0` or `undefined`
32
+ * disables the breaker (unlimited). On exceed, partial `taintPaths` are
33
+ * kept, the remaining sub-phases are skipped, and `budgetExceeded` is set.
34
+ *
35
+ * Threaded from `AnalyzerOptions.crossFileBudgetMs` (default 300_000ms /
36
+ * 5 min) in 3.89.0 to mitigate #141 (langchain4j hang).
37
+ */
38
+ budgetMs?: number;
22
39
  }
23
40
  export declare class CrossFilePass {
24
41
  run(projectGraph: ProjectGraph,
25
42
  /** Raw source lines per file (used to populate `code` fields in paths). */
26
- sourceLines: Map<string, string[]>): CrossFilePassResult;
43
+ sourceLines: Map<string, string[]>, options?: CrossFilePassOptions): CrossFilePassResult;
27
44
  }
28
45
  //# sourceMappingURL=cross-file-pass.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cross-file-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/cross-file-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EAKd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,8CAA8C;IAC9C,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,uCAAuC;IACvC,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,qBAAa,aAAa;IACxB,GAAG,CACD,YAAY,EAAE,YAAY;IAC1B,2EAA2E;IAC3E,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACjC,mBAAmB;CAmKvB"}
1
+ {"version":3,"file":"cross-file-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/cross-file-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EAKd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAIjE,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,8CAA8C;IAC9C,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,uCAAuC;IACvC,aAAa,EAAE,aAAa,CAAC;IAC7B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,aAAa;IACxB,GAAG,CACD,YAAY,EAAE,YAAY;IAC1B,2EAA2E;IAC3E,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAClC,OAAO,GAAE,oBAAyB,GACjC,mBAAmB;CAuOvB"}
@@ -10,13 +10,25 @@
10
10
  *
11
11
  * Depends on: ProjectGraph (with all files registered)
12
12
  */
13
+ import { logger } from '../../utils/logger.js';
13
14
  export class CrossFilePass {
14
15
  run(projectGraph,
15
16
  /** Raw source lines per file (used to populate `code` fields in paths). */
16
- sourceLines) {
17
+ sourceLines, options = {}) {
17
18
  const resolver = projectGraph.resolver;
19
+ const budgetMs = options.budgetMs ?? 0;
20
+ const startMs = Date.now();
21
+ const budgetExceeded = () => budgetMs > 0 && Date.now() - startMs > budgetMs;
22
+ const fileCount = projectGraph.filePaths.length;
23
+ logger.info('cross-file: starting', { files: fileCount, budgetMs });
18
24
  // --- 1. Cross-file taint flows → TaintPath[] ----------------------------
25
+ const phase1Start = Date.now();
26
+ logger.debug('cross-file: phase 1/4 starting (findCrossFileTaintFlows)');
19
27
  const flows = resolver.findCrossFileTaintFlows();
28
+ logger.info('cross-file: phase 1/4 done', {
29
+ flows: flows.length,
30
+ elapsedMs: Date.now() - phase1Start,
31
+ });
20
32
  const taintPaths = flows.flatMap((flow, idx) => {
21
33
  const srcLines = sourceLines.get(flow.sourceFile) ?? [];
22
34
  const tgtLines = sourceLines.get(flow.targetFile) ?? [];
@@ -76,11 +88,57 @@ export class CrossFilePass {
76
88
  // class writes `this.field = param` in a `@DataBoundConstructor` and
77
89
  // another class reads that field on an aliased instance and forwards to
78
90
  // a sink.
79
- const ipPaths = [
80
- ...resolver.findInterproceduralTaintPaths(),
81
- ...resolver.findFieldBindingTaintPaths(),
82
- ...findCrossInstanceAliasingPaths(projectGraph, sourceLines),
83
- ];
91
+ //
92
+ // Phases 2-4 are individually budget-gated so a pathological 3rd phase
93
+ // (e.g. quadratic aliasing on a large Java monorepo) cannot block
94
+ // delivery of phase-1/2 taint paths. See #141 / 3.89.0 CHANGELOG.
95
+ let exceeded = false;
96
+ const ipPaths = [];
97
+ if (budgetExceeded()) {
98
+ exceeded = true;
99
+ logger.warn('cross-file: budget exceeded after phase 1/4, skipping phases 2-4', {
100
+ budgetMs, elapsedMs: Date.now() - startMs, partialPaths: taintPaths.length,
101
+ });
102
+ }
103
+ else {
104
+ const phase2Start = Date.now();
105
+ logger.debug('cross-file: phase 2/4 starting (findInterproceduralTaintPaths)');
106
+ const phase2 = resolver.findInterproceduralTaintPaths();
107
+ ipPaths.push(...phase2);
108
+ logger.info('cross-file: phase 2/4 done', {
109
+ paths: phase2.length, elapsedMs: Date.now() - phase2Start,
110
+ });
111
+ }
112
+ if (!exceeded && budgetExceeded()) {
113
+ exceeded = true;
114
+ logger.warn('cross-file: budget exceeded after phase 2/4, skipping phases 3-4', {
115
+ budgetMs, elapsedMs: Date.now() - startMs, partialPaths: taintPaths.length + ipPaths.length,
116
+ });
117
+ }
118
+ else if (!exceeded) {
119
+ const phase3Start = Date.now();
120
+ logger.debug('cross-file: phase 3/4 starting (findFieldBindingTaintPaths)');
121
+ const phase3 = resolver.findFieldBindingTaintPaths();
122
+ ipPaths.push(...phase3);
123
+ logger.info('cross-file: phase 3/4 done', {
124
+ paths: phase3.length, elapsedMs: Date.now() - phase3Start,
125
+ });
126
+ }
127
+ if (!exceeded && budgetExceeded()) {
128
+ exceeded = true;
129
+ logger.warn('cross-file: budget exceeded after phase 3/4, skipping phase 4', {
130
+ budgetMs, elapsedMs: Date.now() - startMs, partialPaths: taintPaths.length + ipPaths.length,
131
+ });
132
+ }
133
+ else if (!exceeded) {
134
+ const phase4Start = Date.now();
135
+ logger.debug('cross-file: phase 4/4 starting (findCrossInstanceAliasingPaths)');
136
+ const phase4 = findCrossInstanceAliasingPaths(projectGraph, sourceLines);
137
+ ipPaths.push(...phase4);
138
+ logger.info('cross-file: phase 4/4 done', {
139
+ paths: phase4.length, elapsedMs: Date.now() - phase4Start,
140
+ });
141
+ }
84
142
  for (let i = 0; i < ipPaths.length; i++) {
85
143
  const p = ipPaths[i];
86
144
  const sinkIR = projectGraph.getIR(p.sink.file);
@@ -165,7 +223,16 @@ export class CrossFilePass {
165
223
  }
166
224
  // --- 3. Type hierarchy --------------------------------------------------
167
225
  const typeHierarchy = projectGraph.typeHierarchy.toTypeHierarchyData();
168
- return { crossFileCalls, taintPaths, typeHierarchy };
226
+ logger.info('cross-file: complete', {
227
+ totalMs: Date.now() - startMs,
228
+ paths: taintPaths.length,
229
+ crossFileCalls: crossFileCalls.length,
230
+ budgetExceeded: exceeded,
231
+ });
232
+ const result = { crossFileCalls, taintPaths, typeHierarchy };
233
+ if (exceeded)
234
+ result.budgetExceeded = true;
235
+ return result;
169
236
  }
170
237
  }
171
238
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"cross-file-pass.js","sourceRoot":"","sources":["../../../src/analysis/passes/cross-file-pass.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cross-file-pass.js","sourceRoot":"","sources":["../../../src/analysis/passes/cross-file-pass.ts"],"names":[],"mappings":"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"}
@@ -91,6 +91,22 @@ export interface AnalyzerOptions {
91
91
  * Passes to disable entirely. Use pass names (e.g., 'naming-convention').
92
92
  */
93
93
  disabledPasses?: string[];
94
+ /**
95
+ * Wall-time budget (ms) for the entire cross-file phase
96
+ * (`CrossFilePass.run()` — direct flows, interprocedural, field-binding,
97
+ * cross-instance aliasing). When exceeded, the remaining sub-phases are
98
+ * skipped, any taint paths produced so far are kept, and the resulting
99
+ * `ProjectAnalysis.cross_file_budget_exceeded` flag is set to `true`.
100
+ *
101
+ * - `0` disables the breaker (unlimited).
102
+ * - Omitting the field uses the default of `300_000` (5 minutes), chosen
103
+ * to comfortably cover large monorepos (~2K files) at post-3.89.0
104
+ * pre-index speeds while still catching pathological hangs.
105
+ * - Consumers operating in CI on >5K-file projects may want to bump this.
106
+ *
107
+ * Added in circle-ir 3.89.0 to mitigate #141 (langchain4j 30-min hang).
108
+ */
109
+ crossFileBudgetMs?: number;
94
110
  }
95
111
  /**
96
112
  * Per-pass configuration options.
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAA2B,eAAe,EAAe,MAAM,kBAAkB,CAAC;AAC1H,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAcL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAKL,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAgC7B,OAAO,EAAwB,KAAK,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAKlH,OAAO,EAA2B,KAAK,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAe1H,OAAO,EAAwB,KAAK,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACjH,OAAO,EAAuB,KAAK,sBAAsB,EAA6B,MAAM,4CAA4C,CAAC;AAwCzI,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;IAEhC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3D;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzE;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;IACjD,6CAA6C;IAC7C,eAAe,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AAID;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAc/E;AAkID;;GAEG;AACH,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,QAAQ,CAAC,CA2LnB;AA4GD;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAwG3B;AAkID;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,iBAAiB,CAAA;CAAE,CAAC,EAC7E,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAmE1B;AAsBD,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAA2B,eAAe,EAAe,MAAM,kBAAkB,CAAC;AAC1H,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAcL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAKL,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAiC7B,OAAO,EAAwB,KAAK,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAKlH,OAAO,EAA2B,KAAK,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAe1H,OAAO,EAAwB,KAAK,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACjH,OAAO,EAAuB,KAAK,sBAAsB,EAA6B,MAAM,4CAA4C,CAAC;AAwCzI,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;IAEhC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3D;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzE;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;;;;;;;;;;;OAcG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;IACjD,6CAA6C;IAC7C,eAAe,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AAID;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAc/E;AAkID;;GAEG;AACH,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,QAAQ,CAAC,CA+LnB;AA4GD;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAwG3B;AAkID;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,iBAAiB,CAAA;CAAE,CAAC,EAC7E,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC,CA6E1B;AAsBD,OAAO,EAAE,eAAe,EAAE,CAAC"}
package/dist/analyzer.js CHANGED
@@ -54,6 +54,7 @@
54
54
  */
55
55
  import { initParser, parse, disposeTree, extractParseStatus, extractMeta, extractTypes, extractCalls, extractImports, extractExports, buildCFG, buildDFG, extractRuntimeRegistrations, collectAllNodes, } from './core/index.js';
56
56
  import { analyzeTaint, getDefaultConfig, detectUnresolved, analyzeConstantPropagation, isFalsePositive, } from './analysis/index.js';
57
+ import { emitFindingsInstrumentation } from './analysis/findings-instrumentation.js';
57
58
  import { registerBuiltinPlugins } from './languages/index.js';
58
59
  import { logger } from './utils/logger.js';
59
60
  import { CodeGraph, AnalysisPipeline, ProjectGraph } from './graph/index.js';
@@ -471,6 +472,9 @@ export async function analyze(code, filePath, language, options = {}) {
471
472
  flows: taint.flows?.length ?? 0,
472
473
  unresolvedItems: unresolved.length,
473
474
  });
475
+ // #145 PR B — opt-in per-file findings instrumentation. No-op unless
476
+ // toggled via setFindingsInstrumentation(true). Strictly read-only.
477
+ emitFindingsInstrumentation(filePath, findings, taint);
474
478
  return {
475
479
  meta, types, calls, cfg, dfg, taint, imports, exports, unresolved, enriched,
476
480
  findings: findings.length > 0 ? findings : undefined,
@@ -804,7 +808,9 @@ export async function analyzeProject(files, options = {}) {
804
808
  sourceLinesByFile.set(filePath, code.split('\n'));
805
809
  }
806
810
  // 2. Cross-file analysis
807
- const crossFileResult = new CrossFilePass().run(projectGraph, sourceLinesByFile);
811
+ // Apply default budget of 300s if not specified by caller. `0` disables.
812
+ const crossFileBudgetMs = options.crossFileBudgetMs ?? 300_000;
813
+ const crossFileResult = new CrossFilePass().run(projectGraph, sourceLinesByFile, { budgetMs: crossFileBudgetMs });
808
814
  // 2.5 Cross-file security-header inheritance (CORS via virtual methods)
809
815
  const disabledPasses = options.disabledPasses ?? [];
810
816
  if (!disabledPasses.includes('security-headers')) {
@@ -842,7 +848,7 @@ export async function analyzeProject(files, options = {}) {
842
848
  total_loc: totalLoc,
843
849
  analyzed_at: new Date().toISOString(),
844
850
  };
845
- return {
851
+ const projectAnalysis = {
846
852
  meta,
847
853
  files: fileAnalyses,
848
854
  type_hierarchy: crossFileResult.typeHierarchy,
@@ -850,6 +856,10 @@ export async function analyzeProject(files, options = {}) {
850
856
  taint_paths: crossFileResult.taintPaths,
851
857
  findings: [],
852
858
  };
859
+ if (crossFileResult.budgetExceeded) {
860
+ projectAnalysis.cross_file_budget_exceeded = true;
861
+ }
862
+ return projectAnalysis;
853
863
  }
854
864
  /** Derive a project name from the common root directory of the file paths. */
855
865
  function deriveProjectName(paths) {