circle-ir-ai 2.8.21 → 2.8.23

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 (2) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -5,6 +5,84 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.8.23] - 2026-06-16
9
+
10
+ ### Changed — bump `circle-ir` 3.49.0 → 3.50.0
11
+
12
+ Recall improvement for inline-source taint patterns. circle-ir#83
13
+ (subsumes #76) closes the cross-language false-negative class where
14
+ a taint source used inline as a call/concat argument was not
15
+ tracked — previously only an intermediate variable recovered the
16
+ flow:
17
+
18
+ - **Java**: `Runtime.getRuntime().exec("echo " + req.getParameter("u"))`
19
+ and `Runtime.getRuntime().exec(req.getParameter("u"))`
20
+ - **JavaScript/TypeScript**: `eval(req.query.x)`,
21
+ `vm.runInThisContext(req.cookies.c)`,
22
+ `child_process.exec(req.body.cmd)`
23
+ - **Python**: `os.system("echo " + request.args.get("u"))` plus
24
+ for-loop iterable patterns: `for p in request.args.getlist("p"):
25
+ os.system(p)` (closes the original cognium-dev#76)
26
+
27
+ Four upstream fixes combined: an inline-source colocation pass in
28
+ `taint-propagation-pass.ts`, Python for-loop iterable derivation
29
+ with virtual `http_param` anchor, loosened empty-source early
30
+ returns in `taint-propagation-pass.ts` / `interprocedural-pass.ts`,
31
+ and `canSourceReachSink` matrix expansion for JS RCE shapes
32
+ (`code_injection` valid sink for `http_param` / `http_query` /
33
+ `http_header` / `http_cookie`).
34
+
35
+ Expected impact: lifts the dominant recall gap on OWASP
36
+ BenchmarkPython, OWASP Benchmark Java with bare-arg variants, and
37
+ the JS `eval(req.query.x)` shape. Should be visible on
38
+ CWE-Bench-Java cmdi/code-injection runs as well.
39
+
40
+ No circle-ir-ai source change — dep-only bump to surface the
41
+ upstream recall fix to cognium-ai / circle-pack / mcp-server
42
+ consumers.
43
+
44
+ ## [2.8.22] - 2026-06-16
45
+
46
+ ### Changed — bump `circle-ir` 3.48.0 → 3.49.0
47
+
48
+ Pulls in upstream additive sink/pass coverage with no API surface
49
+ changes. Visible to cognium-ai users without any engine-side work:
50
+
51
+ - **`insecure-cookie` pattern pass for JavaScript/TypeScript (CWE-614,
52
+ circle-ir#43)** — scans `res.cookie(...)` / `reply.cookie(...)`
53
+ invocations for missing `secure: true` / `httpOnly: true` flags.
54
+ Pattern-based, no taint required. One finding per call site,
55
+ severity `medium`.
56
+ - **`log_injection` sinks for Java + JavaScript/TypeScript (CWE-117,
57
+ circle-ir#44)** — slf4j/logback `Logger.info`/`warn`/`error`/etc.
58
+ and `java.util.logging.Logger` for Java; `console.log`/`warn`/`error`/
59
+ `info`/`debug`/`trace` for JS/TS. Severity `low`.
60
+ - **`nosql_injection` (CWE-943) mongoose Model/Query fluent-chain
61
+ coverage (circle-ir#45)** — closes the gap where
62
+ `User.findOne({ username })` and friends didn't fire because the
63
+ receiver doesn't resolve to `Collection`. Adds `Model` /`Query`
64
+ class entries plus classless `findOne`/`updateOne`/`aggregate`/…
65
+ for JS/TS.
66
+ - **Classless `open_redirect` (CWE-601) entry for Express
67
+ `res.redirect()` (circle-ir#46)** — removes the receiver-type
68
+ resolution dependency for the Express response object.
69
+ - **Python `path_traversal` sanitizers for `os.path.realpath` and
70
+ `os.path.abspath` (circle-ir#48 pt 2)** — Python equivalents of
71
+ Java's `File.getCanonicalPath`; cuts the canonical-path FP class on
72
+ Python codebases.
73
+ - **Rust actix-web / axum typed extractors now produce taint flows
74
+ (circle-ir#71)** — three fixes in the upstream taint matcher /
75
+ language-sources / propagation passes so `web::Path<…>` /
76
+ `axum::extract::Path<…>` are recognised as sources, source `type`
77
+ is selected per extractor kind (`Form`/`Query`/`Path` →
78
+ `http_param`; `Json`/`Body`/`Bytes`/`Multipart` → `http_body`),
79
+ and source `variable` is attached so propagation can fire.
80
+ Mostly improves Rust HTTP framework detection (axum, actix-web).
81
+
82
+ No circle-ir-ai source change in this release — it's a dep-only bump
83
+ to surface the upstream additive coverage to cognium-ai / circle-pack
84
+ / mcp-server consumers.
85
+
8
86
  ## [2.8.21] - 2026-06-15
9
87
 
10
88
  ### Fixed — capability_mismatch severity inversion for over-declared capabilities (cognium-ai#100 Bug #2)
@@ -49,6 +127,35 @@ real vulnerability-bearing files). Test updated to assert the new
49
127
  default. No production behaviour change — `prepublishOnly` was
50
128
  blocking publish on the stale assertion.
51
129
 
130
+ ### Changed — bundled LLM throughput defaults (2026-06-14, undocumented in 2.8.20)
131
+
132
+ `src/llm/ax-client.ts` raised three defaults to match modern hosted
133
+ LLM headroom — committed alongside the 2.8.20 → 2.8.21 work but not
134
+ called out in 2.8.20's CHANGELOG. Recording here for traceability:
135
+
136
+ - `MAX_CODE_CONTEXT_LENGTH` `8000` → `32000` chars (env
137
+ `LLM_MAX_CODE_CONTEXT` overrides).
138
+ - `LLM_MAX_CONCURRENT` `5` → `10` (env override unchanged).
139
+ - `LLM_RATE_LIMIT` `10` → `20` req/s (env override unchanged).
140
+
141
+ Override individually via env to restore the previous limits on
142
+ constrained backends.
143
+
144
+ ### Changed — big-file / minified-shape skip guard (mastra swarm path)
145
+
146
+ `src/agents/mastra/swarm.ts` now short-circuits per-file analysis
147
+ when content exceeds `LLM_MAX_FILE_BYTES` (default 500 KB) or
148
+ matches a minified-shape heuristic (longest line > 5000 chars, or
149
+ avg line > 500 chars). Minified bundles (e.g. `mermaid.min.js` at
150
+ ~18k parse errors) and giant generated files (~140 kLOC AWS SDK
151
+ marshallers) thrash tree-sitter without producing useful findings;
152
+ skipping them up-front saves 30 s – 3 min per file vs hitting the
153
+ analysis timeout. Surfaced through the same `[SKIP]` stderr marker
154
+ introduced in cognium-ai#88. Also tightened LLM-mode timeout
155
+ defaults (`llmEnrichmentMs`/`llmVerificationMs` 60 s → 45 s,
156
+ `llmMaxMs` 180 s → 120 s) for fail-fast behaviour on real-world
157
+ mixes.
158
+
52
159
  ## [2.8.20] - 2026-06-13
53
160
 
54
161
  ### Changed — circle-ir 3.39.0 → 3.48.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "circle-ir-ai",
3
- "version": "2.8.21",
3
+ "version": "2.8.23",
4
4
  "description": "LLM-enhanced SAST analysis built on circle-ir",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -94,7 +94,7 @@
94
94
  "dependencies": {
95
95
  "@ax-llm/ax": "^20.0.0",
96
96
  "@mastra/core": "^1.18.0",
97
- "circle-ir": "3.48.0",
97
+ "circle-ir": "3.50.0",
98
98
  "minimatch": "^10.2.5",
99
99
  "p-queue": "^9.1.0"
100
100
  },