hackmyagent 0.7.2 → 0.8.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 (393) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +172 -261
  3. package/dist/abgr/controls.d.ts +35 -0
  4. package/dist/abgr/controls.d.ts.map +1 -0
  5. package/dist/abgr/controls.js +1058 -0
  6. package/dist/abgr/controls.js.map +1 -0
  7. package/dist/abgr/detector.d.ts +45 -0
  8. package/dist/abgr/detector.d.ts.map +1 -0
  9. package/dist/abgr/detector.js +175 -0
  10. package/dist/abgr/detector.js.map +1 -0
  11. package/dist/abgr/index.d.ts +24 -0
  12. package/dist/abgr/index.d.ts.map +1 -0
  13. package/dist/abgr/index.js +50 -0
  14. package/dist/abgr/index.js.map +1 -0
  15. package/dist/abgr/scorer.d.ts +36 -0
  16. package/dist/abgr/scorer.d.ts.map +1 -0
  17. package/dist/abgr/scorer.js +205 -0
  18. package/dist/abgr/scorer.js.map +1 -0
  19. package/dist/abgr/templates.d.ts +35 -0
  20. package/dist/abgr/templates.d.ts.map +1 -0
  21. package/dist/abgr/templates.js +668 -0
  22. package/dist/abgr/templates.js.map +1 -0
  23. package/dist/abgr/tier.d.ts +27 -0
  24. package/dist/abgr/tier.d.ts.map +1 -0
  25. package/dist/abgr/tier.js +115 -0
  26. package/dist/abgr/tier.js.map +1 -0
  27. package/dist/abgr/types.d.ts +59 -0
  28. package/dist/abgr/types.d.ts.map +1 -0
  29. package/dist/abgr/types.js +10 -0
  30. package/dist/abgr/types.js.map +1 -0
  31. package/dist/agent-scan/checks.d.ts +6 -0
  32. package/dist/agent-scan/checks.d.ts.map +1 -0
  33. package/dist/agent-scan/checks.js +93 -0
  34. package/dist/agent-scan/checks.js.map +1 -0
  35. package/dist/agent-scan/index.d.ts +10 -0
  36. package/dist/agent-scan/index.d.ts.map +1 -0
  37. package/dist/agent-scan/index.js +16 -0
  38. package/dist/agent-scan/index.js.map +1 -0
  39. package/dist/agent-scan/scanner.d.ts +31 -0
  40. package/dist/agent-scan/scanner.d.ts.map +1 -0
  41. package/dist/agent-scan/scanner.js +484 -0
  42. package/dist/agent-scan/scanner.js.map +1 -0
  43. package/dist/agent-scan/types.d.ts +63 -0
  44. package/dist/agent-scan/types.d.ts.map +1 -0
  45. package/dist/agent-scan/types.js +10 -0
  46. package/dist/agent-scan/types.js.map +1 -0
  47. package/dist/arp/cli/index.d.ts +3 -0
  48. package/dist/arp/cli/index.d.ts.map +1 -0
  49. package/dist/arp/cli/index.js +225 -0
  50. package/dist/arp/cli/index.js.map +1 -0
  51. package/dist/arp/config/loader.d.ts +8 -0
  52. package/dist/arp/config/loader.d.ts.map +1 -0
  53. package/dist/arp/config/loader.js +102 -0
  54. package/dist/arp/config/loader.js.map +1 -0
  55. package/dist/arp/enforcement/kill-switch.d.ts +22 -0
  56. package/dist/arp/enforcement/kill-switch.d.ts.map +1 -0
  57. package/dist/arp/enforcement/kill-switch.js +122 -0
  58. package/dist/arp/enforcement/kill-switch.js.map +1 -0
  59. package/dist/arp/engine/event-engine.d.ts +29 -0
  60. package/dist/arp/engine/event-engine.d.ts.map +1 -0
  61. package/dist/arp/engine/event-engine.js +233 -0
  62. package/dist/arp/engine/event-engine.js.map +1 -0
  63. package/dist/arp/index.d.ts +81 -0
  64. package/dist/arp/index.d.ts.map +1 -0
  65. package/dist/arp/index.js +239 -0
  66. package/dist/arp/index.js.map +1 -0
  67. package/dist/arp/intelligence/adapters.d.ts +45 -0
  68. package/dist/arp/intelligence/adapters.d.ts.map +1 -0
  69. package/dist/arp/intelligence/adapters.js +222 -0
  70. package/dist/arp/intelligence/adapters.js.map +1 -0
  71. package/dist/arp/intelligence/anomaly.d.ts +32 -0
  72. package/dist/arp/intelligence/anomaly.d.ts.map +1 -0
  73. package/dist/arp/intelligence/anomaly.js +80 -0
  74. package/dist/arp/intelligence/anomaly.js.map +1 -0
  75. package/dist/arp/intelligence/budget.d.ts +33 -0
  76. package/dist/arp/intelligence/budget.d.ts.map +1 -0
  77. package/dist/arp/intelligence/budget.js +150 -0
  78. package/dist/arp/intelligence/budget.js.map +1 -0
  79. package/dist/arp/intelligence/coordinator.d.ts +43 -0
  80. package/dist/arp/intelligence/coordinator.d.ts.map +1 -0
  81. package/dist/arp/intelligence/coordinator.js +301 -0
  82. package/dist/arp/intelligence/coordinator.js.map +1 -0
  83. package/dist/arp/interceptors/a2a-protocol.d.ts +29 -0
  84. package/dist/arp/interceptors/a2a-protocol.d.ts.map +1 -0
  85. package/dist/arp/interceptors/a2a-protocol.js +111 -0
  86. package/dist/arp/interceptors/a2a-protocol.js.map +1 -0
  87. package/dist/arp/interceptors/filesystem.d.ts +33 -0
  88. package/dist/arp/interceptors/filesystem.d.ts.map +1 -0
  89. package/dist/arp/interceptors/filesystem.js +199 -0
  90. package/dist/arp/interceptors/filesystem.js.map +1 -0
  91. package/dist/arp/interceptors/mcp-protocol.d.ts +25 -0
  92. package/dist/arp/interceptors/mcp-protocol.d.ts.map +1 -0
  93. package/dist/arp/interceptors/mcp-protocol.js +126 -0
  94. package/dist/arp/interceptors/mcp-protocol.js.map +1 -0
  95. package/dist/arp/interceptors/network.d.ts +26 -0
  96. package/dist/arp/interceptors/network.d.ts.map +1 -0
  97. package/dist/arp/interceptors/network.js +146 -0
  98. package/dist/arp/interceptors/network.js.map +1 -0
  99. package/dist/arp/interceptors/process.d.ts +26 -0
  100. package/dist/arp/interceptors/process.d.ts.map +1 -0
  101. package/dist/arp/interceptors/process.js +157 -0
  102. package/dist/arp/interceptors/process.js.map +1 -0
  103. package/dist/arp/interceptors/prompt.d.ts +29 -0
  104. package/dist/arp/interceptors/prompt.d.ts.map +1 -0
  105. package/dist/arp/interceptors/prompt.js +82 -0
  106. package/dist/arp/interceptors/prompt.js.map +1 -0
  107. package/dist/arp/license/index.d.ts +59 -0
  108. package/dist/arp/license/index.d.ts.map +1 -0
  109. package/dist/arp/license/index.js +78 -0
  110. package/dist/arp/license/index.js.map +1 -0
  111. package/dist/arp/monitors/filesystem.d.ts +21 -0
  112. package/dist/arp/monitors/filesystem.d.ts.map +1 -0
  113. package/dist/arp/monitors/filesystem.js +141 -0
  114. package/dist/arp/monitors/filesystem.js.map +1 -0
  115. package/dist/arp/monitors/network.d.ts +32 -0
  116. package/dist/arp/monitors/network.d.ts.map +1 -0
  117. package/dist/arp/monitors/network.js +301 -0
  118. package/dist/arp/monitors/network.js.map +1 -0
  119. package/dist/arp/monitors/process.d.ts +24 -0
  120. package/dist/arp/monitors/process.d.ts.map +1 -0
  121. package/dist/arp/monitors/process.js +205 -0
  122. package/dist/arp/monitors/process.js.map +1 -0
  123. package/dist/arp/patterns/ai-threats.d.ts +48 -0
  124. package/dist/arp/patterns/ai-threats.d.ts.map +1 -0
  125. package/dist/arp/patterns/ai-threats.js +215 -0
  126. package/dist/arp/patterns/ai-threats.js.map +1 -0
  127. package/dist/arp/proxy/forward.d.ts +23 -0
  128. package/dist/arp/proxy/forward.d.ts.map +1 -0
  129. package/dist/arp/proxy/forward.js +152 -0
  130. package/dist/arp/proxy/forward.js.map +1 -0
  131. package/dist/arp/proxy/server.d.ts +45 -0
  132. package/dist/arp/proxy/server.d.ts.map +1 -0
  133. package/dist/arp/proxy/server.js +331 -0
  134. package/dist/arp/proxy/server.js.map +1 -0
  135. package/dist/arp/reporting/local-log.d.ts +22 -0
  136. package/dist/arp/reporting/local-log.d.ts.map +1 -0
  137. package/dist/arp/reporting/local-log.js +116 -0
  138. package/dist/arp/reporting/local-log.js.map +1 -0
  139. package/dist/arp/types.d.ts +230 -0
  140. package/dist/arp/types.d.ts.map +1 -0
  141. package/dist/arp/types.js +4 -0
  142. package/dist/arp/types.js.map +1 -0
  143. package/dist/attack/custom-payloads.d.ts +11 -0
  144. package/dist/attack/custom-payloads.d.ts.map +1 -0
  145. package/dist/attack/custom-payloads.js +108 -0
  146. package/dist/attack/custom-payloads.js.map +1 -0
  147. package/dist/attack/fail-policy.d.ts +16 -0
  148. package/dist/attack/fail-policy.d.ts.map +1 -0
  149. package/dist/attack/fail-policy.js +36 -0
  150. package/dist/attack/fail-policy.js.map +1 -0
  151. package/dist/attack/index.d.ts +12 -0
  152. package/dist/attack/index.d.ts.map +1 -0
  153. package/dist/attack/index.js +30 -0
  154. package/dist/attack/index.js.map +1 -0
  155. package/dist/attack/payloads/a2a-attacks.d.ts +12 -0
  156. package/dist/attack/payloads/a2a-attacks.d.ts.map +1 -0
  157. package/dist/attack/payloads/a2a-attacks.js +221 -0
  158. package/dist/attack/payloads/a2a-attacks.js.map +1 -0
  159. package/dist/attack/payloads/capability-abuse.d.ts +8 -0
  160. package/dist/attack/payloads/capability-abuse.d.ts.map +1 -0
  161. package/dist/attack/payloads/capability-abuse.js +222 -0
  162. package/dist/attack/payloads/capability-abuse.js.map +1 -0
  163. package/dist/attack/payloads/context-manipulation.d.ts +8 -0
  164. package/dist/attack/payloads/context-manipulation.d.ts.map +1 -0
  165. package/dist/attack/payloads/context-manipulation.js +217 -0
  166. package/dist/attack/payloads/context-manipulation.js.map +1 -0
  167. package/dist/attack/payloads/data-exfiltration.d.ts +8 -0
  168. package/dist/attack/payloads/data-exfiltration.d.ts.map +1 -0
  169. package/dist/attack/payloads/data-exfiltration.js +249 -0
  170. package/dist/attack/payloads/data-exfiltration.js.map +1 -0
  171. package/dist/attack/payloads/index.d.ts +29 -0
  172. package/dist/attack/payloads/index.d.ts.map +1 -0
  173. package/dist/attack/payloads/index.js +76 -0
  174. package/dist/attack/payloads/index.js.map +1 -0
  175. package/dist/attack/payloads/jailbreak.d.ts +8 -0
  176. package/dist/attack/payloads/jailbreak.d.ts.map +1 -0
  177. package/dist/attack/payloads/jailbreak.js +265 -0
  178. package/dist/attack/payloads/jailbreak.js.map +1 -0
  179. package/dist/attack/payloads/mcp-exploitation.d.ts +12 -0
  180. package/dist/attack/payloads/mcp-exploitation.d.ts.map +1 -0
  181. package/dist/attack/payloads/mcp-exploitation.js +221 -0
  182. package/dist/attack/payloads/mcp-exploitation.js.map +1 -0
  183. package/dist/attack/payloads/prompt-injection.d.ts +8 -0
  184. package/dist/attack/payloads/prompt-injection.d.ts.map +1 -0
  185. package/dist/attack/payloads/prompt-injection.js +262 -0
  186. package/dist/attack/payloads/prompt-injection.js.map +1 -0
  187. package/dist/attack/scanner.d.ts +84 -0
  188. package/dist/attack/scanner.d.ts.map +1 -0
  189. package/dist/attack/scanner.js +509 -0
  190. package/dist/attack/scanner.js.map +1 -0
  191. package/dist/attack/types.d.ts +153 -0
  192. package/dist/attack/types.d.ts.map +1 -0
  193. package/dist/attack/types.js +46 -0
  194. package/dist/attack/types.js.map +1 -0
  195. package/dist/benchmarks/index.d.ts +16 -0
  196. package/dist/benchmarks/index.d.ts.map +1 -0
  197. package/dist/benchmarks/index.js +27 -0
  198. package/dist/benchmarks/index.js.map +1 -0
  199. package/dist/benchmarks/oasb-1.d.ts +112 -0
  200. package/dist/benchmarks/oasb-1.d.ts.map +1 -0
  201. package/dist/benchmarks/oasb-1.js +1124 -0
  202. package/dist/benchmarks/oasb-1.js.map +1 -0
  203. package/dist/checker/check-skill.d.ts +48 -0
  204. package/dist/checker/check-skill.d.ts.map +1 -0
  205. package/dist/checker/check-skill.js +105 -0
  206. package/dist/checker/check-skill.js.map +1 -0
  207. package/dist/checker/index.d.ts +12 -0
  208. package/dist/checker/index.d.ts.map +1 -0
  209. package/dist/checker/index.js +16 -0
  210. package/dist/checker/index.js.map +1 -0
  211. package/dist/checker/permission-analyzer.d.ts +12 -0
  212. package/dist/checker/permission-analyzer.d.ts.map +1 -0
  213. package/dist/checker/permission-analyzer.js +84 -0
  214. package/dist/checker/permission-analyzer.js.map +1 -0
  215. package/dist/checker/publisher-verifier.d.ts +34 -0
  216. package/dist/checker/publisher-verifier.d.ts.map +1 -0
  217. package/dist/checker/publisher-verifier.js +121 -0
  218. package/dist/checker/publisher-verifier.js.map +1 -0
  219. package/dist/checker/skill-identifier.d.ts +14 -0
  220. package/dist/checker/skill-identifier.d.ts.map +1 -0
  221. package/dist/checker/skill-identifier.js +55 -0
  222. package/dist/checker/skill-identifier.js.map +1 -0
  223. package/dist/cli.d.ts +7 -0
  224. package/dist/cli.d.ts.map +1 -0
  225. package/dist/cli.js +3534 -0
  226. package/dist/cli.js.map +1 -0
  227. package/dist/hardening/index.d.ts +7 -0
  228. package/dist/hardening/index.d.ts.map +1 -0
  229. package/dist/hardening/index.js +9 -0
  230. package/dist/hardening/index.js.map +1 -0
  231. package/dist/hardening/llm-checks.d.ts +18 -0
  232. package/dist/hardening/llm-checks.d.ts.map +1 -0
  233. package/dist/hardening/llm-checks.js +434 -0
  234. package/dist/hardening/llm-checks.js.map +1 -0
  235. package/dist/hardening/mcp-tool-enum.d.ts +45 -0
  236. package/dist/hardening/mcp-tool-enum.d.ts.map +1 -0
  237. package/dist/hardening/mcp-tool-enum.js +315 -0
  238. package/dist/hardening/mcp-tool-enum.js.map +1 -0
  239. package/dist/hardening/scanner.d.ts +147 -0
  240. package/dist/hardening/scanner.d.ts.map +1 -0
  241. package/dist/hardening/scanner.js +5445 -0
  242. package/dist/hardening/scanner.js.map +1 -0
  243. package/dist/hardening/security-check.d.ts +85 -0
  244. package/dist/hardening/security-check.d.ts.map +1 -0
  245. package/dist/hardening/security-check.js +6 -0
  246. package/dist/hardening/security-check.js.map +1 -0
  247. package/dist/hardening/shell-checks.d.ts +21 -0
  248. package/dist/hardening/shell-checks.d.ts.map +1 -0
  249. package/dist/hardening/shell-checks.js +236 -0
  250. package/dist/hardening/shell-checks.js.map +1 -0
  251. package/dist/index.d.ts +38 -4
  252. package/dist/index.d.ts.map +1 -1
  253. package/dist/index.js +91 -3525
  254. package/dist/index.js.map +1 -1
  255. package/dist/mcp-server.js +10 -10
  256. package/dist/mcp-server.js.map +1 -1
  257. package/dist/oasb/config/dvaa-targets.d.ts +13 -0
  258. package/dist/oasb/config/dvaa-targets.d.ts.map +1 -0
  259. package/dist/oasb/config/dvaa-targets.js +89 -0
  260. package/dist/oasb/config/dvaa-targets.js.map +1 -0
  261. package/dist/oasb/harness/arp-wrapper.d.ts +29 -0
  262. package/dist/oasb/harness/arp-wrapper.d.ts.map +1 -0
  263. package/dist/oasb/harness/arp-wrapper.js +134 -0
  264. package/dist/oasb/harness/arp-wrapper.js.map +1 -0
  265. package/dist/oasb/harness/dvaa-client.d.ts +46 -0
  266. package/dist/oasb/harness/dvaa-client.d.ts.map +1 -0
  267. package/dist/oasb/harness/dvaa-client.js +98 -0
  268. package/dist/oasb/harness/dvaa-client.js.map +1 -0
  269. package/dist/oasb/harness/dvaa-manager.d.ts +17 -0
  270. package/dist/oasb/harness/dvaa-manager.d.ts.map +1 -0
  271. package/dist/oasb/harness/dvaa-manager.js +132 -0
  272. package/dist/oasb/harness/dvaa-manager.js.map +1 -0
  273. package/dist/oasb/harness/event-collector.d.ts +33 -0
  274. package/dist/oasb/harness/event-collector.d.ts.map +1 -0
  275. package/dist/oasb/harness/event-collector.js +86 -0
  276. package/dist/oasb/harness/event-collector.js.map +1 -0
  277. package/dist/oasb/harness/metrics.d.ts +14 -0
  278. package/dist/oasb/harness/metrics.d.ts.map +1 -0
  279. package/dist/oasb/harness/metrics.js +56 -0
  280. package/dist/oasb/harness/metrics.js.map +1 -0
  281. package/dist/oasb/harness/mock-llm-adapter.d.ts +34 -0
  282. package/dist/oasb/harness/mock-llm-adapter.d.ts.map +1 -0
  283. package/dist/oasb/harness/mock-llm-adapter.js +69 -0
  284. package/dist/oasb/harness/mock-llm-adapter.js.map +1 -0
  285. package/dist/oasb/harness/types.d.ts +74 -0
  286. package/dist/oasb/harness/types.d.ts.map +1 -0
  287. package/dist/oasb/harness/types.js +3 -0
  288. package/dist/oasb/harness/types.js.map +1 -0
  289. package/dist/plugins/core.d.ts +109 -0
  290. package/dist/plugins/core.d.ts.map +1 -0
  291. package/dist/plugins/core.js +30 -0
  292. package/dist/plugins/core.js.map +1 -0
  293. package/dist/plugins/credvault.d.ts +22 -0
  294. package/dist/plugins/credvault.d.ts.map +1 -0
  295. package/dist/plugins/credvault.js +374 -0
  296. package/dist/plugins/credvault.js.map +1 -0
  297. package/dist/plugins/signcrypt.d.ts +27 -0
  298. package/dist/plugins/signcrypt.d.ts.map +1 -0
  299. package/dist/plugins/signcrypt.js +317 -0
  300. package/dist/plugins/signcrypt.js.map +1 -0
  301. package/dist/plugins/skillguard.d.ts +25 -0
  302. package/dist/plugins/skillguard.d.ts.map +1 -0
  303. package/dist/plugins/skillguard.js +346 -0
  304. package/dist/plugins/skillguard.js.map +1 -0
  305. package/dist/registry/client.d.ts +125 -0
  306. package/dist/registry/client.d.ts.map +1 -0
  307. package/dist/registry/client.js +308 -0
  308. package/dist/registry/client.js.map +1 -0
  309. package/dist/registry/contribution.d.ts +178 -0
  310. package/dist/registry/contribution.d.ts.map +1 -0
  311. package/dist/registry/contribution.js +272 -0
  312. package/dist/registry/contribution.js.map +1 -0
  313. package/dist/registry/index.d.ts +3 -0
  314. package/dist/registry/index.d.ts.map +1 -0
  315. package/dist/registry/index.js +10 -0
  316. package/dist/registry/index.js.map +1 -0
  317. package/dist/scanner/external-scanner.d.ts +13 -0
  318. package/dist/scanner/external-scanner.d.ts.map +1 -0
  319. package/dist/scanner/external-scanner.js +299 -0
  320. package/dist/scanner/external-scanner.js.map +1 -0
  321. package/dist/scanner/index.d.ts +6 -0
  322. package/dist/scanner/index.d.ts.map +1 -0
  323. package/dist/scanner/index.js +9 -0
  324. package/dist/scanner/index.js.map +1 -0
  325. package/dist/scanner/types.d.ts +32 -0
  326. package/dist/scanner/types.d.ts.map +1 -0
  327. package/dist/scanner/types.js +6 -0
  328. package/dist/scanner/types.js.map +1 -0
  329. package/dist/semantic/deep-scan.d.ts +13 -0
  330. package/dist/semantic/deep-scan.d.ts.map +1 -0
  331. package/dist/semantic/deep-scan.js +63 -0
  332. package/dist/semantic/deep-scan.js.map +1 -0
  333. package/dist/semantic/index.d.ts +17 -0
  334. package/dist/semantic/index.d.ts.map +1 -0
  335. package/dist/semantic/index.js +39 -0
  336. package/dist/semantic/index.js.map +1 -0
  337. package/dist/semantic/integration/cost-estimator.d.ts +17 -0
  338. package/dist/semantic/integration/cost-estimator.d.ts.map +1 -0
  339. package/dist/semantic/integration/cost-estimator.js +54 -0
  340. package/dist/semantic/integration/cost-estimator.js.map +1 -0
  341. package/dist/semantic/integration/finding-adapter.d.ts +34 -0
  342. package/dist/semantic/integration/finding-adapter.d.ts.map +1 -0
  343. package/dist/semantic/integration/finding-adapter.js +41 -0
  344. package/dist/semantic/integration/finding-adapter.js.map +1 -0
  345. package/dist/semantic/integration/oasb-upgrader.d.ts +20 -0
  346. package/dist/semantic/integration/oasb-upgrader.d.ts.map +1 -0
  347. package/dist/semantic/integration/oasb-upgrader.js +47 -0
  348. package/dist/semantic/integration/oasb-upgrader.js.map +1 -0
  349. package/dist/semantic/llm/budget.d.ts +50 -0
  350. package/dist/semantic/llm/budget.d.ts.map +1 -0
  351. package/dist/semantic/llm/budget.js +139 -0
  352. package/dist/semantic/llm/budget.js.map +1 -0
  353. package/dist/semantic/llm/cache.d.ts +36 -0
  354. package/dist/semantic/llm/cache.d.ts.map +1 -0
  355. package/dist/semantic/llm/cache.js +103 -0
  356. package/dist/semantic/llm/cache.js.map +1 -0
  357. package/dist/semantic/llm/client.d.ts +49 -0
  358. package/dist/semantic/llm/client.d.ts.map +1 -0
  359. package/dist/semantic/llm/client.js +64 -0
  360. package/dist/semantic/llm/client.js.map +1 -0
  361. package/dist/semantic/llm/index.d.ts +33 -0
  362. package/dist/semantic/llm/index.d.ts.map +1 -0
  363. package/dist/semantic/llm/index.js +129 -0
  364. package/dist/semantic/llm/index.js.map +1 -0
  365. package/dist/semantic/llm/prompts.d.ts +30 -0
  366. package/dist/semantic/llm/prompts.d.ts.map +1 -0
  367. package/dist/semantic/llm/prompts.js +120 -0
  368. package/dist/semantic/llm/prompts.js.map +1 -0
  369. package/dist/semantic/structural/credential-context.d.ts +14 -0
  370. package/dist/semantic/structural/credential-context.d.ts.map +1 -0
  371. package/dist/semantic/structural/credential-context.js +295 -0
  372. package/dist/semantic/structural/credential-context.js.map +1 -0
  373. package/dist/semantic/structural/index.d.ts +28 -0
  374. package/dist/semantic/structural/index.d.ts.map +1 -0
  375. package/dist/semantic/structural/index.js +138 -0
  376. package/dist/semantic/structural/index.js.map +1 -0
  377. package/dist/semantic/structural/instruction.d.ts +19 -0
  378. package/dist/semantic/structural/instruction.d.ts.map +1 -0
  379. package/dist/semantic/structural/instruction.js +167 -0
  380. package/dist/semantic/structural/instruction.js.map +1 -0
  381. package/dist/semantic/structural/mcp-config.d.ts +22 -0
  382. package/dist/semantic/structural/mcp-config.d.ts.map +1 -0
  383. package/dist/semantic/structural/mcp-config.js +294 -0
  384. package/dist/semantic/structural/mcp-config.js.map +1 -0
  385. package/dist/semantic/structural/permission-model.d.ts +16 -0
  386. package/dist/semantic/structural/permission-model.d.ts.map +1 -0
  387. package/dist/semantic/structural/permission-model.js +121 -0
  388. package/dist/semantic/structural/permission-model.js.map +1 -0
  389. package/dist/semantic/types.d.ts +122 -0
  390. package/dist/semantic/types.d.ts.map +1 -0
  391. package/dist/semantic/types.js +10 -0
  392. package/dist/semantic/types.js.map +1 -0
  393. package/package.json +25 -14
@@ -0,0 +1,434 @@
1
+ "use strict";
2
+ /**
3
+ * Local LLM server detection and security checks.
4
+ * Detects running LLM inference servers (Ollama, LM Studio, vLLM, LocalAI,
5
+ * text-generation-webui) and checks for insecure defaults: no auth, bound to
6
+ * 0.0.0.0, no TLS, permissive CORS, unsafe model formats, secrets in configs.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.checkLocalLLMServers = checkLocalLLMServers;
43
+ exports.checkLLMConfigs = checkLLMConfigs;
44
+ const node_child_process_1 = require("node:child_process");
45
+ const fs = __importStar(require("fs/promises"));
46
+ const path = __importStar(require("path"));
47
+ const os = __importStar(require("os"));
48
+ const shell_checks_1 = require("./shell-checks");
49
+ const LLM_SERVERS = [
50
+ {
51
+ name: 'Ollama',
52
+ port: 11434,
53
+ processNames: ['ollama'],
54
+ probePath: '/api/tags',
55
+ configDirs: ['.ollama'],
56
+ },
57
+ {
58
+ name: 'LM Studio',
59
+ port: 1234,
60
+ processNames: ['lms'],
61
+ probePath: '/v1/models',
62
+ configDirs: ['.lmstudio'],
63
+ },
64
+ {
65
+ name: 'vLLM',
66
+ port: 8000,
67
+ processNames: ['vllm'],
68
+ probePath: '/v1/models',
69
+ configDirs: [],
70
+ },
71
+ {
72
+ name: 'LocalAI',
73
+ port: 8080,
74
+ processNames: ['local-ai'],
75
+ probePath: '/v1/models',
76
+ configDirs: ['.local-ai'],
77
+ },
78
+ {
79
+ name: 'text-generation-webui',
80
+ port: 7860,
81
+ processNames: ['text-generation'],
82
+ probePath: '/',
83
+ configDirs: [],
84
+ },
85
+ ];
86
+ // Unsafe model file extensions that allow arbitrary code execution
87
+ const UNSAFE_MODEL_EXTENSIONS = ['.pkl', '.pickle', '.bin'];
88
+ // Model directories to scan (relative to home)
89
+ const MODEL_DIRS = [
90
+ '.ollama/models',
91
+ '.lmstudio/models',
92
+ '.local-ai/models',
93
+ '.cache/huggingface/hub',
94
+ ];
95
+ const FETCH_TIMEOUT_MS = 2000;
96
+ // --- Helpers ---
97
+ /**
98
+ * Attempt to fetch a URL with a timeout. Returns the Response or null on failure.
99
+ */
100
+ async function probeFetch(url) {
101
+ const controller = new AbortController();
102
+ const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
103
+ try {
104
+ const resp = await fetch(url, { signal: controller.signal });
105
+ return resp;
106
+ }
107
+ catch {
108
+ return null;
109
+ }
110
+ finally {
111
+ clearTimeout(timer);
112
+ }
113
+ }
114
+ /**
115
+ * Get process listing. Returns raw ps output or empty string on failure.
116
+ */
117
+ function getProcessList() {
118
+ try {
119
+ return (0, node_child_process_1.execFileSync)('ps', ['aux'], { encoding: 'utf-8', timeout: 5000 });
120
+ }
121
+ catch {
122
+ return '';
123
+ }
124
+ }
125
+ /**
126
+ * Check if a process is listening on 0.0.0.0 by inspecting process args or env vars.
127
+ */
128
+ function isListeningOnAllInterfaces(serverName, processLine) {
129
+ // Check env var for Ollama
130
+ if (serverName === 'Ollama') {
131
+ const ollamaHost = process.env['OLLAMA_HOST'] || '';
132
+ if (ollamaHost.startsWith('0.0.0.0') || ollamaHost === ':11434') {
133
+ return true;
134
+ }
135
+ }
136
+ // Check process args for --host 0.0.0.0 or --bind 0.0.0.0
137
+ if (processLine) {
138
+ if (/--host\s+0\.0\.0\.0/.test(processLine) || /--bind\s+0\.0\.0\.0/.test(processLine)) {
139
+ return true;
140
+ }
141
+ if (/--listen\s+0\.0\.0\.0/.test(processLine)) {
142
+ return true;
143
+ }
144
+ }
145
+ return false;
146
+ }
147
+ // --- Main check functions ---
148
+ /**
149
+ * Detect running local LLM servers and check for security issues.
150
+ * Returns findings for LLM-001 through LLM-006.
151
+ */
152
+ async function checkLocalLLMServers() {
153
+ const findings = [];
154
+ // Get process list once for all servers
155
+ const psOutput = getProcessList();
156
+ for (const server of LLM_SERVERS) {
157
+ // Find process line for this server (if running)
158
+ const processLine = psOutput
159
+ .split('\n')
160
+ .find(line => server.processNames.some(pn => line.includes(pn)));
161
+ // Probe the server's default port
162
+ const resp = await probeFetch(`http://127.0.0.1:${server.port}${server.probePath}`);
163
+ // Require a meaningful response on the probe path to confirm via port (avoids false
164
+ // positives from unrelated servers on shared ports like 8080). Accept 200 OK or
165
+ // 401/403 (auth-protected LLM server). Process match alone is enough.
166
+ const confirmedViaPort = resp !== null && (resp.ok || resp.status === 401 || resp.status === 403);
167
+ const isRunning = confirmedViaPort || processLine !== undefined;
168
+ if (!isRunning)
169
+ continue;
170
+ // LLM-001: Server detected (informational)
171
+ findings.push({
172
+ checkId: 'LLM-001',
173
+ name: `Local LLM server detected: ${server.name}`,
174
+ description: `${server.name} is running on port ${server.port}. Local LLM servers can expose model access to the network if misconfigured.`,
175
+ category: 'llm-server',
176
+ severity: 'medium',
177
+ passed: false,
178
+ message: `${server.name} detected on port ${server.port}`,
179
+ fixable: false,
180
+ file: `localhost:${server.port}`,
181
+ fix: `Review ${server.name} configuration. Ensure it is bound to 127.0.0.1 and requires authentication.`,
182
+ details: {
183
+ server: server.name,
184
+ port: server.port,
185
+ detectedVia: resp !== null ? 'port-probe' : 'process-list',
186
+ },
187
+ });
188
+ // Only run deeper checks if we got a confirmed HTTP response
189
+ if (!confirmedViaPort)
190
+ continue;
191
+ // LLM-002: No authentication
192
+ const authHeader = resp.headers.get('www-authenticate');
193
+ const hasAuthChallenge = resp.status === 401 || resp.status === 403 || authHeader !== null;
194
+ if (!hasAuthChallenge) {
195
+ findings.push({
196
+ checkId: 'LLM-002',
197
+ name: `No authentication on ${server.name}`,
198
+ description: `${server.name} API responds without requiring authentication. Anyone with network access can use your models, consume resources, or extract data.`,
199
+ category: 'llm-server',
200
+ severity: 'high',
201
+ passed: false,
202
+ message: `${server.name} on port ${server.port} has no authentication`,
203
+ fixable: false,
204
+ file: `localhost:${server.port}`,
205
+ fix: `Enable authentication for ${server.name}. Consult the server documentation for auth configuration.`,
206
+ details: { server: server.name, port: server.port, httpStatus: resp.status },
207
+ });
208
+ }
209
+ // LLM-003: Bound to 0.0.0.0
210
+ if (isListeningOnAllInterfaces(server.name, processLine)) {
211
+ findings.push({
212
+ checkId: 'LLM-003',
213
+ name: `${server.name} bound to all interfaces`,
214
+ description: `${server.name} is listening on 0.0.0.0, making it accessible from any network interface. This exposes your LLM server to other devices on the network.`,
215
+ category: 'llm-server',
216
+ severity: 'critical',
217
+ passed: false,
218
+ message: `${server.name} is bound to 0.0.0.0 (all interfaces)`,
219
+ fixable: false,
220
+ file: `localhost:${server.port}`,
221
+ fix: `Bind ${server.name} to 127.0.0.1 only. For Ollama: set OLLAMA_HOST=127.0.0.1:11434`,
222
+ details: { server: server.name, port: server.port, bindAddress: '0.0.0.0' },
223
+ });
224
+ }
225
+ // LLM-004: No TLS (we probed via HTTP, so if it responded, it's not using TLS)
226
+ findings.push({
227
+ checkId: 'LLM-004',
228
+ name: `${server.name} using plain HTTP`,
229
+ description: `${server.name} is serving over HTTP without TLS. API requests (including any auth tokens) are transmitted in cleartext.`,
230
+ category: 'llm-server',
231
+ severity: 'high',
232
+ passed: false,
233
+ message: `${server.name} on port ${server.port} uses HTTP (no TLS)`,
234
+ fixable: false,
235
+ file: `localhost:${server.port}`,
236
+ fix: `Configure TLS for ${server.name} or place it behind a TLS-terminating reverse proxy.`,
237
+ details: { server: server.name, port: server.port, protocol: 'http' },
238
+ });
239
+ // LLM-005: Permissive CORS (Ollama-specific + generic CORS header check)
240
+ let hasCorsIssue = false;
241
+ if (server.name === 'Ollama') {
242
+ const origins = process.env['OLLAMA_ORIGINS'] || '';
243
+ if (origins === '*' || origins.includes('*')) {
244
+ hasCorsIssue = true;
245
+ }
246
+ }
247
+ // Also check CORS headers from the response
248
+ const corsHeader = resp.headers.get('access-control-allow-origin');
249
+ if (corsHeader === '*') {
250
+ hasCorsIssue = true;
251
+ }
252
+ if (hasCorsIssue) {
253
+ findings.push({
254
+ checkId: 'LLM-005',
255
+ name: `Permissive CORS on ${server.name}`,
256
+ description: `${server.name} allows requests from any origin (CORS: *). A malicious website visited in your browser could interact with your local LLM server.`,
257
+ category: 'llm-server',
258
+ severity: 'medium',
259
+ passed: false,
260
+ message: `${server.name} has permissive CORS (Access-Control-Allow-Origin: *)`,
261
+ fixable: false,
262
+ file: `localhost:${server.port}`,
263
+ fix: server.name === 'Ollama'
264
+ ? 'Set OLLAMA_ORIGINS to specific allowed origins instead of *.'
265
+ : `Restrict CORS origins in ${server.name} configuration.`,
266
+ details: { server: server.name, port: server.port, corsOrigin: corsHeader || 'env:*' },
267
+ });
268
+ }
269
+ // LLM-006: Unrestricted model access
270
+ // If the models endpoint returned a list, check if there's any access restriction
271
+ if (resp.ok) {
272
+ try {
273
+ const body = await resp.text();
274
+ // Only report if we see multiple models or no restriction indicator
275
+ const parsed = JSON.parse(body);
276
+ const modelCount = Array.isArray(parsed.models) ? parsed.models.length
277
+ : Array.isArray(parsed.data) ? parsed.data.length
278
+ : 0;
279
+ if (modelCount > 0) {
280
+ findings.push({
281
+ checkId: 'LLM-006',
282
+ name: `Unrestricted model access on ${server.name}`,
283
+ description: `${server.name} exposes ${modelCount} model(s) without access restrictions. Any client can list and use all available models.`,
284
+ category: 'llm-server',
285
+ severity: 'medium',
286
+ passed: false,
287
+ message: `${server.name} exposes ${modelCount} model(s) without restrictions`,
288
+ fixable: false,
289
+ file: `localhost:${server.port}`,
290
+ fix: `Configure a model allow-list in ${server.name} to restrict which models can be accessed.`,
291
+ details: { server: server.name, port: server.port, modelCount },
292
+ });
293
+ }
294
+ }
295
+ catch {
296
+ // Could not parse response body, skip LLM-006
297
+ }
298
+ }
299
+ }
300
+ return findings;
301
+ }
302
+ /**
303
+ * Scan local LLM config directories for secrets and unsafe model files.
304
+ * Returns findings for LLM-007 and LLM-008.
305
+ */
306
+ async function checkLLMConfigs() {
307
+ const findings = [];
308
+ const homeDir = os.homedir();
309
+ // LLM-007: Unsafe model formats (pickle files)
310
+ for (const modelDir of MODEL_DIRS) {
311
+ const fullPath = path.join(homeDir, modelDir);
312
+ try {
313
+ await scanForUnsafeModels(fullPath, findings);
314
+ }
315
+ catch {
316
+ // Directory doesn't exist or not readable, skip
317
+ }
318
+ }
319
+ // LLM-008: Secrets in Modelfile/config
320
+ for (const server of LLM_SERVERS) {
321
+ for (const configDir of server.configDirs) {
322
+ const fullPath = path.join(homeDir, configDir);
323
+ try {
324
+ await scanForSecretsInConfigs(fullPath, server.name, findings);
325
+ }
326
+ catch {
327
+ // Directory doesn't exist or not readable, skip
328
+ }
329
+ }
330
+ }
331
+ return findings;
332
+ }
333
+ /**
334
+ * Recursively scan a directory for unsafe model files (.pkl, .pickle, .bin).
335
+ * Limited to 2 levels of depth to avoid excessive scanning.
336
+ */
337
+ async function scanForUnsafeModels(dir, findings, depth = 0) {
338
+ if (depth > 2)
339
+ return;
340
+ let entries;
341
+ try {
342
+ entries = await fs.readdir(dir, { withFileTypes: true });
343
+ }
344
+ catch {
345
+ return;
346
+ }
347
+ for (const entry of entries) {
348
+ const fullPath = path.join(dir, entry.name);
349
+ if (entry.isDirectory() && depth < 2) {
350
+ await scanForUnsafeModels(fullPath, findings, depth + 1);
351
+ }
352
+ else if (entry.isFile()) {
353
+ const ext = path.extname(entry.name).toLowerCase();
354
+ if (UNSAFE_MODEL_EXTENSIONS.includes(ext)) {
355
+ const relPath = fullPath.replace(os.homedir(), '~');
356
+ findings.push({
357
+ checkId: 'LLM-007',
358
+ name: 'Unsafe model format detected',
359
+ description: `Found ${ext} model file. Pickle-based model formats can execute arbitrary code when loaded. Use GGUF, SafeTensors, or ONNX formats instead.`,
360
+ category: 'llm-server',
361
+ severity: 'high',
362
+ passed: false,
363
+ message: `Unsafe model file: ${relPath}`,
364
+ fixable: false,
365
+ file: relPath,
366
+ fix: 'Convert model to a safe format (GGUF, SafeTensors, ONNX) or verify model provenance.',
367
+ details: { extension: ext, path: relPath },
368
+ });
369
+ }
370
+ }
371
+ }
372
+ }
373
+ /**
374
+ * Scan config directory for files containing secrets (API keys, tokens).
375
+ */
376
+ async function scanForSecretsInConfigs(dir, serverName, findings) {
377
+ let entries;
378
+ try {
379
+ entries = await fs.readdir(dir, { withFileTypes: true });
380
+ }
381
+ catch {
382
+ return;
383
+ }
384
+ // Files to scan: Modelfile, *.yaml, *.yml, *.json, *.toml, *.conf, *.cfg
385
+ const configExtensions = ['.yaml', '.yml', '.json', '.toml', '.conf', '.cfg'];
386
+ const configFileNames = ['Modelfile', 'modelfile'];
387
+ for (const entry of entries) {
388
+ if (!entry.isFile())
389
+ continue;
390
+ const ext = path.extname(entry.name).toLowerCase();
391
+ const isConfig = configExtensions.includes(ext) || configFileNames.includes(entry.name);
392
+ if (!isConfig)
393
+ continue;
394
+ const fullPath = path.join(dir, entry.name);
395
+ let content;
396
+ try {
397
+ content = await fs.readFile(fullPath, 'utf-8');
398
+ }
399
+ catch {
400
+ continue;
401
+ }
402
+ // Check each line for credential patterns
403
+ const lines = content.split('\n');
404
+ for (let i = 0; i < lines.length; i++) {
405
+ const line = lines[i];
406
+ if (!line || line.length > 10000)
407
+ continue;
408
+ // Skip comment lines
409
+ if (/^\s*[#;]/.test(line))
410
+ continue;
411
+ for (const { name, pattern } of shell_checks_1.SHELL_CREDENTIAL_PATTERNS) {
412
+ if (pattern.test(line)) {
413
+ const relPath = fullPath.replace(os.homedir(), '~');
414
+ findings.push({
415
+ checkId: 'LLM-008',
416
+ name: `Secret in ${serverName} config`,
417
+ description: `Found ${name} in ${entry.name}. Credentials embedded in LLM server configuration files can be extracted by anyone with filesystem access.`,
418
+ category: 'llm-server',
419
+ severity: 'critical',
420
+ passed: false,
421
+ message: `${relPath}:${i + 1} contains ${name}`,
422
+ fixable: false,
423
+ file: relPath,
424
+ line: i + 1,
425
+ fix: `Remove the credential from ${entry.name} and use an environment variable instead.`,
426
+ details: { server: serverName, credentialType: name, configFile: entry.name },
427
+ });
428
+ break; // One finding per line
429
+ }
430
+ }
431
+ }
432
+ }
433
+ }
434
+ //# sourceMappingURL=llm-checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-checks.js","sourceRoot":"","sources":["../../src/hardening/llm-checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * MCP Tool Enumeration (MCPTOOL-001 to MCPTOOL-005)
3
+ *
4
+ * Connects to configured MCP servers, discovers their tools via JSON-RPC,
5
+ * and classifies dangerous capabilities. Only runs with --deep or --live-mcp flag.
6
+ */
7
+ import type { SecurityFinding } from './security-check';
8
+ export interface McpServerConfig {
9
+ command: string;
10
+ args?: string[];
11
+ env?: Record<string, string>;
12
+ url?: string;
13
+ }
14
+ export interface McpToolInfo {
15
+ name: string;
16
+ description?: string;
17
+ inputSchema?: Record<string, unknown>;
18
+ }
19
+ export interface McpServerResult {
20
+ serverName: string;
21
+ configPath: string;
22
+ tools: McpToolInfo[];
23
+ error?: string;
24
+ }
25
+ /**
26
+ * Discover MCP server configurations from known config file locations.
27
+ */
28
+ export declare function discoverMcpConfigs(targetDir: string): Promise<Map<string, {
29
+ config: McpServerConfig;
30
+ configPath: string;
31
+ }>>;
32
+ /**
33
+ * Connect to a stdio MCP server and enumerate its tools.
34
+ */
35
+ export declare function enumerateStdioTools(serverName: string, config: McpServerConfig): Promise<McpServerResult>;
36
+ /**
37
+ * Classify tool capabilities and generate security findings.
38
+ */
39
+ export declare function classifyTools(serverName: string, configPath: string, tools: McpToolInfo[]): SecurityFinding[];
40
+ /**
41
+ * Run full MCP tool enumeration scan.
42
+ * Discovers MCP configs, connects to each server, enumerates tools, classifies dangers.
43
+ */
44
+ export declare function checkMcpToolEnumeration(targetDir: string, onProgress?: (message: string) => void): Promise<SecurityFinding[]>;
45
+ //# sourceMappingURL=mcp-tool-enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tool-enum.d.ts","sourceRoot":"","sources":["../../src/hardening/mcp-tool-enum.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,kBAAkB,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8BD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAsCvE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,eAAe,CAAC,CAiG1B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,WAAW,EAAE,GACnB,eAAe,EAAE,CAwFnB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,eAAe,EAAE,CAAC,CA8B5B"}