circle-ir-ai 2.33.0 → 2.33.2

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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,33 @@ 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.33.1] - 2026-07-02
9
+
10
+ ### Fixed — Restore CWE-078 detection via `circle-ir` upgrade (cognium-ai#184)
11
+
12
+ Upgrades `circle-ir` dep `3.144.0 → 3.145.0` to close the CWE-078 regression
13
+ surfaced by the Sprint L5c CWE-Bench-Java gate. Baseline `86.7%` (104/120,
14
+ 2026-06-23 on `3.90.0`) had dropped to `84.2%` (101/120) on `3.144.0`, with
15
+ the CWE-078 sub-bucket falling `12/13 → 9/13`. Three CVEs regressed to
16
+ `[MISSED]` — all XStream/deserialization or Docker credential-URL shapes:
17
+
18
+ - **CVE-2020-26217** — `x-stream/xstream_1.4.14-java7`, `XStream.setupSecurity`
19
+ - **CVE-2021-21345** — `x-stream/xstream_1.4.15`, `XStream.setupSecurity`
20
+ - **CVE-2022-20617** — `jenkinsci/docker-commons-plugin_1.17`,
21
+ `DockerRegistryEndpoint.imageName`
22
+
23
+ Root cause is in the `circle-ir` engine's static layer — the CWE-Bench-Java
24
+ runner calls `analyze()` directly, so the L5c cluster wiring is off the code
25
+ path (confirmed by attribution work at the end of the L5c ship). Upstream
26
+ hotfix landed in `circle-ir@3.145.0` (published `latest` on 2026-07-02).
27
+
28
+ ### Added — CWE-078 regression fixture
29
+
30
+ - `tests/regression/cwe-078-xstream.test.ts` — pins expected detection of
31
+ `command_injection`/`code_injection` sinks on a minimal XStream
32
+ `setupSecurity` shape. Runs against the pinned npm `circle-ir` so future
33
+ drift is caught in `npm test`, not in the 30-minute benchmark run.
34
+
8
35
  ## [2.33.0] - 2026-07-02
9
36
 
10
37
  ### Added — Cluster emission + policy wiring (cognium-ai#154, Sprint L5c; closes epic #155)
@@ -53,7 +53,7 @@ export declare const enrichmentAgent: Agent<"enrichment-agent", {
53
53
  argPositions: number[];
54
54
  }[];
55
55
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "discover-sinks", unknown>;
56
- }, undefined, unknown>;
56
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
57
57
  /**
58
58
  * Verification Agent
59
59
  *
@@ -81,7 +81,7 @@ export declare const verificationAgent: Agent<"verification-agent", {
81
81
  sanitizersFound: string[];
82
82
  attackVector: string;
83
83
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "verify-vulnerability", unknown>;
84
- }, undefined, unknown>;
84
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
85
85
  /**
86
86
  * Cross-File Analysis Agent
87
87
  *
@@ -108,7 +108,7 @@ export declare const crossFileAgent: Agent<"cross-file-agent", {
108
108
  flowType: "direct" | "transitive" | "conditional";
109
109
  }[];
110
110
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "cross-file-taint", unknown>;
111
- }, undefined, unknown>;
111
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
112
112
  /**
113
113
  * Orchestrator Agent
114
114
  *
@@ -196,7 +196,7 @@ export declare const orchestratorAgent: Agent<"orchestrator-agent", {
196
196
  flowType: "direct" | "transitive" | "conditional";
197
197
  }[];
198
198
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "cross-file-taint", unknown>;
199
- }, undefined, unknown>;
199
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
200
200
  export declare const agents: {
201
201
  enrichment: Agent<"enrichment-agent", {
202
202
  classifyRole: import("@mastra/core/tools").Tool<{
@@ -240,7 +240,7 @@ export declare const agents: {
240
240
  argPositions: number[];
241
241
  }[];
242
242
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "discover-sinks", unknown>;
243
- }, undefined, unknown>;
243
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
244
244
  verification: Agent<"verification-agent", {
245
245
  verifyVulnerability: import("@mastra/core/tools").Tool<{
246
246
  cwe: string;
@@ -262,7 +262,7 @@ export declare const agents: {
262
262
  sanitizersFound: string[];
263
263
  attackVector: string;
264
264
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "verify-vulnerability", unknown>;
265
- }, undefined, unknown>;
265
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
266
266
  crossFile: Agent<"cross-file-agent", {
267
267
  crossFileTaint: import("@mastra/core/tools").Tool<{
268
268
  sourceCode: string;
@@ -284,7 +284,7 @@ export declare const agents: {
284
284
  flowType: "direct" | "transitive" | "conditional";
285
285
  }[];
286
286
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "cross-file-taint", unknown>;
287
- }, undefined, unknown>;
287
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
288
288
  orchestrator: Agent<"orchestrator-agent", {
289
289
  classifyRole: import("@mastra/core/tools").Tool<{
290
290
  className: string;
@@ -367,7 +367,7 @@ export declare const agents: {
367
367
  flowType: "direct" | "transitive" | "conditional";
368
368
  }[];
369
369
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "cross-file-taint", unknown>;
370
- }, undefined, unknown>;
370
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
371
371
  };
372
372
  export default agents;
373
373
  //# sourceMappingURL=agents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/agents/mastra/agents.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AA8N3C;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA2B1B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;sBAyB5B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;sBAqBzB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA0B5B,CAAC;AAMH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKlB,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/agents/mastra/agents.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AA8N3C;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kFA2B1B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;kFAyB5B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;kFAqBzB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kFA0B5B,CAAC;AAMH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKlB,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -62,7 +62,7 @@ export declare function createMastraInstance(options?: MastraInstanceOptions): {
62
62
  argPositions: number[];
63
63
  }[];
64
64
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "discover-sinks", unknown>;
65
- }, undefined, unknown>;
65
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
66
66
  verification: import("@mastra/core/agent").Agent<"verification-agent", {
67
67
  verifyVulnerability: import("@mastra/core/tools").Tool<{
68
68
  cwe: string;
@@ -84,7 +84,7 @@ export declare function createMastraInstance(options?: MastraInstanceOptions): {
84
84
  sanitizersFound: string[];
85
85
  attackVector: string;
86
86
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "verify-vulnerability", unknown>;
87
- }, undefined, unknown>;
87
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
88
88
  crossFile: import("@mastra/core/agent").Agent<"cross-file-agent", {
89
89
  crossFileTaint: import("@mastra/core/tools").Tool<{
90
90
  sourceCode: string;
@@ -106,7 +106,7 @@ export declare function createMastraInstance(options?: MastraInstanceOptions): {
106
106
  flowType: "direct" | "transitive" | "conditional";
107
107
  }[];
108
108
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "cross-file-taint", unknown>;
109
- }, undefined, unknown>;
109
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
110
110
  orchestrator: import("@mastra/core/agent").Agent<"orchestrator-agent", {
111
111
  classifyRole: import("@mastra/core/tools").Tool<{
112
112
  className: string;
@@ -189,8 +189,8 @@ export declare function createMastraInstance(options?: MastraInstanceOptions): {
189
189
  flowType: "direct" | "transitive" | "conditional";
190
190
  }[];
191
191
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "cross-file-taint", unknown>;
192
- }, undefined, unknown>;
193
- }, Record<string, import("@mastra/core/workflows").AnyWorkflow>, Record<string, import("@mastra/core/vector").MastraVector<any>>, Record<string, import("@mastra/core/tts").MastraTTS>, import("@mastra/core/logger").IMastraLogger, Record<string, import("@mastra/core/mcp").MCPServerBase<any>>, Record<string, import("@mastra/core/evals").MastraScorer<any, any, any, any>>, Record<string, import("@mastra/core/tools").ToolAction<any, any, any, any, any, any, unknown>>, Record<string, import("@mastra/core/processors").Processor<any, unknown>>, Record<string, import("@mastra/core/memory").MastraMemory>>;
192
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
193
+ }, Record<string, import("@mastra/core/workflows").AnyWorkflow>, Record<string, import("@mastra/core/vector").MastraVector<any>>, Record<string, import("@mastra/core/tts").MastraTTS>, import("@mastra/core/logger").IMastraLogger, Record<string, import("@mastra/core/mcp").MCPServerBase<any>>, Record<string, import("@mastra/core/evals").MastraScorer<any, any, any, any>>, Record<string, import("@mastra/core/tools").ToolAction<any, any, any, any, any, any, unknown>>, Record<string, import("@mastra/core/processors").Processor<any, unknown>>, Record<string, import("@mastra/core/memory").MastraMemory>, Record<string, import("@mastra/core/channels").ChannelProvider>>;
194
194
  agents: {
195
195
  enrichment: import("@mastra/core/agent").Agent<"enrichment-agent", {
196
196
  classifyRole: import("@mastra/core/tools").Tool<{
@@ -234,7 +234,7 @@ export declare function createMastraInstance(options?: MastraInstanceOptions): {
234
234
  argPositions: number[];
235
235
  }[];
236
236
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "discover-sinks", unknown>;
237
- }, undefined, unknown>;
237
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
238
238
  verification: import("@mastra/core/agent").Agent<"verification-agent", {
239
239
  verifyVulnerability: import("@mastra/core/tools").Tool<{
240
240
  cwe: string;
@@ -256,7 +256,7 @@ export declare function createMastraInstance(options?: MastraInstanceOptions): {
256
256
  sanitizersFound: string[];
257
257
  attackVector: string;
258
258
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "verify-vulnerability", unknown>;
259
- }, undefined, unknown>;
259
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
260
260
  crossFile: import("@mastra/core/agent").Agent<"cross-file-agent", {
261
261
  crossFileTaint: import("@mastra/core/tools").Tool<{
262
262
  sourceCode: string;
@@ -278,7 +278,7 @@ export declare function createMastraInstance(options?: MastraInstanceOptions): {
278
278
  flowType: "direct" | "transitive" | "conditional";
279
279
  }[];
280
280
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "cross-file-taint", unknown>;
281
- }, undefined, unknown>;
281
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
282
282
  orchestrator: import("@mastra/core/agent").Agent<"orchestrator-agent", {
283
283
  classifyRole: import("@mastra/core/tools").Tool<{
284
284
  className: string;
@@ -361,7 +361,7 @@ export declare function createMastraInstance(options?: MastraInstanceOptions): {
361
361
  flowType: "direct" | "transitive" | "conditional";
362
362
  }[];
363
363
  }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, "cross-file-taint", unknown>;
364
- }, undefined, unknown>;
364
+ }, undefined, unknown, import("@mastra/core/agent").AgentEditorConfig | undefined>;
365
365
  };
366
366
  analyzeFile: typeof analyzeFile;
367
367
  analyzeFileStream: typeof analyzeFileStream;
@@ -7,7 +7,7 @@
7
7
  export declare const patternMatchStep: import("@mastra/core/workflows").Step<"pattern-match", unknown, {
8
8
  filePath: string;
9
9
  sourceCode: string;
10
- language?: string | undefined;
10
+ language: string;
11
11
  }, {
12
12
  imports: string[];
13
13
  patternSources: {
@@ -71,7 +71,7 @@ export declare const enrichStep: import("@mastra/core/workflows").Step<"enrich",
71
71
  methods?: any[] | undefined;
72
72
  fields?: any[] | undefined;
73
73
  }[];
74
- enableEnrichment?: boolean | undefined;
74
+ enableEnrichment: boolean;
75
75
  }, {
76
76
  processingTimeMs: number;
77
77
  enrichmentResult: {
@@ -138,7 +138,7 @@ export declare const mergeStep: import("@mastra/core/workflows").Step<"merge", u
138
138
  reasoning: string;
139
139
  } | undefined;
140
140
  } | null;
141
- confidenceThreshold?: number | undefined;
141
+ confidenceThreshold: number;
142
142
  }, {
143
143
  mergedSources: {
144
144
  type: string;
@@ -190,8 +190,8 @@ export declare const verifyStep: import("@mastra/core/workflows").Step<"verify",
190
190
  argPositions?: number[] | undefined;
191
191
  location?: string | undefined;
192
192
  }[];
193
- enableVerification?: boolean | undefined;
194
- maxTargets?: number | undefined;
193
+ enableVerification: boolean;
194
+ maxTargets: number;
195
195
  }, {
196
196
  processingTimeMs: number;
197
197
  verificationResults: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "circle-ir-ai",
3
- "version": "2.33.0",
3
+ "version": "2.33.2",
4
4
  "description": "LLM-enhanced SAST analysis built on circle-ir",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -97,7 +97,7 @@
97
97
  "@ax-llm/ax": "^20.0.0",
98
98
  "@cognium/project-profile-detect": "^1.1.0",
99
99
  "@mastra/core": "^1.18.0",
100
- "circle-ir": "3.144.0",
100
+ "circle-ir": "3.146.0",
101
101
  "minimatch": "^10.2.5",
102
102
  "p-queue": "^9.1.0"
103
103
  },