@clear-capabilities/agentic-security-scanner 0.139.1 → 0.141.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 (65) hide show
  1. package/CHANGELOG.md +221 -0
  2. package/bin/agentic-security.js +40 -11
  3. package/dist/113.index.js +79 -3
  4. package/dist/178.index.js +1 -1
  5. package/dist/238.index.js +77 -1
  6. package/dist/384.index.js +1 -1
  7. package/dist/435.index.js +12 -0
  8. package/dist/526.index.js +79 -3
  9. package/dist/637.index.js +1 -1
  10. package/dist/agentic-security.mjs +14 -14
  11. package/dist/agentic-security.mjs.sha256 +1 -1
  12. package/dist/compliance-frameworks/ccpa.json +34 -7
  13. package/dist/compliance-frameworks/eu-ai-act.json +65 -14
  14. package/dist/compliance-frameworks/gdpr.json +56 -12
  15. package/dist/compliance-frameworks/hipaa-security-rule.json +68 -15
  16. package/dist/compliance-frameworks/nist-ai-600-1.json +57 -12
  17. package/dist/compliance-frameworks/nist-csf-2.json +78 -16
  18. package/dist/compliance-frameworks/nist-privacy-1-1.json +3 -0
  19. package/dist/compliance-frameworks/owasp-asvs-5.json +91 -20
  20. package/dist/compliance-frameworks/owasp-llm-top-10.json +89 -20
  21. package/package.json +16 -5
  22. package/src/dataflow/catalog.js +61 -0
  23. package/src/engine.js +281 -23
  24. package/src/mcp/tools.js +12 -0
  25. package/src/posture/accuracy-scorecard.js +57 -0
  26. package/src/posture/aibom.js +110 -1
  27. package/src/posture/auditor-walkthrough.js +137 -21
  28. package/src/posture/compliance-frameworks/ccpa.json +34 -7
  29. package/src/posture/compliance-frameworks/eu-ai-act.json +65 -14
  30. package/src/posture/compliance-frameworks/gdpr.json +56 -12
  31. package/src/posture/compliance-frameworks/hipaa-security-rule.json +68 -15
  32. package/src/posture/compliance-frameworks/nist-ai-600-1.json +57 -12
  33. package/src/posture/compliance-frameworks/nist-csf-2.json +78 -16
  34. package/src/posture/compliance-frameworks/nist-privacy-1-1.json +3 -0
  35. package/src/posture/compliance-frameworks/owasp-asvs-5.json +91 -20
  36. package/src/posture/compliance-frameworks/owasp-llm-top-10.json +89 -20
  37. package/src/posture/concurrency-checker.js +42 -5
  38. package/src/posture/coverage-strength.js +182 -0
  39. package/src/posture/epss.js +17 -1
  40. package/src/posture/family-registry.js +103 -0
  41. package/src/posture/family-resolve.js +47 -0
  42. package/src/posture/fix-coverage.js +113 -0
  43. package/src/posture/fix-metrics.js +76 -0
  44. package/src/posture/integrity.js +59 -8
  45. package/src/posture/mcp-rug-pull.js +144 -0
  46. package/src/posture/poc-generator.js +17 -1
  47. package/src/posture/poc-inprocess.js +217 -1
  48. package/src/posture/proof-coverage.js +162 -0
  49. package/src/posture/reachability-filter.js +44 -0
  50. package/src/posture/sbom.js +50 -7
  51. package/src/runScan.js +56 -5
  52. package/src/sast/CLAUDE.md +2 -2
  53. package/src/sast/claude-md-prompt-injection.js +47 -3
  54. package/src/sast/cloud-iam.js +23 -0
  55. package/src/sast/convention-deviation.js +66 -3
  56. package/src/sast/crypto-protocol.js +23 -0
  57. package/src/sast/dapp-frontend.js +20 -0
  58. package/src/sast/iac-cloud-templates.js +337 -0
  59. package/src/sast/k8s-admission.js +27 -0
  60. package/src/sast/ml-supply-chain.js +22 -0
  61. package/src/sast/ruby.js +132 -0
  62. package/src/sast/web3-advanced.js +26 -0
  63. package/src/sca/CLAUDE.md +21 -4
  64. package/src/sca/container.js +18 -1
  65. package/src/sca/dep-confusion.js +69 -3
@@ -4,70 +4,132 @@
4
4
  "publisher": "NIST",
5
5
  "license": "public-domain (US Federal publication)",
6
6
  "url": "https://www.nist.gov/cyberframework",
7
+ "scope": "SELECTIVE SUBSET. 8 subcategories with a code-observable signal. CSF 2.0 has over 100 subcategories; GOVERN in particular is organisational and is NOT represented here.",
8
+ "controlsDigest": "bcff46f53e75f501",
9
+ "controlCount": 8,
7
10
  "controls": [
8
11
  {
9
12
  "id": "GV.PO",
10
13
  "function": "GOVERN",
11
14
  "category": "Policy",
12
15
  "summary": "Organizational cybersecurity policy is established, communicated, and enforced.",
13
- "evidence": ["Repo contains CLAUDE.md / SECURITY.md / .agentic-security/sca-policy.yml that documents the project's security policy.", "Triage decisions reference an organizational policy."],
14
- "mapsTo": ["family:hardcoded-secret", "family:license-graph"]
16
+ "codeTestable": "yes",
17
+ "evidence": [
18
+ "Repo contains CLAUDE.md / SECURITY.md / .agentic-security/sca-policy.yml that documents the project's security policy.",
19
+ "Triage decisions reference an organizational policy."
20
+ ],
21
+ "mapsTo": [
22
+ "family:hardcoded-secret",
23
+ "family:license-graph"
24
+ ]
15
25
  },
16
26
  {
17
27
  "id": "ID.AM",
18
28
  "function": "IDENTIFY",
19
29
  "category": "Asset Management",
20
30
  "summary": "Assets (hardware, software, data) are inventoried.",
21
- "evidence": [".agentic-security/sbom-history/*.json snapshots present.", "ATTRIBUTIONS.md generated."],
22
- "mapsTo": ["module:sbom-diff", "module:license-attributions"]
31
+ "codeTestable": "partial",
32
+ "evidence": [
33
+ ".agentic-security/sbom-history/*.json snapshots present.",
34
+ "ATTRIBUTIONS.md generated."
35
+ ],
36
+ "mapsTo": [
37
+ "module:sbom-diff",
38
+ "module:license-attributions"
39
+ ]
23
40
  },
24
41
  {
25
42
  "id": "ID.RA",
26
43
  "function": "IDENTIFY",
27
44
  "category": "Risk Assessment",
28
45
  "summary": "Vulnerabilities and threats are identified.",
29
- "evidence": ["Regular scan history under .agentic-security/scan-history/.", "ATT&CK / ATLAS technique mapping on findings."],
30
- "mapsTo": ["module:attack-taxonomy", "module:exploitability-probability"]
46
+ "codeTestable": "partial",
47
+ "evidence": [
48
+ "Regular scan history under .agentic-security/scan-history/.",
49
+ "ATT&CK / ATLAS technique mapping on findings."
50
+ ],
51
+ "mapsTo": [
52
+ "module:attack-taxonomy",
53
+ "module:exploitability-probability"
54
+ ]
31
55
  },
32
56
  {
33
57
  "id": "PR.AA",
34
58
  "function": "PROTECT",
35
59
  "category": "Identity Management & Access Control",
36
60
  "summary": "Access to assets is limited to authorized users.",
37
- "evidence": ["Zero open critical findings in family auth-missing / authz / iam-overpermissive on the current scan."],
38
- "mapsTo": ["family:auth-missing", "family:authz", "family:iam-overpermissive", "family:k8s-rbac-cluster-admin"]
61
+ "codeTestable": "yes",
62
+ "evidence": [
63
+ "Zero open critical findings in family auth-missing / authz / iam-overpermissive on the current scan."
64
+ ],
65
+ "mapsTo": [
66
+ "family:auth-missing",
67
+ "family:authz",
68
+ "family:iam-overpermissive",
69
+ "family:k8s-rbac-cluster-admin"
70
+ ]
39
71
  },
40
72
  {
41
73
  "id": "PR.DS",
42
74
  "function": "PROTECT",
43
75
  "category": "Data Security",
44
76
  "summary": "Data is managed consistent with the organization's risk strategy.",
45
- "evidence": ["No critical/high crypto findings.", "DPIA artifact present (.agentic-security/dpia.md) when handling PII."],
46
- "mapsTo": ["family:crypto-tls-version", "family:crypto-tls-no-verify", "family:crypto-weak-cipher", "family:pii-exposure"]
77
+ "codeTestable": "yes",
78
+ "evidence": [
79
+ "No critical/high crypto findings.",
80
+ "DPIA artifact present (.agentic-security/dpia.md) when handling PII."
81
+ ],
82
+ "mapsTo": [
83
+ "family:crypto-tls-version",
84
+ "family:crypto-tls-no-verify",
85
+ "family:crypto-weak-cipher",
86
+ "family:pii-exposure"
87
+ ]
47
88
  },
48
89
  {
49
90
  "id": "DE.CM",
50
91
  "function": "DETECT",
51
92
  "category": "Continuous Monitoring",
52
93
  "summary": "Anomalous activity, indicators of compromise are monitored.",
53
- "evidence": ["Watch mode artifacts at .agentic-security/watch-status.{md,json}.", "CVE-alert daemon configured."],
54
- "mapsTo": ["module:watch-mode", "module:cve-alert-daemon"]
94
+ "codeTestable": "partial",
95
+ "evidence": [
96
+ "Watch mode artifacts at .agentic-security/watch-status.{md,json}.",
97
+ "CVE-alert daemon configured."
98
+ ],
99
+ "mapsTo": [
100
+ "module:watch-mode",
101
+ "module:cve-alert-daemon"
102
+ ]
55
103
  },
56
104
  {
57
105
  "id": "RS.AN",
58
106
  "function": "RESPOND",
59
107
  "category": "Analysis",
60
108
  "summary": "Notifications from detection systems are investigated.",
61
- "evidence": ["Triage transitions logged in triage.json.", "Triage-memory entries with reasons."],
62
- "mapsTo": ["module:triage", "module:triage-memory"]
109
+ "codeTestable": "partial",
110
+ "evidence": [
111
+ "Triage transitions logged in triage.json.",
112
+ "Triage-memory entries with reasons."
113
+ ],
114
+ "mapsTo": [
115
+ "module:triage",
116
+ "module:triage-memory"
117
+ ]
63
118
  },
64
119
  {
65
120
  "id": "RC.RP",
66
121
  "function": "RECOVER",
67
122
  "category": "Recovery Planning",
68
123
  "summary": "Recovery plans are executed and improved after an incident.",
69
- "evidence": ["Fix history under .agentic-security/fix-history/log.json.", "Verifier outcomes recorded."],
70
- "mapsTo": ["module:fix-history", "module:verifier"]
124
+ "codeTestable": "partial",
125
+ "evidence": [
126
+ "Fix history under .agentic-security/fix-history/log.json.",
127
+ "Verifier outcomes recorded."
128
+ ],
129
+ "mapsTo": [
130
+ "module:fix-history",
131
+ "module:verifier"
132
+ ]
71
133
  }
72
134
  ]
73
135
  }
@@ -5,6 +5,9 @@
5
5
  "license": "public-domain (US Federal publication)",
6
6
  "url": "https://www.nist.gov/privacy-framework",
7
7
  "note": "Each control carries NIST's own `codeTestable` rating (yes/partial/no). That rating says whether a control COULD be assessed from source code — it does not say this engine assesses it. `mapsTo` is present only where this engine produces a real signal; a control that NIST rates testable but which this engine cannot see is reported as an ENGINE GAP rather than silently passed.",
8
+ "scope": "FULL CATALOGUE, partially assessable. All 104 controls are present and each carries `codeTestable`. 48 are governance controls no scanner can assess; those report `manual`, never `satisfied`. See posture/privacy-framework.js.",
9
+ "controlsDigest": "447154af306c58d3",
10
+ "controlCount": 104,
8
11
  "controls": [
9
12
  {
10
13
  "id": "ID.IM-P1",
@@ -4,76 +4,147 @@
4
4
  "publisher": "OWASP Foundation",
5
5
  "license": "Creative Commons Attribution-ShareAlike 4.0",
6
6
  "url": "https://owasp.org/www-project-application-security-verification-standard/",
7
+ "scope": "SELECTIVE SUBSET. 10 verification requirements with a direct detector behind them. ASVS 5.0 has several hundred requirements across 17 chapters; the remainder are NOT represented here.",
8
+ "controlsDigest": "6c4371a08f010f91",
9
+ "controlCount": 10,
7
10
  "controls": [
8
11
  {
9
12
  "id": "V2.1",
10
13
  "category": "Authentication",
11
14
  "summary": "Verify that authentication is performed for protected functions.",
12
- "evidence": ["Zero open critical findings in family auth-missing on the current scan."],
13
- "mapsTo": ["family:auth-missing"]
15
+ "codeTestable": "yes",
16
+ "evidence": [
17
+ "Zero open critical findings in family auth-missing on the current scan."
18
+ ],
19
+ "mapsTo": [
20
+ "family:auth-missing"
21
+ ]
14
22
  },
15
23
  {
16
24
  "id": "V2.7",
17
25
  "category": "Authentication",
18
26
  "summary": "Verify that MFA / secondary authentication is used for high-value operations.",
19
- "evidence": ["aws-no-mfa-condition zero findings (if AWS in scope)."],
20
- "mapsTo": ["family:aws-no-mfa"]
27
+ "codeTestable": "yes",
28
+ "evidence": [
29
+ "aws-no-mfa-condition zero findings (if AWS in scope)."
30
+ ],
31
+ "mapsTo": [
32
+ "family:aws-no-mfa"
33
+ ]
21
34
  },
22
35
  {
23
36
  "id": "V4.1",
24
37
  "category": "Access Control",
25
38
  "summary": "Verify that authorization is enforced for every resource access.",
26
- "evidence": ["Zero idor / authz findings."],
27
- "mapsTo": ["family:idor", "family:authz"]
39
+ "codeTestable": "yes",
40
+ "evidence": [
41
+ "Zero idor / authz findings."
42
+ ],
43
+ "mapsTo": [
44
+ "family:idor",
45
+ "family:authz"
46
+ ]
28
47
  },
29
48
  {
30
49
  "id": "V5.1",
31
50
  "category": "Input Validation",
32
51
  "summary": "Verify input validation for type, length, and content.",
33
- "evidence": ["Zero open critical findings in sqli/xss/command-injection/ldap-injection/xpath-injection."],
34
- "mapsTo": ["family:sqli", "family:xss", "family:command-injection", "family:ldap-injection", "family:xpath-injection", "family:nosql-injection"]
52
+ "codeTestable": "yes",
53
+ "evidence": [
54
+ "Zero open critical findings in sqli/xss/command-injection/ldap-injection/xpath-injection."
55
+ ],
56
+ "mapsTo": [
57
+ "family:sqli",
58
+ "family:xss",
59
+ "family:command-injection",
60
+ "family:ldap-injection",
61
+ "family:xpath-injection",
62
+ "family:nosql-injection"
63
+ ]
35
64
  },
36
65
  {
37
66
  "id": "V6.1",
38
67
  "category": "Cryptography",
39
68
  "summary": "Verify use of strong cryptography per a documented policy.",
40
- "evidence": ["Zero open findings in crypto-weak-cipher / crypto-weak-hash / crypto-ecb / crypto-static-iv."],
41
- "mapsTo": ["family:crypto-weak-cipher", "family:crypto-weak-hash", "family:crypto-ecb", "family:crypto-static-iv", "family:crypto-kdf-weak"]
69
+ "codeTestable": "yes",
70
+ "evidence": [
71
+ "Zero open findings in crypto-weak-cipher / crypto-weak-hash / crypto-ecb / crypto-static-iv."
72
+ ],
73
+ "mapsTo": [
74
+ "family:crypto-weak-cipher",
75
+ "family:crypto-weak-hash",
76
+ "family:crypto-ecb",
77
+ "family:crypto-static-iv",
78
+ "family:crypto-kdf-weak"
79
+ ]
42
80
  },
43
81
  {
44
82
  "id": "V6.2",
45
83
  "category": "Cryptography",
46
84
  "summary": "Verify all transit data uses TLS ≥ 1.2.",
47
- "evidence": ["Zero findings in crypto-tls-version / crypto-tls-no-verify."],
48
- "mapsTo": ["family:crypto-tls-version", "family:crypto-tls-no-verify"]
85
+ "codeTestable": "yes",
86
+ "evidence": [
87
+ "Zero findings in crypto-tls-version / crypto-tls-no-verify."
88
+ ],
89
+ "mapsTo": [
90
+ "family:crypto-tls-version",
91
+ "family:crypto-tls-no-verify"
92
+ ]
49
93
  },
50
94
  {
51
95
  "id": "V7.1",
52
96
  "category": "Error Handling & Logging",
53
97
  "summary": "Verify that error handling does not disclose sensitive information.",
54
- "evidence": ["No findings in family data-exposure."],
55
- "mapsTo": ["family:data-exposure"]
98
+ "codeTestable": "yes",
99
+ "evidence": [
100
+ "No findings in family data-exposure."
101
+ ],
102
+ "mapsTo": [
103
+ "family:data-exposure"
104
+ ]
56
105
  },
57
106
  {
58
107
  "id": "V8.1",
59
108
  "category": "Data Protection",
60
109
  "summary": "Verify that personal data is protected at rest and in transit.",
61
- "evidence": ["DPIA artifact at .agentic-security/dpia.md.", "Zero pii-exposure findings."],
62
- "mapsTo": ["family:pii-exposure", "family:training-data-pii"]
110
+ "codeTestable": "yes",
111
+ "evidence": [
112
+ "DPIA artifact at .agentic-security/dpia.md.",
113
+ "Zero pii-exposure findings."
114
+ ],
115
+ "mapsTo": [
116
+ "family:pii-exposure",
117
+ "family:training-data-pii"
118
+ ]
63
119
  },
64
120
  {
65
121
  "id": "V10.1",
66
122
  "category": "Malicious Code",
67
123
  "summary": "Verify the application does not include known-malicious or compromised dependencies.",
68
- "evidence": [".agentic-security/sbom-history snapshots clean.", "No dependency-confusion or dependency-drift findings."],
69
- "mapsTo": ["family:vulnerable-dep", "family:dependency-confusion", "family:dependency-drift"]
124
+ "codeTestable": "yes",
125
+ "evidence": [
126
+ ".agentic-security/sbom-history snapshots clean.",
127
+ "No dependency-confusion or dependency-drift findings."
128
+ ],
129
+ "mapsTo": [
130
+ "family:vulnerable-dep",
131
+ "family:dependency-confusion",
132
+ "family:dependency-drift"
133
+ ]
70
134
  },
71
135
  {
72
136
  "id": "V14.1",
73
137
  "category": "Configuration",
74
138
  "summary": "Verify that build, deployment, and configuration are secure.",
75
- "evidence": ["No findings in family iam-overpermissive / k8s-rbac-cluster-admin / k8s-pod-security-privileged."],
76
- "mapsTo": ["family:iam-overpermissive", "family:k8s-rbac-cluster-admin", "family:k8s-pod-security-privileged"]
139
+ "codeTestable": "yes",
140
+ "evidence": [
141
+ "No findings in family iam-overpermissive / k8s-rbac-cluster-admin / k8s-pod-security-privileged."
142
+ ],
143
+ "mapsTo": [
144
+ "family:iam-overpermissive",
145
+ "family:k8s-rbac-cluster-admin",
146
+ "family:k8s-pod-security-privileged"
147
+ ]
77
148
  }
78
149
  ]
79
150
  }
@@ -4,66 +4,135 @@
4
4
  "publisher": "OWASP Foundation",
5
5
  "license": "Creative Commons Attribution-ShareAlike 4.0",
6
6
  "url": "https://owasp.org/www-project-top-10-for-large-language-model-applications/",
7
+ "scope": "FULL TOP-10. All ten categories are present. Each category is a broad class rather than a single testable requirement, so a mapping indicates a detector exists for part of the class, not that the class is fully covered.",
8
+ "controlsDigest": "0a0351a9536790e4",
9
+ "controlCount": 10,
7
10
  "controls": [
8
11
  {
9
12
  "id": "LLM01",
10
13
  "summary": "Prompt Injection — controls preventing injected instructions from overriding the system prompt.",
11
- "evidence": ["Zero open findings in family prompt-injection / llm-app-security.", "Prompt-template integrity check passing."],
12
- "mapsTo": ["family:prompt-injection", "family:llm-app-security", "family:prompt-integrity"]
14
+ "codeTestable": "yes",
15
+ "evidence": [
16
+ "Zero open findings in family prompt-injection / llm-app-security.",
17
+ "Prompt-template integrity check passing."
18
+ ],
19
+ "mapsTo": [
20
+ "family:prompt-injection",
21
+ "family:llm-app-security",
22
+ "family:prompt-integrity"
23
+ ]
13
24
  },
14
25
  {
15
26
  "id": "LLM02",
16
27
  "summary": "Insecure Output Handling — LLM output is not directly piped to dangerous sinks (eval/shell/SQL/HTML).",
17
- "evidence": ["Zero open findings in subfamily llm-output-untrusted-sink."],
18
- "mapsTo": ["family:llm-app-security:llm-output-untrusted-sink"]
28
+ "codeTestable": "yes",
29
+ "evidence": [
30
+ "Zero open findings in subfamily llm-output-untrusted-sink."
31
+ ],
32
+ "mapsTo": [
33
+ "family:llm-app-security:llm-output-untrusted-sink"
34
+ ]
19
35
  },
20
36
  {
21
37
  "id": "LLM03",
22
38
  "summary": "Training Data Poisoning — provenance and integrity controls on training/fine-tuning data.",
23
- "evidence": ["No streaming-dataset-url findings.", "datasets.load_dataset uses pinned revisions."],
24
- "mapsTo": ["family:streaming-dataset-url", "family:hf-datasets-rce"]
39
+ "codeTestable": "yes",
40
+ "evidence": [
41
+ "No streaming-dataset-url findings.",
42
+ "datasets.load_dataset uses pinned revisions."
43
+ ],
44
+ "mapsTo": [
45
+ "family:streaming-dataset-url",
46
+ "family:hf-datasets-rce"
47
+ ]
25
48
  },
26
49
  {
27
50
  "id": "LLM04",
28
51
  "summary": "Model Denial of Service — rate-limit / token-cap controls.",
29
- "evidence": ["LLM API calls in source carry an explicit max_tokens cap (bodyguard rule no-max-tokens)."],
30
- "mapsTo": ["rule:no-max-tokens"]
52
+ "codeTestable": "no",
53
+ "evidence": [
54
+ "LLM API calls in source carry an explicit max_tokens cap (bodyguard rule no-max-tokens)."
55
+ ],
56
+ "mapsTo": [
57
+ "rule:no-max-tokens"
58
+ ]
31
59
  },
32
60
  {
33
61
  "id": "LLM05",
34
62
  "summary": "Supply Chain — model & dataset supply-chain integrity.",
35
- "evidence": ["No mlflow-untrusted-uri / model-format / hf-endpoint-override findings.", "Sigstore provenance verification configured if opt-in."],
36
- "mapsTo": ["family:mlflow-untrusted-uri", "family:model-format", "family:hf-endpoint-override"]
63
+ "codeTestable": "yes",
64
+ "evidence": [
65
+ "No mlflow-untrusted-uri / model-format / hf-endpoint-override findings.",
66
+ "Sigstore provenance verification configured if opt-in."
67
+ ],
68
+ "mapsTo": [
69
+ "family:mlflow-untrusted-uri",
70
+ "family:model-format",
71
+ "family:hf-endpoint-override"
72
+ ]
37
73
  },
38
74
  {
39
75
  "id": "LLM06",
40
76
  "summary": "Sensitive Information Disclosure — output filters prevent leakage.",
41
- "evidence": ["Zero findings in subfamily llm-credential-in-prompt.", "Redact module covers prompt + response."],
42
- "mapsTo": ["family:llm-app-security:llm-credential-in-prompt"]
77
+ "codeTestable": "yes",
78
+ "evidence": [
79
+ "Zero findings in subfamily llm-credential-in-prompt.",
80
+ "Redact module covers prompt + response."
81
+ ],
82
+ "mapsTo": [
83
+ "family:llm-app-security:llm-credential-in-prompt"
84
+ ]
43
85
  },
44
86
  {
45
87
  "id": "LLM07",
46
88
  "summary": "Insecure Plugin / Tool Design — tools the LLM can invoke are narrowly scoped.",
47
- "evidence": ["Zero llm-app-security:llm-tool-exec findings.", "Agent tool definitions reviewed for excessive agency."],
48
- "mapsTo": ["family:agent-tool-exec", "family:llm-app-security:llm-tool-exec"]
89
+ "codeTestable": "yes",
90
+ "evidence": [
91
+ "Zero llm-app-security:llm-tool-exec findings.",
92
+ "Agent tool definitions reviewed for excessive agency."
93
+ ],
94
+ "mapsTo": [
95
+ "family:agent-tool-exec",
96
+ "family:llm-app-security:llm-tool-exec"
97
+ ]
49
98
  },
50
99
  {
51
100
  "id": "LLM08",
52
101
  "summary": "Excessive Agency — agent autonomy is bounded by explicit guards.",
53
- "evidence": ["MCP server config limits write-tools to confirm:true + reserved-write-path refusal.", "Apply-fix path requires HMAC-verified scan."],
54
- "mapsTo": ["module:mcp-tools", "module:apply-fix"]
102
+ "codeTestable": "partial",
103
+ "evidence": [
104
+ "MCP server config limits write-tools to confirm:true + reserved-write-path refusal.",
105
+ "Apply-fix path requires HMAC-verified scan."
106
+ ],
107
+ "mapsTo": [
108
+ "module:mcp-tools",
109
+ "module:apply-fix"
110
+ ]
55
111
  },
56
112
  {
57
113
  "id": "LLM09",
58
114
  "summary": "Overreliance — human review checkpoints exist.",
59
- "evidence": ["security-fixer agent has Stop-on-verify-fail loop.", "PreToolUse bodyguard exists."],
60
- "mapsTo": ["module:security-fixer", "module:pre-edit-bodyguard"]
115
+ "codeTestable": "partial",
116
+ "evidence": [
117
+ "security-fixer agent has Stop-on-verify-fail loop.",
118
+ "PreToolUse bodyguard exists."
119
+ ],
120
+ "mapsTo": [
121
+ "module:security-fixer",
122
+ "module:pre-edit-bodyguard"
123
+ ]
61
124
  },
62
125
  {
63
126
  "id": "LLM10",
64
127
  "summary": "Model Theft — model access controls.",
65
- "evidence": ["No private-key-in-frontend or rpc-key-inline findings in client code."],
66
- "mapsTo": ["family:private-key-in-frontend", "family:rpc-key-inline"]
128
+ "codeTestable": "yes",
129
+ "evidence": [
130
+ "No private-key-in-frontend or rpc-key-inline findings in client code."
131
+ ],
132
+ "mapsTo": [
133
+ "family:private-key-in-frontend",
134
+ "family:rpc-key-inline"
135
+ ]
67
136
  }
68
137
  ]
69
138
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clear-capabilities/agentic-security-scanner",
3
- "version": "0.139.1",
3
+ "version": "0.141.0",
4
4
  "description": "Scanner engine for the agentic-security Claude Code plugin — SAST, SCA (function-level reachability + CISA KEV), secrets, IaC, prompt-injection, MCP/agent-tool audit, auth/authZ deep analysis, attack chains, PoC generation, business logic, toxic-combinations scoring, SBOM, pipeline integrity, compliance attestation, and more.",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -63,13 +63,13 @@
63
63
  "test:python": "node ../scripts/run-python-tests.mjs",
64
64
  "test:smoke": "node --test test/smoke.test.js test/demo-app.test.js",
65
65
  "test:glob": "node --test test/glob-compat.test.js",
66
- "test:sast": "node --test test/sibling-guard.test.js test/comment-blindness.test.js test/crypto-specialist.test.js test/llm.test.js test/llm-cost-advisor.test.js test/llm-owasp.test.js test/logic.test.js test/authz.test.js test/model-load.test.js test/prompt-template.test.js test/business-logic.test.js test/python-sinks.test.js test/phase1-detectors.test.js test/phase2-detectors.test.js test/phase3-v3.test.js test/phase7-extensions.test.js test/phase8-extensions.test.js test/new-cwe-detectors.test.js test/file-upload.test.js test/llmsecops-detectors.test.js test/db-taint.test.js test/dart-swift.test.js test/zip-slip-containment-guard.test.js test/redos-anchoring.test.js test/path-guard-validator-call.test.js test/redos-nfa.test.js test/weak-randomness.test.js test/csharp-pipeline.test.js test/post-quantum-crypto.test.js test/web3-advanced.test.js test/cloud-iam-k8s.test.js test/crypto-protocol.test.js test/ml-supply-chain.test.js test/mcp-audit-scan.test.js test/wrong-context-sanitizer.test.js test/sanitizer-context.test.js test/frontend-hygiene.test.js test/csv-injection.test.js test/stored-taint.test.js test/tree-sitter-sinks.test.js test/kotlin-structural.test.js test/ruby-php-structural.test.js test/java-csharp-structural.test.js test/guard-recognition.test.js test/guard-window-identifier-correlation.test.js test/js-python-framework-structural.test.js test/go-structural.test.js test/secret-concat.test.js test/secret-redaction.test.js test/xss-reflected-multilang.test.js test/code-injection-multilang.test.js test/xxe-multilang.test.js test/xpath-injection-multilang.test.js test/gapfill-batch13.test.js test/agent-untrusted-flow.test.js test/api-authz.test.js test/event-entrypoint.test.js test/iac-terraform.test.js test/cross-service.test.js test/rbac-consistency.test.js test/adversarial-robustness.test.js test/secret-entropy.test.js test/comment-strip.test.js test/juliet-path-filter-gate.test.js test/java-bench-shape-opt-in.test.js test/reachability-missing-callgraph-data.test.js test/rate-limit.test.js test/auth-signals.test.js test/convention-deviation.test.js test/resource-exhaustion.test.js test/resource-exhaustion-realworld.test.js test/redirect-toctou.test.js test/redirect-toctou-realworld.test.js test/codegen-sink.test.js test/ownership-authz.test.js test/ownership-authz-realworld.test.js test/t21-precision-audit.test.js",
67
- "test:posture": "node --test test/privacy-framework.test.js test/material-change.test.js test/drift.test.js test/scorecard.test.js test/accuracy-scorecard.test.js test/scorecard-gate.test.js test/predeploy-gate.test.js test/release-check.test.js test/pre-push-gate.test.js test/dependency-currency.test.js test/package-contents-check.test.js test/gate-verdict-cache.test.js test/independent-population.test.js test/why-missed.test.js test/independent-scoring.test.js test/evidence-bundle.test.js test/discovery-memory.test.js test/mttr.test.js test/license-policy.test.js test/aibom.test.js test/sbom.test.js test/api-inventory.test.js test/iam-policy.test.js test/container.test.js test/container-runtime.test.js test/image-packages.test.js test/kev.test.js test/dep-confusion.test.js test/sca-deprecated.test.js test/sca-batch.test.js test/composite-risk.test.js test/epss-enrich.test.js test/sca-coverage.test.js test/gradle-deps.test.js test/sca-route-reachable.test.js test/sca-policy.test.js test/sca-verdict.test.js test/install-script.test.js test/sca-linked-findings.test.js test/packs.test.js test/flow-narration.test.js test/regression-test-gen.test.js test/deterministic-fix.test.js test/falsification.test.js test/verification-separation.test.js test/logic-claims.test.js test/attestation.test.js test/verify-attestation-cli.test.js test/comparison.test.js test/determinism-cross-machine.test.js test/fix-honesty-gate.test.js test/model-routing.test.js test/root-cause-sweep.test.js test/entrypoint-inventory.test.js test/relevance.test.js test/untrusted.test.js test/agent-hardening.test.js test/rule-synthesis.test.js test/policy-gate.test.js test/agents-memory.test.js test/cve-lookup.test.js test/cve-alert-daemon.test.js test/fix-verify-loop.test.js test/fix-verify-tests.test.js test/fix-acceptance.test.js test/exploitability-probability.test.js test/history-scan.test.js test/viral-features.test.js test/viral-v074.test.js test/state-dir.test.js test/ignore-pragma.test.js test/license-graph.test.js test/secret-live-check.test.js test/attack-taxonomy.test.js test/triage-memory.test.js test/pr-augment.test.js test/chat-batch2.test.js test/chat-batch3.test.js test/chat-batch4.test.js test/chat-batch5.test.js test/chat-batch6.test.js test/router.test.js test/legacy-alias-redirect.test.js test/cache-economics.test.js test/coverage-report.test.js test/corpus-status.test.js test/provenance.test.js test/secret-history.test.js test/execution-proof.test.js test/fix-metrics.test.js test/corpus-enroll.test.js test/prove-findings.test.js test/corpus-match.test.js test/corpus-provenance.test.js test/learning-quorum.test.js test/llm-cache-integrity.test.js test/proof-artifact.test.js test/providers.test.js test/fleet.test.js test/autopilot.test.js test/autopilot-cli.test.js test/verifier-independence.test.js test/integrity-legacy-key.test.js test/suppression-visibility.test.js test/cost-ceiling.test.js test/local-endpoint.test.js test/model-trust.test.js test/vuln-archaeology.test.js test/scan-checkpoint.test.js test/llm-redact.test.js test/world-class-batch2.test.js test/world-class-modules.test.js test/integration-end-to-end.test.js test/streak-cli-wiring.test.js test/stack-playbook.test.js test/machine-output-flag.test.js test/only-flag-channels.test.js test/confidence.test.js test/security-trend.test.js test/calibration-drift.test.js test/validator-metrics.test.js test/clustering-ir-taint-line.test.js",
66
+ "test:sast": "node --test test/sibling-guard.test.js test/comment-blindness.test.js test/crypto-specialist.test.js test/llm.test.js test/llm-cost-advisor.test.js test/llm-owasp.test.js test/logic.test.js test/authz.test.js test/model-load.test.js test/prompt-template.test.js test/business-logic.test.js test/python-sinks.test.js test/phase1-detectors.test.js test/phase2-detectors.test.js test/phase3-v3.test.js test/phase7-extensions.test.js test/phase8-extensions.test.js test/new-cwe-detectors.test.js test/file-upload.test.js test/llmsecops-detectors.test.js test/db-taint.test.js test/dart-swift.test.js test/zip-slip-containment-guard.test.js test/redos-anchoring.test.js test/path-guard-validator-call.test.js test/redos-nfa.test.js test/weak-randomness.test.js test/csharp-pipeline.test.js test/post-quantum-crypto.test.js test/web3-advanced.test.js test/cloud-iam-k8s.test.js test/crypto-protocol.test.js test/ml-supply-chain.test.js test/mcp-audit-scan.test.js test/wrong-context-sanitizer.test.js test/sanitizer-context.test.js test/frontend-hygiene.test.js test/csv-injection.test.js test/stored-taint.test.js test/tree-sitter-sinks.test.js test/kotlin-structural.test.js test/ruby-php-structural.test.js test/java-csharp-structural.test.js test/guard-recognition.test.js test/guard-window-identifier-correlation.test.js test/js-python-framework-structural.test.js test/go-structural.test.js test/secret-concat.test.js test/secret-redaction.test.js test/xss-reflected-multilang.test.js test/code-injection-multilang.test.js test/xxe-multilang.test.js test/xpath-injection-multilang.test.js test/gapfill-batch13.test.js test/agent-untrusted-flow.test.js test/api-authz.test.js test/event-entrypoint.test.js test/iac-terraform.test.js test/cross-service.test.js test/rbac-consistency.test.js test/adversarial-robustness.test.js test/secret-entropy.test.js test/comment-strip.test.js test/juliet-path-filter-gate.test.js test/java-bench-shape-opt-in.test.js test/reachability-missing-callgraph-data.test.js test/rate-limit.test.js test/auth-signals.test.js test/convention-deviation.test.js test/resource-exhaustion.test.js test/resource-exhaustion-realworld.test.js test/redirect-toctou.test.js test/redirect-toctou-realworld.test.js test/codegen-sink.test.js test/ownership-authz.test.js test/ownership-authz-realworld.test.js test/t21-precision-audit.test.js test/secrets-coverage.test.js test/prompt-injection-payloads.test.js test/iac-cloud-templates.test.js test/ruby-path-join.test.js",
67
+ "test:posture": "node --test test/privacy-framework.test.js test/material-change.test.js test/drift.test.js test/scorecard.test.js test/accuracy-scorecard.test.js test/scorecard-gate.test.js test/predeploy-gate.test.js test/release-check.test.js test/pre-push-gate.test.js test/dependency-currency.test.js test/package-contents-check.test.js test/gate-verdict-cache.test.js test/independent-population.test.js test/why-missed.test.js test/independent-scoring.test.js test/evidence-bundle.test.js test/discovery-memory.test.js test/mttr.test.js test/license-policy.test.js test/aibom.test.js test/sbom.test.js test/api-inventory.test.js test/iam-policy.test.js test/container.test.js test/container-runtime.test.js test/image-packages.test.js test/kev.test.js test/dep-confusion.test.js test/sca-deprecated.test.js test/sca-batch.test.js test/composite-risk.test.js test/epss-enrich.test.js test/sca-coverage.test.js test/gradle-deps.test.js test/sca-route-reachable.test.js test/sca-policy.test.js test/sca-verdict.test.js test/install-script.test.js test/sca-linked-findings.test.js test/packs.test.js test/flow-narration.test.js test/regression-test-gen.test.js test/deterministic-fix.test.js test/falsification.test.js test/verification-separation.test.js test/logic-claims.test.js test/attestation.test.js test/verify-attestation-cli.test.js test/comparison.test.js test/determinism-cross-machine.test.js test/fix-honesty-gate.test.js test/model-routing.test.js test/root-cause-sweep.test.js test/entrypoint-inventory.test.js test/relevance.test.js test/untrusted.test.js test/agent-hardening.test.js test/rule-synthesis.test.js test/policy-gate.test.js test/agents-memory.test.js test/cve-lookup.test.js test/cve-alert-daemon.test.js test/fix-verify-loop.test.js test/fix-verify-tests.test.js test/fix-acceptance.test.js test/exploitability-probability.test.js test/history-scan.test.js test/viral-features.test.js test/viral-v074.test.js test/state-dir.test.js test/ignore-pragma.test.js test/license-graph.test.js test/secret-live-check.test.js test/attack-taxonomy.test.js test/triage-memory.test.js test/pr-augment.test.js test/chat-batch2.test.js test/chat-batch3.test.js test/chat-batch4.test.js test/chat-batch5.test.js test/chat-batch6.test.js test/router.test.js test/legacy-alias-redirect.test.js test/cache-economics.test.js test/coverage-report.test.js test/corpus-status.test.js test/provenance.test.js test/secret-history.test.js test/execution-proof.test.js test/fix-metrics.test.js test/corpus-enroll.test.js test/prove-findings.test.js test/corpus-match.test.js test/corpus-provenance.test.js test/learning-quorum.test.js test/llm-cache-integrity.test.js test/proof-artifact.test.js test/providers.test.js test/fleet.test.js test/autopilot.test.js test/autopilot-cli.test.js test/verifier-independence.test.js test/integrity-legacy-key.test.js test/suppression-visibility.test.js test/cost-ceiling.test.js test/local-endpoint.test.js test/model-trust.test.js test/vuln-archaeology.test.js test/scan-checkpoint.test.js test/llm-redact.test.js test/world-class-batch2.test.js test/world-class-modules.test.js test/integration-end-to-end.test.js test/streak-cli-wiring.test.js test/stack-playbook.test.js test/machine-output-flag.test.js test/stdout-flush.test.js test/format-determinism.test.js test/only-flag-channels.test.js test/confidence.test.js test/security-trend.test.js test/calibration-drift.test.js test/validator-metrics.test.js test/clustering-ir-taint-line.test.js test/concurrency-cwe.test.js test/compliance-mapping-liveness.test.js test/family-registry.test.js test/coverage-strength.test.js test/framework-provenance.test.js test/third-party-verification.test.js test/proof-coverage.test.js test/calibration-holdout.test.js test/catalog-freshness.test.js test/incremental-parity.test.js test/surface-smoke.test.js test/fix-coverage.test.js test/raw-source-carveout.test.js test/mlbom-conformance.test.js test/deploy-gate-replay.test.js test/sbom-conformance.test.js test/unscored-claims.test.js test/mcp-rug-pull.test.js test/agent-boundary-taint.test.js test/confinement-adversarial.test.js test/comment-strip-cost.test.js test/reachability-claim.test.js test/entrypoint-breadth.test.js test/dep-file-admission.test.js",
68
68
  "test:dataflow": "node --test test/container-taint.test.js test/stored-taint-families.test.js test/py-annotation-sources.test.js test/fn-reach.test.js test/deep-taint.test.js test/calibration.test.js test/holdout-eval.test.js test/cross-lang-meta.test.js test/cross-lang-queues.test.js test/phase5-xlang.test.js test/phase5-coverage.test.js test/phase6-taint.test.js test/llm-validator-consistency.test.js test/llm-validator-default-on.test.js test/llm-validator-preset.test.js test/parser-py-cst.test.js test/parser-cs-kt.test.js test/parser-cs-annotations.test.js test/parser-cs-control-flow.test.js test/parser-kt-control-flow.test.js test/parser-js-annotations.test.js test/parser-java-annotations.test.js test/parser-java-control-flow.test.js test/parser-java-calls.test.js test/parser-go.test.js test/parser-php-rb.test.js test/parser-php-control-flow.test.js test/interproc-k2.test.js test/proven-clean.test.js test/backward-default.test.js test/incremental-cache.test.js test/string-regex-lattice.test.js test/closure-capture.test.js test/points-to.test.js test/type-stubs.test.js test/soft-taint.test.js test/ifds.test.js test/symbolic-exec-proof.test.js test/ifds-summary-edges.test.js test/stub-aware-filter.test.js test/cross-repo.test.js test/proof-gate.test.js test/layer-recall.test.js test/java-taint-flow.test.js test/kt-taint-flow.test.js test/sanitizer-typed-flow.test.js test/sanitizer-gate-unit.test.js test/proof-safe.test.js test/collection-taint.test.js test/kcfa-context.test.js test/kcfa-callstring.test.js test/flow-parity.test.js test/callgraph-resolve.test.js test/import-reachability.test.js test/ir-stats.test.js test/parser-cpp.test.js test/parser-js-decorators.test.js test/parser-js-if-else-cfg.test.js test/cpp-integration.test.js test/engine-reconnect.test.js test/phase2-scoping.test.js test/engine-recall.test.js test/catalog-annotation-source.test.js test/catalog-cs-p1.test.js test/catalog-expanded.test.js test/builtin-summaries.test.js test/interproc-mutation-crash.test.js test/mutated-param-taint.test.js test/return-sink-check.test.js test/higher-order-inline-callback.test.js test/interproc-findings-discard.test.js test/runscan-deep-option.test.js test/summary-cache-convergence.test.js test/parser-rb-calls.test.js test/parser-rb-module-level.test.js test/balanced-call.test.js test/destructuring-taint.test.js test/computed-member-taint.test.js test/string-interpolation-taint.test.js test/dataflow-deadcode-severity.test.js test/catalog-dotted-callee-lookup.test.js test/builtin-summary-family-blind-kill.test.js test/deep-mode-annotator-pipeline.test.js test/receiver-type-and-nested-calls.test.js test/member-write-and-loop-taint.test.js test/parser-py-module-level.test.js test/parser-php-module-level.test.js test/r14b-module-level-e2e.test.js test/annotation-taint-engine.test.js test/interproc-nested-call-taint.test.js test/catalog-xpath-injection.test.js test/catalog-ldap-injection.test.js test/catalog-xxe.test.js test/catalog-response-splitting.test.js test/catalog-code-injection.test.js test/parser-rb-control-flow.test.js test/catalog-ruby-p1.test.js test/callee-receiver-taint.test.js test/catalog-command-injection-p4.test.js test/catalog-xss-p4.test.js test/catalog-path-ssrf-p3.test.js",
69
- "test:mcp": "node --test test/mcp.test.js test/mcp-audit.test.js test/audit-cli.test.js test/mcp-scratchpad.test.js test/mcp-offload.test.js test/sca-upgrade.test.js test/lsp-server.test.js",
69
+ "test:mcp": "node --test test/mcp.test.js test/mcp-protocol-smoke.test.js test/mcp-audit.test.js test/audit-cli.test.js test/mcp-scratchpad.test.js test/mcp-offload.test.js test/sca-upgrade.test.js test/lsp-server.test.js",
70
70
  "test:report": "node --test test/junit.test.js test/ci.test.js test/poc-generator.test.js test/verifier.test.js test/verifier-target.test.js test/annotator-errors.test.js test/grader-calibration.test.js test/pr-delta-gate.test.js test/vex.test.js test/report-render.test.js",
71
71
  "test:bench-modules": "node --test test/phase4-harness.test.js test/pipeline.test.js test/proof-corpus-lib.test.js test/proof-corpus-runner.test.js",
72
- "test:lifecycle": "node --test test/lsp-protocol-smoke.test.js test/detector-liveness.test.js test/bench-watchdog.test.js test/ci-parity.test.js test/dead-code.test.js test/no-dead-modules.test.js test/no-orphan-scripts.test.js test/no-stray-state.test.js test/tree-integrity.test.js test/stop-hook.test.js test/plugin-self-check.test.js test/skills-registry.test.js test/bodyguard.test.js test/cache-invalidator-guard.test.js test/dispatch-pre-tool.test.js test/dispatch-user-prompt.test.js test/session-start-model-capture.test.js test/sandbox.test.js test/sandbox-escape.test.js test/ci-templates.test.js test/agent-mcp-tools.test.js test/triage-command.test.js test/no-orphan-tests.test.js test/supply-command.test.js test/posture-command.test.js test/labs-command.test.js test/compliance-command.test.js test/check-doc-drift.test.js test/dist-chunks-tracked.test.js && node ../scripts/lint-command-descriptions.mjs",
72
+ "test:lifecycle": "node --test test/lsp-protocol-smoke.test.js test/ide-surfaces.test.js test/detector-liveness.test.js test/bench-watchdog.test.js test/ci-parity.test.js test/dead-code.test.js test/no-dead-modules.test.js test/no-orphan-scripts.test.js test/no-stray-state.test.js test/tree-integrity.test.js test/stop-hook.test.js test/plugin-self-check.test.js test/skills-registry.test.js test/bodyguard.test.js test/cache-invalidator-guard.test.js test/dispatch-pre-tool.test.js test/dispatch-user-prompt.test.js test/session-start-model-capture.test.js test/sandbox.test.js test/sandbox-escape.test.js test/ci-templates.test.js test/agent-mcp-tools.test.js test/triage-command.test.js test/no-orphan-tests.test.js test/supply-command.test.js test/posture-command.test.js test/labs-command.test.js test/compliance-command.test.js test/check-doc-drift.test.js test/dist-chunks-tracked.test.js && node ../scripts/lint-command-descriptions.mjs",
73
73
  "test:eval": "node --test test/independent-eval.test.js test/realworld-recall.test.js",
74
74
  "test:discovery": "node --test test/discovery-partition.test.js test/discovery-lenses.test.js test/discovery-hunter.test.js test/discovery-confirm.test.js test/discovery-disprove.test.js test/discovery-judge.test.js test/discovery-run.test.js test/discovery-wiring.test.js test/discovery-llm-invoke.test.js",
75
75
  "eval:independent": "node ../bench/independent-eval/runner.mjs",
@@ -95,9 +95,20 @@
95
95
  "bench:proof-corpus": "node ../bench/proof-corpus/runner.mjs",
96
96
  "bench:proof-corpus:pins": "node ../bench/proof-corpus/runner.mjs --refresh-pins",
97
97
  "bench:engine-reconnect": "node ../bench/engine-reconnect/measure.mjs",
98
+ "bench:ttff": "node ../bench/ttff/runner.mjs",
99
+ "bench:ttff:check": "node ../bench/ttff/runner.mjs --check",
100
+ "bench:ttff:update-baseline": "node ../bench/ttff/runner.mjs --update-baseline",
98
101
  "bench:self-scan": "node ../bench/self-scan/measure.mjs",
99
102
  "bench:self-scan:check": "node ../bench/self-scan/check.mjs",
100
103
  "bench:mutation:check": "node ../bench/mutation/runner.mjs",
104
+ "bench:fix-correctness": "node ../bench/fix-correctness/runner.mjs",
105
+ "bench:iac-coverage": "node ../bench/iac-coverage/runner.mjs",
106
+ "bench:prompt-injection": "node ../bench/prompt-injection/runner.mjs",
107
+ "bench:prompt-injection:fetch": "node ../bench/prompt-injection/fetch.mjs",
108
+ "bench:secrets-precision": "node ../bench/secrets-precision/runner.mjs",
109
+ "bench:sca-replay": "node ../bench/sca-replay/runner.mjs",
110
+ "bench:sca-replay:fetch": "node ../bench/sca-replay/fetch.mjs",
111
+ "bench:sca-replay:label": "node ../bench/sca-replay/label.mjs",
101
112
  "bench:layer-recall": "node ../bench/layer-recall/runner.mjs",
102
113
  "bench:layer-recall:check": "node ../bench/layer-recall/runner.mjs --check",
103
114
  "bench:layer-recall:update-baseline": "node ../bench/layer-recall/runner.mjs --update-baseline",