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,134 @@
1
+ /**
2
+ * Test Command
3
+ * Tests a specific rule against sample input
4
+ */
5
+ import { loadConfig } from '../../config/index.js';
6
+ import { createPurchaseDetector } from '../../detectors/purchase/index.js';
7
+ import { createWebsiteDetector } from '../../detectors/website/index.js';
8
+ import { createDestructiveDetector } from '../../detectors/destructive/index.js';
9
+ import { createSecretsDetector } from '../../detectors/secrets/index.js';
10
+ import { createExfiltrationDetector } from '../../detectors/exfiltration/index.js';
11
+ /** Valid rule names */
12
+ const VALID_RULES = ['purchase', 'website', 'destructive', 'secrets', 'exfiltration'];
13
+ /**
14
+ * Validate that a string is a valid rule name
15
+ */
16
+ function isValidRule(rule) {
17
+ return VALID_RULES.includes(rule);
18
+ }
19
+ /**
20
+ * Execute the test command
21
+ *
22
+ * @param ruleName - Name of the rule to test
23
+ * @param input - JSON input object to test
24
+ * @param options - CLI options including optional config path
25
+ * @returns Test result showing detection status
26
+ */
27
+ export async function testCommand(ruleName, input, options = {}) {
28
+ // Validate rule name
29
+ if (!isValidRule(ruleName)) {
30
+ throw new Error(`Invalid rule: "${ruleName}". Valid rules are: ${VALID_RULES.join(', ')}`);
31
+ }
32
+ // Load config
33
+ const config = loadConfig(options.config);
34
+ // Create detection context from input
35
+ const context = {
36
+ toolName: input.toolName || 'test',
37
+ toolInput: input,
38
+ url: input.url,
39
+ toolOutput: input.toolOutput,
40
+ };
41
+ // Run the appropriate detector
42
+ let result;
43
+ switch (ruleName) {
44
+ case 'purchase': {
45
+ const detector = createPurchaseDetector(config.rules.purchase);
46
+ const detection = await detector.detect(context);
47
+ result = {
48
+ detected: detection.detected,
49
+ category: detection.detected ? detection.category : undefined,
50
+ severity: detection.detected ? detection.severity : undefined,
51
+ confidence: detection.detected ? detection.confidence : undefined,
52
+ reason: detection.detected ? detection.reason : undefined,
53
+ };
54
+ break;
55
+ }
56
+ case 'website': {
57
+ const detector = createWebsiteDetector(config.rules.website);
58
+ const detection = await detector.detect(context);
59
+ result = {
60
+ detected: detection.detected,
61
+ category: detection.detected ? detection.category : undefined,
62
+ severity: detection.detected ? detection.severity : undefined,
63
+ confidence: detection.detected ? detection.confidence : undefined,
64
+ reason: detection.detected ? detection.reason : undefined,
65
+ };
66
+ break;
67
+ }
68
+ case 'destructive': {
69
+ const detector = createDestructiveDetector(config.rules.destructive);
70
+ const detection = await detector.detect(context);
71
+ result = {
72
+ detected: detection.detected,
73
+ category: detection.detected ? detection.category : undefined,
74
+ severity: detection.detected ? detection.severity : undefined,
75
+ confidence: detection.detected ? detection.confidence : undefined,
76
+ reason: detection.detected ? detection.reason : undefined,
77
+ };
78
+ break;
79
+ }
80
+ case 'secrets': {
81
+ const detector = createSecretsDetector(config.rules.secrets);
82
+ const detection = await detector.detect(context);
83
+ result = {
84
+ detected: detection.detected,
85
+ category: detection.detected ? detection.category : undefined,
86
+ severity: detection.detected ? detection.severity : undefined,
87
+ confidence: detection.detected ? detection.confidence : undefined,
88
+ reason: detection.detected ? detection.reason : undefined,
89
+ };
90
+ break;
91
+ }
92
+ case 'exfiltration': {
93
+ const detector = createExfiltrationDetector(config.rules.exfiltration);
94
+ const detection = await detector.detect(context);
95
+ result = {
96
+ detected: detection.detected,
97
+ category: detection.detected ? detection.category : undefined,
98
+ severity: detection.detected ? detection.severity : undefined,
99
+ confidence: detection.detected ? detection.confidence : undefined,
100
+ reason: detection.detected ? detection.reason : undefined,
101
+ };
102
+ break;
103
+ }
104
+ default:
105
+ // Should never reach here due to isValidRule check
106
+ throw new Error(`Unknown rule: ${ruleName}`);
107
+ }
108
+ return result;
109
+ }
110
+ /**
111
+ * Format test result for console output
112
+ *
113
+ * @param result - Test result to format
114
+ * @param ruleName - Name of the rule that was tested
115
+ * @returns Formatted string for display
116
+ */
117
+ export function formatTestResult(result, ruleName) {
118
+ const lines = [];
119
+ lines.push(`=== Test Result: ${ruleName} ===`);
120
+ lines.push('');
121
+ if (result.detected) {
122
+ lines.push('Status: DETECTED');
123
+ lines.push(`Category: ${result.category}`);
124
+ lines.push(`Severity: ${result.severity}`);
125
+ lines.push(`Confidence: ${((result.confidence || 0) * 100).toFixed(1)}%`);
126
+ lines.push(`Reason: ${result.reason}`);
127
+ }
128
+ else {
129
+ lines.push('Status: NOT DETECTED');
130
+ lines.push('No threats found for this input.');
131
+ }
132
+ return lines.join('\n');
133
+ }
134
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../../src/cli/commands/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * CLI Command Types
3
+ * Type definitions for CLI commands and results
4
+ */
5
+ import type { ThreatCategory } from '../../engine/index.js';
6
+ import type { Severity } from '../../config/index.js';
7
+ /**
8
+ * CLI options for all commands
9
+ */
10
+ export interface CLIOptions {
11
+ /** Path to clawsec.yaml config file */
12
+ config?: string;
13
+ }
14
+ /**
15
+ * Result of the status command
16
+ */
17
+ export interface StatusResult {
18
+ /** Path to the config file */
19
+ configPath: string;
20
+ /** Whether the config is valid */
21
+ configValid: boolean;
22
+ /** List of enabled rule names */
23
+ enabledRules: string[];
24
+ /** List of disabled rule names */
25
+ disabledRules: string[];
26
+ /** Any issues found with the configuration */
27
+ issues: string[];
28
+ }
29
+ /**
30
+ * Result of the test command
31
+ */
32
+ export interface TestResult {
33
+ /** Whether a threat was detected */
34
+ detected: boolean;
35
+ /** Category of threat detected (if any) */
36
+ category?: ThreatCategory;
37
+ /** Severity level */
38
+ severity?: Severity;
39
+ /** Confidence score 0-1 */
40
+ confidence?: number;
41
+ /** Reason for detection */
42
+ reason?: string;
43
+ }
44
+ /**
45
+ * Audit log entry for tracking detections
46
+ */
47
+ export interface AuditEntry {
48
+ /** Timestamp of the detection */
49
+ timestamp: Date;
50
+ /** Tool that was called */
51
+ toolName: string;
52
+ /** Category of threat detected */
53
+ category: ThreatCategory;
54
+ /** Severity level */
55
+ severity: Severity;
56
+ /** Action taken (block, warn, etc.) */
57
+ action: string;
58
+ /** Reason for the detection */
59
+ reason: string;
60
+ /** Additional metadata */
61
+ metadata?: Record<string, unknown>;
62
+ }
63
+ /**
64
+ * Options for the audit command
65
+ */
66
+ export interface AuditOptions {
67
+ /** Maximum number of entries to show */
68
+ limit?: number;
69
+ /** Filter by category */
70
+ category?: ThreatCategory;
71
+ }
72
+ /**
73
+ * Result of the audit command
74
+ */
75
+ export interface AuditResult {
76
+ /** Audit entries matching the query */
77
+ entries: AuditEntry[];
78
+ /** Total entries in the log */
79
+ totalEntries: number;
80
+ }
81
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,iCAAiC;IACjC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kCAAkC;IAClC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,oCAAoC;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,SAAS,EAAE,IAAI,CAAC;IAChB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,EAAE,cAAc,CAAC;IACzB,qBAAqB;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * CLI Command Types
3
+ * Type definitions for CLI commands and results
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/commands/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Clawsec CLI Entry Point
3
+ * Command line interface for interacting with Clawsec
4
+ */
5
+ export * from './commands/index.js';
6
+ /**
7
+ * Run the CLI
8
+ *
9
+ * @param args - Command line arguments (without node and script path)
10
+ * @returns Exit code (0 for success, 1 for error)
11
+ */
12
+ export declare function runCLI(args: string[]): Promise<number>;
13
+ /**
14
+ * Main entry point when run directly
15
+ */
16
+ export declare function main(): Promise<void>;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,cAAc,qBAAqB,CAAC;AAyHpC;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA0J5D;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAK1C"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Clawsec CLI Entry Point
3
+ * Command line interface for interacting with Clawsec
4
+ */
5
+ import { statusCommand, formatStatusResult, testCommand, formatTestResult, auditCommand, formatAuditResult, feedbackCommand, formatFeedbackResult, } from './commands/index.js';
6
+ // Re-export commands and types
7
+ export * from './commands/index.js';
8
+ /**
9
+ * Show CLI help message
10
+ */
11
+ function showHelp() {
12
+ console.log(`
13
+ Clawsec CLI - Security plugin for OpenClaw.ai
14
+
15
+ Usage: clawsec <command> [options]
16
+
17
+ Commands:
18
+ status Show configuration status and enabled rules
19
+ test Test a rule against sample input
20
+ audit View audit log of detections
21
+ feedback Submit or view feedback on detection accuracy
22
+
23
+ Options:
24
+ --config <path> Path to clawsec.yaml config file
25
+ --help, -h Show this help message
26
+
27
+ Command: status
28
+ Check configuration status and show enabled/disabled rules.
29
+
30
+ Example:
31
+ clawsec status
32
+ clawsec status --config ./my-config.yaml
33
+
34
+ Command: test
35
+ Test a specific rule against JSON input.
36
+
37
+ Options:
38
+ --rule <name> Rule to test (purchase, website, destructive, secrets, exfiltration)
39
+ --input <json> JSON input to test against
40
+
41
+ Examples:
42
+ clawsec test --rule purchase --input '{"url":"https://amazon.com/checkout"}'
43
+ clawsec test --rule destructive --input '{"command":"rm -rf /"}'
44
+ clawsec test --rule secrets --input '{"content":"api_key=sk-abc123"}'
45
+
46
+ Command: audit
47
+ View the audit log of recent detections.
48
+
49
+ Options:
50
+ --limit <n> Maximum number of entries to show (default: 10)
51
+ --category <cat> Filter by category (purchase, website, destructive, secrets, exfiltration)
52
+
53
+ Examples:
54
+ clawsec audit
55
+ clawsec audit --limit 20
56
+ clawsec audit --category secrets
57
+
58
+ Command: feedback
59
+ Submit or view feedback on detection accuracy.
60
+
61
+ Options:
62
+ --false-positive <id> Report a false positive (blocked but shouldn't have been)
63
+ --false-negative <desc> Report a false negative (missed threat)
64
+ --category <cat> Suggested category for false negative
65
+ --list List all feedback entries
66
+ --type <type> Filter list by type (false-positive, false-negative)
67
+ --show <id> Show details of a specific feedback entry
68
+
69
+ Examples:
70
+ clawsec feedback --false-positive 1
71
+ clawsec feedback --false-negative "API key leaked" --category secrets
72
+ clawsec feedback --list
73
+ clawsec feedback --list --type false-positive
74
+ clawsec feedback --show abc123
75
+ `);
76
+ }
77
+ function parseArgs(args) {
78
+ const result = {
79
+ command: null,
80
+ options: {},
81
+ };
82
+ let i = 0;
83
+ // First non-option argument is the command
84
+ while (i < args.length) {
85
+ const arg = args[i];
86
+ if (arg.startsWith('--')) {
87
+ const key = arg.slice(2);
88
+ const nextArg = args[i + 1];
89
+ // Check if next arg is a value or another option
90
+ if (nextArg && !nextArg.startsWith('--') && !nextArg.startsWith('-')) {
91
+ result.options[key] = nextArg;
92
+ i += 2;
93
+ }
94
+ else {
95
+ result.options[key] = true;
96
+ i++;
97
+ }
98
+ }
99
+ else if (arg.startsWith('-')) {
100
+ // Short option
101
+ const key = arg.slice(1);
102
+ result.options[key] = true;
103
+ i++;
104
+ }
105
+ else if (!result.command) {
106
+ result.command = arg;
107
+ i++;
108
+ }
109
+ else {
110
+ // Skip unknown positional arguments
111
+ i++;
112
+ }
113
+ }
114
+ return result;
115
+ }
116
+ /**
117
+ * Run the CLI
118
+ *
119
+ * @param args - Command line arguments (without node and script path)
120
+ * @returns Exit code (0 for success, 1 for error)
121
+ */
122
+ export async function runCLI(args) {
123
+ const parsed = parseArgs(args);
124
+ // Check for help flag
125
+ if (parsed.options.help || parsed.options.h) {
126
+ showHelp();
127
+ return 0;
128
+ }
129
+ // No command provided
130
+ if (!parsed.command) {
131
+ console.error('Error: No command specified.\n');
132
+ showHelp();
133
+ return 1;
134
+ }
135
+ // Build CLI options
136
+ const cliOptions = {};
137
+ if (typeof parsed.options.config === 'string') {
138
+ cliOptions.config = parsed.options.config;
139
+ }
140
+ try {
141
+ switch (parsed.command) {
142
+ case 'status': {
143
+ const result = await statusCommand(cliOptions);
144
+ console.log(formatStatusResult(result));
145
+ return result.configValid && result.issues.length === 0 ? 0 : 1;
146
+ }
147
+ case 'test': {
148
+ // Validate required options
149
+ const ruleName = parsed.options.rule;
150
+ const inputJson = parsed.options.input;
151
+ if (typeof ruleName !== 'string') {
152
+ console.error('Error: --rule is required for test command');
153
+ console.error('Example: clawsec test --rule purchase --input \'{"url":"https://example.com"}\'');
154
+ return 1;
155
+ }
156
+ if (typeof inputJson !== 'string') {
157
+ console.error('Error: --input is required for test command');
158
+ console.error('Example: clawsec test --rule purchase --input \'{"url":"https://example.com"}\'');
159
+ return 1;
160
+ }
161
+ // Parse JSON input
162
+ let input;
163
+ try {
164
+ input = JSON.parse(inputJson);
165
+ }
166
+ catch {
167
+ console.error('Error: Invalid JSON input');
168
+ console.error(`Received: ${inputJson}`);
169
+ return 1;
170
+ }
171
+ const result = await testCommand(ruleName, input, cliOptions);
172
+ console.log(formatTestResult(result, ruleName));
173
+ return result.detected ? 1 : 0;
174
+ }
175
+ case 'audit': {
176
+ const auditOptions = {};
177
+ // Parse limit
178
+ if (typeof parsed.options.limit === 'string') {
179
+ const limit = parseInt(parsed.options.limit, 10);
180
+ if (isNaN(limit) || limit < 1) {
181
+ console.error('Error: --limit must be a positive integer');
182
+ return 1;
183
+ }
184
+ auditOptions.limit = limit;
185
+ }
186
+ // Parse category
187
+ if (typeof parsed.options.category === 'string') {
188
+ const validCategories = ['purchase', 'website', 'destructive', 'secrets', 'exfiltration'];
189
+ if (!validCategories.includes(parsed.options.category)) {
190
+ console.error(`Error: Invalid category "${parsed.options.category}"`);
191
+ console.error(`Valid categories: ${validCategories.join(', ')}`);
192
+ return 1;
193
+ }
194
+ auditOptions.category = parsed.options.category;
195
+ }
196
+ const result = await auditCommand(auditOptions);
197
+ console.log(formatAuditResult(result, auditOptions));
198
+ return 0;
199
+ }
200
+ case 'feedback': {
201
+ const feedbackOptions = {};
202
+ // Check for list operation
203
+ if (parsed.options.list === true) {
204
+ feedbackOptions.list = true;
205
+ }
206
+ // Check for show operation
207
+ if (typeof parsed.options.show === 'string') {
208
+ feedbackOptions.show = parsed.options.show;
209
+ }
210
+ // Check for false positive
211
+ if (typeof parsed.options['false-positive'] === 'string') {
212
+ feedbackOptions.falsePositive = parsed.options['false-positive'];
213
+ }
214
+ // Check for false negative
215
+ if (typeof parsed.options['false-negative'] === 'string') {
216
+ feedbackOptions.falseNegative = parsed.options['false-negative'];
217
+ }
218
+ // Parse type filter
219
+ if (typeof parsed.options.type === 'string') {
220
+ const validTypes = ['false-positive', 'false-negative'];
221
+ if (!validTypes.includes(parsed.options.type)) {
222
+ console.error(`Error: Invalid type "${parsed.options.type}"`);
223
+ console.error(`Valid types: ${validTypes.join(', ')}`);
224
+ return 1;
225
+ }
226
+ feedbackOptions.type = parsed.options.type;
227
+ }
228
+ // Parse category for false negative
229
+ if (typeof parsed.options.category === 'string') {
230
+ const validCategories = ['purchase', 'website', 'destructive', 'secrets', 'exfiltration'];
231
+ if (!validCategories.includes(parsed.options.category)) {
232
+ console.error(`Error: Invalid category "${parsed.options.category}"`);
233
+ console.error(`Valid categories: ${validCategories.join(', ')}`);
234
+ return 1;
235
+ }
236
+ feedbackOptions.category = parsed.options.category;
237
+ }
238
+ const result = await feedbackCommand(feedbackOptions);
239
+ console.log(formatFeedbackResult(result, feedbackOptions.show !== undefined));
240
+ return result.success ? 0 : 1;
241
+ }
242
+ default:
243
+ console.error(`Error: Unknown command "${parsed.command}"`);
244
+ showHelp();
245
+ return 1;
246
+ }
247
+ }
248
+ catch (error) {
249
+ if (error instanceof Error) {
250
+ console.error(`Error: ${error.message}`);
251
+ }
252
+ else {
253
+ console.error('An unknown error occurred');
254
+ }
255
+ return 1;
256
+ }
257
+ }
258
+ /**
259
+ * Main entry point when run directly
260
+ */
261
+ export async function main() {
262
+ // Remove 'node' and script path from arguments
263
+ const args = process.argv.slice(2);
264
+ const exitCode = await runCLI(args);
265
+ process.exit(exitCode);
266
+ }
267
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Clawsec Default Configuration
3
+ * Sensible default values for the security plugin
4
+ */
5
+ import type { ClawsecConfig } from './schema.js';
6
+ /**
7
+ * Default configuration for Clawsec
8
+ *
9
+ * All features enabled by default with conservative settings:
10
+ * - Purchases are blocked by default
11
+ * - Destructive commands require confirmation
12
+ * - Secrets and exfiltration are blocked
13
+ */
14
+ export declare const defaultConfig: ClawsecConfig;
15
+ /**
16
+ * Returns a deep clone of the default configuration
17
+ * to prevent accidental mutations
18
+ */
19
+ export declare function getDefaultConfig(): ClawsecConfig;
20
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,aA+G3B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD"}