@clear-capabilities/agentic-security-scanner 0.79.0 → 0.84.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.
Files changed (122) hide show
  1. package/dist/178.index.js +1 -1
  2. package/dist/333.index.js +283 -0
  3. package/dist/384.index.js +1 -1
  4. package/dist/637.index.js +1 -1
  5. package/dist/838.index.js +1 -1
  6. package/dist/839.index.js +170 -0
  7. package/dist/985.index.js +140 -1
  8. package/dist/agentic-security.mjs +10 -10
  9. package/dist/agentic-security.mjs.sha256 +1 -1
  10. package/package.json +7 -5
  11. package/src/.agentic-security/findings.json +117732 -0
  12. package/src/.agentic-security/last-scan.json +117732 -0
  13. package/src/.agentic-security/last-scan.json.sig +1 -0
  14. package/src/.agentic-security/scan-history.json +12946 -0
  15. package/src/.agentic-security/streak.json +21 -0
  16. package/src/dataflow/.agentic-security/findings.json +6086 -0
  17. package/src/dataflow/.agentic-security/last-scan.json +6086 -0
  18. package/src/dataflow/.agentic-security/last-scan.json.sig +1 -0
  19. package/src/dataflow/.agentic-security/scan-history.json +250 -0
  20. package/src/dataflow/.agentic-security/streak.json +21 -0
  21. package/src/dataflow/cross-service-taint.js +201 -0
  22. package/src/dataflow/formal-verify.js +204 -0
  23. package/src/dataflow/ifds-precise.js +222 -0
  24. package/src/dataflow/k2-summary-cache.js +153 -0
  25. package/src/dataflow/lib-taint-summaries.js +198 -0
  26. package/src/dataflow/privacy-taint.js +205 -0
  27. package/src/dataflow/smt-feasibility.js +189 -0
  28. package/src/engine.js +825 -127
  29. package/src/ir/.agentic-security/findings.json +4011 -0
  30. package/src/ir/.agentic-security/last-scan.json +4011 -0
  31. package/src/ir/.agentic-security/last-scan.json.sig +1 -0
  32. package/src/ir/.agentic-security/scan-history.json +193 -0
  33. package/src/ir/.agentic-security/streak.json +20 -0
  34. package/src/ir/cpp-preprocessor.js +142 -0
  35. package/src/ir/csharp-ir.js +604 -0
  36. package/src/ir/universal-ir.js +403 -0
  37. package/src/mcp/.agentic-security/findings.json +8632 -0
  38. package/src/mcp/.agentic-security/last-scan.json +8632 -0
  39. package/src/mcp/.agentic-security/last-scan.json.sig +1 -0
  40. package/src/mcp/.agentic-security/scan-history.json +331 -0
  41. package/src/mcp/.agentic-security/streak.json +20 -0
  42. package/src/mcp/tools.js +140 -1
  43. package/src/posture/.agentic-security/findings.json +77181 -0
  44. package/src/posture/.agentic-security/last-scan.json +77181 -0
  45. package/src/posture/.agentic-security/last-scan.json.sig +1 -0
  46. package/src/posture/.agentic-security/scan-history.json +8904 -0
  47. package/src/posture/.agentic-security/streak.json +21 -0
  48. package/src/posture/api-contract.js +193 -0
  49. package/src/posture/attack-taxonomy.js +227 -0
  50. package/src/posture/auditor-walkthrough.js +252 -0
  51. package/src/posture/claude-authorship.js +197 -0
  52. package/src/posture/compliance-frameworks/.agentic-security/findings.json +80 -0
  53. package/src/posture/compliance-frameworks/.agentic-security/last-scan.json +80 -0
  54. package/src/posture/compliance-frameworks/.agentic-security/last-scan.json.sig +1 -0
  55. package/src/posture/compliance-frameworks/.agentic-security/scan-history.json +90 -0
  56. package/src/posture/compliance-frameworks/.agentic-security/streak.json +22 -0
  57. package/src/posture/compliance-frameworks/ccpa.json +32 -0
  58. package/src/posture/compliance-frameworks/eu-ai-act.json +51 -0
  59. package/src/posture/compliance-frameworks/gdpr.json +45 -0
  60. package/src/posture/compliance-frameworks/hipaa-security-rule.json +56 -0
  61. package/src/posture/compliance-frameworks/nist-ai-600-1.json +51 -0
  62. package/src/posture/compliance-frameworks/nist-csf-2.json +73 -0
  63. package/src/posture/compliance-frameworks/owasp-asvs-5.json +79 -0
  64. package/src/posture/compliance-frameworks/owasp-llm-top-10.json +69 -0
  65. package/src/posture/compliance-policy.js +218 -0
  66. package/src/posture/composite-risk.js +122 -0
  67. package/src/posture/cross-repo-memory.js +180 -0
  68. package/src/posture/csharp-analysis.js +330 -0
  69. package/src/posture/dep-add-guard.js +197 -0
  70. package/src/posture/exploit-bundle.js +210 -0
  71. package/src/posture/federated-learning.js +172 -0
  72. package/src/posture/findings-memory.js +152 -0
  73. package/src/posture/fix-style-mirror.js +118 -0
  74. package/src/posture/git-history.js +141 -0
  75. package/src/posture/intent-context.js +175 -0
  76. package/src/posture/license-attributions.js +94 -0
  77. package/src/posture/license-graph.js +238 -0
  78. package/src/posture/model-rescan.js +76 -0
  79. package/src/posture/pattern-propagation.js +39 -0
  80. package/src/posture/pqc-migration-plan.js +158 -0
  81. package/src/posture/pr-augment.js +234 -0
  82. package/src/posture/reachability-filter.js +33 -2
  83. package/src/posture/realtime-cve-monitor.js +214 -0
  84. package/src/posture/risk-dollars.js +158 -0
  85. package/src/posture/runtime-correlation.js +174 -0
  86. package/src/posture/sbom-diff.js +171 -0
  87. package/src/posture/sca-policy.js +235 -0
  88. package/src/posture/sca-upgrade.js +259 -0
  89. package/src/posture/threat-model-auto.js +268 -0
  90. package/src/posture/threat-model-grounding.js +169 -0
  91. package/src/posture/time-to-fix.js +129 -0
  92. package/src/posture/triage-learning.js +170 -0
  93. package/src/posture/triage-memory.js +151 -0
  94. package/src/posture/triage.js +40 -1
  95. package/src/posture/watch-mode.js +171 -0
  96. package/src/posture/workflow-installer.js +231 -0
  97. package/src/sast/.agentic-security/findings.json +6154 -0
  98. package/src/sast/.agentic-security/last-scan.json +6154 -0
  99. package/src/sast/.agentic-security/last-scan.json.sig +1 -0
  100. package/src/sast/.agentic-security/scan-history.json +941 -0
  101. package/src/sast/.agentic-security/streak.json +22 -0
  102. package/src/sast/_secret-entropy.js +145 -0
  103. package/src/sast/cloud-iam.js +312 -0
  104. package/src/sast/cpp.js +138 -4
  105. package/src/sast/crypto-protocol.js +388 -0
  106. package/src/sast/csharp-tokenizer.js +392 -0
  107. package/src/sast/csharp.js +924 -138
  108. package/src/sast/dapp-frontend.js +200 -0
  109. package/src/sast/k8s-admission.js +271 -0
  110. package/src/sast/llm-app.js +272 -0
  111. package/src/sast/ml-supply-chain.js +259 -0
  112. package/src/sast/mobile.js +224 -0
  113. package/src/sast/post-quantum-crypto.js +348 -0
  114. package/src/sast/web3-advanced.js +375 -0
  115. package/src/sca/.agentic-security/findings.json +7460 -0
  116. package/src/sca/.agentic-security/last-scan.json +7460 -0
  117. package/src/sca/.agentic-security/last-scan.json.sig +1 -0
  118. package/src/sca/.agentic-security/scan-history.json +113 -0
  119. package/src/sca/.agentic-security/streak.json +21 -0
  120. package/src/sca/CLAUDE.md +161 -0
  121. package/src/sca/binary-metadata.js +37 -15
  122. package/src/sca/sigstore-verify.js +215 -0
@@ -0,0 +1 @@
1
+ 7bb61d3bece7b47b3d112df139e09a5a95a0c51828999fa1734804ee3f7b6efc
@@ -0,0 +1,331 @@
1
+ [
2
+ {
3
+ "timestamp": "2026-05-28T17:48:43.152Z",
4
+ "label": "scan",
5
+ "total": 35,
6
+ "critical": 0,
7
+ "high": 0,
8
+ "medium": 35,
9
+ "low": 0,
10
+ "kev": 0,
11
+ "ids": [
12
+ "struct:audit.js:102:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
13
+ "struct:audit.js:113:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
14
+ "struct:audit.js:127:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
15
+ "struct:audit.js:128:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
16
+ "struct:audit.js:52:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
17
+ "struct:audit.js:54:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
18
+ "struct:audit.js:88:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
19
+ "struct:server.js:32:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
20
+ "struct:server.js:49:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
21
+ "struct:tools.js:159:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
22
+ "struct:tools.js:163:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
23
+ "struct:tools.js:167:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
24
+ "struct:tools.js:196:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
25
+ "struct:tools.js:211:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
26
+ "struct:tools.js:226:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
27
+ "struct:tools.js:227:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
28
+ "struct:tools.js:279:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
29
+ "struct:tools.js:318:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
30
+ "struct:tools.js:326:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
31
+ "struct:tools.js:533:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
32
+ "struct:tools.js:669:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
33
+ "struct:tools.js:744:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
34
+ "struct:tools.js:746:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
35
+ "struct:tools.js:751:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
36
+ "struct:tools.js:754:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
37
+ "struct:tools.js:833:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
38
+ "struct:tools.js:842:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
39
+ "struct:tools.js:871:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
40
+ "struct:tools.js:873:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
41
+ "toctou-fs:audit.js:127",
42
+ "toctou-fs:audit.js:52",
43
+ "toctou-fs:tools.js:196",
44
+ "toctou-fs:tools.js:318",
45
+ "toctou-fs:tools.js:751",
46
+ "toctou-fs:tools.js:833"
47
+ ]
48
+ },
49
+ {
50
+ "timestamp": "2026-05-28T18:12:31.102Z",
51
+ "label": "scan",
52
+ "total": 35,
53
+ "critical": 0,
54
+ "high": 0,
55
+ "medium": 35,
56
+ "low": 0,
57
+ "kev": 0,
58
+ "ids": [
59
+ "struct:audit.js:102:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
60
+ "struct:audit.js:113:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
61
+ "struct:audit.js:127:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
62
+ "struct:audit.js:128:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
63
+ "struct:audit.js:52:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
64
+ "struct:audit.js:54:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
65
+ "struct:audit.js:88:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
66
+ "struct:server.js:32:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
67
+ "struct:server.js:49:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
68
+ "struct:tools.js:159:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
69
+ "struct:tools.js:163:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
70
+ "struct:tools.js:167:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
71
+ "struct:tools.js:196:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
72
+ "struct:tools.js:211:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
73
+ "struct:tools.js:226:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
74
+ "struct:tools.js:227:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
75
+ "struct:tools.js:279:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
76
+ "struct:tools.js:318:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
77
+ "struct:tools.js:326:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
78
+ "struct:tools.js:533:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
79
+ "struct:tools.js:669:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
80
+ "struct:tools.js:744:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
81
+ "struct:tools.js:746:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
82
+ "struct:tools.js:751:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
83
+ "struct:tools.js:754:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
84
+ "struct:tools.js:833:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
85
+ "struct:tools.js:842:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
86
+ "struct:tools.js:871:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
87
+ "struct:tools.js:873:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
88
+ "toctou-fs:audit.js:127",
89
+ "toctou-fs:audit.js:52",
90
+ "toctou-fs:tools.js:196",
91
+ "toctou-fs:tools.js:318",
92
+ "toctou-fs:tools.js:751",
93
+ "toctou-fs:tools.js:833"
94
+ ]
95
+ },
96
+ {
97
+ "timestamp": "2026-05-28T18:14:00.048Z",
98
+ "label": "scan",
99
+ "total": 35,
100
+ "critical": 0,
101
+ "high": 0,
102
+ "medium": 35,
103
+ "low": 0,
104
+ "kev": 0,
105
+ "ids": [
106
+ "struct:audit.js:102:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
107
+ "struct:audit.js:113:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
108
+ "struct:audit.js:127:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
109
+ "struct:audit.js:128:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
110
+ "struct:audit.js:52:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
111
+ "struct:audit.js:54:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
112
+ "struct:audit.js:88:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
113
+ "struct:server.js:32:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
114
+ "struct:server.js:49:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
115
+ "struct:tools.js:159:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
116
+ "struct:tools.js:163:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
117
+ "struct:tools.js:167:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
118
+ "struct:tools.js:196:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
119
+ "struct:tools.js:211:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
120
+ "struct:tools.js:226:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
121
+ "struct:tools.js:227:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
122
+ "struct:tools.js:281:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
123
+ "struct:tools.js:320:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
124
+ "struct:tools.js:328:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
125
+ "struct:tools.js:535:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
126
+ "struct:tools.js:671:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
127
+ "struct:tools.js:746:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
128
+ "struct:tools.js:748:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
129
+ "struct:tools.js:753:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
130
+ "struct:tools.js:756:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
131
+ "struct:tools.js:835:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
132
+ "struct:tools.js:844:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
133
+ "struct:tools.js:873:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
134
+ "struct:tools.js:875:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
135
+ "toctou-fs:audit.js:127",
136
+ "toctou-fs:audit.js:52",
137
+ "toctou-fs:tools.js:196",
138
+ "toctou-fs:tools.js:320",
139
+ "toctou-fs:tools.js:753",
140
+ "toctou-fs:tools.js:835"
141
+ ]
142
+ },
143
+ {
144
+ "timestamp": "2026-05-29T20:12:38.328Z",
145
+ "label": "scan",
146
+ "total": 35,
147
+ "critical": 0,
148
+ "high": 0,
149
+ "medium": 35,
150
+ "low": 0,
151
+ "kev": 0,
152
+ "ids": [
153
+ "struct:audit.js:102:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
154
+ "struct:audit.js:113:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
155
+ "struct:audit.js:127:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
156
+ "struct:audit.js:128:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
157
+ "struct:audit.js:52:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
158
+ "struct:audit.js:54:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
159
+ "struct:audit.js:88:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
160
+ "struct:server.js:32:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
161
+ "struct:server.js:49:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
162
+ "struct:tools.js:159:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
163
+ "struct:tools.js:163:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
164
+ "struct:tools.js:167:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
165
+ "struct:tools.js:196:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
166
+ "struct:tools.js:211:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
167
+ "struct:tools.js:226:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
168
+ "struct:tools.js:227:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
169
+ "struct:tools.js:281:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
170
+ "struct:tools.js:320:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
171
+ "struct:tools.js:328:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
172
+ "struct:tools.js:535:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
173
+ "struct:tools.js:671:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
174
+ "struct:tools.js:746:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
175
+ "struct:tools.js:748:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
176
+ "struct:tools.js:753:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
177
+ "struct:tools.js:756:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
178
+ "struct:tools.js:835:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
179
+ "struct:tools.js:844:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
180
+ "struct:tools.js:873:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
181
+ "struct:tools.js:875:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
182
+ "toctou-fs:audit.js:127",
183
+ "toctou-fs:audit.js:52",
184
+ "toctou-fs:tools.js:196",
185
+ "toctou-fs:tools.js:320",
186
+ "toctou-fs:tools.js:753",
187
+ "toctou-fs:tools.js:835"
188
+ ]
189
+ },
190
+ {
191
+ "timestamp": "2026-05-29T20:12:45.655Z",
192
+ "label": "scan",
193
+ "total": 35,
194
+ "critical": 0,
195
+ "high": 0,
196
+ "medium": 35,
197
+ "low": 0,
198
+ "kev": 0,
199
+ "ids": [
200
+ "struct:audit.js:102:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
201
+ "struct:audit.js:113:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
202
+ "struct:audit.js:127:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
203
+ "struct:audit.js:128:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
204
+ "struct:audit.js:52:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
205
+ "struct:audit.js:54:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
206
+ "struct:audit.js:88:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
207
+ "struct:server.js:32:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
208
+ "struct:server.js:49:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
209
+ "struct:tools.js:159:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
210
+ "struct:tools.js:163:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
211
+ "struct:tools.js:167:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
212
+ "struct:tools.js:196:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
213
+ "struct:tools.js:211:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
214
+ "struct:tools.js:226:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
215
+ "struct:tools.js:227:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
216
+ "struct:tools.js:281:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
217
+ "struct:tools.js:320:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
218
+ "struct:tools.js:328:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
219
+ "struct:tools.js:535:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
220
+ "struct:tools.js:671:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
221
+ "struct:tools.js:746:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
222
+ "struct:tools.js:748:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
223
+ "struct:tools.js:753:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
224
+ "struct:tools.js:756:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
225
+ "struct:tools.js:835:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
226
+ "struct:tools.js:844:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
227
+ "struct:tools.js:873:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
228
+ "struct:tools.js:875:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
229
+ "toctou-fs:audit.js:127",
230
+ "toctou-fs:audit.js:52",
231
+ "toctou-fs:tools.js:196",
232
+ "toctou-fs:tools.js:320",
233
+ "toctou-fs:tools.js:753",
234
+ "toctou-fs:tools.js:835"
235
+ ]
236
+ },
237
+ {
238
+ "timestamp": "2026-05-29T20:35:14.131Z",
239
+ "label": "scan",
240
+ "total": 35,
241
+ "critical": 0,
242
+ "high": 0,
243
+ "medium": 35,
244
+ "low": 0,
245
+ "kev": 0,
246
+ "ids": [
247
+ "struct:audit.js:102:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
248
+ "struct:audit.js:113:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
249
+ "struct:audit.js:127:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
250
+ "struct:audit.js:128:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
251
+ "struct:audit.js:52:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
252
+ "struct:audit.js:54:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
253
+ "struct:audit.js:88:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
254
+ "struct:server.js:32:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
255
+ "struct:server.js:49:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
256
+ "struct:tools.js:159:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
257
+ "struct:tools.js:163:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
258
+ "struct:tools.js:167:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
259
+ "struct:tools.js:196:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
260
+ "struct:tools.js:211:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
261
+ "struct:tools.js:226:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
262
+ "struct:tools.js:227:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
263
+ "struct:tools.js:281:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
264
+ "struct:tools.js:320:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
265
+ "struct:tools.js:328:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
266
+ "struct:tools.js:535:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
267
+ "struct:tools.js:671:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
268
+ "struct:tools.js:746:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
269
+ "struct:tools.js:748:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
270
+ "struct:tools.js:753:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
271
+ "struct:tools.js:756:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
272
+ "struct:tools.js:835:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
273
+ "struct:tools.js:844:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
274
+ "struct:tools.js:873:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
275
+ "struct:tools.js:875:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
276
+ "toctou-fs:audit.js:127",
277
+ "toctou-fs:audit.js:52",
278
+ "toctou-fs:tools.js:196",
279
+ "toctou-fs:tools.js:320",
280
+ "toctou-fs:tools.js:753",
281
+ "toctou-fs:tools.js:835"
282
+ ]
283
+ },
284
+ {
285
+ "timestamp": "2026-05-29T20:35:23.436Z",
286
+ "label": "scan",
287
+ "total": 35,
288
+ "critical": 0,
289
+ "high": 0,
290
+ "medium": 35,
291
+ "low": 0,
292
+ "kev": 0,
293
+ "ids": [
294
+ "struct:audit.js:102:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
295
+ "struct:audit.js:113:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
296
+ "struct:audit.js:127:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
297
+ "struct:audit.js:128:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
298
+ "struct:audit.js:52:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
299
+ "struct:audit.js:54:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
300
+ "struct:audit.js:88:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
301
+ "struct:server.js:32:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
302
+ "struct:server.js:49:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
303
+ "struct:tools.js:159:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
304
+ "struct:tools.js:163:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
305
+ "struct:tools.js:167:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
306
+ "struct:tools.js:196:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
307
+ "struct:tools.js:211:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
308
+ "struct:tools.js:226:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
309
+ "struct:tools.js:227:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
310
+ "struct:tools.js:281:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
311
+ "struct:tools.js:320:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
312
+ "struct:tools.js:328:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
313
+ "struct:tools.js:535:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
314
+ "struct:tools.js:671:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
315
+ "struct:tools.js:746:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
316
+ "struct:tools.js:748:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
317
+ "struct:tools.js:753:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
318
+ "struct:tools.js:756:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
319
+ "struct:tools.js:835:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
320
+ "struct:tools.js:844:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
321
+ "struct:tools.js:873:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
322
+ "struct:tools.js:875:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
323
+ "toctou-fs:audit.js:127",
324
+ "toctou-fs:audit.js:52",
325
+ "toctou-fs:tools.js:196",
326
+ "toctou-fs:tools.js:320",
327
+ "toctou-fs:tools.js:753",
328
+ "toctou-fs:tools.js:835"
329
+ ]
330
+ }
331
+ ]
@@ -0,0 +1,20 @@
1
+ {
2
+ "firstScanDate": "2026-05-28T17:48:43.176Z",
3
+ "lastScanDate": "2026-05-29T20:35:23.458Z",
4
+ "totalScans": 7,
5
+ "daysCleanCritical": 2,
6
+ "lastCleanDate": "2026-05-29",
7
+ "lastCriticalDate": null,
8
+ "hasEverHadCritical": false,
9
+ "bestDaysCleanCritical": 2,
10
+ "totalFindingsAtFirstScan": 40,
11
+ "totalFindingsAtLastScan": 40,
12
+ "totalFixesInferred": 0,
13
+ "lastGrade": "A-",
14
+ "bestGrade": "A-",
15
+ "launchCheckPassedAt": null,
16
+ "achievements": [
17
+ "first-scan"
18
+ ],
19
+ "previousGrade": "A-"
20
+ }
package/src/mcp/tools.js CHANGED
@@ -238,6 +238,8 @@ function _findById(scan, id) {
238
238
  if (!scan) return null;
239
239
  return (scan.findings || []).find(f => f.id === id)
240
240
  || (scan.secrets || []).find(f => f.id === id)
241
+ || (scan.supplyChain || []).find(f => f.id === id)
242
+ || (scan.logicVulns || []).find(f => f.id === id)
241
243
  || null;
242
244
  }
243
245
 
@@ -468,6 +470,19 @@ export const explain_finding = {
468
470
  confidence: f.confidence ?? null,
469
471
  hasReplacementFix: typeof f.fix?.replacement === 'string',
470
472
  integrity: status,
473
+ // Risk-signal passthrough so agents can decide priority without
474
+ // re-reading last-scan.json or re-fetching OSV/KEV/EPSS. compositeRisk
475
+ // is the canonical sort key; the other fields are its provenance.
476
+ compositeRisk: f.compositeRisk ?? null,
477
+ compositeRiskTier: f.compositeRiskTier ?? null,
478
+ compositeRiskFactors: Array.isArray(f.compositeRiskFactors) ? f.compositeRiskFactors : [],
479
+ exploitability: f.exploitability ?? null,
480
+ exploitabilityTier: f.exploitabilityTier ?? null,
481
+ mitigationVerdict: f.mitigationVerdict ?? null,
482
+ kev: !!(f.kev || f.kevListed || f.weaponized),
483
+ epssScore: typeof f.epssScore === 'number' ? f.epssScore : null,
484
+ epssPercentile: typeof f.epssPercentile === 'number' ? f.epssPercentile : null,
485
+ exploitedNow: !!f.exploitedNow,
471
486
  };
472
487
  },
473
488
  };
@@ -931,6 +946,56 @@ export const read_agents_memory = {
931
946
  },
932
947
  };
933
948
 
949
+ // ─── query_triage_memory ───────────────────────────────────────────────────
950
+ // Natural-language Q&A over past triage decisions (wont-fix / false-positive
951
+ // markings + reasons). Backed by .agentic-security/triage-memory.jsonl, which
952
+ // is auto-populated by triage.transition(). Returns at most 10 most-relevant
953
+ // past decisions.
954
+
955
+ export const query_triage_memory = {
956
+ name: 'query_triage_memory',
957
+ description: 'Search past triage decisions (wont-fix / false-positive) by natural-language query. Returns up to 10 most-relevant past decisions with their reasons. Use when you see a new finding and want to know "did we already decide on something like this?" — answers in seconds without re-reading the full AGENTS.md narrative.',
958
+ inputSchema: {
959
+ type: 'object',
960
+ additionalProperties: false,
961
+ properties: {
962
+ query: { type: 'string', description: 'Free-text terms to match against past reasons / vuln text / file paths / family names.' },
963
+ },
964
+ },
965
+ async handler({ query }, ctx) {
966
+ const { queryMemory } = await import('../posture/triage-memory.js');
967
+ const results = queryMemory(ctx.sessionRoot, query || '');
968
+ return {
969
+ _meta: META,
970
+ count: results.length,
971
+ results,
972
+ };
973
+ },
974
+ };
975
+
976
+ // ─── query_findings_memory ─────────────────────────────────────────────────
977
+ // Natural-language Q&A across the scanner's accumulated institutional
978
+ // memory: current findings + past triage decisions + scan history +
979
+ // AGENTS.md narrative. Use to answer "have we seen something like this
980
+ // before?" without reading multiple files.
981
+
982
+ export const query_findings_memory = {
983
+ name: 'query_findings_memory',
984
+ description: 'Search the scanner accumulated memory (current scan findings + past wont-fix/false-positive decisions + scan history + AGENTS.md narrative) by natural-language terms. Returns top-10 results scored by term-match count and ranked finding > triage > history > AGENTS.md.',
985
+ inputSchema: {
986
+ type: 'object',
987
+ additionalProperties: false,
988
+ properties: {
989
+ query: { type: 'string', description: 'Natural-language search terms (2+ chars each).' },
990
+ },
991
+ required: ['query'],
992
+ },
993
+ async handler({ query }, ctx) {
994
+ const { queryFindingsMemory } = await import('../posture/findings-memory.js');
995
+ return { _meta: META, ...queryFindingsMemory(ctx.sessionRoot, query || '') };
996
+ },
997
+ };
998
+
934
999
  // ─── lookup_cve ────────────────────────────────────────────────────────────
935
1000
  // LangChain harness-anatomy #8: bridge the knowledge-cutoff gap by exposing
936
1001
  // the local OSV / KEV / EPSS cache as a structured tool. Read-only — never
@@ -952,4 +1017,78 @@ export const lookup_cve = {
952
1017
  },
953
1018
  };
954
1019
 
955
- export const ALL_TOOLS = [scan_diff, query_taint, explain_finding, apply_fix, verify_fix, synthesize_fix, find_rule_module, append_scratchpad, read_scratchpad, append_agents_memory, read_agents_memory, lookup_cve];
1020
+ // ─── synthesize_sca_upgrade ───────────────────────────────────────────────
1021
+ // Phase 3 / Item 5 of the SCA improvement plan. Read-only counterpart to
1022
+ // apply_sca_upgrade — produces a structured upgrade plan via the
1023
+ // ecosystem's native --dry-run command. Safe to call any number of times.
1024
+ let _scaUpgrade;
1025
+ async function _getScaUpgrade() {
1026
+ if (!_scaUpgrade) _scaUpgrade = await import('../posture/sca-upgrade.js');
1027
+ return _scaUpgrade;
1028
+ }
1029
+ export const synthesize_sca_upgrade = {
1030
+ name: 'synthesize_sca_upgrade',
1031
+ description: 'Generate an upgrade plan for a single SCA finding. Runs the ecosystem dry-run (npm install --dry-run, pip install --dry-run, cargo update --dry-run). Returns { ecosystem, package, currentVersion, targetVersion, isBreaking, command, manifestFiles, dryRun, testCommand }. No writes.',
1032
+ inputSchema: {
1033
+ type: 'object',
1034
+ additionalProperties: false,
1035
+ properties: {
1036
+ finding_id: { type: 'string', minLength: 1, maxLength: 256 },
1037
+ },
1038
+ required: ['finding_id'],
1039
+ },
1040
+ async handler({ finding_id }, ctx) {
1041
+ const { scan, status } = _readLastScanVerified(ctx.sessionRoot, { allowUnsigned: true });
1042
+ if (!scan) throw new Error(`No usable scan state (${status}).`);
1043
+ const f = _findById(scan, finding_id);
1044
+ if (!f) throw new Error(`Finding not found: ${finding_id}`);
1045
+ if (f.type !== 'vulnerable_dep') {
1046
+ return { _meta: META, ok: false, reason: 'finding is not an SCA vulnerable_dep — use synthesize_fix for SAST findings' };
1047
+ }
1048
+ const { planScaUpgrade } = await _getScaUpgrade();
1049
+ const plan = await planScaUpgrade({ scanRoot: ctx.sessionRoot, finding: f });
1050
+ return { _meta: META, ...plan };
1051
+ },
1052
+ };
1053
+
1054
+ // ─── apply_sca_upgrade ────────────────────────────────────────────────────
1055
+ // Phase 3 / Item 5 of the SCA improvement plan. The MCP `apply_fix` path
1056
+ // refuses every package-manager manifest by design. This tool bypasses
1057
+ // that ONLY for the install pathway — it shells out to the ecosystem's
1058
+ // native package manager (npm / pip / cargo / go) which is the right
1059
+ // surface for safely modifying manifests + lockfiles. Backs up affected
1060
+ // manifests before the install; runs the project's test command (if
1061
+ // detected); rolls back manifests if tests fail.
1062
+ export const apply_sca_upgrade = {
1063
+ name: 'apply_sca_upgrade',
1064
+ description: 'Apply a vulnerable_dep upgrade. Backs up manifests, runs the package manager, runs the project test command, restores manifests on test failure. Requires confirm:true. Set run_tests:false to skip the test gate (NOT recommended).',
1065
+ inputSchema: {
1066
+ type: 'object',
1067
+ additionalProperties: false,
1068
+ properties: {
1069
+ finding_id: { type: 'string', minLength: 1, maxLength: 256 },
1070
+ confirm: { type: 'boolean' },
1071
+ run_tests: { type: 'boolean' },
1072
+ },
1073
+ required: ['finding_id', 'confirm'],
1074
+ },
1075
+ async handler({ finding_id, confirm, run_tests = true }, ctx) {
1076
+ if (confirm !== true) {
1077
+ return { _meta: META, applied: false, reason: 'apply_sca_upgrade requires confirm: true.' };
1078
+ }
1079
+ const { scan, status } = _readLastScanVerified(ctx.sessionRoot, { allowUnsigned: false });
1080
+ if (!scan) {
1081
+ return { _meta: META, applied: false, reason: `last-scan.json failed integrity check: ${status}. Run a fresh scan.` };
1082
+ }
1083
+ const f = _findById(scan, finding_id);
1084
+ if (!f) return { _meta: META, applied: false, reason: `Finding not found: ${finding_id}` };
1085
+ if (f.type !== 'vulnerable_dep') {
1086
+ return { _meta: META, applied: false, reason: 'finding is not an SCA vulnerable_dep — use apply_fix for SAST findings' };
1087
+ }
1088
+ const { applyScaUpgrade } = await _getScaUpgrade();
1089
+ const result = await applyScaUpgrade({ scanRoot: ctx.sessionRoot, finding: f, runTests: run_tests });
1090
+ return { _meta: META, ...result };
1091
+ },
1092
+ };
1093
+
1094
+ export const ALL_TOOLS = [scan_diff, query_taint, explain_finding, apply_fix, verify_fix, synthesize_fix, find_rule_module, append_scratchpad, read_scratchpad, append_agents_memory, read_agents_memory, lookup_cve, synthesize_sca_upgrade, apply_sca_upgrade, query_triage_memory, query_findings_memory];