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,78 @@
1
+ /**
2
+ * Action Executor Types
3
+ * Type definitions for the action execution system
4
+ */
5
+ /**
6
+ * Default console logger implementation
7
+ */
8
+ /* eslint-disable no-console */
9
+ export const consoleLogger = {
10
+ debug: (message, data) => {
11
+ if (data) {
12
+ console.debug(`[clawsec] ${message}`, data);
13
+ }
14
+ else {
15
+ console.debug(`[clawsec] ${message}`);
16
+ }
17
+ },
18
+ info: (message, data) => {
19
+ if (data) {
20
+ console.info(`[clawsec] ${message}`, data);
21
+ }
22
+ else {
23
+ console.info(`[clawsec] ${message}`);
24
+ }
25
+ },
26
+ warn: (message, data) => {
27
+ if (data) {
28
+ console.warn(`[clawsec] ${message}`, data);
29
+ }
30
+ else {
31
+ console.warn(`[clawsec] ${message}`);
32
+ }
33
+ },
34
+ error: (message, data) => {
35
+ if (data) {
36
+ console.error(`[clawsec] ${message}`, data);
37
+ }
38
+ else {
39
+ console.error(`[clawsec] ${message}`);
40
+ }
41
+ },
42
+ };
43
+ /* eslint-enable no-console */
44
+ /**
45
+ * No-op logger for testing or silent mode
46
+ */
47
+ export const noOpLogger = {
48
+ debug: () => { },
49
+ info: () => { },
50
+ warn: () => { },
51
+ error: () => { },
52
+ };
53
+ /**
54
+ * Create a logger based on log level
55
+ */
56
+ export function createLogger(logLevel) {
57
+ const levels = ['debug', 'info', 'warn', 'error'];
58
+ const minLevel = levels.indexOf(logLevel);
59
+ return {
60
+ debug: (message, data) => {
61
+ if (minLevel <= 0)
62
+ consoleLogger.debug(message, data);
63
+ },
64
+ info: (message, data) => {
65
+ if (minLevel <= 1)
66
+ consoleLogger.info(message, data);
67
+ },
68
+ warn: (message, data) => {
69
+ if (minLevel <= 2)
70
+ consoleLogger.warn(message, data);
71
+ },
72
+ error: (message, data) => {
73
+ if (minLevel <= 3)
74
+ consoleLogger.error(message, data);
75
+ },
76
+ };
77
+ }
78
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/actions/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA8EH;;GAEG;AACH,+BAA+B;AAC/B,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,aAAa,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;QACtB,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;QACtB,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,aAAa,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF,CAAC;AACF,8BAA8B;AAE9B;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAA6C;IACxE,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE1C,OAAO;QACL,KAAK,EAAE,CAAC,OAAe,EAAE,IAA8B,EAAQ,EAAE;YAC/D,IAAI,QAAQ,IAAI,CAAC;gBAAE,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,EAAE,CAAC,OAAe,EAAE,IAA8B,EAAQ,EAAE;YAC9D,IAAI,QAAQ,IAAI,CAAC;gBAAE,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,EAAE,CAAC,OAAe,EAAE,IAA8B,EAAQ,EAAE;YAC9D,IAAI,QAAQ,IAAI,CAAC;gBAAE,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,EAAE,CAAC,OAAe,EAAE,IAA8B,EAAQ,EAAE;YAC/D,IAAI,QAAQ,IAAI,CAAC;gBAAE,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Warn Action Handler
3
+ * Handles warning about potentially risky tool calls while still allowing them
4
+ */
5
+ import type { ActionContext, ActionHandler, ActionResult, ActionLogger } from './types.js';
6
+ /**
7
+ * Generate a warning message about the detected threat
8
+ */
9
+ export declare function generateWarnMessage(context: ActionContext): string;
10
+ /**
11
+ * Warn action handler implementation
12
+ */
13
+ export declare class WarnHandler implements ActionHandler {
14
+ private logger;
15
+ constructor(logger?: ActionLogger);
16
+ execute(context: ActionContext): Promise<ActionResult>;
17
+ }
18
+ /**
19
+ * Create a warn action handler with the given logger
20
+ */
21
+ export declare function createWarnHandler(logger?: ActionLogger): WarnHandler;
22
+ //# sourceMappingURL=warn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warn.d.ts","sourceRoot":"","sources":["../../../src/actions/warn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAwB3F;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA4BlE;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,aAAa;IAC/C,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,GAAE,YAAyB;IAIvC,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAmB7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,CAEpE"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Warn Action Handler
3
+ * Handles warning about potentially risky tool calls while still allowing them
4
+ */
5
+ import { noOpLogger } from './types.js';
6
+ /**
7
+ * Format a severity level for display
8
+ */
9
+ function formatSeverity(severity) {
10
+ return severity.toUpperCase();
11
+ }
12
+ /**
13
+ * Format a threat category for display
14
+ */
15
+ function formatCategory(category) {
16
+ const categoryNames = {
17
+ purchase: 'Purchase/Payment',
18
+ website: 'Website Access',
19
+ destructive: 'Destructive Command',
20
+ secrets: 'Secrets/PII',
21
+ exfiltration: 'Data Transfer',
22
+ };
23
+ return categoryNames[category] || category;
24
+ }
25
+ /**
26
+ * Generate a warning message about the detected threat
27
+ */
28
+ export function generateWarnMessage(context) {
29
+ const { analysis, toolCall } = context;
30
+ const { primaryDetection, detections } = analysis;
31
+ if (!primaryDetection) {
32
+ return `Warning: ${toolCall.toolName} executed with security notice.`;
33
+ }
34
+ const category = formatCategory(primaryDetection.category);
35
+ const severity = formatSeverity(primaryDetection.severity);
36
+ const reason = primaryDetection.reason;
37
+ let message = `[${severity}] Warning: ${category} detected\n`;
38
+ message += `Tool: ${toolCall.toolName}\n`;
39
+ message += `Reason: ${reason}\n`;
40
+ message += `\nAction allowed but logged for audit.`;
41
+ // Include additional detections if any
42
+ if (detections.length > 1) {
43
+ message += `\n\nAdditional warnings (${detections.length - 1}):`;
44
+ for (const detection of detections) {
45
+ if (detection !== primaryDetection) {
46
+ message += `\n- ${formatCategory(detection.category)}: ${detection.reason}`;
47
+ }
48
+ }
49
+ }
50
+ return message;
51
+ }
52
+ /**
53
+ * Warn action handler implementation
54
+ */
55
+ export class WarnHandler {
56
+ logger;
57
+ constructor(logger = noOpLogger) {
58
+ this.logger = logger;
59
+ }
60
+ async execute(context) {
61
+ const { analysis, toolCall } = context;
62
+ const message = generateWarnMessage(context);
63
+ // Log the warning
64
+ this.logger.warn('Action executed with warning', {
65
+ toolName: toolCall.toolName,
66
+ category: analysis.primaryDetection?.category,
67
+ severity: analysis.primaryDetection?.severity,
68
+ reason: analysis.primaryDetection?.reason,
69
+ detectionCount: analysis.detections.length,
70
+ });
71
+ return {
72
+ allowed: true,
73
+ message,
74
+ logged: true,
75
+ };
76
+ }
77
+ }
78
+ /**
79
+ * Create a warn action handler with the given logger
80
+ */
81
+ export function createWarnHandler(logger) {
82
+ return new WarnHandler(logger);
83
+ }
84
+ //# sourceMappingURL=warn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warn.js","sourceRoot":"","sources":["../../../src/actions/warn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;GAEG;AACH,SAAS,cAAc,CAAC,QAAgB;IACtC,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,aAAa,GAA2B;QAC5C,QAAQ,EAAE,kBAAkB;QAC5B,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,qBAAqB;QAClC,OAAO,EAAE,aAAa;QACtB,YAAY,EAAE,eAAe;KAC9B,CAAC;IACF,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACxD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;IAElD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,YAAY,QAAQ,CAAC,QAAQ,iCAAiC,CAAC;IACxE,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAEvC,IAAI,OAAO,GAAG,IAAI,QAAQ,cAAc,QAAQ,aAAa,CAAC;IAC9D,OAAO,IAAI,SAAS,QAAQ,CAAC,QAAQ,IAAI,CAAC;IAC1C,OAAO,IAAI,WAAW,MAAM,IAAI,CAAC;IACjC,OAAO,IAAI,wCAAwC,CAAC;IAEpD,uCAAuC;IACvC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,4BAA4B,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC;QACjE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;gBACnC,OAAO,IAAI,OAAO,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;YAC9E,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,CAAe;IAE7B,YAAY,SAAuB,UAAU;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAsB;QAClC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QACvC,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE7C,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;YAC/C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,EAAE,QAAQ;YAC7C,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,EAAE,QAAQ;YAC7C,MAAM,EAAE,QAAQ,CAAC,gBAAgB,EAAE,MAAM;YACzC,cAAc,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM;SAC3C,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO;YACP,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Agent Confirm Handler
3
+ * Handles agent-side confirmation via _clawsec_confirm parameter
4
+ *
5
+ * When a tool call is flagged for confirmation, the agent can acknowledge
6
+ * the risk by retrying the call with a _clawsec_confirm parameter set to
7
+ * the approval ID.
8
+ */
9
+ import type { ApprovalStore } from './types.js';
10
+ /** Default parameter name for agent confirmation */
11
+ export declare const DEFAULT_CONFIRM_PARAMETER = "_clawsec_confirm";
12
+ /**
13
+ * Result of checking for agent confirmation
14
+ */
15
+ export interface AgentConfirmResult {
16
+ /** Whether the tool input contains a confirmation parameter */
17
+ confirmed: boolean;
18
+ /** The approval ID from the confirmation parameter */
19
+ approvalId?: string;
20
+ /** Whether the approval ID is valid and the approval can proceed */
21
+ valid: boolean;
22
+ /** Error message if confirmation is invalid */
23
+ error?: string;
24
+ }
25
+ /**
26
+ * Interface for the agent confirm handler
27
+ */
28
+ export interface AgentConfirmHandler {
29
+ /**
30
+ * Check if tool input contains a valid confirmation
31
+ * @param toolInput - The tool input object
32
+ * @param parameterName - Custom parameter name (defaults to _clawsec_confirm)
33
+ * @returns Result indicating if confirmation is present and valid
34
+ */
35
+ checkConfirmation(toolInput: Record<string, unknown>, parameterName?: string): AgentConfirmResult;
36
+ /**
37
+ * Remove the confirm parameter from tool input for clean execution
38
+ * @param toolInput - The tool input object
39
+ * @param parameterName - Custom parameter name (defaults to _clawsec_confirm)
40
+ * @returns Tool input without the confirm parameter
41
+ */
42
+ stripConfirmParameter(toolInput: Record<string, unknown>, parameterName?: string): Record<string, unknown>;
43
+ /**
44
+ * Process agent confirmation: validate and approve if valid
45
+ * @param toolInput - The tool input object
46
+ * @param parameterName - Custom parameter name (defaults to _clawsec_confirm)
47
+ * @returns Result indicating if confirmation succeeded
48
+ */
49
+ processConfirmation(toolInput: Record<string, unknown>, parameterName?: string): AgentConfirmResult;
50
+ }
51
+ /**
52
+ * Configuration for the agent confirm handler
53
+ */
54
+ export interface AgentConfirmHandlerConfig {
55
+ /** The approval store to use (defaults to the default singleton) */
56
+ store?: ApprovalStore;
57
+ /** Whether agent confirmation is enabled */
58
+ enabled?: boolean;
59
+ /** Custom parameter name for confirmation */
60
+ parameterName?: string;
61
+ }
62
+ /**
63
+ * Default implementation of the agent confirm handler
64
+ */
65
+ export declare class DefaultAgentConfirmHandler implements AgentConfirmHandler {
66
+ private store;
67
+ private enabled;
68
+ private defaultParameterName;
69
+ constructor(config?: AgentConfirmHandlerConfig);
70
+ /**
71
+ * Check if tool input contains a valid confirmation
72
+ */
73
+ checkConfirmation(toolInput: Record<string, unknown>, parameterName?: string): AgentConfirmResult;
74
+ /**
75
+ * Remove the confirm parameter from tool input
76
+ */
77
+ stripConfirmParameter(toolInput: Record<string, unknown>, parameterName?: string): Record<string, unknown>;
78
+ /**
79
+ * Process agent confirmation: validate and approve if valid
80
+ * This combines checkConfirmation with actually approving the record
81
+ */
82
+ processConfirmation(toolInput: Record<string, unknown>, parameterName?: string): AgentConfirmResult;
83
+ /**
84
+ * Check if agent confirmation is enabled
85
+ */
86
+ isEnabled(): boolean;
87
+ /**
88
+ * Get the default parameter name
89
+ */
90
+ getParameterName(): string;
91
+ }
92
+ /**
93
+ * Create an agent confirm handler with the given configuration
94
+ */
95
+ export declare function createAgentConfirmHandler(config?: AgentConfirmHandlerConfig): DefaultAgentConfirmHandler;
96
+ /**
97
+ * Get the default agent confirm handler singleton
98
+ */
99
+ export declare function getDefaultAgentConfirmHandler(): DefaultAgentConfirmHandler;
100
+ /**
101
+ * Reset the default handler (mainly for testing)
102
+ */
103
+ export declare function resetDefaultAgentConfirmHandler(): void;
104
+ //# sourceMappingURL=agent-confirm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-confirm.d.ts","sourceRoot":"","sources":["../../../src/approval/agent-confirm.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,oDAAoD;AACpD,eAAO,MAAM,yBAAyB,qBAAqB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,SAAS,EAAE,OAAO,CAAC;IACnB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,KAAK,EAAE,OAAO,CAAC;IACf,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,iBAAiB,CACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB,kBAAkB,CAAC;IAEtB;;;;;OAKG;IACH,qBAAqB,CACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3B;;;;;OAKG;IACH,mBAAmB,CACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB,kBAAkB,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,oEAAoE;IACpE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,0BAA2B,YAAW,mBAAmB;IACpE,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,oBAAoB,CAAS;gBAEzB,MAAM,GAAE,yBAA8B;IAMlD;;OAEG;IACH,iBAAiB,CACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB,kBAAkB;IAiFrB;;OAEG;IACH,qBAAqB,CACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAY1B;;;OAGG;IACH,mBAAmB,CACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB,kBAAkB;IA4BrB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,gBAAgB,IAAI,MAAM;CAG3B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,CAAC,EAAE,yBAAyB,GACjC,0BAA0B,CAE5B;AAOD;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,0BAA0B,CAK1E;AAED;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Agent Confirm Handler
3
+ * Handles agent-side confirmation via _clawsec_confirm parameter
4
+ *
5
+ * When a tool call is flagged for confirmation, the agent can acknowledge
6
+ * the risk by retrying the call with a _clawsec_confirm parameter set to
7
+ * the approval ID.
8
+ */
9
+ import { getDefaultApprovalStore } from './store.js';
10
+ /** Default parameter name for agent confirmation */
11
+ export const DEFAULT_CONFIRM_PARAMETER = '_clawsec_confirm';
12
+ /**
13
+ * Default implementation of the agent confirm handler
14
+ */
15
+ export class DefaultAgentConfirmHandler {
16
+ store;
17
+ enabled;
18
+ defaultParameterName;
19
+ constructor(config = {}) {
20
+ this.store = config.store ?? getDefaultApprovalStore();
21
+ this.enabled = config.enabled ?? true;
22
+ this.defaultParameterName = config.parameterName ?? DEFAULT_CONFIRM_PARAMETER;
23
+ }
24
+ /**
25
+ * Check if tool input contains a valid confirmation
26
+ */
27
+ checkConfirmation(toolInput, parameterName) {
28
+ const paramName = parameterName ?? this.defaultParameterName;
29
+ // Check if confirmation is disabled
30
+ if (!this.enabled) {
31
+ return {
32
+ confirmed: false,
33
+ valid: false,
34
+ error: 'Agent confirmation is disabled',
35
+ };
36
+ }
37
+ // Check if parameter exists
38
+ if (!(paramName in toolInput)) {
39
+ return {
40
+ confirmed: false,
41
+ valid: false,
42
+ };
43
+ }
44
+ const approvalId = toolInput[paramName];
45
+ // Validate the approval ID is a non-empty string
46
+ if (typeof approvalId !== 'string' || approvalId.trim() === '') {
47
+ return {
48
+ confirmed: true,
49
+ valid: false,
50
+ error: 'Invalid approval ID: must be a non-empty string',
51
+ };
52
+ }
53
+ const trimmedId = approvalId.trim();
54
+ // Look up the approval record
55
+ const record = this.store.get(trimmedId);
56
+ if (!record) {
57
+ return {
58
+ confirmed: true,
59
+ approvalId: trimmedId,
60
+ valid: false,
61
+ error: `Approval not found: No pending approval with ID "${trimmedId}"`,
62
+ };
63
+ }
64
+ // Check the record status
65
+ if (record.status === 'expired') {
66
+ return {
67
+ confirmed: true,
68
+ approvalId: trimmedId,
69
+ valid: false,
70
+ error: `Approval expired: The approval "${trimmedId}" has expired`,
71
+ };
72
+ }
73
+ if (record.status === 'approved') {
74
+ return {
75
+ confirmed: true,
76
+ approvalId: trimmedId,
77
+ valid: false,
78
+ error: `Already approved: The approval "${trimmedId}" was already approved`,
79
+ };
80
+ }
81
+ if (record.status === 'denied') {
82
+ return {
83
+ confirmed: true,
84
+ approvalId: trimmedId,
85
+ valid: false,
86
+ error: `Already denied: The approval "${trimmedId}" was denied`,
87
+ };
88
+ }
89
+ // Valid pending approval
90
+ return {
91
+ confirmed: true,
92
+ approvalId: trimmedId,
93
+ valid: true,
94
+ };
95
+ }
96
+ /**
97
+ * Remove the confirm parameter from tool input
98
+ */
99
+ stripConfirmParameter(toolInput, parameterName) {
100
+ const paramName = parameterName ?? this.defaultParameterName;
101
+ if (!(paramName in toolInput)) {
102
+ return toolInput;
103
+ }
104
+ // Create a shallow copy without the confirm parameter
105
+ const { [paramName]: _, ...cleanedInput } = toolInput;
106
+ return cleanedInput;
107
+ }
108
+ /**
109
+ * Process agent confirmation: validate and approve if valid
110
+ * This combines checkConfirmation with actually approving the record
111
+ */
112
+ processConfirmation(toolInput, parameterName) {
113
+ const result = this.checkConfirmation(toolInput, parameterName);
114
+ // If not valid, return the check result as-is
115
+ if (!result.valid || !result.approvalId) {
116
+ return result;
117
+ }
118
+ // Attempt to approve the record
119
+ const success = this.store.approve(result.approvalId, 'agent');
120
+ if (!success) {
121
+ // This could happen if the record expired between check and approve
122
+ return {
123
+ confirmed: true,
124
+ approvalId: result.approvalId,
125
+ valid: false,
126
+ error: `Failed to approve: Unable to approve "${result.approvalId}"`,
127
+ };
128
+ }
129
+ return {
130
+ confirmed: true,
131
+ approvalId: result.approvalId,
132
+ valid: true,
133
+ };
134
+ }
135
+ /**
136
+ * Check if agent confirmation is enabled
137
+ */
138
+ isEnabled() {
139
+ return this.enabled;
140
+ }
141
+ /**
142
+ * Get the default parameter name
143
+ */
144
+ getParameterName() {
145
+ return this.defaultParameterName;
146
+ }
147
+ }
148
+ /**
149
+ * Create an agent confirm handler with the given configuration
150
+ */
151
+ export function createAgentConfirmHandler(config) {
152
+ return new DefaultAgentConfirmHandler(config);
153
+ }
154
+ /**
155
+ * Default singleton handler instance
156
+ */
157
+ let defaultHandler = null;
158
+ /**
159
+ * Get the default agent confirm handler singleton
160
+ */
161
+ export function getDefaultAgentConfirmHandler() {
162
+ if (!defaultHandler) {
163
+ defaultHandler = createAgentConfirmHandler();
164
+ }
165
+ return defaultHandler;
166
+ }
167
+ /**
168
+ * Reset the default handler (mainly for testing)
169
+ */
170
+ export function resetDefaultAgentConfirmHandler() {
171
+ defaultHandler = null;
172
+ }
173
+ //# sourceMappingURL=agent-confirm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-confirm.js","sourceRoot":"","sources":["../../../src/approval/agent-confirm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Approval Module
3
+ * Re-exports for the approval system
4
+ */
5
+ export type { ApprovalStatus, PendingApprovalRecord, PendingApprovalInput, ApprovalStore, ApprovalResult, NativeApprovalHandler, } from './types.js';
6
+ export type { ApprovalStoreConfig } from './store.js';
7
+ export { InMemoryApprovalStore, createApprovalStore, getDefaultApprovalStore, resetDefaultApprovalStore, } from './store.js';
8
+ export type { NativeApprovalHandlerConfig } from './native.js';
9
+ export { DefaultNativeApprovalHandler, createNativeApprovalHandler, getDefaultNativeApprovalHandler, resetDefaultNativeApprovalHandler, } from './native.js';
10
+ export type { AgentConfirmResult, AgentConfirmHandler, AgentConfirmHandlerConfig, } from './agent-confirm.js';
11
+ export { DEFAULT_CONFIRM_PARAMETER, DefaultAgentConfirmHandler, createAgentConfirmHandler, getDefaultAgentConfirmHandler, resetDefaultAgentConfirmHandler, } from './agent-confirm.js';
12
+ export type { WebhookApprovalRequest, WebhookApprovalResponse, WebhookApprovalResult, WebhookApprovalClient, HttpClient, HttpResponse, WebhookApprovalClientConfig, } from './webhook.js';
13
+ export { FetchHttpClient, DefaultWebhookApprovalClient, createWebhookApprovalClient, getDefaultWebhookApprovalClient, configureDefaultWebhookApprovalClient, resetDefaultWebhookApprovalClient, createWebhookRequest, } from './webhook.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/approval/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,+BAA+B,EAC/B,iCAAiC,GAClC,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,EACV,YAAY,EACZ,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,2BAA2B,EAC3B,+BAA+B,EAC/B,qCAAqC,EACrC,iCAAiC,EACjC,oBAAoB,GACrB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Approval Module
3
+ * Re-exports for the approval system
4
+ */
5
+ export { InMemoryApprovalStore, createApprovalStore, getDefaultApprovalStore, resetDefaultApprovalStore, } from './store.js';
6
+ export { DefaultNativeApprovalHandler, createNativeApprovalHandler, getDefaultNativeApprovalHandler, resetDefaultNativeApprovalHandler, } from './native.js';
7
+ export { DEFAULT_CONFIRM_PARAMETER, DefaultAgentConfirmHandler, createAgentConfirmHandler, getDefaultAgentConfirmHandler, resetDefaultAgentConfirmHandler, } from './agent-confirm.js';
8
+ export { FetchHttpClient, DefaultWebhookApprovalClient, createWebhookApprovalClient, getDefaultWebhookApprovalClient, configureDefaultWebhookApprovalClient, resetDefaultWebhookApprovalClient, createWebhookRequest, } from './webhook.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/approval/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,+BAA+B,EAC/B,iCAAiC,GAClC,MAAM,aAAa,CAAC;AAQrB,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,oBAAoB,CAAC;AAY5B,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,2BAA2B,EAC3B,+BAA+B,EAC/B,qCAAqC,EACrC,iCAAiC,EACjC,oBAAoB,GACrB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Native Approval Handler
3
+ * Handles the /approve and /deny commands for OpenClaw native approval flow
4
+ */
5
+ import type { ApprovalResult, NativeApprovalHandler, PendingApprovalRecord, ApprovalStore } from './types.js';
6
+ /**
7
+ * Configuration for the native approval handler
8
+ */
9
+ export interface NativeApprovalHandlerConfig {
10
+ /** The approval store to use (defaults to the default singleton) */
11
+ store?: ApprovalStore;
12
+ }
13
+ /**
14
+ * Default implementation of the native approval handler
15
+ */
16
+ export declare class DefaultNativeApprovalHandler implements NativeApprovalHandler {
17
+ private store;
18
+ constructor(config?: NativeApprovalHandlerConfig);
19
+ /**
20
+ * Handle an /approve command
21
+ */
22
+ handleApprove(id: string, userId?: string): ApprovalResult;
23
+ /**
24
+ * Handle a deny/reject command
25
+ */
26
+ handleDeny(id: string): ApprovalResult;
27
+ /**
28
+ * Check if a specific approval has been granted
29
+ */
30
+ isApproved(id: string): boolean;
31
+ /**
32
+ * Get all pending approval records
33
+ */
34
+ getPendingApprovals(): PendingApprovalRecord[];
35
+ /**
36
+ * Format a success message for an approved action
37
+ */
38
+ private formatApprovalMessage;
39
+ /**
40
+ * Format a threat category for display
41
+ */
42
+ private formatCategory;
43
+ }
44
+ /**
45
+ * Create a native approval handler with the given configuration
46
+ */
47
+ export declare function createNativeApprovalHandler(config?: NativeApprovalHandlerConfig): DefaultNativeApprovalHandler;
48
+ /**
49
+ * Get the default native approval handler singleton
50
+ */
51
+ export declare function getDefaultNativeApprovalHandler(): DefaultNativeApprovalHandler;
52
+ /**
53
+ * Reset the default handler (mainly for testing)
54
+ */
55
+ export declare function resetDefaultNativeApprovalHandler(): void;
56
+ //# sourceMappingURL=native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/approval/native.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,oEAAoE;IACpE,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,4BAA6B,YAAW,qBAAqB;IACxE,OAAO,CAAC,KAAK,CAAgB;gBAEjB,MAAM,GAAE,2BAAgC;IAIpD;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc;IAoE1D;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc;IAmEtC;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAS/B;;OAEG;IACH,mBAAmB,IAAI,qBAAqB,EAAE;IAI9C;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACH,OAAO,CAAC,cAAc;CAUvB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,CAAC,EAAE,2BAA2B,GACnC,4BAA4B,CAE9B;AAOD;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,4BAA4B,CAK9E;AAED;;GAEG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAExD"}