circle-ir-ai 2.30.0 → 2.32.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 (39) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/dist/agents/mastra/steps.d.ts +3 -3
  3. package/dist/agents/mastra/swarm.d.ts.map +1 -1
  4. package/dist/agents/mastra/swarm.js +277 -238
  5. package/dist/agents/mastra/swarm.js.map +1 -1
  6. package/dist/agents/mastra/workflow.d.ts.map +1 -1
  7. package/dist/agents/mastra/workflow.js +8 -0
  8. package/dist/agents/mastra/workflow.js.map +1 -1
  9. package/dist/index.d.ts +4 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +9 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/llm/ax-client.d.ts.map +1 -1
  14. package/dist/llm/ax-client.js +26 -2
  15. package/dist/llm/ax-client.js.map +1 -1
  16. package/dist/llm/call-limiter.d.ts +125 -0
  17. package/dist/llm/call-limiter.d.ts.map +1 -0
  18. package/dist/llm/call-limiter.js +218 -0
  19. package/dist/llm/call-limiter.js.map +1 -0
  20. package/dist/llm/call-logger.d.ts +14 -0
  21. package/dist/llm/call-logger.d.ts.map +1 -1
  22. package/dist/llm/call-logger.js.map +1 -1
  23. package/dist/llm/file-splitter.d.ts +129 -0
  24. package/dist/llm/file-splitter.d.ts.map +1 -0
  25. package/dist/llm/file-splitter.js +161 -0
  26. package/dist/llm/file-splitter.js.map +1 -0
  27. package/dist/llm/index.d.ts +1 -0
  28. package/dist/llm/index.d.ts.map +1 -1
  29. package/dist/llm/index.js +2 -0
  30. package/dist/llm/index.js.map +1 -1
  31. package/dist/llm/token-estimator.d.ts +36 -0
  32. package/dist/llm/token-estimator.d.ts.map +1 -0
  33. package/dist/llm/token-estimator.js +48 -0
  34. package/dist/llm/token-estimator.js.map +1 -0
  35. package/dist/llm/verification.d.ts +11 -0
  36. package/dist/llm/verification.d.ts.map +1 -1
  37. package/dist/llm/verification.js +39 -3
  38. package/dist/llm/verification.js.map +1 -1
  39. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -5,6 +5,200 @@ 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.32.0] - 2026-07-02
9
+
10
+ ### Added — LLM call throttle + hard cap (cognium-ai#159 + #160, Sprint L4a)
11
+
12
+ Ships the LLM call-throttle escape hatch and the per-scan / per-file
13
+ hard cap. Both are opt-in through env vars — with everything unset the
14
+ runtime behavior is identical to `2.31.1`, so this is additive by
15
+ default. Coordinated with `cognium-ai@2.27.0` (doc-only companion).
16
+
17
+ **cognium-ai#159 — `LLM_CONCURRENCY` alias.**
18
+ `src/llm/ax-client.ts` already ran every LLM call through a shared
19
+ `p-queue` with concurrency read from `LLM_MAX_CONCURRENT` (default
20
+ `10`). The ticket's premise — "LLM calls appear fully serial" —
21
+ turned out to be a naming/discoverability problem rather than a
22
+ missing throttle. The fix is a rename with backward-compat:
23
+
24
+ - **New env var:** `LLM_CONCURRENCY` (positive integer). Preferred
25
+ name going forward.
26
+ - **Legacy env var:** `LLM_MAX_CONCURRENT` continues to work; still
27
+ read when `LLM_CONCURRENCY` is unset. No deprecation warning.
28
+ - **Precedence:** `LLM_CONCURRENCY` > `LLM_MAX_CONCURRENT` > default
29
+ `10`. Both unset preserves the pre-2.32 behavior exactly.
30
+ - **Recommended values:** `4–8` for Ollama, `16+` for cloud
31
+ providers. The default `10` is intentionally conservative.
32
+
33
+ **cognium-ai#160 — `LLM_MAX_CALLS_PER_SCAN` + `LLM_MAX_CALLS_PER_FILE`.**
34
+ New module `src/llm/call-limiter.ts` provides a global counter that
35
+ gates every call at the transport boundary in `chatJSON`. When either
36
+ cap is reached, subsequent calls short-circuit to `null` and the
37
+ caller sees the same "LLM disabled" semantics that already exist for
38
+ provider outages and prefilter rejections (`{ llmSources: [],
39
+ llmSinks: [] }` / `{ verified: [], ... }`). No per-caller changes
40
+ were required.
41
+
42
+ New env vars, all default unset (unbounded, matches `2.31.1`
43
+ behavior):
44
+ - `LLM_MAX_CALLS_PER_SCAN` — total LLM calls per scan.
45
+ - `LLM_MAX_CALLS_PER_FILE` — per-file budget. Independent per file;
46
+ a fresh budget is allocated the first time each file appears in
47
+ the `filePath` context.
48
+
49
+ Behavior on cap-hit:
50
+ 1. Counter is incremented on **acquire**, not on completion, so
51
+ concurrent p-queue firing cannot overshoot the cap.
52
+ 2. Scan cap emits a single `console.warn` (`[call-limit]
53
+ LLM_MAX_CALLS_PER_SCAN=<n> reached; remaining LLM calls skipped,
54
+ files fall back to static-only`). Subsequent skips are silent.
55
+ Per-file cap is silent by design (would spam on large repos).
56
+ 3. Retries inside an already-admitted call bypass the gate
57
+ (`retryCount > 0`), so a retried request does not re-acquire
58
+ budget.
59
+ 4. A synthetic "no-call" JSONL row is written for every skipped call
60
+ with `skippedByCap: true` and `skippedCapReason: 'scan' | 'file'`,
61
+ following the existing `skippedByPrefilter` / `verifyCacheHit`
62
+ pattern. `analyze-llm-log.ts` in cognium-ai already surfaces
63
+ these rows.
64
+
65
+ **Per-scan isolation.** `analyzeFilesSwarm`,
66
+ `analyzeFilesSwarmStream`, and `analyzeFilesInBatches` in
67
+ `src/agents/mastra/swarm.ts` bracket their work with
68
+ `resetLLMCallLimiter(true)` + `markSwarmStart()` on entry, and
69
+ `markSwarmEnd()` in a `finally` block. `analyzeFile` in
70
+ `src/agents/mastra/workflow.ts` calls the unforced
71
+ `resetLLMCallLimiter()`, which is a no-op while a swarm is
72
+ orchestrating — this keeps the per-scan budget intact across
73
+ swarm-nested single-file callers while still resetting for
74
+ standalone single-file invocations.
75
+
76
+ **New exports (also re-exported from `./llm/index.js`):**
77
+ - `checkAndCountCall(ctx?)` — the gate itself. Returns `true` when
78
+ admitted, `false` when either cap fires.
79
+ - `resetLLMCallLimiter(force?)` — swarm-guarded by default; `force`
80
+ bypasses the guard (test hook + swarm-entry use).
81
+ - `markSwarmStart()` / `markSwarmEnd()` — bracket a swarm run to
82
+ suppress nested per-file resets.
83
+ - `getLLMCallStats()` — snapshot for tail summaries: `scanCounter`,
84
+ `scanSkipped`, `perFileSkipped`, `scanCapWarned`,
85
+ `resolvedConcurrency`, `resolvedScanCap`, `resolvedFileCap`.
86
+ - Consts: `LLM_CONCURRENCY`, `LLM_MAX_CALLS_PER_SCAN`,
87
+ `LLM_MAX_CALLS_PER_FILE`.
88
+
89
+ **Rollback:** unset all three env vars → pre-2.32 behavior. The
90
+ fast path in `checkAndCountCall` bails before any allocation when
91
+ both caps are `null`, so there is zero overhead on the default path.
92
+
93
+ **Tests.** New `tests/llm/call-limiter.test.ts` — 8 tests covering
94
+ default unbounded path, scan cap admit/skip counts, WARN
95
+ emit-exactly-once, per-file independent budgets, reset semantics,
96
+ swarm-guard interaction, env-var precedence (new name > legacy >
97
+ default), and scan-cap-precedes-per-file-cap ordering. Full engine
98
+ suite: 1204 pass + 3 skipped (was 1196 pass + 3 skipped on 2.31.1;
99
+ +8 from this ticket).
100
+
101
+ ## [2.31.1] - 2026-07-02
102
+
103
+ ### Changed — circle-ir bump 3.139.0 → 3.144.0 (patch, dep-only)
104
+
105
+ Refresh the pinned `circle-ir` dependency to the current published
106
+ version. Rolls up the 3.140/3.141/3.144 releases (3.142 and 3.143
107
+ were unpublished). No engine or public-API changes in this package.
108
+
109
+ **Test update.** `tests/findings-llm-discovery.test.ts` — the
110
+ "drops type-incompatible LLM pairs via canSourceReachSink gate" case
111
+ previously used `http_param → deserialization` as its incompatible
112
+ example. Upstream circle-ir Sprint 93 / cognium-dev#189 legitimately
113
+ widened `http_param` to include `deserialization` for
114
+ SnakeYAML/Jackson-shape gadget chains (Log4Shell shape). The test now
115
+ uses `env_input → xss` — server-side env vars still cannot reach
116
+ browser DOM contexts, so this pair remains outside the coverage matrix
117
+ and the assertion still exercises the intended gate. This is a
118
+ test-fixture correction, not a behavior change.
119
+
120
+ Suite: 1196 pass + 3 skipped (was 1196 pass + 3 skipped on 3.139.0).
121
+
122
+ ## [2.31.0] - 2026-07-01
123
+
124
+ ### Added — large-repo architectural knobs (cognium-ai#165 + #166 L3)
125
+
126
+ Third wave of the large-repo readiness umbrella (cognium-ai#174) —
127
+ architectural changes to the verifier's batch-packing loop plus a new
128
+ sliding-window file-splitter primitive. Coordinated with
129
+ `cognium-ai@2.26.0`. All additions are opt-in through env vars or
130
+ splitter/merge helpers exposed as new public API; existing behavior is
131
+ unchanged when the new knobs are unset.
132
+
133
+ **cognium-ai#165 L3 — Token-count-aware verifier batch packing.**
134
+ `src/llm/verification.ts` now sizes each verifier batch by the greater
135
+ of two constraints: the legacy pair-count cap (`CP_VERIFICATION_CHUNK_SIZE`
136
+ / `LLM_MAX_PAIRS_PER_CHUNK`) AND a new estimated-tokens budget
137
+ (`CP_VERIFY_TOKEN_BUDGET`, default `12_000`). When the estimated tokens
138
+ for a batch would exceed the budget, the effective pair cap shrinks to
139
+ `floor(totalPairs × budget/estimate)` and a `↻ verification: token-budget
140
+ split` log line is emitted so operators can trace splits.
141
+
142
+ New env var and export:
143
+ - `CP_VERIFY_TOKEN_BUDGET` — integer, default `12_000`. Falls back to
144
+ the default on `0`, negative, or non-numeric input.
145
+ - `VERIFY_TOKEN_BUDGET` — const, exported for tooling / tests.
146
+
147
+ **cognium-ai#165 L3 — Rough token estimator.**
148
+ New module `src/llm/token-estimator.ts` exports `estimateTokens(text)`
149
+ using a `chars * TOKENS_PER_CHAR` heuristic (default `0.25`, i.e. ~4
150
+ chars/token). Used by the verifier batch packing (above) and available
151
+ for reuse by the file-splitter and any future budget-packing callers.
152
+ Rough by design — within ±15% for source code, no `js-tiktoken`
153
+ dependency, per-provider drift absorbed by the batch's WARN-on-split
154
+ fallback.
155
+
156
+ New env var and exports:
157
+ - `CP_TOKENS_PER_CHAR` — float, default `0.25`. Falls back to the
158
+ default on `0`, negative, or non-numeric input.
159
+ - `estimateTokens`, `TOKENS_PER_CHAR`, `TOKENS_PER_CHAR_DEFAULT` — all
160
+ from `./llm/token-estimator.js`, also re-exported from the package
161
+ root.
162
+
163
+ **cognium-ai#166 L3 — Sliding-window file-splitter primitive.**
164
+ New module `src/llm/file-splitter.ts` exports
165
+ `splitFileForVerification(code, opts)` and `mergeChunkedFindings(list)`.
166
+ The splitter walks line boundaries, greedily accumulating lines until
167
+ adding one more would exceed the byte budget, then advances the cursor
168
+ by `(chunkLength − overlap)` so adjacent chunks share a configurable
169
+ overlap region (default 10%). Files exceeding the chunk cap
170
+ (`CP_VERIFY_MAX_CHUNKS_PER_FILE`, default `4`) have their tail dropped
171
+ and a `⚠ file-splitter: file exceeded maxChunks` log line is emitted
172
+ with the skipped-line count — prevents verifier cost explosion on
173
+ generated 50K-line files.
174
+
175
+ The merge helper dedupes findings emitted across chunks by
176
+ `(cwe, sinkLine, sourceLine, snippetHash)` — first-seen wins, so
177
+ findings discovered in the overlap region don't inflate the count when
178
+ the caller has already rebased chunk-local line numbers to the
179
+ original file (using each chunk's `startLine` / `endLine`).
180
+
181
+ This lands the primitive only; workflow integration (auto-split when
182
+ `estimateTokens(fileCode) > CP_MAX_CODE_CONTEXT`) is deferred to a
183
+ follow-up so the L3 PR stays reviewable.
184
+
185
+ New env vars and exports:
186
+ - `CP_CHUNK_OVERLAP_RATIO` — float, default `0.1`. Falls back to the
187
+ default on `0`, negative, or non-numeric input.
188
+ - `CP_VERIFY_MAX_CHUNKS_PER_FILE` — integer, default `4`.
189
+ - `splitFileForVerification`, `mergeChunkedFindings`,
190
+ `CHUNK_OVERLAP_RATIO_DEFAULT`, `VERIFY_MAX_CHUNKS_PER_FILE_DEFAULT`,
191
+ and types `FileChunk` / `SplitResult` / `SplitOptions` /
192
+ `ChunkedFinding` — all from `./llm/file-splitter.js`, also
193
+ re-exported from the package root.
194
+
195
+ **Rollback:** every L3 env var can be pinned to its legacy-equivalent
196
+ value (`CP_VERIFY_TOKEN_BUDGET=1_000_000` effectively disables the
197
+ budget split, `CP_VERIFY_MAX_CHUNKS_PER_FILE=1` disables the splitter's
198
+ overlap regime, `CP_CHUNK_OVERLAP_RATIO=0` disables overlap between
199
+ splits). No existing consumer path is affected until it opts into the
200
+ new splitter/merge API.
201
+
8
202
  ## [2.30.0] - 2026-07-01
9
203
 
10
204
  ### Added — large-repo config knobs (cognium-ai#177 L2)
@@ -5,8 +5,8 @@
5
5
  * createStep() API with Zod schemas for type safety.
6
6
  */
7
7
  export declare const patternMatchStep: import("@mastra/core/workflows").Step<"pattern-match", unknown, {
8
- sourceCode: string;
9
8
  filePath: string;
9
+ sourceCode: string;
10
10
  language?: string | undefined;
11
11
  }, {
12
12
  imports: string[];
@@ -40,9 +40,9 @@ export declare const patternMatchStep: import("@mastra/core/workflows").Step<"pa
40
40
  }[];
41
41
  }, unknown, unknown, import("@mastra/core/workflows").DefaultEngineType, unknown>;
42
42
  export declare const enrichStep: import("@mastra/core/workflows").Step<"enrich", unknown, {
43
+ filePath: string;
43
44
  imports: string[];
44
45
  sourceCode: string;
45
- filePath: string;
46
46
  patternSources: {
47
47
  type: string;
48
48
  line: number;
@@ -160,8 +160,8 @@ export declare const mergeStep: import("@mastra/core/workflows").Step<"merge", u
160
160
  }[];
161
161
  }, unknown, unknown, import("@mastra/core/workflows").DefaultEngineType, unknown>;
162
162
  export declare const verifyStep: import("@mastra/core/workflows").Step<"verify", unknown, {
163
- sourceCode: string;
164
163
  filePath: string;
164
+ sourceCode: string;
165
165
  types: {
166
166
  kind: "class" | "interface" | "enum";
167
167
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../../src/agents/mastra/swarm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,SAAS,EAAyB,MAAM,2BAA2B,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA4CrD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,GAAG,EAAE,CAAC;IACvB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,uBAAuB,EAAE,MAAM,CAAC;QAChC,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oBAAoB,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtE,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE/B,KAAK,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAExD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,wBAAwB,EAAE,MAAM,CAAC;QACjC,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA2CD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAI/E;AACD,eAAO,MAAM,oBAAoB,oBAAwD,CAAC;AAC1F,eAAO,MAAM,oBAAoB,oBAAwD,CAAC;AAiL1F;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CA8JtB;AAED;;;GAGG;AACH,wBAAuB,uBAAuB,CAC5C,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE,YAAY,GACrB,cAAc,CAAC;IAChB,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,MAAM,CAAC;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;CACnC,CAAC,CAqHD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE,YAAY,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,WAAW,CAAC,CA6CtB;AAGD,eAAO,MAAM,qBAAqB;;;;;CAKjC,CAAC;AAMF;;;GAGG;AACH,wBAAuB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAWvF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAMjF;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAwBjG"}
1
+ {"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../../src/agents/mastra/swarm.ts"],"names":[],"mappings":"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"}