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,8 @@
1
+ /**
2
+ * Before Agent Start Hook
3
+ * Re-exports for the before-agent-start hook
4
+ */
5
+ export type { BeforeAgentStartHandlerOptions } from './handler.js';
6
+ export { createBeforeAgentStartHandler, createDefaultBeforeAgentStartHandler, } from './handler.js';
7
+ export { SECURITY_CONTEXT_HEADER, BASE_SECURITY_INTRO, CATEGORY_REMINDERS, BLOCKED_ACTION_INSTRUCTIONS, SECURITY_CONTEXT_FOOTER, getAgentConfirmInstructions, getEnabledCategoryReminders, buildSecurityContextPrompt, } from './prompts.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/before-agent-start/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,EACL,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Before Agent Start Hook
3
+ * Re-exports for the before-agent-start hook
4
+ */
5
+ export { createBeforeAgentStartHandler, createDefaultBeforeAgentStartHandler, } from './handler.js';
6
+ export { SECURITY_CONTEXT_HEADER, BASE_SECURITY_INTRO, CATEGORY_REMINDERS, BLOCKED_ACTION_INSTRUCTIONS, SECURITY_CONTEXT_FOOTER, getAgentConfirmInstructions, getEnabledCategoryReminders, buildSecurityContextPrompt, } from './prompts.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/before-agent-start/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Before Agent Start Hook - Prompt Templates
3
+ *
4
+ * Templates for security context injection into agent system prompts.
5
+ */
6
+ import type { ClawsecConfig } from '../../config/schema.js';
7
+ /**
8
+ * Security context header
9
+ */
10
+ export declare const SECURITY_CONTEXT_HEADER = "[CLAWSEC SECURITY CONTEXT]";
11
+ /**
12
+ * Base security introduction
13
+ */
14
+ export declare const BASE_SECURITY_INTRO = "This session has security protections enabled:";
15
+ /**
16
+ * Category-specific security reminders
17
+ */
18
+ export declare const CATEGORY_REMINDERS: {
19
+ readonly purchase: "- Purchase Protection: Transactions require approval";
20
+ readonly destructive: "- Destructive Commands: Commands like rm -rf, DROP TABLE are monitored";
21
+ readonly secrets: "- Secrets Detection: API keys and credentials in outputs are filtered";
22
+ readonly website: "- Website Control: Some domains may be restricted";
23
+ readonly exfiltration: "- Data Exfiltration: Outbound data transfers are monitored";
24
+ };
25
+ /**
26
+ * Instructions for when actions are blocked
27
+ */
28
+ export declare const BLOCKED_ACTION_INSTRUCTIONS = "If an action is blocked:\n1. You'll receive a message explaining why\n2. For confirmable actions, retry with _clawsec_confirm=\"<approval-id>\"\n3. Some actions cannot be approved and are permanently blocked";
29
+ /**
30
+ * Custom agent-confirm instructions with parameter name
31
+ */
32
+ export declare function getAgentConfirmInstructions(parameterName: string): string;
33
+ /**
34
+ * Footer for the security context
35
+ */
36
+ export declare const SECURITY_CONTEXT_FOOTER = "Work safely within these protections.";
37
+ /**
38
+ * Get enabled category reminders based on config
39
+ */
40
+ export declare function getEnabledCategoryReminders(config: ClawsecConfig): string[];
41
+ /**
42
+ * Build the full security context prompt
43
+ *
44
+ * @param config - Clawsec configuration
45
+ * @returns The complete security context prompt or undefined if no protections enabled
46
+ */
47
+ export declare function buildSecurityContextPrompt(config: ClawsecConfig): string | undefined;
48
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/hooks/before-agent-start/prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,uBAAuB,+BAA+B,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,mBAAmB,mDAAmD,CAAC;AAEpF;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,2BAA2B,oNAGuB,CAAC;AAEhE;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAKzE;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAE/E;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAqB3E;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAmCpF"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Before Agent Start Hook - Prompt Templates
3
+ *
4
+ * Templates for security context injection into agent system prompts.
5
+ */
6
+ /**
7
+ * Security context header
8
+ */
9
+ export const SECURITY_CONTEXT_HEADER = '[CLAWSEC SECURITY CONTEXT]';
10
+ /**
11
+ * Base security introduction
12
+ */
13
+ export const BASE_SECURITY_INTRO = 'This session has security protections enabled:';
14
+ /**
15
+ * Category-specific security reminders
16
+ */
17
+ export const CATEGORY_REMINDERS = {
18
+ purchase: '- Purchase Protection: Transactions require approval',
19
+ destructive: '- Destructive Commands: Commands like rm -rf, DROP TABLE are monitored',
20
+ secrets: '- Secrets Detection: API keys and credentials in outputs are filtered',
21
+ website: '- Website Control: Some domains may be restricted',
22
+ exfiltration: '- Data Exfiltration: Outbound data transfers are monitored',
23
+ };
24
+ /**
25
+ * Instructions for when actions are blocked
26
+ */
27
+ export const BLOCKED_ACTION_INSTRUCTIONS = `If an action is blocked:
28
+ 1. You'll receive a message explaining why
29
+ 2. For confirmable actions, retry with _clawsec_confirm="<approval-id>"
30
+ 3. Some actions cannot be approved and are permanently blocked`;
31
+ /**
32
+ * Custom agent-confirm instructions with parameter name
33
+ */
34
+ export function getAgentConfirmInstructions(parameterName) {
35
+ return `If an action is blocked:
36
+ 1. You'll receive a message explaining why
37
+ 2. For confirmable actions, retry with ${parameterName}="<approval-id>"
38
+ 3. Some actions cannot be approved and are permanently blocked`;
39
+ }
40
+ /**
41
+ * Footer for the security context
42
+ */
43
+ export const SECURITY_CONTEXT_FOOTER = 'Work safely within these protections.';
44
+ /**
45
+ * Get enabled category reminders based on config
46
+ */
47
+ export function getEnabledCategoryReminders(config) {
48
+ const reminders = [];
49
+ const rules = config.rules;
50
+ if (rules?.purchase?.enabled) {
51
+ reminders.push(CATEGORY_REMINDERS.purchase);
52
+ }
53
+ if (rules?.destructive?.enabled) {
54
+ reminders.push(CATEGORY_REMINDERS.destructive);
55
+ }
56
+ if (rules?.secrets?.enabled) {
57
+ reminders.push(CATEGORY_REMINDERS.secrets);
58
+ }
59
+ if (rules?.website?.enabled) {
60
+ reminders.push(CATEGORY_REMINDERS.website);
61
+ }
62
+ if (rules?.exfiltration?.enabled) {
63
+ reminders.push(CATEGORY_REMINDERS.exfiltration);
64
+ }
65
+ return reminders;
66
+ }
67
+ /**
68
+ * Build the full security context prompt
69
+ *
70
+ * @param config - Clawsec configuration
71
+ * @returns The complete security context prompt or undefined if no protections enabled
72
+ */
73
+ export function buildSecurityContextPrompt(config) {
74
+ // Check if plugin is globally enabled
75
+ if (config.global?.enabled === false) {
76
+ return undefined;
77
+ }
78
+ // Get enabled category reminders
79
+ const reminders = getEnabledCategoryReminders(config);
80
+ // If no categories are enabled, return undefined
81
+ if (reminders.length === 0) {
82
+ return undefined;
83
+ }
84
+ // Build the prompt sections
85
+ const sections = [
86
+ SECURITY_CONTEXT_HEADER,
87
+ '',
88
+ BASE_SECURITY_INTRO,
89
+ '',
90
+ ...reminders,
91
+ ];
92
+ // Add agent-confirm instructions if enabled
93
+ if (config.approval?.agentConfirm?.enabled !== false) {
94
+ const parameterName = config.approval?.agentConfirm?.parameterName ?? '_clawsec_confirm';
95
+ sections.push('');
96
+ sections.push(getAgentConfirmInstructions(parameterName));
97
+ }
98
+ // Add footer
99
+ sections.push('');
100
+ sections.push(SECURITY_CONTEXT_FOOTER);
101
+ return sections.join('\n');
102
+ }
103
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/hooks/before-agent-start/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Before Tool Call Hook Handler
3
+ *
4
+ * Main hook handler that intercepts tool calls, runs detection,
5
+ * and blocks/confirms dangerous actions.
6
+ */
7
+ import type { BeforeToolCallHandler } from '../../index.js';
8
+ import type { Analyzer } from '../../engine/types.js';
9
+ import type { ActionExecutor } from '../../actions/types.js';
10
+ import type { ClawsecConfig } from '../../config/schema.js';
11
+ import type { AgentConfirmHandler } from '../../approval/agent-confirm.js';
12
+ /**
13
+ * Options for creating a before-tool-call handler
14
+ */
15
+ export interface BeforeToolCallHandlerOptions {
16
+ /** Custom analyzer instance */
17
+ analyzer?: Analyzer;
18
+ /** Custom action executor instance */
19
+ executor?: ActionExecutor;
20
+ /** Custom agent confirm handler instance */
21
+ agentConfirm?: AgentConfirmHandler;
22
+ }
23
+ /**
24
+ * Create the before-tool-call handler
25
+ *
26
+ * Flow:
27
+ * 1. Check if plugin is enabled
28
+ * 2. Check for agent-confirm parameter -> validate and allow if valid
29
+ * 3. Run HybridAnalyzer on tool call context
30
+ * 4. Execute action based on analysis result
31
+ * 5. Return appropriate BeforeToolCallResult
32
+ *
33
+ * @param config - Clawsec configuration
34
+ * @param options - Optional custom components
35
+ * @returns BeforeToolCallHandler function
36
+ */
37
+ export declare function createBeforeToolCallHandler(config: ClawsecConfig, options?: BeforeToolCallHandlerOptions): BeforeToolCallHandler;
38
+ /**
39
+ * Create a default before-tool-call handler with default configuration
40
+ */
41
+ export declare function createDefaultBeforeToolCallHandler(): BeforeToolCallHandler;
42
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/hooks/before-tool-call/handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAGV,qBAAqB,EAGtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,QAAQ,EAGT,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAA+B,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAM3E;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,4CAA4C;IAC5C,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC;AAiGD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,4BAA4B,GACrC,qBAAqB,CAsEvB;AAED;;GAEG;AACH,wBAAgB,kCAAkC,IAAI,qBAAqB,CAmE1E"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Before Tool Call Hook Handler
3
+ *
4
+ * Main hook handler that intercepts tool calls, runs detection,
5
+ * and blocks/confirms dangerous actions.
6
+ */
7
+ import { createAnalyzer } from '../../engine/analyzer.js';
8
+ import { createActionExecutor } from '../../actions/executor.js';
9
+ import { createAgentConfirmHandler } from '../../approval/agent-confirm.js';
10
+ import { getDefaultApprovalStore } from '../../approval/store.js';
11
+ /**
12
+ * Convert hook ToolCallContext to engine ToolCallContext
13
+ * The engine context has a slightly different shape
14
+ */
15
+ function toEngineContext(hookContext) {
16
+ return {
17
+ toolName: hookContext.toolName,
18
+ toolInput: hookContext.toolInput,
19
+ // url can be extracted from toolInput if present
20
+ url: typeof hookContext.toolInput.url === 'string' ? hookContext.toolInput.url : undefined,
21
+ };
22
+ }
23
+ /**
24
+ * Convert analysis result and action result to BeforeToolCallResult
25
+ */
26
+ function toBeforeToolCallResult(actionResult, detection) {
27
+ const result = {
28
+ allow: actionResult.allowed,
29
+ };
30
+ // Add block message if not allowed
31
+ if (!actionResult.allowed && actionResult.message) {
32
+ result.blockMessage = actionResult.message;
33
+ }
34
+ // Add metadata from primary detection
35
+ if (detection) {
36
+ result.metadata = {
37
+ category: detection.category,
38
+ severity: detection.severity,
39
+ reason: detection.reason,
40
+ };
41
+ // Add rule if present in detection metadata
42
+ if (detection.metadata?.rule && typeof detection.metadata.rule === 'string') {
43
+ result.metadata.rule = detection.metadata.rule;
44
+ }
45
+ }
46
+ // Add pending approval instructions to block message if present
47
+ if (actionResult.pendingApproval) {
48
+ const approvalInfo = `\n\nApproval ID: ${actionResult.pendingApproval.id}\nTimeout: ${actionResult.pendingApproval.timeout}s\nMethods: ${actionResult.pendingApproval.methods.join(', ')}`;
49
+ result.blockMessage = (result.blockMessage || 'Approval required') + approvalInfo;
50
+ }
51
+ return result;
52
+ }
53
+ /**
54
+ * Create the allow result for when no threats are detected
55
+ */
56
+ function createAllowResult() {
57
+ return {
58
+ allow: true,
59
+ };
60
+ }
61
+ /**
62
+ * Create a result for valid agent-confirm flow
63
+ */
64
+ function createAgentConfirmAllowResult(strippedInput) {
65
+ return {
66
+ allow: true,
67
+ modifiedInput: strippedInput,
68
+ };
69
+ }
70
+ /**
71
+ * Create a result for invalid agent-confirm flow
72
+ */
73
+ function createAgentConfirmInvalidResult(error) {
74
+ return {
75
+ allow: false,
76
+ blockMessage: error || 'Invalid or expired approval confirmation',
77
+ metadata: {
78
+ reason: 'Agent confirmation parameter was present but invalid',
79
+ },
80
+ };
81
+ }
82
+ /**
83
+ * Create a result for disabled plugin
84
+ */
85
+ function createDisabledResult() {
86
+ return {
87
+ allow: true,
88
+ };
89
+ }
90
+ /**
91
+ * Create the before-tool-call handler
92
+ *
93
+ * Flow:
94
+ * 1. Check if plugin is enabled
95
+ * 2. Check for agent-confirm parameter -> validate and allow if valid
96
+ * 3. Run HybridAnalyzer on tool call context
97
+ * 4. Execute action based on analysis result
98
+ * 5. Return appropriate BeforeToolCallResult
99
+ *
100
+ * @param config - Clawsec configuration
101
+ * @param options - Optional custom components
102
+ * @returns BeforeToolCallHandler function
103
+ */
104
+ export function createBeforeToolCallHandler(config, options) {
105
+ // Create or use provided components
106
+ const analyzer = options?.analyzer ?? createAnalyzer(config);
107
+ const executor = options?.executor ?? createActionExecutor();
108
+ const agentConfirm = options?.agentConfirm ??
109
+ createAgentConfirmHandler({
110
+ enabled: config.approval?.agentConfirm?.enabled ?? true,
111
+ parameterName: config.approval?.agentConfirm?.parameterName,
112
+ store: getDefaultApprovalStore(),
113
+ });
114
+ // Get the parameter name from config
115
+ const confirmParamName = config.approval?.agentConfirm?.parameterName ?? '_clawsec_confirm';
116
+ return async (context) => {
117
+ // 1. Check if plugin is disabled
118
+ if (config.global?.enabled === false) {
119
+ return createDisabledResult();
120
+ }
121
+ // 2. Check for agent-confirm parameter
122
+ if (config.approval?.agentConfirm?.enabled !== false) {
123
+ const confirmResult = agentConfirm.checkConfirmation(context.toolInput, confirmParamName);
124
+ if (confirmResult.confirmed) {
125
+ // Agent is trying to confirm a previous action
126
+ const processResult = agentConfirm.processConfirmation(context.toolInput, confirmParamName);
127
+ if (processResult.valid) {
128
+ // Valid confirmation - strip the parameter and allow
129
+ const strippedInput = agentConfirm.stripConfirmParameter(context.toolInput, confirmParamName);
130
+ return createAgentConfirmAllowResult(strippedInput);
131
+ }
132
+ else {
133
+ // Invalid confirmation - block
134
+ return createAgentConfirmInvalidResult(processResult.error);
135
+ }
136
+ }
137
+ }
138
+ // 3. Run the analyzer
139
+ const engineContext = toEngineContext(context);
140
+ const analysis = await analyzer.analyze(engineContext);
141
+ // 4. If no detections or action is allow/log/warn, handle appropriately
142
+ if (analysis.action === 'allow') {
143
+ return createAllowResult();
144
+ }
145
+ // 5. Execute the action
146
+ const actionContext = {
147
+ analysis,
148
+ toolCall: engineContext,
149
+ config,
150
+ };
151
+ const actionResult = await executor.execute(actionContext);
152
+ // 6. Convert to BeforeToolCallResult
153
+ return toBeforeToolCallResult(actionResult, analysis.primaryDetection);
154
+ };
155
+ }
156
+ /**
157
+ * Create a default before-tool-call handler with default configuration
158
+ */
159
+ export function createDefaultBeforeToolCallHandler() {
160
+ const defaultConfig = {
161
+ version: '1.0',
162
+ global: {
163
+ enabled: true,
164
+ logLevel: 'info',
165
+ },
166
+ llm: {
167
+ enabled: true,
168
+ model: null,
169
+ },
170
+ rules: {
171
+ purchase: {
172
+ enabled: true,
173
+ severity: 'critical',
174
+ action: 'block',
175
+ spendLimits: { perTransaction: 100, daily: 500 },
176
+ domains: { mode: 'blocklist', blocklist: [] },
177
+ },
178
+ website: {
179
+ enabled: true,
180
+ mode: 'blocklist',
181
+ severity: 'high',
182
+ action: 'block',
183
+ blocklist: [],
184
+ allowlist: [],
185
+ },
186
+ destructive: {
187
+ enabled: true,
188
+ severity: 'critical',
189
+ action: 'confirm',
190
+ shell: { enabled: true },
191
+ cloud: { enabled: true },
192
+ code: { enabled: true },
193
+ },
194
+ secrets: {
195
+ enabled: true,
196
+ severity: 'critical',
197
+ action: 'block',
198
+ },
199
+ exfiltration: {
200
+ enabled: true,
201
+ severity: 'high',
202
+ action: 'block',
203
+ },
204
+ sanitization: {
205
+ enabled: true,
206
+ severity: 'high',
207
+ action: 'block',
208
+ minConfidence: 0.5,
209
+ redactMatches: false,
210
+ categories: {
211
+ instructionOverride: true,
212
+ systemLeak: true,
213
+ jailbreak: true,
214
+ encodedPayload: true,
215
+ },
216
+ },
217
+ },
218
+ approval: {
219
+ native: { enabled: true, timeout: 300 },
220
+ agentConfirm: { enabled: true, parameterName: '_clawsec_confirm' },
221
+ webhook: { enabled: false, url: undefined, timeout: 30, headers: {} },
222
+ },
223
+ };
224
+ return createBeforeToolCallHandler(defaultConfig);
225
+ }
226
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../../src/hooks/before-tool-call/handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Before Tool Call Hook
3
+ * Re-exports for the before-tool-call hook
4
+ */
5
+ export type { BeforeToolCallHandlerOptions } from './handler.js';
6
+ export { createBeforeToolCallHandler, createDefaultBeforeToolCallHandler, } from './handler.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/before-tool-call/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Before Tool Call Hook
3
+ * Re-exports for the before-tool-call hook
4
+ */
5
+ export { createBeforeToolCallHandler, createDefaultBeforeToolCallHandler, } from './handler.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/before-tool-call/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,cAAc,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Output Filtering Logic for Tool Result Persist Hook
3
+ *
4
+ * Scans tool outputs for secrets/PII and redacts sensitive data
5
+ * before it's persisted.
6
+ */
7
+ import type { SecretsDetectionResult } from '../../detectors/secrets/types.js';
8
+ /**
9
+ * Represents a single redaction made to the output
10
+ */
11
+ export interface Redaction {
12
+ /** Type of secret that was redacted (e.g., 'openai-api-key', 'ssn', 'jwt') */
13
+ type: string;
14
+ /** Human-readable description of what was redacted */
15
+ description: string;
16
+ }
17
+ /**
18
+ * Result of filtering an output
19
+ */
20
+ export interface FilterResult {
21
+ /** The filtered output with secrets redacted */
22
+ filteredOutput: unknown;
23
+ /** List of redactions made */
24
+ redactions: Redaction[];
25
+ /** Whether any redactions were made */
26
+ wasRedacted: boolean;
27
+ }
28
+ /**
29
+ * Redact a single string value using pattern matching
30
+ *
31
+ * @param text - The text to scan and redact
32
+ * @returns FilterResult with redacted text and list of redactions
33
+ */
34
+ export declare function redactString(text: string): FilterResult;
35
+ /**
36
+ * Recursively filter an object, redacting secrets in string values
37
+ *
38
+ * @param obj - The object to filter
39
+ * @returns FilterResult with filtered object and aggregated redactions
40
+ */
41
+ export declare function redactObject(obj: Record<string, unknown>): FilterResult;
42
+ /**
43
+ * Recursively filter an array, redacting secrets in string values
44
+ *
45
+ * @param arr - The array to filter
46
+ * @returns FilterResult with filtered array and aggregated redactions
47
+ */
48
+ export declare function redactArray(arr: unknown[]): FilterResult;
49
+ /**
50
+ * Filter any value, dispatching to the appropriate handler based on type
51
+ *
52
+ * @param value - The value to filter (can be any type)
53
+ * @returns FilterResult with filtered value and redactions
54
+ */
55
+ export declare function filterValue(value: unknown): FilterResult;
56
+ /**
57
+ * Convert secrets detection results to redactions
58
+ *
59
+ * @param detections - Array of detection results from the secrets detector
60
+ * @returns Array of redactions based on the detections
61
+ */
62
+ export declare function detectionsToRedactions(detections: SecretsDetectionResult[]): Redaction[];
63
+ /**
64
+ * Main filter function that combines pattern-based filtering
65
+ * with detection-based redaction info
66
+ *
67
+ * @param output - The tool output to filter
68
+ * @param detections - Optional array of detection results for more accurate redaction types
69
+ * @returns FilterResult with filtered output and redactions
70
+ */
71
+ export declare function filterOutput(output: unknown, detections?: SecretsDetectionResult[]): FilterResult;
72
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/hooks/tool-result-persist/filter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,cAAc,EAAE,OAAO,CAAC;IACxB,8BAA8B;IAC9B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,uCAAuC;IACvC,WAAW,EAAE,OAAO,CAAC;CACtB;AAqID;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAoCvD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAuBvE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,YAAY,CAuBxD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CA+BxD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,sBAAsB,EAAE,GACnC,SAAS,EAAE,CA4Bb;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,EACf,UAAU,CAAC,EAAE,sBAAsB,EAAE,GACpC,YAAY,CAoBd"}