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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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
|
|
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
|
|
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
|
|
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
|
|
194
|
-
maxTargets
|
|
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.
|
|
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.
|
|
100
|
+
"circle-ir": "3.146.0",
|
|
101
101
|
"minimatch": "^10.2.5",
|
|
102
102
|
"p-queue": "^9.1.0"
|
|
103
103
|
},
|