@clear-capabilities/agentic-security-scanner 0.193.0 → 0.194.1
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 +21 -0
- package/dist/agentic-security.mjs +9 -9
- package/dist/agentic-security.mjs.sha256 +1 -1
- package/dist/{e29b6f93be53390f2671.json → d5d8dfd7571b07827d1d.json} +6 -6
- package/package.json +6 -6
- package/src/posture/proof-fabric/container.js +9 -4
- package/src/posture/proof-fabric/runner.js +7 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
7d24338be81b56ab61e4657a2e9dd905de078c94b29e6f74d2a972a239c57f1b agentic-security.mjs
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clear-capabilities/agentic-security-scanner",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.194.1",
|
|
4
4
|
"description": "Scanner engine for the agentic-security Claude Code plugin: SAST, SCA with reachability and CISA KEV, secrets, IaC, Haskell and Nix/NixOS, prompt-injection, MCP/agent-tool audit, authZ analysis, SBOM, compliance attestation, and more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"node": ">=24.0.0"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@babel/core": "^8.0.
|
|
43
|
+
"@babel/core": "^8.0.10",
|
|
44
44
|
"@babel/preset-react": "^8.0.1",
|
|
45
45
|
"@babel/preset-typescript": "^8.0.1",
|
|
46
46
|
"js-yaml": "^5.5.0",
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"optionalDependencies": {
|
|
50
50
|
"tree-sitter-wasms": "0.1.13",
|
|
51
51
|
"web-tree-sitter": "0.20.8",
|
|
52
|
-
"z3-solver": "^5.3.
|
|
52
|
+
"z3-solver": "^5.3.3"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@types/node": "^26.6.
|
|
55
|
+
"@types/node": "^26.6.6",
|
|
56
56
|
"@vercel/ncc": "^0.45.0",
|
|
57
57
|
"java-parser": "^3.0.1"
|
|
58
58
|
},
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"ee:runtime-audit": "node ../scripts/engineering-excellence/runtime-audit.mjs",
|
|
80
80
|
"ee:ir-matrix": "node ../scripts/engineering-excellence/ir-matrix.mjs",
|
|
81
81
|
"test:loop-real-prd": "node --test ../scripts/loop-engineering/test/loop-real-prd.test.js",
|
|
82
|
-
"test:loop": "node --test --test-concurrency=
|
|
82
|
+
"test:loop": "node --test --test-concurrency=3 ../scripts/loop-engineering/test/loop-manifest.test.js ../scripts/loop-engineering/test/loop-watchdog.test.js ../scripts/loop-engineering/test/loop-background.test.js ../scripts/loop-engineering/test/loop-dashboard.test.js ../scripts/loop-engineering/test/loop-evidence.test.js ../scripts/loop-engineering/test/loop-recovery.test.js ../scripts/loop-engineering/test/loop-remote.test.js ../scripts/loop-engineering/test/loop-runbook.test.js ../scripts/loop-engineering/test/loop-assurance-profile.test.js ../scripts/loop-engineering/test/loop-assurance-runtime.test.js ../scripts/loop-engineering/test/loop-bounds.test.js ../scripts/loop-engineering/test/loop-spend.test.js ../scripts/loop-engineering/test/loop-ci-attest.test.js",
|
|
83
83
|
"test:python": "node ../scripts/run-python-tests.mjs",
|
|
84
84
|
"bench:dag-incremental": "node ../bench/dag-incremental/run.mjs",
|
|
85
85
|
"test:smoke": "node --test test/smoke.test.js test/demo-app.test.js",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"evaluation": "node ../scripts/evaluation.mjs",
|
|
119
119
|
"evaluation:synthetic": "node ../scripts/evaluation.mjs synthetic",
|
|
120
120
|
"test:routing": "node --test test/routing/outcomes.test.js test/routing/economics.test.js test/routing/adapter.test.js test/routing/calibration.test.js test/routing/decide.test.js test/routing/unchanged-when-off.test.js test/routing/shadow.test.js test/routing/promotion.test.js test/routing/drift.test.js test/routing/canary.test.js test/routing/feedback.test.js test/routing/report.test.js",
|
|
121
|
-
"test:release-closure": "node --test test/release-closure/closure-plan.test.js test/release-closure/closure-record.test.js test/release-closure/compatibility.test.js test/release-closure/rollout-stages.test.js test/release-closure/migration-readers.test.js test/release-closure/rollback.test.js test/release-closure/wrappers.test.js test/release-closure/final-closure.test.js test/release-closure/final-closure-controller.test.js test/release-closure/runner-hardening.test.js test/release-closure/remote-attestation.test.js",
|
|
121
|
+
"test:release-closure": "node --test test/release-closure/closure-plan.test.js test/release-closure/closure-record.test.js test/release-closure/compatibility.test.js test/release-closure/rollout-stages.test.js test/release-closure/migration-readers.test.js test/release-closure/rollback.test.js test/release-closure/wrappers.test.js test/release-closure/final-closure.test.js test/release-closure/final-closure-controller.test.js test/release-closure/runner-hardening.test.js test/release-closure/remote-attestation.test.js test/release-closure/closure-parallel.test.js",
|
|
122
122
|
"release:closure:check": "node ../scripts/release-closure.mjs --run",
|
|
123
123
|
"release:closure:static": "node ../scripts/release-closure.mjs --static",
|
|
124
124
|
"test:documentation": "node --test test/documentation/drift-check.test.js test/documentation/generated-pages.test.js test/documentation/scope-and-examples.test.js test/documentation/policy-cards.test.js test/documentation/operations-and-review.test.js",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clear-capabilities/agentic-security-scanner",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.194.1",
|
|
4
4
|
"description": "Scanner engine for the agentic-security Claude Code plugin: SAST, SCA with reachability and CISA KEV, secrets, IaC, Haskell and Nix/NixOS, prompt-injection, MCP/agent-tool audit, authZ analysis, SBOM, compliance attestation, and more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"node": ">=24.0.0"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@babel/core": "^8.0.
|
|
43
|
+
"@babel/core": "^8.0.10",
|
|
44
44
|
"@babel/preset-react": "^8.0.1",
|
|
45
45
|
"@babel/preset-typescript": "^8.0.1",
|
|
46
46
|
"js-yaml": "^5.5.0",
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"optionalDependencies": {
|
|
50
50
|
"tree-sitter-wasms": "0.1.13",
|
|
51
51
|
"web-tree-sitter": "0.20.8",
|
|
52
|
-
"z3-solver": "^5.3.
|
|
52
|
+
"z3-solver": "^5.3.3"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@types/node": "^26.6.
|
|
55
|
+
"@types/node": "^26.6.6",
|
|
56
56
|
"@vercel/ncc": "^0.45.0",
|
|
57
57
|
"java-parser": "^3.0.1"
|
|
58
58
|
},
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"ee:runtime-audit": "node ../scripts/engineering-excellence/runtime-audit.mjs",
|
|
80
80
|
"ee:ir-matrix": "node ../scripts/engineering-excellence/ir-matrix.mjs",
|
|
81
81
|
"test:loop-real-prd": "node --test ../scripts/loop-engineering/test/loop-real-prd.test.js",
|
|
82
|
-
"test:loop": "node --test --test-concurrency=
|
|
82
|
+
"test:loop": "node --test --test-concurrency=3 ../scripts/loop-engineering/test/loop-manifest.test.js ../scripts/loop-engineering/test/loop-watchdog.test.js ../scripts/loop-engineering/test/loop-background.test.js ../scripts/loop-engineering/test/loop-dashboard.test.js ../scripts/loop-engineering/test/loop-evidence.test.js ../scripts/loop-engineering/test/loop-recovery.test.js ../scripts/loop-engineering/test/loop-remote.test.js ../scripts/loop-engineering/test/loop-runbook.test.js ../scripts/loop-engineering/test/loop-assurance-profile.test.js ../scripts/loop-engineering/test/loop-assurance-runtime.test.js ../scripts/loop-engineering/test/loop-bounds.test.js ../scripts/loop-engineering/test/loop-spend.test.js ../scripts/loop-engineering/test/loop-ci-attest.test.js",
|
|
83
83
|
"test:python": "node ../scripts/run-python-tests.mjs",
|
|
84
84
|
"bench:dag-incremental": "node ../bench/dag-incremental/run.mjs",
|
|
85
85
|
"test:smoke": "node --test test/smoke.test.js test/demo-app.test.js",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"evaluation": "node ../scripts/evaluation.mjs",
|
|
119
119
|
"evaluation:synthetic": "node ../scripts/evaluation.mjs synthetic",
|
|
120
120
|
"test:routing": "node --test test/routing/outcomes.test.js test/routing/economics.test.js test/routing/adapter.test.js test/routing/calibration.test.js test/routing/decide.test.js test/routing/unchanged-when-off.test.js test/routing/shadow.test.js test/routing/promotion.test.js test/routing/drift.test.js test/routing/canary.test.js test/routing/feedback.test.js test/routing/report.test.js",
|
|
121
|
-
"test:release-closure": "node --test test/release-closure/closure-plan.test.js test/release-closure/closure-record.test.js test/release-closure/compatibility.test.js test/release-closure/rollout-stages.test.js test/release-closure/migration-readers.test.js test/release-closure/rollback.test.js test/release-closure/wrappers.test.js test/release-closure/final-closure.test.js test/release-closure/final-closure-controller.test.js test/release-closure/runner-hardening.test.js test/release-closure/remote-attestation.test.js",
|
|
121
|
+
"test:release-closure": "node --test test/release-closure/closure-plan.test.js test/release-closure/closure-record.test.js test/release-closure/compatibility.test.js test/release-closure/rollout-stages.test.js test/release-closure/migration-readers.test.js test/release-closure/rollback.test.js test/release-closure/wrappers.test.js test/release-closure/final-closure.test.js test/release-closure/final-closure-controller.test.js test/release-closure/runner-hardening.test.js test/release-closure/remote-attestation.test.js test/release-closure/closure-parallel.test.js",
|
|
122
122
|
"release:closure:check": "node ../scripts/release-closure.mjs --run",
|
|
123
123
|
"release:closure:static": "node ../scripts/release-closure.mjs --static",
|
|
124
124
|
"test:documentation": "node --test test/documentation/drift-check.test.js test/documentation/generated-pages.test.js test/documentation/scope-and-examples.test.js test/documentation/policy-cards.test.js test/documentation/operations-and-review.test.js",
|
|
@@ -20,9 +20,10 @@
|
|
|
20
20
|
// * Podman is not probed: it is a supported engine name, and no run against it exists.
|
|
21
21
|
// * macOS is unmeasured. Docker Desktop runs containers in a VM, so bind mounts, uids and file ownership behave differently from the Linux
|
|
22
22
|
// measurement; no macOS container run has been recorded.
|
|
23
|
-
// * The haskell:9 image
|
|
24
|
-
//
|
|
25
|
-
//
|
|
23
|
+
// * The haskell:9 image: its first real-engine run (0.194.0 pull request) failed with `ghc: not found`, because GHC lives in /opt/ghc/<version>/bin
|
|
24
|
+
// and not /opt/ghc/bin; `containerArgs` now resolves that directory inside the container. Whether the leg then passes is the `proof-container`
|
|
25
|
+
// job's result; the measurement still skips Haskell unless AGENTIC_SECURITY_PROOF_CONTAINER_HASKELL=1 (bench/proof-fabric/measure.mjs). The
|
|
26
|
+
// result file names no .NET image either, so the dotnet SDK image is unverified in the same way.
|
|
26
27
|
// * A reproducer that needs the loopback callback listener (SSRF) cannot run with `--network none` and is skipped, not measured.
|
|
27
28
|
import { spawnSync } from 'node:child_process';
|
|
28
29
|
import { superviseSpawn } from '../../sandbox/supervise.js';
|
|
@@ -47,7 +48,11 @@ export function containerArgs({ image, name, hostRoot, argv, env = {}, limits, u
|
|
|
47
48
|
'-e', 'HOME=/work', '-e', `PATH=${CONTAINER_PATH}`, '-e', 'CI=1',
|
|
48
49
|
];
|
|
49
50
|
for (const [k, v] of Object.entries(env)) args.push('-e', `${k}=${v}`);
|
|
50
|
-
|
|
51
|
+
// The haskell image keeps GHC in a VERSIONED directory (/opt/ghc/<version>/bin, found by the first real-engine Haskell run: `ghc: not found` with an
|
|
52
|
+
// unversioned /opt/ghc/bin on PATH), and the version floats with the tag. The directory is resolved inside the container, after the environment
|
|
53
|
+
// (including a reproducer's own PATH) has been applied, so nothing here depends on which GHC the image carries.
|
|
54
|
+
const inner = /^haskell:/.test(image) ? ['sh', '-c', 'for d in /opt/ghc/*/bin; do PATH="$d:$PATH"; done; export PATH; exec "$@"', 'sh', ...argv] : argv;
|
|
55
|
+
args.push(image, ...inner);
|
|
51
56
|
return args;
|
|
52
57
|
}
|
|
53
58
|
|
|
@@ -158,9 +158,14 @@ export async function runAttempt(reproducer, opts = {}) {
|
|
|
158
158
|
const errs = validateReproducer(reproducer);
|
|
159
159
|
if (errs.length) return done({ status: 'invalid', reasons: errs });
|
|
160
160
|
const tools = opts.tools ?? hostTools();
|
|
161
|
-
const sup = languageSupport(reproducer.lang, tools);
|
|
162
|
-
if (!sup.supported) return done({ status: 'unsupported', reasons: [sup.reason] });
|
|
163
161
|
const env = opts.environment ?? selectEnvironment({ lang: reproducer.lang, requireContainer: opts.requireContainer, preferContainer: opts.preferContainer ?? true, force: opts.force });
|
|
162
|
+
// Which toolchain must exist depends on WHERE the program runs. Inside a container it is the image's (CONTAINER_TOOLS), so the host's toolchain is
|
|
163
|
+
// irrelevant: judging a container run by the host's tools made every Haskell proof `unsupported` on a runner without GHC, however good the image
|
|
164
|
+
// (found by the first hosted container run of the Haskell leg; a developer machine with GHC installed hid it).
|
|
165
|
+
if (env.mode !== 'container') {
|
|
166
|
+
const sup = languageSupport(reproducer.lang, tools);
|
|
167
|
+
if (!sup.supported) return done({ status: 'unsupported', environment: env, reasons: [sup.reason] });
|
|
168
|
+
}
|
|
164
169
|
if (env.mode === 'unavailable') return done({ status: 'blocked', environment: env, reasons: [env.reason] });
|
|
165
170
|
const inContainer = env.mode === 'container';
|
|
166
171
|
if (inContainer && reproducer.network === 'callback') {
|