clawsec 0.0.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 (361) hide show
  1. package/README.md +560 -0
  2. package/dist/bin/clawsec.d.ts +7 -0
  3. package/dist/bin/clawsec.d.ts.map +1 -0
  4. package/dist/bin/clawsec.js +12 -0
  5. package/dist/bin/clawsec.js.map +1 -0
  6. package/dist/src/actions/block.d.ts +22 -0
  7. package/dist/src/actions/block.d.ts.map +1 -0
  8. package/dist/src/actions/block.js +83 -0
  9. package/dist/src/actions/block.js.map +1 -0
  10. package/dist/src/actions/confirm.d.ts +35 -0
  11. package/dist/src/actions/confirm.d.ts.map +1 -0
  12. package/dist/src/actions/confirm.js +156 -0
  13. package/dist/src/actions/confirm.js.map +1 -0
  14. package/dist/src/actions/executor.d.ts +64 -0
  15. package/dist/src/actions/executor.d.ts.map +1 -0
  16. package/dist/src/actions/executor.js +114 -0
  17. package/dist/src/actions/executor.js.map +1 -0
  18. package/dist/src/actions/index.d.ts +13 -0
  19. package/dist/src/actions/index.d.ts.map +1 -0
  20. package/dist/src/actions/index.js +15 -0
  21. package/dist/src/actions/index.js.map +1 -0
  22. package/dist/src/actions/log.d.ts +19 -0
  23. package/dist/src/actions/log.d.ts.map +1 -0
  24. package/dist/src/actions/log.js +63 -0
  25. package/dist/src/actions/log.js.map +1 -0
  26. package/dist/src/actions/types.d.ts +85 -0
  27. package/dist/src/actions/types.d.ts.map +1 -0
  28. package/dist/src/actions/types.js +78 -0
  29. package/dist/src/actions/types.js.map +1 -0
  30. package/dist/src/actions/warn.d.ts +22 -0
  31. package/dist/src/actions/warn.d.ts.map +1 -0
  32. package/dist/src/actions/warn.js +84 -0
  33. package/dist/src/actions/warn.js.map +1 -0
  34. package/dist/src/approval/agent-confirm.d.ts +104 -0
  35. package/dist/src/approval/agent-confirm.d.ts.map +1 -0
  36. package/dist/src/approval/agent-confirm.js +173 -0
  37. package/dist/src/approval/agent-confirm.js.map +1 -0
  38. package/dist/src/approval/index.d.ts +14 -0
  39. package/dist/src/approval/index.d.ts.map +1 -0
  40. package/dist/src/approval/index.js +9 -0
  41. package/dist/src/approval/index.js.map +1 -0
  42. package/dist/src/approval/native.d.ts +56 -0
  43. package/dist/src/approval/native.d.ts.map +1 -0
  44. package/dist/src/approval/native.js +196 -0
  45. package/dist/src/approval/native.js.map +1 -0
  46. package/dist/src/approval/store.d.ts +88 -0
  47. package/dist/src/approval/store.d.ts.map +1 -0
  48. package/dist/src/approval/store.js +192 -0
  49. package/dist/src/approval/store.js.map +1 -0
  50. package/dist/src/approval/types.d.ts +119 -0
  51. package/dist/src/approval/types.d.ts.map +1 -0
  52. package/dist/src/approval/types.js +6 -0
  53. package/dist/src/approval/types.js.map +1 -0
  54. package/dist/src/approval/webhook.d.ts +170 -0
  55. package/dist/src/approval/webhook.d.ts.map +1 -0
  56. package/dist/src/approval/webhook.js +362 -0
  57. package/dist/src/approval/webhook.js.map +1 -0
  58. package/dist/src/cli/commands/audit.d.ts +43 -0
  59. package/dist/src/cli/commands/audit.d.ts.map +1 -0
  60. package/dist/src/cli/commands/audit.js +115 -0
  61. package/dist/src/cli/commands/audit.js.map +1 -0
  62. package/dist/src/cli/commands/feedback.d.ts +27 -0
  63. package/dist/src/cli/commands/feedback.d.ts.map +1 -0
  64. package/dist/src/cli/commands/feedback.js +228 -0
  65. package/dist/src/cli/commands/feedback.js.map +1 -0
  66. package/dist/src/cli/commands/index.d.ts +11 -0
  67. package/dist/src/cli/commands/index.d.ts.map +1 -0
  68. package/dist/src/cli/commands/index.js +13 -0
  69. package/dist/src/cli/commands/index.js.map +1 -0
  70. package/dist/src/cli/commands/status.d.ts +20 -0
  71. package/dist/src/cli/commands/status.d.ts.map +1 -0
  72. package/dist/src/cli/commands/status.js +122 -0
  73. package/dist/src/cli/commands/status.js.map +1 -0
  74. package/dist/src/cli/commands/test.d.ts +23 -0
  75. package/dist/src/cli/commands/test.d.ts.map +1 -0
  76. package/dist/src/cli/commands/test.js +134 -0
  77. package/dist/src/cli/commands/test.js.map +1 -0
  78. package/dist/src/cli/commands/types.d.ts +81 -0
  79. package/dist/src/cli/commands/types.d.ts.map +1 -0
  80. package/dist/src/cli/commands/types.js +6 -0
  81. package/dist/src/cli/commands/types.js.map +1 -0
  82. package/dist/src/cli/index.d.ts +17 -0
  83. package/dist/src/cli/index.d.ts.map +1 -0
  84. package/dist/src/cli/index.js +267 -0
  85. package/dist/src/cli/index.js.map +1 -0
  86. package/dist/src/config/defaults.d.ts +20 -0
  87. package/dist/src/config/defaults.d.ts.map +1 -0
  88. package/dist/src/config/defaults.js +123 -0
  89. package/dist/src/config/defaults.js.map +1 -0
  90. package/dist/src/config/index.d.ts +8 -0
  91. package/dist/src/config/index.d.ts.map +1 -0
  92. package/dist/src/config/index.js +41 -0
  93. package/dist/src/config/index.js.map +1 -0
  94. package/dist/src/config/loader.d.ts +99 -0
  95. package/dist/src/config/loader.d.ts.map +1 -0
  96. package/dist/src/config/loader.js +242 -0
  97. package/dist/src/config/loader.js.map +1 -0
  98. package/dist/src/config/schema.d.ts +627 -0
  99. package/dist/src/config/schema.d.ts.map +1 -0
  100. package/dist/src/config/schema.js +585 -0
  101. package/dist/src/config/schema.js.map +1 -0
  102. package/dist/src/detectors/destructive/cloud-detector.d.ts +51 -0
  103. package/dist/src/detectors/destructive/cloud-detector.d.ts.map +1 -0
  104. package/dist/src/detectors/destructive/cloud-detector.js +556 -0
  105. package/dist/src/detectors/destructive/cloud-detector.js.map +1 -0
  106. package/dist/src/detectors/destructive/code-detector.d.ts +59 -0
  107. package/dist/src/detectors/destructive/code-detector.d.ts.map +1 -0
  108. package/dist/src/detectors/destructive/code-detector.js +558 -0
  109. package/dist/src/detectors/destructive/code-detector.js.map +1 -0
  110. package/dist/src/detectors/destructive/index.d.ts +54 -0
  111. package/dist/src/detectors/destructive/index.d.ts.map +1 -0
  112. package/dist/src/detectors/destructive/index.js +168 -0
  113. package/dist/src/detectors/destructive/index.js.map +1 -0
  114. package/dist/src/detectors/destructive/shell-detector.d.ts +43 -0
  115. package/dist/src/detectors/destructive/shell-detector.d.ts.map +1 -0
  116. package/dist/src/detectors/destructive/shell-detector.js +302 -0
  117. package/dist/src/detectors/destructive/shell-detector.js.map +1 -0
  118. package/dist/src/detectors/destructive/types.d.ts +143 -0
  119. package/dist/src/detectors/destructive/types.d.ts.map +1 -0
  120. package/dist/src/detectors/destructive/types.js +6 -0
  121. package/dist/src/detectors/destructive/types.js.map +1 -0
  122. package/dist/src/detectors/exfiltration/cloud-detector.d.ts +51 -0
  123. package/dist/src/detectors/exfiltration/cloud-detector.d.ts.map +1 -0
  124. package/dist/src/detectors/exfiltration/cloud-detector.js +427 -0
  125. package/dist/src/detectors/exfiltration/cloud-detector.js.map +1 -0
  126. package/dist/src/detectors/exfiltration/http-detector.d.ts +47 -0
  127. package/dist/src/detectors/exfiltration/http-detector.d.ts.map +1 -0
  128. package/dist/src/detectors/exfiltration/http-detector.js +429 -0
  129. package/dist/src/detectors/exfiltration/http-detector.js.map +1 -0
  130. package/dist/src/detectors/exfiltration/index.d.ts +44 -0
  131. package/dist/src/detectors/exfiltration/index.d.ts.map +1 -0
  132. package/dist/src/detectors/exfiltration/index.js +118 -0
  133. package/dist/src/detectors/exfiltration/index.js.map +1 -0
  134. package/dist/src/detectors/exfiltration/network-detector.d.ts +55 -0
  135. package/dist/src/detectors/exfiltration/network-detector.d.ts.map +1 -0
  136. package/dist/src/detectors/exfiltration/network-detector.js +504 -0
  137. package/dist/src/detectors/exfiltration/network-detector.js.map +1 -0
  138. package/dist/src/detectors/exfiltration/types.d.ts +139 -0
  139. package/dist/src/detectors/exfiltration/types.d.ts.map +1 -0
  140. package/dist/src/detectors/exfiltration/types.js +6 -0
  141. package/dist/src/detectors/exfiltration/types.js.map +1 -0
  142. package/dist/src/detectors/purchase/domain-detector.d.ts +44 -0
  143. package/dist/src/detectors/purchase/domain-detector.d.ts.map +1 -0
  144. package/dist/src/detectors/purchase/domain-detector.js +296 -0
  145. package/dist/src/detectors/purchase/domain-detector.js.map +1 -0
  146. package/dist/src/detectors/purchase/form-detector.d.ts +27 -0
  147. package/dist/src/detectors/purchase/form-detector.d.ts.map +1 -0
  148. package/dist/src/detectors/purchase/form-detector.js +344 -0
  149. package/dist/src/detectors/purchase/form-detector.js.map +1 -0
  150. package/dist/src/detectors/purchase/index.d.ts +65 -0
  151. package/dist/src/detectors/purchase/index.d.ts.map +1 -0
  152. package/dist/src/detectors/purchase/index.js +216 -0
  153. package/dist/src/detectors/purchase/index.js.map +1 -0
  154. package/dist/src/detectors/purchase/spend-tracker.d.ts +132 -0
  155. package/dist/src/detectors/purchase/spend-tracker.d.ts.map +1 -0
  156. package/dist/src/detectors/purchase/spend-tracker.js +313 -0
  157. package/dist/src/detectors/purchase/spend-tracker.js.map +1 -0
  158. package/dist/src/detectors/purchase/types.d.ts +139 -0
  159. package/dist/src/detectors/purchase/types.d.ts.map +1 -0
  160. package/dist/src/detectors/purchase/types.js +6 -0
  161. package/dist/src/detectors/purchase/types.js.map +1 -0
  162. package/dist/src/detectors/purchase/url-detector.d.ts +31 -0
  163. package/dist/src/detectors/purchase/url-detector.d.ts.map +1 -0
  164. package/dist/src/detectors/purchase/url-detector.js +292 -0
  165. package/dist/src/detectors/purchase/url-detector.js.map +1 -0
  166. package/dist/src/detectors/secrets/api-key-detector.d.ts +30 -0
  167. package/dist/src/detectors/secrets/api-key-detector.d.ts.map +1 -0
  168. package/dist/src/detectors/secrets/api-key-detector.js +297 -0
  169. package/dist/src/detectors/secrets/api-key-detector.js.map +1 -0
  170. package/dist/src/detectors/secrets/index.d.ts +43 -0
  171. package/dist/src/detectors/secrets/index.d.ts.map +1 -0
  172. package/dist/src/detectors/secrets/index.js +261 -0
  173. package/dist/src/detectors/secrets/index.js.map +1 -0
  174. package/dist/src/detectors/secrets/pii-detector.d.ts +54 -0
  175. package/dist/src/detectors/secrets/pii-detector.d.ts.map +1 -0
  176. package/dist/src/detectors/secrets/pii-detector.js +286 -0
  177. package/dist/src/detectors/secrets/pii-detector.js.map +1 -0
  178. package/dist/src/detectors/secrets/token-detector.d.ts +51 -0
  179. package/dist/src/detectors/secrets/token-detector.d.ts.map +1 -0
  180. package/dist/src/detectors/secrets/token-detector.js +233 -0
  181. package/dist/src/detectors/secrets/token-detector.js.map +1 -0
  182. package/dist/src/detectors/secrets/types.d.ts +157 -0
  183. package/dist/src/detectors/secrets/types.d.ts.map +1 -0
  184. package/dist/src/detectors/secrets/types.js +6 -0
  185. package/dist/src/detectors/secrets/types.js.map +1 -0
  186. package/dist/src/detectors/website/category-detector.d.ts +22 -0
  187. package/dist/src/detectors/website/category-detector.d.ts.map +1 -0
  188. package/dist/src/detectors/website/category-detector.js +162 -0
  189. package/dist/src/detectors/website/category-detector.js.map +1 -0
  190. package/dist/src/detectors/website/index.d.ts +53 -0
  191. package/dist/src/detectors/website/index.d.ts.map +1 -0
  192. package/dist/src/detectors/website/index.js +232 -0
  193. package/dist/src/detectors/website/index.js.map +1 -0
  194. package/dist/src/detectors/website/pattern-matcher.d.ts +33 -0
  195. package/dist/src/detectors/website/pattern-matcher.d.ts.map +1 -0
  196. package/dist/src/detectors/website/pattern-matcher.js +121 -0
  197. package/dist/src/detectors/website/pattern-matcher.js.map +1 -0
  198. package/dist/src/detectors/website/types.d.ts +105 -0
  199. package/dist/src/detectors/website/types.d.ts.map +1 -0
  200. package/dist/src/detectors/website/types.js +6 -0
  201. package/dist/src/detectors/website/types.js.map +1 -0
  202. package/dist/src/engine/analyzer.d.ts +87 -0
  203. package/dist/src/engine/analyzer.d.ts.map +1 -0
  204. package/dist/src/engine/analyzer.js +427 -0
  205. package/dist/src/engine/analyzer.js.map +1 -0
  206. package/dist/src/engine/cache.d.ts +80 -0
  207. package/dist/src/engine/cache.d.ts.map +1 -0
  208. package/dist/src/engine/cache.js +167 -0
  209. package/dist/src/engine/cache.js.map +1 -0
  210. package/dist/src/engine/index.d.ts +11 -0
  211. package/dist/src/engine/index.d.ts.map +1 -0
  212. package/dist/src/engine/index.js +11 -0
  213. package/dist/src/engine/index.js.map +1 -0
  214. package/dist/src/engine/llm-client.d.ts +210 -0
  215. package/dist/src/engine/llm-client.d.ts.map +1 -0
  216. package/dist/src/engine/llm-client.js +506 -0
  217. package/dist/src/engine/llm-client.js.map +1 -0
  218. package/dist/src/engine/types.d.ts +163 -0
  219. package/dist/src/engine/types.d.ts.map +1 -0
  220. package/dist/src/engine/types.js +21 -0
  221. package/dist/src/engine/types.js.map +1 -0
  222. package/dist/src/feedback/index.d.ts +9 -0
  223. package/dist/src/feedback/index.d.ts.map +1 -0
  224. package/dist/src/feedback/index.js +8 -0
  225. package/dist/src/feedback/index.js.map +1 -0
  226. package/dist/src/feedback/learner.d.ts +222 -0
  227. package/dist/src/feedback/learner.d.ts.map +1 -0
  228. package/dist/src/feedback/learner.js +401 -0
  229. package/dist/src/feedback/learner.js.map +1 -0
  230. package/dist/src/feedback/store.d.ts +113 -0
  231. package/dist/src/feedback/store.d.ts.map +1 -0
  232. package/dist/src/feedback/store.js +228 -0
  233. package/dist/src/feedback/store.js.map +1 -0
  234. package/dist/src/feedback/types.d.ts +126 -0
  235. package/dist/src/feedback/types.d.ts.map +1 -0
  236. package/dist/src/feedback/types.js +6 -0
  237. package/dist/src/feedback/types.js.map +1 -0
  238. package/dist/src/hooks/before-agent-start/handler.d.ts +37 -0
  239. package/dist/src/hooks/before-agent-start/handler.d.ts.map +1 -0
  240. package/dist/src/hooks/before-agent-start/handler.js +109 -0
  241. package/dist/src/hooks/before-agent-start/handler.js.map +1 -0
  242. package/dist/src/hooks/before-agent-start/index.d.ts +8 -0
  243. package/dist/src/hooks/before-agent-start/index.d.ts.map +1 -0
  244. package/dist/src/hooks/before-agent-start/index.js +7 -0
  245. package/dist/src/hooks/before-agent-start/index.js.map +1 -0
  246. package/dist/src/hooks/before-agent-start/prompts.d.ts +48 -0
  247. package/dist/src/hooks/before-agent-start/prompts.d.ts.map +1 -0
  248. package/dist/src/hooks/before-agent-start/prompts.js +103 -0
  249. package/dist/src/hooks/before-agent-start/prompts.js.map +1 -0
  250. package/dist/src/hooks/before-tool-call/handler.d.ts +42 -0
  251. package/dist/src/hooks/before-tool-call/handler.d.ts.map +1 -0
  252. package/dist/src/hooks/before-tool-call/handler.js +226 -0
  253. package/dist/src/hooks/before-tool-call/handler.js.map +1 -0
  254. package/dist/src/hooks/before-tool-call/index.d.ts +7 -0
  255. package/dist/src/hooks/before-tool-call/index.d.ts.map +1 -0
  256. package/dist/src/hooks/before-tool-call/index.js +6 -0
  257. package/dist/src/hooks/before-tool-call/index.js.map +1 -0
  258. package/dist/src/hooks/tool-result-persist/filter.d.ts +72 -0
  259. package/dist/src/hooks/tool-result-persist/filter.d.ts.map +1 -0
  260. package/dist/src/hooks/tool-result-persist/filter.js +305 -0
  261. package/dist/src/hooks/tool-result-persist/filter.js.map +1 -0
  262. package/dist/src/hooks/tool-result-persist/handler.d.ts +49 -0
  263. package/dist/src/hooks/tool-result-persist/handler.d.ts.map +1 -0
  264. package/dist/src/hooks/tool-result-persist/handler.js +217 -0
  265. package/dist/src/hooks/tool-result-persist/handler.js.map +1 -0
  266. package/dist/src/hooks/tool-result-persist/index.d.ts +11 -0
  267. package/dist/src/hooks/tool-result-persist/index.d.ts.map +1 -0
  268. package/dist/src/hooks/tool-result-persist/index.js +11 -0
  269. package/dist/src/hooks/tool-result-persist/index.js.map +1 -0
  270. package/dist/src/index.d.ts +256 -0
  271. package/dist/src/index.d.ts.map +1 -0
  272. package/dist/src/index.js +222 -0
  273. package/dist/src/index.js.map +1 -0
  274. package/dist/src/notifications/discord.d.ts +10 -0
  275. package/dist/src/notifications/discord.d.ts.map +1 -0
  276. package/dist/src/notifications/discord.js +218 -0
  277. package/dist/src/notifications/discord.js.map +1 -0
  278. package/dist/src/notifications/index.d.ts +37 -0
  279. package/dist/src/notifications/index.d.ts.map +1 -0
  280. package/dist/src/notifications/index.js +68 -0
  281. package/dist/src/notifications/index.js.map +1 -0
  282. package/dist/src/notifications/slack.d.ts +10 -0
  283. package/dist/src/notifications/slack.d.ts.map +1 -0
  284. package/dist/src/notifications/slack.js +218 -0
  285. package/dist/src/notifications/slack.js.map +1 -0
  286. package/dist/src/notifications/telegram.d.ts +10 -0
  287. package/dist/src/notifications/telegram.d.ts.map +1 -0
  288. package/dist/src/notifications/telegram.js +242 -0
  289. package/dist/src/notifications/telegram.js.map +1 -0
  290. package/dist/src/notifications/types.d.ts +119 -0
  291. package/dist/src/notifications/types.d.ts.map +1 -0
  292. package/dist/src/notifications/types.js +6 -0
  293. package/dist/src/notifications/types.js.map +1 -0
  294. package/dist/src/proxy/index.d.ts +8 -0
  295. package/dist/src/proxy/index.d.ts.map +1 -0
  296. package/dist/src/proxy/index.js +9 -0
  297. package/dist/src/proxy/index.js.map +1 -0
  298. package/dist/src/proxy/middleware.d.ts +55 -0
  299. package/dist/src/proxy/middleware.d.ts.map +1 -0
  300. package/dist/src/proxy/middleware.js +215 -0
  301. package/dist/src/proxy/middleware.js.map +1 -0
  302. package/dist/src/proxy/server.d.ts +57 -0
  303. package/dist/src/proxy/server.d.ts.map +1 -0
  304. package/dist/src/proxy/server.js +298 -0
  305. package/dist/src/proxy/server.js.map +1 -0
  306. package/dist/src/proxy/types.d.ts +136 -0
  307. package/dist/src/proxy/types.d.ts.map +1 -0
  308. package/dist/src/proxy/types.js +6 -0
  309. package/dist/src/proxy/types.js.map +1 -0
  310. package/dist/src/sanitization/index.d.ts +10 -0
  311. package/dist/src/sanitization/index.d.ts.map +1 -0
  312. package/dist/src/sanitization/index.js +9 -0
  313. package/dist/src/sanitization/index.js.map +1 -0
  314. package/dist/src/sanitization/patterns.d.ts +51 -0
  315. package/dist/src/sanitization/patterns.d.ts.map +1 -0
  316. package/dist/src/sanitization/patterns.js +266 -0
  317. package/dist/src/sanitization/patterns.js.map +1 -0
  318. package/dist/src/sanitization/scanner.d.ts +29 -0
  319. package/dist/src/sanitization/scanner.d.ts.map +1 -0
  320. package/dist/src/sanitization/scanner.js +328 -0
  321. package/dist/src/sanitization/scanner.js.map +1 -0
  322. package/dist/src/sanitization/types.d.ts +57 -0
  323. package/dist/src/sanitization/types.d.ts.map +1 -0
  324. package/dist/src/sanitization/types.js +5 -0
  325. package/dist/src/sanitization/types.js.map +1 -0
  326. package/openclaw.plugin.json +114 -0
  327. package/package.json +63 -0
  328. package/rules/builtin/README.md +139 -0
  329. package/rules/builtin/ai-services.yaml +70 -0
  330. package/rules/builtin/api-keys.yaml +64 -0
  331. package/rules/builtin/authentication.yaml +56 -0
  332. package/rules/builtin/aws-security.yaml +57 -0
  333. package/rules/builtin/azure-security.yaml +58 -0
  334. package/rules/builtin/cicd-security.yaml +64 -0
  335. package/rules/builtin/cloud-storage.yaml +64 -0
  336. package/rules/builtin/container-registry.yaml +55 -0
  337. package/rules/builtin/crypto-wallets.yaml +71 -0
  338. package/rules/builtin/database-nosql.yaml +58 -0
  339. package/rules/builtin/database-sql.yaml +62 -0
  340. package/rules/builtin/development-env.yaml +67 -0
  341. package/rules/builtin/docker.yaml +57 -0
  342. package/rules/builtin/filesystem.yaml +71 -0
  343. package/rules/builtin/financial-pci.yaml +61 -0
  344. package/rules/builtin/gcp-security.yaml +57 -0
  345. package/rules/builtin/git-operations.yaml +68 -0
  346. package/rules/builtin/healthcare-hipaa.yaml +64 -0
  347. package/rules/builtin/kubernetes.yaml +60 -0
  348. package/rules/builtin/messaging-services.yaml +53 -0
  349. package/rules/builtin/minimal.yaml +47 -0
  350. package/rules/builtin/mobile-development.yaml +61 -0
  351. package/rules/builtin/monitoring.yaml +63 -0
  352. package/rules/builtin/network-security.yaml +57 -0
  353. package/rules/builtin/package-managers.yaml +74 -0
  354. package/rules/builtin/payment-processing.yaml +66 -0
  355. package/rules/builtin/pii-protection.yaml +48 -0
  356. package/rules/builtin/production-strict.yaml +55 -0
  357. package/rules/builtin/secrets-management.yaml +63 -0
  358. package/rules/builtin/serverless.yaml +74 -0
  359. package/rules/builtin/ssh-security.yaml +66 -0
  360. package/rules/builtin/terraform.yaml +51 -0
  361. package/rules/builtin/web-security.yaml +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/engine/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,cAAc,EAEd,SAAS,EACT,eAAe,EACf,cAAc,EAIf,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,oBAAoB,CAAC;AA2HlE;;GAEG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAY;IAG9B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,oBAAoB,CAAwB;gBAExC,cAAc,EAAE,cAAc;IAiC1C;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IA+EhE;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAOnD;;OAEG;YACW,mBAAmB;IAWjC;;OAEG;YACW,kBAAkB;IAWhC;;OAEG;YACW,sBAAsB;IAWpC;;OAEG;YACW,kBAAkB;IAWhC;;OAEG;YACW,uBAAuB;IAWrC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;YACW,kBAAkB;IAoBhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAkB5B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,QAAQ,CAOjG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,CAmEhD;AAGD,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,427 @@
1
+ /**
2
+ * Hybrid Detection Engine Analyzer
3
+ * Main engine that orchestrates all 5 detectors and produces unified results
4
+ *
5
+ * Architecture:
6
+ * Tool Call -> Pattern Matching (≤5ms) -> BLOCK/ALLOW
7
+ * |
8
+ * ambiguous -------------+
9
+ * |
10
+ * v
11
+ * LLM Analysis (~500ms) -> BLOCK/CONFIRM
12
+ */
13
+ import { compareSeverity } from './types.js';
14
+ import { createCache, createNoOpCache, generateCacheKey, DEFAULT_CACHE_TTL_MS } from './cache.js';
15
+ // Import detector factories
16
+ import { createDefaultPurchaseDetector, createPurchaseDetector } from '../detectors/purchase/index.js';
17
+ import { createDefaultWebsiteDetector, createWebsiteDetector } from '../detectors/website/index.js';
18
+ import { createDefaultDestructiveDetector, createDestructiveDetector } from '../detectors/destructive/index.js';
19
+ import { createDefaultSecretsDetector, createSecretsDetector } from '../detectors/secrets/index.js';
20
+ import { createDefaultExfiltrationDetector, createExfiltrationDetector } from '../detectors/exfiltration/index.js';
21
+ /**
22
+ * Convert a detector-specific result to a unified Detection
23
+ */
24
+ function toDetection(result) {
25
+ if (!result.detected) {
26
+ return null;
27
+ }
28
+ return {
29
+ category: result.category,
30
+ severity: result.severity,
31
+ confidence: result.confidence,
32
+ reason: result.reason,
33
+ metadata: result.metadata,
34
+ };
35
+ }
36
+ /**
37
+ * Determine the recommended action based on detections
38
+ *
39
+ * Action determination logic:
40
+ * - critical + confidence > 0.8 -> block
41
+ * - critical + confidence < 0.8 -> confirm (needs LLM)
42
+ * - high + confidence > 0.7 -> confirm
43
+ * - high + confidence < 0.7 -> warn (needs LLM consideration)
44
+ * - medium -> warn
45
+ * - low -> log (allow with warning)
46
+ * - no detections -> allow
47
+ */
48
+ function determineAction(detections, config) {
49
+ if (detections.length === 0) {
50
+ return { action: 'allow', requiresLLM: false };
51
+ }
52
+ // Get primary detection (highest severity, highest confidence)
53
+ const primary = detections[0];
54
+ const { severity, confidence } = primary;
55
+ // Check if LLM is enabled in config
56
+ const llmEnabled = config.llm?.enabled ?? false;
57
+ // Determine action based on severity and confidence
58
+ switch (severity) {
59
+ case 'critical':
60
+ if (confidence > 0.8) {
61
+ // High confidence critical -> block immediately
62
+ return { action: 'block', requiresLLM: false };
63
+ }
64
+ else {
65
+ // Lower confidence critical -> confirm, may need LLM
66
+ // Ambiguous range: 0.5-0.8
67
+ const isAmbiguous = confidence >= 0.5 && confidence <= 0.8;
68
+ return { action: 'confirm', requiresLLM: llmEnabled && isAmbiguous };
69
+ }
70
+ case 'high':
71
+ if (confidence > 0.7) {
72
+ // High confidence high severity -> confirm
73
+ return { action: 'confirm', requiresLLM: false };
74
+ }
75
+ else {
76
+ // Lower confidence high -> warn, may need LLM
77
+ const isAmbiguous = confidence >= 0.5 && confidence <= 0.7;
78
+ return { action: 'warn', requiresLLM: llmEnabled && isAmbiguous };
79
+ }
80
+ case 'medium':
81
+ // Medium severity -> warn
82
+ // May need LLM if confidence is ambiguous
83
+ const isAmbiguousMedium = confidence >= 0.5 && confidence <= 0.8;
84
+ return { action: 'warn', requiresLLM: llmEnabled && isAmbiguousMedium };
85
+ case 'low':
86
+ // Low severity -> allow with logging
87
+ return { action: 'allow', requiresLLM: false };
88
+ default:
89
+ return { action: 'allow', requiresLLM: false };
90
+ }
91
+ }
92
+ /**
93
+ * Sort detections by severity (highest first), then by confidence (highest first)
94
+ */
95
+ function sortDetections(detections) {
96
+ return [...detections].sort((a, b) => {
97
+ // First compare by severity (descending)
98
+ const severityDiff = compareSeverity(b.severity, a.severity);
99
+ if (severityDiff !== 0) {
100
+ return severityDiff;
101
+ }
102
+ // Then by confidence (descending)
103
+ return b.confidence - a.confidence;
104
+ });
105
+ }
106
+ /**
107
+ * Main hybrid detection engine implementation
108
+ */
109
+ export class HybridAnalyzer {
110
+ config;
111
+ cache;
112
+ cacheEnabled;
113
+ cacheTtlMs;
114
+ llmClient;
115
+ // Detectors
116
+ purchaseDetector;
117
+ websiteDetector;
118
+ destructiveDetector;
119
+ secretsDetector;
120
+ exfiltrationDetector;
121
+ constructor(analyzerConfig) {
122
+ this.config = analyzerConfig.config;
123
+ this.cacheEnabled = analyzerConfig.enableCache ?? true;
124
+ this.cacheTtlMs = analyzerConfig.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;
125
+ this.llmClient = analyzerConfig.llmClient;
126
+ // Initialize cache
127
+ this.cache = this.cacheEnabled
128
+ ? createCache(this.cacheTtlMs)
129
+ : createNoOpCache();
130
+ // Initialize detectors from config
131
+ this.purchaseDetector = this.config.rules.purchase
132
+ ? createPurchaseDetector(this.config.rules.purchase)
133
+ : createDefaultPurchaseDetector();
134
+ this.websiteDetector = this.config.rules.website
135
+ ? createWebsiteDetector(this.config.rules.website)
136
+ : createDefaultWebsiteDetector();
137
+ this.destructiveDetector = this.config.rules.destructive
138
+ ? createDestructiveDetector(this.config.rules.destructive)
139
+ : createDefaultDestructiveDetector();
140
+ this.secretsDetector = this.config.rules.secrets
141
+ ? createSecretsDetector(this.config.rules.secrets)
142
+ : createDefaultSecretsDetector();
143
+ this.exfiltrationDetector = this.config.rules.exfiltration
144
+ ? createExfiltrationDetector(this.config.rules.exfiltration)
145
+ : createDefaultExfiltrationDetector();
146
+ }
147
+ /**
148
+ * Analyze a tool call and return the result
149
+ */
150
+ async analyze(context) {
151
+ const startTime = Date.now();
152
+ // Check if globally disabled
153
+ if (!this.config.global?.enabled) {
154
+ return {
155
+ action: 'allow',
156
+ detections: [],
157
+ requiresLLM: false,
158
+ cached: false,
159
+ durationMs: Date.now() - startTime,
160
+ };
161
+ }
162
+ // Generate cache key
163
+ const cacheKey = generateCacheKey(context.toolName, context.toolInput);
164
+ // Check cache first
165
+ if (this.cacheEnabled) {
166
+ const cachedResult = this.cache.get(cacheKey);
167
+ if (cachedResult) {
168
+ return {
169
+ ...cachedResult,
170
+ durationMs: Date.now() - startTime,
171
+ };
172
+ }
173
+ }
174
+ // Run all detectors in parallel
175
+ const detectionResults = await Promise.all([
176
+ this.runPurchaseDetector(context),
177
+ this.runWebsiteDetector(context),
178
+ this.runDestructiveDetector(context),
179
+ this.runSecretsDetector(context),
180
+ this.runExfiltrationDetector(context),
181
+ ]);
182
+ // Convert to unified detections and filter out non-detections
183
+ const detections = detectionResults
184
+ .map(toDetection)
185
+ .filter((d) => d !== null);
186
+ // Sort by severity (critical > high > medium > low) and confidence
187
+ const sortedDetections = sortDetections(detections);
188
+ // Determine action based on highest severity detection
189
+ let { action, requiresLLM } = determineAction(sortedDetections, this.config);
190
+ // If LLM analysis is needed and we have an LLM client, perform analysis
191
+ let llmResult;
192
+ if (requiresLLM && this.llmClient && this.llmClient.isAvailable() && sortedDetections[0]) {
193
+ llmResult = await this.performLLMAnalysis(sortedDetections[0], context);
194
+ // Adjust action based on LLM result
195
+ const adjustedAction = this.adjustActionFromLLM(action, llmResult);
196
+ action = adjustedAction;
197
+ // LLM has made its determination, no longer needs LLM
198
+ requiresLLM = false;
199
+ }
200
+ // Build result
201
+ const result = {
202
+ action,
203
+ detections: sortedDetections,
204
+ primaryDetection: sortedDetections[0],
205
+ requiresLLM,
206
+ cached: false,
207
+ durationMs: Date.now() - startTime,
208
+ };
209
+ // Cache the result (unless it still requires LLM - those shouldn't be cached)
210
+ if (this.cacheEnabled && !requiresLLM) {
211
+ this.cache.set(cacheKey, result);
212
+ }
213
+ return result;
214
+ }
215
+ /**
216
+ * Clear the detection cache
217
+ */
218
+ clearCache() {
219
+ this.cache.clear();
220
+ }
221
+ /**
222
+ * Get cache statistics
223
+ */
224
+ getCacheStats() {
225
+ return {
226
+ size: this.cache.size(),
227
+ enabled: this.cacheEnabled,
228
+ };
229
+ }
230
+ /**
231
+ * Run purchase detector if enabled
232
+ */
233
+ async runPurchaseDetector(context) {
234
+ if (!this.config.rules.purchase?.enabled) {
235
+ return this.createNoDetection('purchase');
236
+ }
237
+ return this.purchaseDetector.detect({
238
+ toolName: context.toolName,
239
+ toolInput: context.toolInput,
240
+ url: context.url,
241
+ });
242
+ }
243
+ /**
244
+ * Run website detector if enabled
245
+ */
246
+ async runWebsiteDetector(context) {
247
+ if (!this.config.rules.website?.enabled) {
248
+ return this.createNoDetection('website');
249
+ }
250
+ return this.websiteDetector.detect({
251
+ toolName: context.toolName,
252
+ toolInput: context.toolInput,
253
+ url: context.url,
254
+ });
255
+ }
256
+ /**
257
+ * Run destructive detector if enabled
258
+ */
259
+ async runDestructiveDetector(context) {
260
+ if (!this.config.rules.destructive?.enabled) {
261
+ return this.createNoDetection('destructive');
262
+ }
263
+ return this.destructiveDetector.detect({
264
+ toolName: context.toolName,
265
+ toolInput: context.toolInput,
266
+ url: context.url,
267
+ });
268
+ }
269
+ /**
270
+ * Run secrets detector if enabled
271
+ */
272
+ async runSecretsDetector(context) {
273
+ if (!this.config.rules.secrets?.enabled) {
274
+ return this.createNoDetection('secrets');
275
+ }
276
+ return this.secretsDetector.detect({
277
+ toolName: context.toolName,
278
+ toolInput: context.toolInput,
279
+ toolOutput: context.toolOutput,
280
+ });
281
+ }
282
+ /**
283
+ * Run exfiltration detector if enabled
284
+ */
285
+ async runExfiltrationDetector(context) {
286
+ if (!this.config.rules.exfiltration?.enabled) {
287
+ return this.createNoDetection('exfiltration');
288
+ }
289
+ return this.exfiltrationDetector.detect({
290
+ toolName: context.toolName,
291
+ toolInput: context.toolInput,
292
+ url: context.url,
293
+ });
294
+ }
295
+ /**
296
+ * Create a no-detection result for disabled detectors
297
+ */
298
+ createNoDetection(category) {
299
+ return {
300
+ detected: false,
301
+ category,
302
+ severity: 'low',
303
+ confidence: 0,
304
+ reason: `${category} detection disabled`,
305
+ };
306
+ }
307
+ /**
308
+ * Perform LLM analysis on an ambiguous detection
309
+ */
310
+ async performLLMAnalysis(detection, context) {
311
+ try {
312
+ return await this.llmClient.analyze({
313
+ detection,
314
+ context,
315
+ });
316
+ }
317
+ catch {
318
+ // Return uncertain on error - don't block the flow
319
+ return {
320
+ determination: 'uncertain',
321
+ confidence: 0.5,
322
+ reasoning: 'LLM analysis failed',
323
+ suggestedAction: 'confirm',
324
+ };
325
+ }
326
+ }
327
+ /**
328
+ * Adjust the action based on LLM analysis result
329
+ */
330
+ adjustActionFromLLM(currentAction, llmResult) {
331
+ // Map LLM suggested action to AnalysisAction
332
+ switch (llmResult.suggestedAction) {
333
+ case 'block':
334
+ return 'block';
335
+ case 'allow':
336
+ // Only allow if LLM is confident it's safe
337
+ return llmResult.confidence >= 0.7 ? 'allow' : 'warn';
338
+ case 'confirm':
339
+ return 'confirm';
340
+ default:
341
+ // Fall back to original action if LLM result is unexpected
342
+ return currentAction;
343
+ }
344
+ }
345
+ }
346
+ /**
347
+ * Create an analyzer from configuration
348
+ */
349
+ export function createAnalyzer(config, options) {
350
+ return new HybridAnalyzer({
351
+ config,
352
+ enableCache: options?.enableCache,
353
+ cacheTtlMs: options?.cacheTtlMs,
354
+ llmClient: options?.llmClient,
355
+ });
356
+ }
357
+ /**
358
+ * Create an analyzer with default configuration
359
+ */
360
+ export function createDefaultAnalyzer() {
361
+ const defaultConfig = {
362
+ version: '1.0',
363
+ global: {
364
+ enabled: true,
365
+ logLevel: 'info',
366
+ },
367
+ llm: {
368
+ enabled: true,
369
+ model: null,
370
+ },
371
+ rules: {
372
+ purchase: {
373
+ enabled: true,
374
+ severity: 'critical',
375
+ action: 'block',
376
+ spendLimits: { perTransaction: 100, daily: 500 },
377
+ domains: { mode: 'blocklist', blocklist: [] },
378
+ },
379
+ website: {
380
+ enabled: true,
381
+ mode: 'blocklist',
382
+ severity: 'high',
383
+ action: 'block',
384
+ blocklist: [],
385
+ allowlist: [],
386
+ },
387
+ destructive: {
388
+ enabled: true,
389
+ severity: 'critical',
390
+ action: 'confirm',
391
+ shell: { enabled: true },
392
+ cloud: { enabled: true },
393
+ code: { enabled: true },
394
+ },
395
+ secrets: {
396
+ enabled: true,
397
+ severity: 'critical',
398
+ action: 'block',
399
+ },
400
+ exfiltration: {
401
+ enabled: true,
402
+ severity: 'high',
403
+ action: 'block',
404
+ },
405
+ sanitization: {
406
+ enabled: true,
407
+ severity: 'high',
408
+ action: 'block',
409
+ minConfidence: 0.5,
410
+ redactMatches: false,
411
+ categories: {
412
+ instructionOverride: true,
413
+ systemLeak: true,
414
+ jailbreak: true,
415
+ encodedPayload: true,
416
+ },
417
+ },
418
+ },
419
+ approval: {
420
+ native: { enabled: true, timeout: 300 },
421
+ agentConfirm: { enabled: true, parameterName: '_clawsec_confirm' },
422
+ webhook: { enabled: false, url: undefined, timeout: 30, headers: {} },
423
+ },
424
+ };
425
+ return new HybridAnalyzer({ config: defaultConfig });
426
+ }
427
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../src/engine/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Detection Result Cache
3
+ * Simple in-memory cache with TTL-based expiration
4
+ */
5
+ import type { AnalysisResult, DetectionCache } from './types.js';
6
+ /**
7
+ * Default cache TTL: 5 minutes
8
+ */
9
+ export declare const DEFAULT_CACHE_TTL_MS: number;
10
+ /**
11
+ * Maximum cache size to prevent memory issues
12
+ */
13
+ export declare const MAX_CACHE_SIZE = 10000;
14
+ /**
15
+ * Generate a cache key from tool name and input
16
+ * Uses SHA256 hash of the JSON-serialized input
17
+ */
18
+ export declare function generateCacheKey(toolName: string, toolInput: Record<string, unknown>): string;
19
+ /**
20
+ * In-memory detection cache implementation
21
+ */
22
+ export declare class InMemoryCache implements DetectionCache {
23
+ private cache;
24
+ private defaultTtl;
25
+ constructor(defaultTtlMs?: number);
26
+ /**
27
+ * Get a cached result by key
28
+ * Returns undefined if not found or expired
29
+ */
30
+ get(key: string): AnalysisResult | undefined;
31
+ /**
32
+ * Set a cached result
33
+ * @param key Cache key
34
+ * @param result Analysis result to cache
35
+ * @param ttl Optional TTL in milliseconds (uses default if not provided)
36
+ */
37
+ set(key: string, result: AnalysisResult, ttl?: number): void;
38
+ /**
39
+ * Check if a key exists and is not expired
40
+ */
41
+ has(key: string): boolean;
42
+ /**
43
+ * Clear all entries
44
+ */
45
+ clear(): void;
46
+ /**
47
+ * Delete a specific entry
48
+ */
49
+ delete(key: string): boolean;
50
+ /**
51
+ * Get the number of entries (including expired)
52
+ */
53
+ size(): number;
54
+ /**
55
+ * Get the number of valid (non-expired) entries
56
+ */
57
+ validSize(): number;
58
+ /**
59
+ * Check if an entry is expired
60
+ */
61
+ private isExpired;
62
+ /**
63
+ * Evict all expired entries
64
+ */
65
+ private evictExpired;
66
+ /**
67
+ * Evict the oldest n entries
68
+ */
69
+ private evictOldest;
70
+ }
71
+ /**
72
+ * Create a new cache instance
73
+ */
74
+ export declare function createCache(defaultTtlMs?: number): DetectionCache;
75
+ /**
76
+ * Create a no-op cache that doesn't store anything
77
+ * Used when caching is disabled
78
+ */
79
+ export declare function createNoOpCache(): DetectionCache;
80
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/engine/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAc,cAAc,EAAE,MAAM,YAAY,CAAC;AAG7E;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAAgB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,cAAc,QAAQ,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAG7F;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,UAAU,CAAS;gBAEf,YAAY,GAAE,MAA6B;IAKvD;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAoB5C;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAoB5D;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAezB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,SAAS,IAAI,MAAM;IAanB;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,WAAW;CAQpB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,CAEjE;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,cAAc,CAShD"}