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,168 @@
1
+ /**
2
+ * Destructive Detector
3
+ * Main detector that combines shell, cloud, git, and code pattern detection
4
+ */
5
+ import { createShellDetector } from './shell-detector.js';
6
+ import { createCloudDetector } from './cloud-detector.js';
7
+ import { createCodeDetector } from './code-detector.js';
8
+ // Re-export types
9
+ export * from './types.js';
10
+ // Re-export sub-detectors
11
+ export { ShellDetector, createShellDetector } from './shell-detector.js';
12
+ export { CloudDetector, createCloudDetector } from './cloud-detector.js';
13
+ export { CodeDetector, createCodeDetector } from './code-detector.js';
14
+ // Re-export utility functions
15
+ export { isDangerousPath, matchRmCommand, matchSqlCommand, matchSystemCommand, matchShellCommand, } from './shell-detector.js';
16
+ export { matchAwsCommand, matchGcpCommand, matchAzureCommand, matchKubernetesCommand, matchTerraformCommand, matchGitCommand, matchCloudCommand, } from './cloud-detector.js';
17
+ export { matchPythonCode, matchNodeCode, matchGoCode, matchRustCode, matchRubyCode, matchJavaCode, matchCSharpCode, matchPhpCode, matchCodePattern, } from './code-detector.js';
18
+ /**
19
+ * No detection result (used when disabled or no match)
20
+ */
21
+ function noDetection(severity) {
22
+ return {
23
+ detected: false,
24
+ category: 'destructive',
25
+ severity,
26
+ confidence: 0,
27
+ reason: 'No destructive operation detected',
28
+ };
29
+ }
30
+ /**
31
+ * Combine multiple detection results, taking the highest confidence
32
+ */
33
+ function combineResults(results, severity) {
34
+ const validResults = results.filter((r) => r !== null && r.detected);
35
+ if (validResults.length === 0) {
36
+ return noDetection(severity);
37
+ }
38
+ // Sort by confidence (highest first)
39
+ validResults.sort((a, b) => b.confidence - a.confidence);
40
+ // Take the highest confidence result as primary
41
+ const primary = validResults[0];
42
+ // Build combined reason if multiple detections
43
+ let reason = primary.reason;
44
+ if (validResults.length > 1) {
45
+ const additionalReasons = validResults.slice(1).map((r) => r.reason);
46
+ reason = `${primary.reason}. Additional signals: ${additionalReasons.join('; ')}`;
47
+ }
48
+ // Boost confidence if multiple detectors triggered
49
+ let confidence = primary.confidence;
50
+ if (validResults.length >= 2) {
51
+ // Boost confidence but cap at 0.99
52
+ confidence = Math.min(0.99, confidence + 0.05 * (validResults.length - 1));
53
+ }
54
+ return {
55
+ detected: true,
56
+ category: 'destructive',
57
+ severity,
58
+ confidence,
59
+ reason,
60
+ metadata: primary.metadata,
61
+ };
62
+ }
63
+ /**
64
+ * Main destructive detector implementation
65
+ */
66
+ export class DestructiveDetectorImpl {
67
+ config;
68
+ shellDetector;
69
+ cloudDetector;
70
+ codeDetector;
71
+ constructor(config) {
72
+ this.config = config;
73
+ // Initialize sub-detectors based on config
74
+ this.shellDetector =
75
+ config.shell?.enabled !== false
76
+ ? createShellDetector(config.severity)
77
+ : null;
78
+ this.cloudDetector =
79
+ config.cloud?.enabled !== false
80
+ ? createCloudDetector(config.severity)
81
+ : null;
82
+ this.codeDetector =
83
+ config.code?.enabled !== false
84
+ ? createCodeDetector(config.severity)
85
+ : null;
86
+ }
87
+ async detect(context) {
88
+ // Check if detector is enabled
89
+ if (!this.config.enabled) {
90
+ return noDetection(this.config.severity);
91
+ }
92
+ const results = [];
93
+ // Run shell detector
94
+ if (this.shellDetector) {
95
+ results.push(this.shellDetector.detect(context));
96
+ }
97
+ // Run cloud detector (includes git commands)
98
+ if (this.cloudDetector) {
99
+ results.push(this.cloudDetector.detect(context));
100
+ }
101
+ // Run code detector
102
+ if (this.codeDetector) {
103
+ results.push(this.codeDetector.detect(context));
104
+ }
105
+ // Combine results
106
+ return combineResults(results, this.config.severity);
107
+ }
108
+ /**
109
+ * Get the configured action for detected destructive operations
110
+ */
111
+ getAction() {
112
+ return this.config.action;
113
+ }
114
+ /**
115
+ * Check if the detector is enabled
116
+ */
117
+ isEnabled() {
118
+ return this.config.enabled;
119
+ }
120
+ /**
121
+ * Check if shell detection is enabled
122
+ */
123
+ isShellEnabled() {
124
+ return this.config.shell?.enabled !== false;
125
+ }
126
+ /**
127
+ * Check if cloud detection is enabled
128
+ */
129
+ isCloudEnabled() {
130
+ return this.config.cloud?.enabled !== false;
131
+ }
132
+ /**
133
+ * Check if code detection is enabled
134
+ */
135
+ isCodeEnabled() {
136
+ return this.config.code?.enabled !== false;
137
+ }
138
+ }
139
+ /**
140
+ * Create a destructive detector from DestructiveRule configuration
141
+ */
142
+ export function createDestructiveDetector(rule) {
143
+ const config = {
144
+ enabled: rule.enabled,
145
+ severity: rule.severity,
146
+ action: rule.action,
147
+ shell: rule.shell,
148
+ cloud: rule.cloud,
149
+ code: rule.code,
150
+ };
151
+ return new DestructiveDetectorImpl(config);
152
+ }
153
+ /**
154
+ * Create a destructive detector with default configuration
155
+ */
156
+ export function createDefaultDestructiveDetector() {
157
+ return new DestructiveDetectorImpl({
158
+ enabled: true,
159
+ severity: 'critical',
160
+ action: 'confirm',
161
+ shell: { enabled: true },
162
+ cloud: { enabled: true },
163
+ code: { enabled: true },
164
+ });
165
+ }
166
+ // Default export
167
+ export default DestructiveDetectorImpl;
168
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/detectors/destructive/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Shell Detector
3
+ * Detects dangerous shell commands including file deletion, SQL operations, and system commands
4
+ */
5
+ import type { ShellMatchResult, DetectionContext, DestructiveDetectionResult, SubDetector } from './types.js';
6
+ import type { Severity } from '../../config/index.js';
7
+ /**
8
+ * Check if a path is dangerous for recursive deletion
9
+ */
10
+ export declare function isDangerousPath(path: string): boolean;
11
+ /**
12
+ * Match rm commands for dangerous operations
13
+ */
14
+ export declare function matchRmCommand(command: string): ShellMatchResult;
15
+ /**
16
+ * Match SQL destructive operations
17
+ */
18
+ export declare function matchSqlCommand(text: string): ShellMatchResult;
19
+ /**
20
+ * Match system destructive commands
21
+ */
22
+ export declare function matchSystemCommand(command: string): ShellMatchResult;
23
+ /**
24
+ * Comprehensive shell command matching
25
+ */
26
+ export declare function matchShellCommand(command: string): ShellMatchResult;
27
+ /**
28
+ * Shell detector class
29
+ */
30
+ export declare class ShellDetector implements SubDetector {
31
+ private severity;
32
+ constructor(severity?: Severity);
33
+ /**
34
+ * Extract command from tool context
35
+ */
36
+ private extractCommand;
37
+ detect(context: DetectionContext): DestructiveDetectionResult | null;
38
+ }
39
+ /**
40
+ * Create a shell detector with the given severity
41
+ */
42
+ export declare function createShellDetector(severity?: Severity): ShellDetector;
43
+ //# sourceMappingURL=shell-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-detector.d.ts","sourceRoot":"","sources":["../../../../src/detectors/destructive/shell-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,EAC1B,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA6EtD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA+BrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAyDhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAgB9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAgBpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAoBnE;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,WAAW;IAC/C,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,GAAE,QAAqB;IAI3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAuDtB,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,0BAA0B,GAAG,IAAI;CA0BrE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,QAAqB,GAAG,aAAa,CAElF"}
@@ -0,0 +1,302 @@
1
+ /**
2
+ * Shell Detector
3
+ * Detects dangerous shell commands including file deletion, SQL operations, and system commands
4
+ */
5
+ /**
6
+ * Dangerous paths that should never be deleted recursively
7
+ */
8
+ const DANGEROUS_PATHS = [
9
+ '/',
10
+ '/home',
11
+ '/etc',
12
+ '/var',
13
+ '/usr',
14
+ '/bin',
15
+ '/sbin',
16
+ '/lib',
17
+ '/lib64',
18
+ '/boot',
19
+ '/root',
20
+ '/sys',
21
+ '/proc',
22
+ '/dev',
23
+ '~',
24
+ '$HOME',
25
+ '%USERPROFILE%',
26
+ 'C:\\',
27
+ 'C:\\Windows',
28
+ 'C:\\Program Files',
29
+ ];
30
+ /**
31
+ * Patterns for rm commands with recursive/force flags
32
+ */
33
+ const RM_DANGEROUS_PATTERNS = [
34
+ // rm with -rf, -r -f, -fr flags
35
+ /\brm\s+(?:-[rRfvP]+\s+)*(?:-[rR][^\s]*|-[^\s]*[rR])\s*(?:-[^\s]+\s+)*(\S+)/i,
36
+ // rm -r or rm -R alone
37
+ /\brm\s+(?:-[^\s]+\s+)*-[rR]\s+(\S+)/i,
38
+ // rm -f (force) which can be dangerous
39
+ /\brm\s+(?:-[^\s]+\s+)*-[fF]\s+(\S+)/i,
40
+ ];
41
+ /**
42
+ * SQL destructive operations
43
+ */
44
+ const SQL_PATTERNS = [
45
+ // DROP DATABASE
46
+ { pattern: /\bDROP\s+DATABASE\s+(?:IF\s+EXISTS\s+)?[`"']?(\w+)[`"']?/i, operation: 'DROP DATABASE', critical: true },
47
+ // DROP TABLE
48
+ { pattern: /\bDROP\s+TABLE\s+(?:IF\s+EXISTS\s+)?[`"']?(\w+)[`"']?/i, operation: 'DROP TABLE', critical: true },
49
+ // TRUNCATE TABLE
50
+ { pattern: /\bTRUNCATE\s+(?:TABLE\s+)?[`"']?(\w+)[`"']?/i, operation: 'TRUNCATE TABLE', critical: true },
51
+ // DELETE FROM without WHERE (dangerous)
52
+ { pattern: /\bDELETE\s+FROM\s+[`"']?(\w+)[`"']?\s*(?:;|$)/i, operation: 'DELETE FROM (no WHERE)', critical: true },
53
+ // DROP SCHEMA
54
+ { pattern: /\bDROP\s+SCHEMA\s+(?:IF\s+EXISTS\s+)?[`"']?(\w+)[`"']?/i, operation: 'DROP SCHEMA', critical: true },
55
+ ];
56
+ /**
57
+ * System destructive commands
58
+ */
59
+ const SYSTEM_DESTRUCTIVE_PATTERNS = [
60
+ // mkfs - format filesystem
61
+ { pattern: /\bmkfs(?:\.\w+)?\s+(\S+)/i, operation: 'mkfs', description: 'Format filesystem' },
62
+ // dd writing to block device
63
+ { pattern: /\bdd\s+.*\bof=\s*\/dev\/(\S+)/i, operation: 'dd to device', description: 'Write to block device' },
64
+ // chmod 777 (world-writable) on dangerous paths
65
+ { pattern: /\bchmod\s+(?:-[rR]\s+)?777\s+(\S+)/i, operation: 'chmod 777', description: 'Set world-writable permissions' },
66
+ // Fork bomb patterns
67
+ { pattern: /:\(\)\s*\{\s*:\|:&\s*\}\s*;?\s*:/i, operation: 'fork bomb', description: 'Fork bomb detected' },
68
+ { pattern: /\bforkbomb\b/i, operation: 'fork bomb', description: 'Fork bomb detected' },
69
+ // shred - secure delete
70
+ { pattern: /\bshred\s+(?:-[^\s]+\s+)*(\S+)/i, operation: 'shred', description: 'Secure file deletion' },
71
+ // Overwrite with /dev/null or /dev/zero
72
+ { pattern: /\bcat\s+\/dev\/(?:null|zero)\s*>\s*(\S+)/i, operation: 'overwrite file', description: 'Overwrite file with null/zero' },
73
+ // wipefs
74
+ { pattern: /\bwipefs\s+(?:-[^\s]+\s+)*(\S+)/i, operation: 'wipefs', description: 'Wipe filesystem signatures' },
75
+ ];
76
+ /**
77
+ * Check if a path is dangerous for recursive deletion
78
+ */
79
+ export function isDangerousPath(path) {
80
+ // Normalize path - keep the leading slash, remove trailing slashes
81
+ const trimmed = path.trim();
82
+ // Handle root path explicitly
83
+ if (trimmed === '/' || trimmed === '//' || trimmed === '///') {
84
+ return true;
85
+ }
86
+ // Remove trailing slashes for comparison (but not leading)
87
+ const normalizedPath = trimmed.replace(/\/+$/, '').toLowerCase();
88
+ // Check exact matches
89
+ for (const dangerous of DANGEROUS_PATHS) {
90
+ const dangerousLower = dangerous.toLowerCase().replace(/\/+$/, '');
91
+ if (normalizedPath === dangerousLower) {
92
+ return true;
93
+ }
94
+ }
95
+ // Check if path is just a wildcard or root-level wildcard
96
+ if (normalizedPath === '*' || normalizedPath === '/*' || normalizedPath === '.*') {
97
+ return true;
98
+ }
99
+ // Check for home directory patterns
100
+ if (/^~\/?$/.test(trimmed) || /^~\/?\*$/.test(trimmed) || /^\$HOME\/?$/i.test(trimmed) || /^\$HOME\/?\*$/i.test(trimmed)) {
101
+ return true;
102
+ }
103
+ return false;
104
+ }
105
+ /**
106
+ * Match rm commands for dangerous operations
107
+ */
108
+ export function matchRmCommand(command) {
109
+ const commandLower = command.toLowerCase();
110
+ // Quick check for rm command
111
+ if (!commandLower.includes('rm ') && !commandLower.includes('rm\t')) {
112
+ return { matched: false, confidence: 0 };
113
+ }
114
+ // Check for recursive/force flags
115
+ const hasRecursive = /-[rR]/.test(command) || /-[^\s]*[rR]/.test(command);
116
+ const hasForce = /-[fF]/.test(command) || /-[^\s]*[fF]/.test(command);
117
+ // Extract the target path(s)
118
+ for (const pattern of RM_DANGEROUS_PATTERNS) {
119
+ const match = command.match(pattern);
120
+ if (match) {
121
+ const targetPath = match[1];
122
+ // Check if path is dangerous
123
+ if (isDangerousPath(targetPath)) {
124
+ return {
125
+ matched: true,
126
+ command,
127
+ operation: hasRecursive && hasForce ? 'rm -rf' : (hasRecursive ? 'rm -r' : 'rm -f'),
128
+ affectedResource: targetPath,
129
+ confidence: 0.95,
130
+ riskDescription: `Attempting to delete critical system path: ${targetPath}`,
131
+ };
132
+ }
133
+ // Even if not a dangerous path, rm -rf is risky
134
+ if (hasRecursive && hasForce) {
135
+ return {
136
+ matched: true,
137
+ command,
138
+ operation: 'rm -rf',
139
+ affectedResource: targetPath,
140
+ confidence: 0.85,
141
+ riskDescription: `Recursive force deletion of: ${targetPath}`,
142
+ };
143
+ }
144
+ // rm -r alone is still risky
145
+ if (hasRecursive) {
146
+ return {
147
+ matched: true,
148
+ command,
149
+ operation: 'rm -r',
150
+ affectedResource: targetPath,
151
+ confidence: 0.75,
152
+ riskDescription: `Recursive deletion of: ${targetPath}`,
153
+ };
154
+ }
155
+ }
156
+ }
157
+ return { matched: false, confidence: 0 };
158
+ }
159
+ /**
160
+ * Match SQL destructive operations
161
+ */
162
+ export function matchSqlCommand(text) {
163
+ for (const { pattern, operation, critical } of SQL_PATTERNS) {
164
+ const match = text.match(pattern);
165
+ if (match) {
166
+ return {
167
+ matched: true,
168
+ command: text,
169
+ operation,
170
+ affectedResource: match[1],
171
+ confidence: critical ? 0.95 : 0.85,
172
+ riskDescription: `SQL ${operation} operation on: ${match[1]}`,
173
+ };
174
+ }
175
+ }
176
+ return { matched: false, confidence: 0 };
177
+ }
178
+ /**
179
+ * Match system destructive commands
180
+ */
181
+ export function matchSystemCommand(command) {
182
+ for (const { pattern, operation, description } of SYSTEM_DESTRUCTIVE_PATTERNS) {
183
+ const match = command.match(pattern);
184
+ if (match) {
185
+ return {
186
+ matched: true,
187
+ command,
188
+ operation,
189
+ affectedResource: match[1] || undefined,
190
+ confidence: 0.9,
191
+ riskDescription: description,
192
+ };
193
+ }
194
+ }
195
+ return { matched: false, confidence: 0 };
196
+ }
197
+ /**
198
+ * Comprehensive shell command matching
199
+ */
200
+ export function matchShellCommand(command) {
201
+ // Try rm command matching first
202
+ const rmResult = matchRmCommand(command);
203
+ if (rmResult.matched) {
204
+ return rmResult;
205
+ }
206
+ // Try SQL matching
207
+ const sqlResult = matchSqlCommand(command);
208
+ if (sqlResult.matched) {
209
+ return sqlResult;
210
+ }
211
+ // Try system command matching
212
+ const systemResult = matchSystemCommand(command);
213
+ if (systemResult.matched) {
214
+ return systemResult;
215
+ }
216
+ return { matched: false, confidence: 0 };
217
+ }
218
+ /**
219
+ * Shell detector class
220
+ */
221
+ export class ShellDetector {
222
+ severity;
223
+ constructor(severity = 'critical') {
224
+ this.severity = severity;
225
+ }
226
+ /**
227
+ * Extract command from tool context
228
+ */
229
+ extractCommand(context) {
230
+ const input = context.toolInput;
231
+ // Direct command field
232
+ if (typeof input.command === 'string') {
233
+ return input.command;
234
+ }
235
+ // Shell/bash command field
236
+ if (typeof input.shell === 'string') {
237
+ return input.shell;
238
+ }
239
+ if (typeof input.bash === 'string') {
240
+ return input.bash;
241
+ }
242
+ // Script field
243
+ if (typeof input.script === 'string') {
244
+ return input.script;
245
+ }
246
+ // Code field (might contain shell commands)
247
+ if (typeof input.code === 'string') {
248
+ return input.code;
249
+ }
250
+ // Query field (for SQL)
251
+ if (typeof input.query === 'string') {
252
+ return input.query;
253
+ }
254
+ // SQL field
255
+ if (typeof input.sql === 'string') {
256
+ return input.sql;
257
+ }
258
+ // Statement field
259
+ if (typeof input.statement === 'string') {
260
+ return input.statement;
261
+ }
262
+ // Text content that might contain commands
263
+ if (typeof input.text === 'string') {
264
+ return input.text;
265
+ }
266
+ // Content field
267
+ if (typeof input.content === 'string') {
268
+ return input.content;
269
+ }
270
+ return null;
271
+ }
272
+ detect(context) {
273
+ const command = this.extractCommand(context);
274
+ if (!command) {
275
+ return null;
276
+ }
277
+ const result = matchShellCommand(command);
278
+ if (!result.matched) {
279
+ return null;
280
+ }
281
+ return {
282
+ detected: true,
283
+ category: 'destructive',
284
+ severity: this.severity,
285
+ confidence: result.confidence,
286
+ reason: result.riskDescription || `Dangerous shell operation detected: ${result.operation}`,
287
+ metadata: {
288
+ command: result.command,
289
+ type: 'shell',
290
+ operation: result.operation,
291
+ affectedResource: result.affectedResource,
292
+ },
293
+ };
294
+ }
295
+ }
296
+ /**
297
+ * Create a shell detector with the given severity
298
+ */
299
+ export function createShellDetector(severity = 'critical') {
300
+ return new ShellDetector(severity);
301
+ }
302
+ //# sourceMappingURL=shell-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-detector.js","sourceRoot":"","sources":["../../../../src/detectors/destructive/shell-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Destructive Detector Types
3
+ * Type definitions for detecting dangerous/destructive operations
4
+ */
5
+ import type { Severity, Action } from '../../config/index.js';
6
+ /**
7
+ * Detection context passed to detectors
8
+ */
9
+ export interface DetectionContext {
10
+ /** Name of the tool being invoked */
11
+ toolName: string;
12
+ /** Input parameters to the tool */
13
+ toolInput: Record<string, unknown>;
14
+ /** URL being accessed (for browser/navigation tools) */
15
+ url?: string;
16
+ }
17
+ /**
18
+ * Type of destructive operation detected
19
+ */
20
+ export type DestructiveType = 'shell' | 'cloud' | 'git' | 'code';
21
+ /**
22
+ * Result of a destructive operation detection
23
+ */
24
+ export interface DestructiveDetectionResult {
25
+ /** Whether a destructive operation was detected */
26
+ detected: boolean;
27
+ /** Category of the detection */
28
+ category: 'destructive';
29
+ /** Severity level of the detection */
30
+ severity: Severity;
31
+ /** Confidence score from 0 to 1 */
32
+ confidence: number;
33
+ /** Human-readable reason for the detection */
34
+ reason: string;
35
+ /** Additional metadata about the detection */
36
+ metadata?: {
37
+ /** The command that triggered detection */
38
+ command?: string;
39
+ /** Type of destructive operation */
40
+ type: DestructiveType;
41
+ /** Specific operation detected (e.g., 'rm -rf', 'DROP DATABASE') */
42
+ operation?: string;
43
+ /** Resource affected (e.g., path, database name) */
44
+ affectedResource?: string;
45
+ };
46
+ }
47
+ /**
48
+ * Configuration for the destructive detector
49
+ */
50
+ export interface DestructiveDetectorConfig {
51
+ /** Whether the detector is enabled */
52
+ enabled: boolean;
53
+ /** Severity level to assign to detections */
54
+ severity: Severity;
55
+ /** Action to take when destructive operation is detected */
56
+ action: Action;
57
+ /** Shell command protection settings */
58
+ shell?: {
59
+ enabled: boolean;
60
+ };
61
+ /** Cloud operation protection settings */
62
+ cloud?: {
63
+ enabled: boolean;
64
+ };
65
+ /** Code pattern protection settings */
66
+ code?: {
67
+ enabled: boolean;
68
+ };
69
+ }
70
+ /**
71
+ * Interface for the main destructive detector
72
+ */
73
+ export interface DestructiveDetector {
74
+ /**
75
+ * Detect destructive operations
76
+ * @param context Detection context with tool information
77
+ * @returns Detection result
78
+ */
79
+ detect(context: DetectionContext): Promise<DestructiveDetectionResult>;
80
+ }
81
+ /**
82
+ * Interface for sub-detectors (shell, cloud, code)
83
+ */
84
+ export interface SubDetector {
85
+ /**
86
+ * Check if the given context matches this detector's patterns
87
+ * @param context Detection context
88
+ * @returns Detection result or null if no match
89
+ */
90
+ detect(context: DetectionContext): DestructiveDetectionResult | null;
91
+ }
92
+ /**
93
+ * Shell command match result
94
+ */
95
+ export interface ShellMatchResult {
96
+ /** Whether a match was found */
97
+ matched: boolean;
98
+ /** The command that matched */
99
+ command?: string;
100
+ /** The operation type (e.g., 'rm', 'dd', 'DROP DATABASE') */
101
+ operation?: string;
102
+ /** The affected resource (path, database, etc.) */
103
+ affectedResource?: string;
104
+ /** Confidence score */
105
+ confidence: number;
106
+ /** Additional description of the risk */
107
+ riskDescription?: string;
108
+ }
109
+ /**
110
+ * Cloud operation match result
111
+ */
112
+ export interface CloudMatchResult {
113
+ /** Whether a match was found */
114
+ matched: boolean;
115
+ /** The command that matched */
116
+ command?: string;
117
+ /** The cloud provider (aws, gcp, azure, k8s, terraform) */
118
+ provider?: string;
119
+ /** The operation detected */
120
+ operation?: string;
121
+ /** The affected resource */
122
+ affectedResource?: string;
123
+ /** Confidence score */
124
+ confidence: number;
125
+ }
126
+ /**
127
+ * Code pattern match result
128
+ */
129
+ export interface CodeMatchResult {
130
+ /** Whether a match was found */
131
+ matched: boolean;
132
+ /** The code/command that matched */
133
+ code?: string;
134
+ /** The language detected (python, node, go, etc.) */
135
+ language?: string;
136
+ /** The operation detected (e.g., 'rmtree', 'removeAll') */
137
+ operation?: string;
138
+ /** The affected path/resource */
139
+ affectedResource?: string;
140
+ /** Confidence score */
141
+ confidence: number;
142
+ }
143
+ //# sourceMappingURL=types.d.ts.map