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,305 @@
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
+ /**
8
+ * Common secret patterns for direct text scanning
9
+ * These are simplified patterns - the main detection is done by the secrets detector
10
+ */
11
+ const SECRET_PATTERNS = [
12
+ // OpenAI API keys
13
+ {
14
+ pattern: /sk-[a-zA-Z0-9]{20,}/g,
15
+ type: 'openai-api-key',
16
+ description: 'OpenAI API key',
17
+ },
18
+ // Anthropic API keys
19
+ {
20
+ pattern: /sk-ant-[a-zA-Z0-9-]{20,}/g,
21
+ type: 'anthropic-api-key',
22
+ description: 'Anthropic API key',
23
+ },
24
+ // AWS Access Key ID
25
+ {
26
+ pattern: /AKIA[0-9A-Z]{16}/g,
27
+ type: 'aws-access-key',
28
+ description: 'AWS access key ID',
29
+ },
30
+ // AWS Secret Access Key (context-based)
31
+ {
32
+ pattern: /(?:aws[_-]?secret[_-]?access[_-]?key|secret[_-]?key)\s*[:=]\s*['"]?([A-Za-z0-9/+=]{40})['"]?/gi,
33
+ type: 'aws-secret-key',
34
+ description: 'AWS secret access key',
35
+ },
36
+ // GitHub tokens
37
+ {
38
+ pattern: /gh[pous]_[a-zA-Z0-9]{36,}/g,
39
+ type: 'github-token',
40
+ description: 'GitHub token',
41
+ },
42
+ // GitHub classic tokens
43
+ {
44
+ pattern: /ghp_[a-zA-Z0-9]{36}/g,
45
+ type: 'github-pat',
46
+ description: 'GitHub personal access token',
47
+ },
48
+ // Stripe API keys
49
+ {
50
+ pattern: /sk_live_[a-zA-Z0-9]{24,}/g,
51
+ type: 'stripe-api-key',
52
+ description: 'Stripe live API key',
53
+ },
54
+ {
55
+ pattern: /sk_test_[a-zA-Z0-9]{24,}/g,
56
+ type: 'stripe-test-key',
57
+ description: 'Stripe test API key',
58
+ },
59
+ // Slack tokens
60
+ {
61
+ pattern: /xox[baprs]-[0-9]{10,}-[0-9]{10,}-[a-zA-Z0-9]{24,}/g,
62
+ type: 'slack-token',
63
+ description: 'Slack token',
64
+ },
65
+ // Google API keys
66
+ {
67
+ pattern: /AIza[0-9A-Za-z_-]{35}/g,
68
+ type: 'google-api-key',
69
+ description: 'Google API key',
70
+ },
71
+ // JWT tokens
72
+ {
73
+ pattern: /eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*/g,
74
+ type: 'jwt',
75
+ description: 'JWT token',
76
+ },
77
+ // Bearer tokens
78
+ {
79
+ pattern: /Bearer\s+[a-zA-Z0-9_-]{20,}/gi,
80
+ type: 'bearer-token',
81
+ description: 'Bearer token',
82
+ },
83
+ // SSN (Social Security Number)
84
+ {
85
+ pattern: /\b\d{3}-\d{2}-\d{4}\b/g,
86
+ type: 'ssn',
87
+ description: 'Social Security Number',
88
+ },
89
+ // Credit card numbers (basic patterns)
90
+ {
91
+ pattern: /\b4[0-9]{3}[- ]?[0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}\b/g,
92
+ type: 'credit-card',
93
+ description: 'Credit card number (Visa)',
94
+ },
95
+ {
96
+ pattern: /\b5[1-5][0-9]{2}[- ]?[0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}\b/g,
97
+ type: 'credit-card',
98
+ description: 'Credit card number (Mastercard)',
99
+ },
100
+ {
101
+ pattern: /\b3[47][0-9]{2}[- ]?[0-9]{6}[- ]?[0-9]{5}\b/g,
102
+ type: 'credit-card',
103
+ description: 'Credit card number (Amex)',
104
+ },
105
+ // Private keys
106
+ {
107
+ pattern: /-----BEGIN (?:RSA |DSA |EC |OPENSSH )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |DSA |EC |OPENSSH )?PRIVATE KEY-----/g,
108
+ type: 'private-key',
109
+ description: 'Private key',
110
+ },
111
+ // Generic API key patterns
112
+ {
113
+ pattern: /(?:api[_-]?key|apikey)\s*[:=]\s*['"]?([a-zA-Z0-9_-]{20,})['"]?/gi,
114
+ type: 'generic-api-key',
115
+ description: 'Generic API key',
116
+ },
117
+ // Generic secret/password patterns
118
+ {
119
+ pattern: /(?:password|passwd|pwd|secret)\s*[:=]\s*['"]?([^\s'"]{8,})['"]?/gi,
120
+ type: 'password',
121
+ description: 'Password or secret',
122
+ },
123
+ ];
124
+ /**
125
+ * Redact a single string value using pattern matching
126
+ *
127
+ * @param text - The text to scan and redact
128
+ * @returns FilterResult with redacted text and list of redactions
129
+ */
130
+ export function redactString(text) {
131
+ const redactions = [];
132
+ let filteredText = text;
133
+ // Track which redactions we've already recorded to avoid duplicates
134
+ const recordedTypes = new Set();
135
+ for (const secretPattern of SECRET_PATTERNS) {
136
+ // Reset the pattern's lastIndex in case it was used before
137
+ secretPattern.pattern.lastIndex = 0;
138
+ // Check if pattern matches
139
+ const matches = filteredText.match(secretPattern.pattern);
140
+ if (matches && matches.length > 0) {
141
+ // Replace all matches
142
+ filteredText = filteredText.replace(secretPattern.pattern, `[REDACTED:${secretPattern.type}]`);
143
+ // Record the redaction (only once per type)
144
+ if (!recordedTypes.has(secretPattern.type)) {
145
+ redactions.push({
146
+ type: secretPattern.type,
147
+ description: secretPattern.description,
148
+ });
149
+ recordedTypes.add(secretPattern.type);
150
+ }
151
+ }
152
+ }
153
+ return {
154
+ filteredOutput: filteredText,
155
+ redactions,
156
+ wasRedacted: redactions.length > 0,
157
+ };
158
+ }
159
+ /**
160
+ * Recursively filter an object, redacting secrets in string values
161
+ *
162
+ * @param obj - The object to filter
163
+ * @returns FilterResult with filtered object and aggregated redactions
164
+ */
165
+ export function redactObject(obj) {
166
+ const redactions = [];
167
+ const recordedTypes = new Set();
168
+ const filtered = {};
169
+ for (const [key, value] of Object.entries(obj)) {
170
+ const result = filterValue(value);
171
+ filtered[key] = result.filteredOutput;
172
+ // Aggregate redactions (avoiding duplicates)
173
+ for (const redaction of result.redactions) {
174
+ if (!recordedTypes.has(redaction.type)) {
175
+ redactions.push(redaction);
176
+ recordedTypes.add(redaction.type);
177
+ }
178
+ }
179
+ }
180
+ return {
181
+ filteredOutput: filtered,
182
+ redactions,
183
+ wasRedacted: redactions.length > 0,
184
+ };
185
+ }
186
+ /**
187
+ * Recursively filter an array, redacting secrets in string values
188
+ *
189
+ * @param arr - The array to filter
190
+ * @returns FilterResult with filtered array and aggregated redactions
191
+ */
192
+ export function redactArray(arr) {
193
+ const redactions = [];
194
+ const recordedTypes = new Set();
195
+ const filtered = [];
196
+ for (const item of arr) {
197
+ const result = filterValue(item);
198
+ filtered.push(result.filteredOutput);
199
+ // Aggregate redactions (avoiding duplicates)
200
+ for (const redaction of result.redactions) {
201
+ if (!recordedTypes.has(redaction.type)) {
202
+ redactions.push(redaction);
203
+ recordedTypes.add(redaction.type);
204
+ }
205
+ }
206
+ }
207
+ return {
208
+ filteredOutput: filtered,
209
+ redactions,
210
+ wasRedacted: redactions.length > 0,
211
+ };
212
+ }
213
+ /**
214
+ * Filter any value, dispatching to the appropriate handler based on type
215
+ *
216
+ * @param value - The value to filter (can be any type)
217
+ * @returns FilterResult with filtered value and redactions
218
+ */
219
+ export function filterValue(value) {
220
+ // Handle null/undefined
221
+ if (value === null || value === undefined) {
222
+ return {
223
+ filteredOutput: value,
224
+ redactions: [],
225
+ wasRedacted: false,
226
+ };
227
+ }
228
+ // Handle strings
229
+ if (typeof value === 'string') {
230
+ return redactString(value);
231
+ }
232
+ // Handle arrays
233
+ if (Array.isArray(value)) {
234
+ return redactArray(value);
235
+ }
236
+ // Handle objects
237
+ if (typeof value === 'object') {
238
+ return redactObject(value);
239
+ }
240
+ // Pass through primitives (numbers, booleans, etc.)
241
+ return {
242
+ filteredOutput: value,
243
+ redactions: [],
244
+ wasRedacted: false,
245
+ };
246
+ }
247
+ /**
248
+ * Convert secrets detection results to redactions
249
+ *
250
+ * @param detections - Array of detection results from the secrets detector
251
+ * @returns Array of redactions based on the detections
252
+ */
253
+ export function detectionsToRedactions(detections) {
254
+ const redactions = [];
255
+ const recordedTypes = new Set();
256
+ for (const detection of detections) {
257
+ if (!detection.detected || !detection.metadata) {
258
+ continue;
259
+ }
260
+ // Build type string from metadata
261
+ let type = detection.metadata.type;
262
+ if (detection.metadata.provider) {
263
+ type = `${detection.metadata.provider}-${type}`;
264
+ }
265
+ else if (detection.metadata.subtype) {
266
+ type = detection.metadata.subtype;
267
+ }
268
+ // Avoid duplicate redaction entries
269
+ if (!recordedTypes.has(type)) {
270
+ redactions.push({
271
+ type,
272
+ description: detection.reason,
273
+ });
274
+ recordedTypes.add(type);
275
+ }
276
+ }
277
+ return redactions;
278
+ }
279
+ /**
280
+ * Main filter function that combines pattern-based filtering
281
+ * with detection-based redaction info
282
+ *
283
+ * @param output - The tool output to filter
284
+ * @param detections - Optional array of detection results for more accurate redaction types
285
+ * @returns FilterResult with filtered output and redactions
286
+ */
287
+ export function filterOutput(output, detections) {
288
+ // Filter the output using pattern matching
289
+ const filterResult = filterValue(output);
290
+ // If we have detections, enhance redaction list with more specific types
291
+ if (detections && detections.length > 0) {
292
+ const detectionRedactions = detectionsToRedactions(detections);
293
+ // Merge detection-based redactions with pattern-based redactions
294
+ // Detection-based are more authoritative
295
+ const recordedTypes = new Set(filterResult.redactions.map((r) => r.type));
296
+ for (const redaction of detectionRedactions) {
297
+ if (!recordedTypes.has(redaction.type)) {
298
+ filterResult.redactions.push(redaction);
299
+ recordedTypes.add(redaction.type);
300
+ }
301
+ }
302
+ }
303
+ return filterResult;
304
+ }
305
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../../src/hooks/tool-result-persist/filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Tool Result Persist Hook Handler
3
+ *
4
+ * Hook handler that scans tool outputs for secrets/PII, prompt injections,
5
+ * and filters sensitive data before it's persisted.
6
+ */
7
+ import type { ToolResultPersistHandler } from '../../index.js';
8
+ import type { ClawsecConfig } from '../../config/schema.js';
9
+ /**
10
+ * Options for creating a tool-result-persist handler
11
+ */
12
+ export interface ToolResultPersistHandlerOptions {
13
+ /**
14
+ * Whether to enable output filtering (redacting secrets)
15
+ * @default true
16
+ */
17
+ filter?: boolean;
18
+ /**
19
+ * Whether to enable prompt injection scanning
20
+ * @default true
21
+ */
22
+ scanInjections?: boolean;
23
+ }
24
+ /**
25
+ * Create the tool-result-persist handler
26
+ *
27
+ * This handler runs after a tool executes but before the result is persisted.
28
+ * It scans the output for secrets/PII and prompt injections, then redacts
29
+ * or blocks sensitive data.
30
+ *
31
+ * Flow:
32
+ * 1. Check if plugin is enabled
33
+ * 2. Check if filtering/scanning is enabled
34
+ * 3. Run prompt injection scanner on tool output
35
+ * 4. If injection detected with block action, block the output
36
+ * 5. Run secrets detector on tool output
37
+ * 6. Filter output if secrets detected
38
+ * 7. Return result with filtered output and redaction metadata
39
+ *
40
+ * @param config - Clawsec configuration
41
+ * @param options - Optional handler options
42
+ * @returns ToolResultPersistHandler function
43
+ */
44
+ export declare function createToolResultPersistHandler(config: ClawsecConfig, options?: ToolResultPersistHandlerOptions): ToolResultPersistHandler;
45
+ /**
46
+ * Create a default tool-result-persist handler with default configuration
47
+ */
48
+ export declare function createDefaultToolResultPersistHandler(): ToolResultPersistHandler;
49
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/hooks/tool-result-persist/handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAGV,wBAAwB,EACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAO5D;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAkDD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,+BAA+B,GACxC,wBAAwB,CA6F1B;AAED;;GAEG;AACH,wBAAgB,qCAAqC,IAAI,wBAAwB,CAmEhF"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Tool Result Persist Hook Handler
3
+ *
4
+ * Hook handler that scans tool outputs for secrets/PII, prompt injections,
5
+ * and filters sensitive data before it's persisted.
6
+ */
7
+ import { createSecretsDetector } from '../../detectors/secrets/index.js';
8
+ import { scan, sanitize } from '../../sanitization/scanner.js';
9
+ import { filterOutput } from './filter.js';
10
+ /**
11
+ * Create an allow result with no filtering
12
+ */
13
+ function createAllowResult() {
14
+ return {
15
+ allow: true,
16
+ };
17
+ }
18
+ /**
19
+ * Create a block result for detected prompt injections
20
+ */
21
+ function createBlockResult(redactions) {
22
+ return {
23
+ allow: false,
24
+ redactions,
25
+ };
26
+ }
27
+ /**
28
+ * Create a result with filtered output and redaction info
29
+ */
30
+ function createFilteredResult(filteredOutput, redactions) {
31
+ return {
32
+ allow: true,
33
+ filteredOutput,
34
+ redactions,
35
+ };
36
+ }
37
+ /**
38
+ * Convert tool output to string for scanning
39
+ */
40
+ function outputToString(output) {
41
+ if (typeof output === 'string') {
42
+ return output;
43
+ }
44
+ if (output !== null && output !== undefined) {
45
+ return JSON.stringify(output);
46
+ }
47
+ return undefined;
48
+ }
49
+ /**
50
+ * Create the tool-result-persist handler
51
+ *
52
+ * This handler runs after a tool executes but before the result is persisted.
53
+ * It scans the output for secrets/PII and prompt injections, then redacts
54
+ * or blocks sensitive data.
55
+ *
56
+ * Flow:
57
+ * 1. Check if plugin is enabled
58
+ * 2. Check if filtering/scanning is enabled
59
+ * 3. Run prompt injection scanner on tool output
60
+ * 4. If injection detected with block action, block the output
61
+ * 5. Run secrets detector on tool output
62
+ * 6. Filter output if secrets detected
63
+ * 7. Return result with filtered output and redaction metadata
64
+ *
65
+ * @param config - Clawsec configuration
66
+ * @param options - Optional handler options
67
+ * @returns ToolResultPersistHandler function
68
+ */
69
+ export function createToolResultPersistHandler(config, options) {
70
+ const filterEnabled = options?.filter ?? true;
71
+ const scanInjectionsEnabled = options?.scanInjections ?? true;
72
+ // Create secrets detector from config
73
+ const secretsDetector = createSecretsDetector({
74
+ enabled: config.rules?.secrets?.enabled ?? true,
75
+ severity: config.rules?.secrets?.severity ?? 'critical',
76
+ action: config.rules?.secrets?.action ?? 'block',
77
+ });
78
+ // Create scanner config from sanitization rules
79
+ const sanitizationConfig = config.rules?.sanitization;
80
+ const scannerConfig = {
81
+ enabled: sanitizationConfig?.enabled ?? true,
82
+ categories: {
83
+ instructionOverride: sanitizationConfig?.categories?.instructionOverride ?? true,
84
+ systemLeak: sanitizationConfig?.categories?.systemLeak ?? true,
85
+ jailbreak: sanitizationConfig?.categories?.jailbreak ?? true,
86
+ encodedPayload: sanitizationConfig?.categories?.encodedPayload ?? true,
87
+ },
88
+ minConfidence: sanitizationConfig?.minConfidence ?? 0.5,
89
+ redactMatches: sanitizationConfig?.redactMatches ?? false,
90
+ };
91
+ return async (context) => {
92
+ // 1. Check if plugin is globally disabled
93
+ if (config.global?.enabled === false) {
94
+ return createAllowResult();
95
+ }
96
+ // Convert output to string for scanning
97
+ const toolOutputString = outputToString(context.toolOutput);
98
+ // 2. Run prompt injection scanner if enabled
99
+ if (scanInjectionsEnabled && sanitizationConfig?.enabled !== false && toolOutputString) {
100
+ const scanResult = scan(toolOutputString, scannerConfig);
101
+ if (scanResult.hasInjection) {
102
+ const injectionRedactions = scanResult.matches.map(match => ({
103
+ type: `injection-${match.category}`,
104
+ description: `Prompt injection detected: ${match.match.substring(0, 50)}${match.match.length > 50 ? '...' : ''}`,
105
+ }));
106
+ // If action is 'block', reject the output entirely
107
+ if (sanitizationConfig?.action === 'block') {
108
+ return createBlockResult(injectionRedactions);
109
+ }
110
+ // If redactMatches is enabled, sanitize the output
111
+ if (sanitizationConfig?.redactMatches) {
112
+ const sanitizedOutput = sanitize(toolOutputString, scanResult.matches);
113
+ return createFilteredResult(sanitizedOutput, injectionRedactions);
114
+ }
115
+ // Otherwise, just log/warn and continue
116
+ // The redactions are passed for logging purposes
117
+ }
118
+ }
119
+ // 3. Check if secrets filtering is disabled
120
+ if (!filterEnabled || config.rules?.secrets?.enabled === false) {
121
+ return createAllowResult();
122
+ }
123
+ // 4. Run secrets detector on the tool output
124
+ let detections = [];
125
+ try {
126
+ detections = await secretsDetector.detectAll({
127
+ toolName: context.toolName,
128
+ toolInput: context.toolInput,
129
+ toolOutput: toolOutputString,
130
+ });
131
+ }
132
+ catch {
133
+ // If detection fails, allow the output through without filtering
134
+ // This ensures tool results aren't lost due to detector errors
135
+ return createAllowResult();
136
+ }
137
+ // 5. Filter output with pattern matching (catches secrets detector might have missed)
138
+ const filterResult = filterOutput(context.toolOutput, detections);
139
+ // 6. If nothing was redacted, allow through unchanged
140
+ if (!filterResult.wasRedacted) {
141
+ return createAllowResult();
142
+ }
143
+ // 7. Return filtered result with redaction metadata
144
+ return createFilteredResult(filterResult.filteredOutput, filterResult.redactions);
145
+ };
146
+ }
147
+ /**
148
+ * Create a default tool-result-persist handler with default configuration
149
+ */
150
+ export function createDefaultToolResultPersistHandler() {
151
+ const defaultConfig = {
152
+ version: '1.0',
153
+ global: {
154
+ enabled: true,
155
+ logLevel: 'info',
156
+ },
157
+ llm: {
158
+ enabled: true,
159
+ model: null,
160
+ },
161
+ rules: {
162
+ purchase: {
163
+ enabled: true,
164
+ severity: 'critical',
165
+ action: 'block',
166
+ spendLimits: { perTransaction: 100, daily: 500 },
167
+ domains: { mode: 'blocklist', blocklist: [] },
168
+ },
169
+ website: {
170
+ enabled: true,
171
+ mode: 'blocklist',
172
+ severity: 'high',
173
+ action: 'block',
174
+ blocklist: [],
175
+ allowlist: [],
176
+ },
177
+ destructive: {
178
+ enabled: true,
179
+ severity: 'critical',
180
+ action: 'confirm',
181
+ shell: { enabled: true },
182
+ cloud: { enabled: true },
183
+ code: { enabled: true },
184
+ },
185
+ secrets: {
186
+ enabled: true,
187
+ severity: 'critical',
188
+ action: 'block',
189
+ },
190
+ exfiltration: {
191
+ enabled: true,
192
+ severity: 'high',
193
+ action: 'block',
194
+ },
195
+ sanitization: {
196
+ enabled: true,
197
+ severity: 'high',
198
+ action: 'block',
199
+ minConfidence: 0.5,
200
+ redactMatches: false,
201
+ categories: {
202
+ instructionOverride: true,
203
+ systemLeak: true,
204
+ jailbreak: true,
205
+ encodedPayload: true,
206
+ },
207
+ },
208
+ },
209
+ approval: {
210
+ native: { enabled: true, timeout: 300 },
211
+ agentConfirm: { enabled: true, parameterName: '_clawsec_confirm' },
212
+ webhook: { enabled: false, url: undefined, timeout: 30, headers: {} },
213
+ },
214
+ };
215
+ return createToolResultPersistHandler(defaultConfig);
216
+ }
217
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../../src/hooks/tool-result-persist/handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tool Result Persist Hook
3
+ *
4
+ * Scans tool outputs for secrets/PII and filters sensitive data
5
+ * before persistence.
6
+ */
7
+ export { createToolResultPersistHandler, createDefaultToolResultPersistHandler, } from './handler.js';
8
+ export type { ToolResultPersistHandlerOptions } from './handler.js';
9
+ export { filterOutput, filterValue, redactString, redactObject, redactArray, detectionsToRedactions, } from './filter.js';
10
+ export type { Redaction, FilterResult } from './filter.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/tool-result-persist/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,8BAA8B,EAC9B,qCAAqC,GACtC,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAGpE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tool Result Persist Hook
3
+ *
4
+ * Scans tool outputs for secrets/PII and filters sensitive data
5
+ * before persistence.
6
+ */
7
+ // Handler exports
8
+ export { createToolResultPersistHandler, createDefaultToolResultPersistHandler, } from './handler.js';
9
+ // Filter exports
10
+ export { filterOutput, filterValue, redactString, redactObject, redactArray, detectionsToRedactions, } from './filter.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/tool-result-persist/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kBAAkB;AAClB,OAAO,EACL,8BAA8B,EAC9B,qCAAqC,GACtC,MAAM,cAAc,CAAC;AAGtB,iBAAiB;AACjB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,sBAAsB,GACvB,MAAM,aAAa,CAAC"}