failproofai 0.0.2 → 0.0.4-beta.0

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 (484) hide show
  1. package/.next/standalone/.claude/settings.json +316 -0
  2. package/.next/standalone/.failproofai/policies/workflow-policies.mjs +62 -0
  3. package/.next/standalone/.failproofai/policies-config.json +39 -0
  4. package/.next/standalone/.next/BUILD_ID +1 -1
  5. package/.next/standalone/.next/build-manifest.json +5 -5
  6. package/.next/standalone/.next/prerender-manifest.json +3 -3
  7. package/.next/standalone/.next/required-server-files.json +3 -1
  8. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
  9. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  10. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  14. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  15. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  16. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  17. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  18. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
  20. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  21. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  24. package/.next/standalone/.next/server/app/_not-found.rsc +17 -17
  25. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +17 -17
  26. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  27. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  28. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  29. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  30. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  31. package/.next/standalone/.next/server/app/index.html +1 -1
  32. package/.next/standalone/.next/server/app/index.rsc +16 -16
  33. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  34. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +16 -16
  35. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  36. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +11 -11
  37. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  38. package/.next/standalone/.next/server/app/page/build-manifest.json +2 -2
  39. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  40. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/policies/page/build-manifest.json +2 -2
  43. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  44. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +2 -2
  47. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  48. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +2 -2
  51. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  52. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  53. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  54. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/projects/page/build-manifest.json +2 -2
  56. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  57. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +3 -0
  60. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kjo7d_._.js +1 -1
  61. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_05pz9._._.js +1 -1
  62. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
  63. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
  64. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
  65. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
  66. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
  67. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qo8503._.js → [root-of-the-server]__0jqus-j._.js} +2 -2
  68. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
  69. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +9 -9
  70. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
  71. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
  72. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__12kr5~_._.js → [root-of-the-server]__131id~1._.js} +2 -2
  73. package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
  74. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
  75. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
  76. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a_7sdg.js +2 -2
  77. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ef3uwk.js +2 -2
  78. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0j79~gv.js +2 -2
  79. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pbja1x.js +2 -2
  80. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0r6o0i2.js +2 -2
  81. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11y81~_.js +2 -2
  82. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_12or2kf.js +2 -2
  83. package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0mebn66._.js +1 -1
  84. package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
  85. package/.next/standalone/.next/server/pages/404.html +2 -2
  86. package/.next/standalone/.next/server/pages/500.html +1 -1
  87. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
  89. package/.next/standalone/.next/static/chunks/{0y~0creqvl5wx.js → 045lpk_isd5np.js} +1 -1
  90. package/.next/standalone/.next/static/chunks/{0cvffh-pbsv5u.js → 065qrrpfkts8s.js} +1 -1
  91. package/.next/standalone/.next/static/chunks/{031pa5~qfzt~_.js → 09e7drilkf1sn.js} +1 -1
  92. package/.next/standalone/.next/static/chunks/0gu_a.a80ritd.css +1 -0
  93. package/.next/standalone/.next/static/chunks/{15wf7x-e.8ia3.js → 0je_~y72wv~~2.js} +1 -1
  94. package/.next/standalone/.next/static/chunks/{0x-625~1vx1lu.js → 0rqcttnl9u32c.js} +1 -1
  95. package/.next/standalone/.next/static/chunks/{0ov60i6md~37t.js → 0v2-.v07.zb9u.js} +2 -2
  96. package/.next/standalone/.next/static/chunks/{06og.7e9nkpjh.js → 0yye9-w._6rz~.js} +1 -1
  97. package/.next/standalone/.next/static/chunks/{0_4y_t03jn2nq.js → 15proylk5ye2k.js} +1 -1
  98. package/.next/standalone/.next/static/chunks/174boqk9e~20i.js +6 -0
  99. package/.next/standalone/.next/static/chunks/{turbopack-0uc5y~g6h.n7-.js → turbopack-0r26pc8h0y_-e.js} +1 -1
  100. package/.next/standalone/CHANGELOG.md +108 -0
  101. package/.next/standalone/CLAUDE.md +28 -0
  102. package/.next/standalone/Dockerfile.docs +12 -0
  103. package/.next/standalone/README.md +95 -49
  104. package/.next/standalone/app/components/session-hooks-panel.tsx +14 -1
  105. package/.next/standalone/app/policies/hooks-client.tsx +14 -1
  106. package/.next/standalone/bin/failproofai.mjs +5 -0
  107. package/.next/standalone/bun.lock +76 -63
  108. package/.next/standalone/components/navbar.tsx +5 -0
  109. package/.next/standalone/dist/cli.mjs +535 -90
  110. package/.next/standalone/dist/index.js +2 -2
  111. package/.next/standalone/docs/ar/architecture.mdx +333 -0
  112. package/.next/standalone/docs/ar/built-in-policies.mdx +537 -0
  113. package/.next/standalone/docs/ar/cli/dashboard.mdx +28 -0
  114. package/.next/standalone/docs/ar/cli/environment-variables.mdx +34 -0
  115. package/.next/standalone/docs/ar/cli/hook.mdx +31 -0
  116. package/.next/standalone/docs/ar/cli/install-policies.mdx +48 -0
  117. package/.next/standalone/docs/ar/cli/list-policies.mdx +31 -0
  118. package/.next/standalone/docs/ar/cli/remove-policies.mdx +43 -0
  119. package/.next/standalone/docs/ar/cli/version.mdx +13 -0
  120. package/.next/standalone/docs/ar/configuration.mdx +223 -0
  121. package/.next/standalone/docs/ar/custom-policies.mdx +359 -0
  122. package/.next/standalone/docs/ar/dashboard.mdx +142 -0
  123. package/.next/standalone/docs/ar/examples.mdx +254 -0
  124. package/.next/standalone/docs/ar/for-agents.mdx +39 -0
  125. package/.next/standalone/docs/ar/getting-started.mdx +134 -0
  126. package/.next/standalone/docs/ar/introduction.mdx +58 -0
  127. package/.next/standalone/docs/ar/package-aliases.mdx +82 -0
  128. package/.next/standalone/docs/ar/testing.mdx +261 -0
  129. package/.next/standalone/docs/{architecture.md → architecture.mdx} +40 -23
  130. package/.next/standalone/docs/{built-in-policies.md → built-in-policies.mdx} +126 -15
  131. package/.next/standalone/docs/cli/dashboard.mdx +28 -0
  132. package/.next/standalone/docs/cli/environment-variables.mdx +34 -0
  133. package/.next/standalone/docs/cli/hook.mdx +30 -0
  134. package/.next/standalone/docs/cli/install-policies.mdx +47 -0
  135. package/.next/standalone/docs/cli/list-policies.mdx +31 -0
  136. package/.next/standalone/docs/cli/remove-policies.mdx +43 -0
  137. package/.next/standalone/docs/cli/version.mdx +12 -0
  138. package/.next/standalone/docs/{configuration.md → configuration.mdx} +62 -16
  139. package/.next/standalone/docs/custom-policies.mdx +357 -0
  140. package/.next/standalone/docs/{dashboard.md → dashboard.mdx} +26 -29
  141. package/.next/standalone/docs/de/architecture.mdx +332 -0
  142. package/.next/standalone/docs/de/built-in-policies.mdx +537 -0
  143. package/.next/standalone/docs/de/cli/dashboard.mdx +28 -0
  144. package/.next/standalone/docs/de/cli/environment-variables.mdx +34 -0
  145. package/.next/standalone/docs/de/cli/hook.mdx +30 -0
  146. package/.next/standalone/docs/de/cli/install-policies.mdx +47 -0
  147. package/.next/standalone/docs/de/cli/list-policies.mdx +31 -0
  148. package/.next/standalone/docs/de/cli/remove-policies.mdx +43 -0
  149. package/.next/standalone/docs/de/cli/version.mdx +12 -0
  150. package/.next/standalone/docs/de/configuration.mdx +222 -0
  151. package/.next/standalone/docs/de/custom-policies.mdx +357 -0
  152. package/.next/standalone/docs/de/dashboard.mdx +142 -0
  153. package/.next/standalone/docs/de/examples.mdx +253 -0
  154. package/.next/standalone/docs/de/for-agents.mdx +38 -0
  155. package/.next/standalone/docs/de/getting-started.mdx +134 -0
  156. package/.next/standalone/docs/de/introduction.mdx +57 -0
  157. package/.next/standalone/docs/de/package-aliases.mdx +82 -0
  158. package/.next/standalone/docs/de/testing.mdx +260 -0
  159. package/.next/standalone/docs/docs.json +943 -24
  160. package/.next/standalone/docs/es/architecture.mdx +332 -0
  161. package/.next/standalone/docs/es/built-in-policies.mdx +537 -0
  162. package/.next/standalone/docs/es/cli/dashboard.mdx +28 -0
  163. package/.next/standalone/docs/es/cli/environment-variables.mdx +34 -0
  164. package/.next/standalone/docs/es/cli/hook.mdx +30 -0
  165. package/.next/standalone/docs/es/cli/install-policies.mdx +47 -0
  166. package/.next/standalone/docs/es/cli/list-policies.mdx +31 -0
  167. package/.next/standalone/docs/es/cli/remove-policies.mdx +43 -0
  168. package/.next/standalone/docs/es/cli/version.mdx +12 -0
  169. package/.next/standalone/docs/es/configuration.mdx +222 -0
  170. package/.next/standalone/docs/es/custom-policies.mdx +357 -0
  171. package/.next/standalone/docs/es/dashboard.mdx +142 -0
  172. package/.next/standalone/docs/es/examples.mdx +253 -0
  173. package/.next/standalone/docs/es/for-agents.mdx +38 -0
  174. package/.next/standalone/docs/es/getting-started.mdx +134 -0
  175. package/.next/standalone/docs/es/introduction.mdx +57 -0
  176. package/.next/standalone/docs/es/package-aliases.mdx +82 -0
  177. package/.next/standalone/docs/es/testing.mdx +260 -0
  178. package/.next/standalone/docs/examples.mdx +253 -0
  179. package/.next/standalone/docs/for-agents.mdx +38 -0
  180. package/.next/standalone/docs/fr/architecture.mdx +332 -0
  181. package/.next/standalone/docs/fr/built-in-policies.mdx +537 -0
  182. package/.next/standalone/docs/fr/cli/dashboard.mdx +28 -0
  183. package/.next/standalone/docs/fr/cli/environment-variables.mdx +34 -0
  184. package/.next/standalone/docs/fr/cli/hook.mdx +30 -0
  185. package/.next/standalone/docs/fr/cli/install-policies.mdx +47 -0
  186. package/.next/standalone/docs/fr/cli/list-policies.mdx +31 -0
  187. package/.next/standalone/docs/fr/cli/remove-policies.mdx +43 -0
  188. package/.next/standalone/docs/fr/cli/version.mdx +12 -0
  189. package/.next/standalone/docs/fr/configuration.mdx +222 -0
  190. package/.next/standalone/docs/fr/custom-policies.mdx +357 -0
  191. package/.next/standalone/docs/fr/dashboard.mdx +142 -0
  192. package/.next/standalone/docs/fr/examples.mdx +253 -0
  193. package/.next/standalone/docs/fr/for-agents.mdx +38 -0
  194. package/.next/standalone/docs/fr/getting-started.mdx +134 -0
  195. package/.next/standalone/docs/fr/introduction.mdx +57 -0
  196. package/.next/standalone/docs/fr/package-aliases.mdx +82 -0
  197. package/.next/standalone/docs/fr/testing.mdx +260 -0
  198. package/.next/standalone/docs/getting-started.mdx +134 -0
  199. package/.next/standalone/docs/he/architecture.mdx +333 -0
  200. package/.next/standalone/docs/he/built-in-policies.mdx +535 -0
  201. package/.next/standalone/docs/he/cli/dashboard.mdx +28 -0
  202. package/.next/standalone/docs/he/cli/environment-variables.mdx +34 -0
  203. package/.next/standalone/docs/he/cli/hook.mdx +30 -0
  204. package/.next/standalone/docs/he/cli/install-policies.mdx +47 -0
  205. package/.next/standalone/docs/he/cli/list-policies.mdx +32 -0
  206. package/.next/standalone/docs/he/cli/remove-policies.mdx +43 -0
  207. package/.next/standalone/docs/he/cli/version.mdx +12 -0
  208. package/.next/standalone/docs/he/configuration.mdx +222 -0
  209. package/.next/standalone/docs/he/custom-policies.mdx +357 -0
  210. package/.next/standalone/docs/he/dashboard.mdx +142 -0
  211. package/.next/standalone/docs/he/examples.mdx +253 -0
  212. package/.next/standalone/docs/he/for-agents.mdx +38 -0
  213. package/.next/standalone/docs/he/getting-started.mdx +135 -0
  214. package/.next/standalone/docs/he/introduction.mdx +57 -0
  215. package/.next/standalone/docs/he/package-aliases.mdx +82 -0
  216. package/.next/standalone/docs/he/testing.mdx +260 -0
  217. package/.next/standalone/docs/hi/architecture.mdx +334 -0
  218. package/.next/standalone/docs/hi/built-in-policies.mdx +535 -0
  219. package/.next/standalone/docs/hi/cli/dashboard.mdx +28 -0
  220. package/.next/standalone/docs/hi/cli/environment-variables.mdx +34 -0
  221. package/.next/standalone/docs/hi/cli/hook.mdx +30 -0
  222. package/.next/standalone/docs/hi/cli/install-policies.mdx +47 -0
  223. package/.next/standalone/docs/hi/cli/list-policies.mdx +31 -0
  224. package/.next/standalone/docs/hi/cli/remove-policies.mdx +43 -0
  225. package/.next/standalone/docs/hi/cli/version.mdx +12 -0
  226. package/.next/standalone/docs/hi/configuration.mdx +222 -0
  227. package/.next/standalone/docs/hi/custom-policies.mdx +357 -0
  228. package/.next/standalone/docs/hi/dashboard.mdx +142 -0
  229. package/.next/standalone/docs/hi/examples.mdx +255 -0
  230. package/.next/standalone/docs/hi/for-agents.mdx +38 -0
  231. package/.next/standalone/docs/hi/getting-started.mdx +134 -0
  232. package/.next/standalone/docs/hi/introduction.mdx +57 -0
  233. package/.next/standalone/docs/hi/package-aliases.mdx +82 -0
  234. package/.next/standalone/docs/hi/testing.mdx +260 -0
  235. package/.next/standalone/docs/i18n/README.ar.md +312 -0
  236. package/.next/standalone/docs/i18n/README.de.md +307 -0
  237. package/.next/standalone/docs/i18n/README.es.md +307 -0
  238. package/.next/standalone/docs/i18n/README.fr.md +307 -0
  239. package/.next/standalone/docs/i18n/README.he.md +312 -0
  240. package/.next/standalone/docs/i18n/README.hi.md +307 -0
  241. package/.next/standalone/docs/i18n/README.it.md +307 -0
  242. package/.next/standalone/docs/i18n/README.ja.md +307 -0
  243. package/.next/standalone/docs/i18n/README.ko.md +307 -0
  244. package/.next/standalone/docs/i18n/README.pt-br.md +307 -0
  245. package/.next/standalone/docs/i18n/README.ru.md +308 -0
  246. package/.next/standalone/docs/i18n/README.tr.md +308 -0
  247. package/.next/standalone/docs/i18n/README.vi.md +308 -0
  248. package/.next/standalone/docs/i18n/README.zh.md +307 -0
  249. package/.next/standalone/docs/introduction.mdx +57 -0
  250. package/.next/standalone/docs/it/architecture.mdx +333 -0
  251. package/.next/standalone/docs/it/built-in-policies.mdx +537 -0
  252. package/.next/standalone/docs/it/cli/dashboard.mdx +28 -0
  253. package/.next/standalone/docs/it/cli/environment-variables.mdx +34 -0
  254. package/.next/standalone/docs/it/cli/hook.mdx +30 -0
  255. package/.next/standalone/docs/it/cli/install-policies.mdx +47 -0
  256. package/.next/standalone/docs/it/cli/list-policies.mdx +31 -0
  257. package/.next/standalone/docs/it/cli/remove-policies.mdx +43 -0
  258. package/.next/standalone/docs/it/cli/version.mdx +12 -0
  259. package/.next/standalone/docs/it/configuration.mdx +223 -0
  260. package/.next/standalone/docs/it/custom-policies.mdx +358 -0
  261. package/.next/standalone/docs/it/dashboard.mdx +142 -0
  262. package/.next/standalone/docs/it/examples.mdx +253 -0
  263. package/.next/standalone/docs/it/for-agents.mdx +38 -0
  264. package/.next/standalone/docs/it/getting-started.mdx +134 -0
  265. package/.next/standalone/docs/it/introduction.mdx +57 -0
  266. package/.next/standalone/docs/it/package-aliases.mdx +82 -0
  267. package/.next/standalone/docs/it/testing.mdx +260 -0
  268. package/.next/standalone/docs/ja/architecture.mdx +332 -0
  269. package/.next/standalone/docs/ja/built-in-policies.mdx +535 -0
  270. package/.next/standalone/docs/ja/cli/dashboard.mdx +28 -0
  271. package/.next/standalone/docs/ja/cli/environment-variables.mdx +34 -0
  272. package/.next/standalone/docs/ja/cli/hook.mdx +30 -0
  273. package/.next/standalone/docs/ja/cli/install-policies.mdx +47 -0
  274. package/.next/standalone/docs/ja/cli/list-policies.mdx +31 -0
  275. package/.next/standalone/docs/ja/cli/remove-policies.mdx +43 -0
  276. package/.next/standalone/docs/ja/cli/version.mdx +12 -0
  277. package/.next/standalone/docs/ja/configuration.mdx +222 -0
  278. package/.next/standalone/docs/ja/custom-policies.mdx +357 -0
  279. package/.next/standalone/docs/ja/dashboard.mdx +142 -0
  280. package/.next/standalone/docs/ja/examples.mdx +253 -0
  281. package/.next/standalone/docs/ja/for-agents.mdx +38 -0
  282. package/.next/standalone/docs/ja/getting-started.mdx +134 -0
  283. package/.next/standalone/docs/ja/introduction.mdx +57 -0
  284. package/.next/standalone/docs/ja/package-aliases.mdx +82 -0
  285. package/.next/standalone/docs/ja/testing.mdx +260 -0
  286. package/.next/standalone/docs/ko/architecture.mdx +332 -0
  287. package/.next/standalone/docs/ko/built-in-policies.mdx +535 -0
  288. package/.next/standalone/docs/ko/cli/dashboard.mdx +28 -0
  289. package/.next/standalone/docs/ko/cli/environment-variables.mdx +34 -0
  290. package/.next/standalone/docs/ko/cli/hook.mdx +30 -0
  291. package/.next/standalone/docs/ko/cli/install-policies.mdx +47 -0
  292. package/.next/standalone/docs/ko/cli/list-policies.mdx +31 -0
  293. package/.next/standalone/docs/ko/cli/remove-policies.mdx +43 -0
  294. package/.next/standalone/docs/ko/cli/version.mdx +12 -0
  295. package/.next/standalone/docs/ko/configuration.mdx +222 -0
  296. package/.next/standalone/docs/ko/custom-policies.mdx +357 -0
  297. package/.next/standalone/docs/ko/dashboard.mdx +142 -0
  298. package/.next/standalone/docs/ko/examples.mdx +253 -0
  299. package/.next/standalone/docs/ko/for-agents.mdx +38 -0
  300. package/.next/standalone/docs/ko/getting-started.mdx +134 -0
  301. package/.next/standalone/docs/ko/introduction.mdx +57 -0
  302. package/.next/standalone/docs/ko/package-aliases.mdx +82 -0
  303. package/.next/standalone/docs/ko/testing.mdx +260 -0
  304. package/.next/standalone/docs/logo/dark.svg +21 -0
  305. package/.next/standalone/docs/logo/light.svg +21 -0
  306. package/.next/standalone/docs/{package-aliases.md → package-aliases.mdx} +5 -5
  307. package/.next/standalone/docs/pt-br/architecture.mdx +332 -0
  308. package/.next/standalone/docs/pt-br/built-in-policies.mdx +537 -0
  309. package/.next/standalone/docs/pt-br/cli/dashboard.mdx +28 -0
  310. package/.next/standalone/docs/pt-br/cli/environment-variables.mdx +34 -0
  311. package/.next/standalone/docs/pt-br/cli/hook.mdx +30 -0
  312. package/.next/standalone/docs/pt-br/cli/install-policies.mdx +47 -0
  313. package/.next/standalone/docs/pt-br/cli/list-policies.mdx +31 -0
  314. package/.next/standalone/docs/pt-br/cli/remove-policies.mdx +43 -0
  315. package/.next/standalone/docs/pt-br/cli/version.mdx +12 -0
  316. package/.next/standalone/docs/pt-br/configuration.mdx +222 -0
  317. package/.next/standalone/docs/pt-br/custom-policies.mdx +357 -0
  318. package/.next/standalone/docs/pt-br/dashboard.mdx +142 -0
  319. package/.next/standalone/docs/pt-br/examples.mdx +253 -0
  320. package/.next/standalone/docs/pt-br/for-agents.mdx +38 -0
  321. package/.next/standalone/docs/pt-br/getting-started.mdx +134 -0
  322. package/.next/standalone/docs/pt-br/introduction.mdx +57 -0
  323. package/.next/standalone/docs/pt-br/package-aliases.mdx +82 -0
  324. package/.next/standalone/docs/pt-br/testing.mdx +260 -0
  325. package/.next/standalone/docs/ru/architecture.mdx +334 -0
  326. package/.next/standalone/docs/ru/built-in-policies.mdx +537 -0
  327. package/.next/standalone/docs/ru/cli/dashboard.mdx +28 -0
  328. package/.next/standalone/docs/ru/cli/environment-variables.mdx +34 -0
  329. package/.next/standalone/docs/ru/cli/hook.mdx +30 -0
  330. package/.next/standalone/docs/ru/cli/install-policies.mdx +48 -0
  331. package/.next/standalone/docs/ru/cli/list-policies.mdx +32 -0
  332. package/.next/standalone/docs/ru/cli/remove-policies.mdx +43 -0
  333. package/.next/standalone/docs/ru/cli/version.mdx +12 -0
  334. package/.next/standalone/docs/ru/configuration.mdx +223 -0
  335. package/.next/standalone/docs/ru/custom-policies.mdx +357 -0
  336. package/.next/standalone/docs/ru/dashboard.mdx +142 -0
  337. package/.next/standalone/docs/ru/examples.mdx +254 -0
  338. package/.next/standalone/docs/ru/for-agents.mdx +38 -0
  339. package/.next/standalone/docs/ru/getting-started.mdx +134 -0
  340. package/.next/standalone/docs/ru/introduction.mdx +57 -0
  341. package/.next/standalone/docs/ru/package-aliases.mdx +82 -0
  342. package/.next/standalone/docs/ru/testing.mdx +260 -0
  343. package/.next/standalone/docs/{testing.md → testing.mdx} +11 -11
  344. package/.next/standalone/docs/tr/architecture.mdx +333 -0
  345. package/.next/standalone/docs/tr/built-in-policies.mdx +537 -0
  346. package/.next/standalone/docs/tr/cli/dashboard.mdx +28 -0
  347. package/.next/standalone/docs/tr/cli/environment-variables.mdx +34 -0
  348. package/.next/standalone/docs/tr/cli/hook.mdx +30 -0
  349. package/.next/standalone/docs/tr/cli/install-policies.mdx +47 -0
  350. package/.next/standalone/docs/tr/cli/list-policies.mdx +31 -0
  351. package/.next/standalone/docs/tr/cli/remove-policies.mdx +44 -0
  352. package/.next/standalone/docs/tr/cli/version.mdx +12 -0
  353. package/.next/standalone/docs/tr/configuration.mdx +223 -0
  354. package/.next/standalone/docs/tr/custom-policies.mdx +357 -0
  355. package/.next/standalone/docs/tr/dashboard.mdx +142 -0
  356. package/.next/standalone/docs/tr/examples.mdx +253 -0
  357. package/.next/standalone/docs/tr/for-agents.mdx +38 -0
  358. package/.next/standalone/docs/tr/getting-started.mdx +134 -0
  359. package/.next/standalone/docs/tr/introduction.mdx +57 -0
  360. package/.next/standalone/docs/tr/package-aliases.mdx +82 -0
  361. package/.next/standalone/docs/tr/testing.mdx +260 -0
  362. package/.next/standalone/docs/vi/architecture.mdx +333 -0
  363. package/.next/standalone/docs/vi/built-in-policies.mdx +537 -0
  364. package/.next/standalone/docs/vi/cli/dashboard.mdx +28 -0
  365. package/.next/standalone/docs/vi/cli/environment-variables.mdx +34 -0
  366. package/.next/standalone/docs/vi/cli/hook.mdx +30 -0
  367. package/.next/standalone/docs/vi/cli/install-policies.mdx +47 -0
  368. package/.next/standalone/docs/vi/cli/list-policies.mdx +31 -0
  369. package/.next/standalone/docs/vi/cli/remove-policies.mdx +43 -0
  370. package/.next/standalone/docs/vi/cli/version.mdx +13 -0
  371. package/.next/standalone/docs/vi/configuration.mdx +222 -0
  372. package/.next/standalone/docs/vi/custom-policies.mdx +357 -0
  373. package/.next/standalone/docs/vi/dashboard.mdx +142 -0
  374. package/.next/standalone/docs/vi/examples.mdx +253 -0
  375. package/.next/standalone/docs/vi/for-agents.mdx +38 -0
  376. package/.next/standalone/docs/vi/getting-started.mdx +134 -0
  377. package/.next/standalone/docs/vi/introduction.mdx +57 -0
  378. package/.next/standalone/docs/vi/package-aliases.mdx +82 -0
  379. package/.next/standalone/docs/vi/testing.mdx +260 -0
  380. package/.next/standalone/docs/zh/architecture.mdx +332 -0
  381. package/.next/standalone/docs/zh/built-in-policies.mdx +535 -0
  382. package/.next/standalone/docs/zh/cli/dashboard.mdx +28 -0
  383. package/.next/standalone/docs/zh/cli/environment-variables.mdx +34 -0
  384. package/.next/standalone/docs/zh/cli/hook.mdx +30 -0
  385. package/.next/standalone/docs/zh/cli/install-policies.mdx +47 -0
  386. package/.next/standalone/docs/zh/cli/list-policies.mdx +31 -0
  387. package/.next/standalone/docs/zh/cli/remove-policies.mdx +43 -0
  388. package/.next/standalone/docs/zh/cli/version.mdx +12 -0
  389. package/.next/standalone/docs/zh/configuration.mdx +222 -0
  390. package/.next/standalone/docs/zh/custom-policies.mdx +357 -0
  391. package/.next/standalone/docs/zh/dashboard.mdx +142 -0
  392. package/.next/standalone/docs/zh/examples.mdx +253 -0
  393. package/.next/standalone/docs/zh/for-agents.mdx +38 -0
  394. package/.next/standalone/docs/zh/getting-started.mdx +134 -0
  395. package/.next/standalone/docs/zh/introduction.mdx +57 -0
  396. package/.next/standalone/docs/zh/package-aliases.mdx +82 -0
  397. package/.next/standalone/docs/zh/testing.mdx +260 -0
  398. package/.next/standalone/examples/convention-policies/security-policies.mjs +40 -0
  399. package/.next/standalone/examples/convention-policies/workflow-policies.mjs +41 -0
  400. package/.next/standalone/next.config.ts +5 -3
  401. package/.next/standalone/node_modules/@next/env/package.json +1 -1
  402. package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
  403. package/.next/standalone/node_modules/next/dist/compiled/jsonwebtoken/index.js +2 -2
  404. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +1 -1
  405. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +1 -1
  406. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  407. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  408. package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
  409. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +7 -2
  410. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  411. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  412. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
  413. package/.next/standalone/node_modules/next/dist/server/render.js +20 -19
  414. package/.next/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
  415. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  416. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  417. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  418. package/.next/standalone/node_modules/next/package.json +15 -15
  419. package/.next/standalone/node_modules/react/cjs/react.development.js +1 -1
  420. package/.next/standalone/node_modules/react/cjs/react.production.js +1 -1
  421. package/.next/standalone/node_modules/react/package.json +1 -1
  422. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +1 -1
  423. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +1 -1
  424. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.browser.production.js +3 -3
  425. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.edge.production.js +3 -3
  426. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.node.production.js +3 -3
  427. package/.next/standalone/node_modules/react-dom/cjs/react-dom.production.js +1 -1
  428. package/.next/standalone/node_modules/react-dom/package.json +2 -2
  429. package/.next/standalone/package.json +13 -10
  430. package/.next/standalone/scripts/translate-docs/cache.ts +62 -0
  431. package/.next/standalone/scripts/translate-docs/cli.ts +357 -0
  432. package/.next/standalone/scripts/translate-docs/config.ts +248 -0
  433. package/.next/standalone/scripts/translate-docs/mdx-translator.ts +153 -0
  434. package/.next/standalone/scripts/translate-docs/mintlify-nav.ts +107 -0
  435. package/.next/standalone/scripts/translate-docs/readme-translator.ts +154 -0
  436. package/.next/standalone/scripts/translate-docs/translator.ts +68 -0
  437. package/.next/standalone/scripts/translate-docs/types.ts +43 -0
  438. package/.next/standalone/server.js +1 -1
  439. package/.next/standalone/skills-lock.json +10 -0
  440. package/.next/standalone/src/hooks/builtin-policies.ts +401 -25
  441. package/.next/standalone/src/hooks/custom-hooks-loader.ts +165 -21
  442. package/.next/standalone/src/hooks/handler.ts +33 -6
  443. package/.next/standalone/src/hooks/hook-activity-store.ts +6 -1
  444. package/.next/standalone/src/hooks/hooks-config.ts +47 -2
  445. package/.next/standalone/src/hooks/llm-client.ts +2 -2
  446. package/.next/standalone/src/hooks/loader-utils.ts +4 -4
  447. package/.next/standalone/src/hooks/manager.ts +67 -16
  448. package/.next/standalone/src/hooks/policy-evaluator.ts +58 -19
  449. package/.next/standalone/src/hooks/policy-helpers.ts +2 -2
  450. package/.next/standalone/vitest.config.e2e.mts +3 -0
  451. package/.next/standalone/vitest.config.mts +3 -0
  452. package/README.md +95 -49
  453. package/bin/failproofai.mjs +5 -0
  454. package/dist/cli.mjs +535 -90
  455. package/dist/index.js +2 -2
  456. package/package.json +13 -10
  457. package/scripts/translate-docs/cache.ts +62 -0
  458. package/scripts/translate-docs/cli.ts +357 -0
  459. package/scripts/translate-docs/config.ts +248 -0
  460. package/scripts/translate-docs/mdx-translator.ts +153 -0
  461. package/scripts/translate-docs/mintlify-nav.ts +107 -0
  462. package/scripts/translate-docs/readme-translator.ts +154 -0
  463. package/scripts/translate-docs/translator.ts +68 -0
  464. package/scripts/translate-docs/types.ts +43 -0
  465. package/src/hooks/builtin-policies.ts +401 -25
  466. package/src/hooks/custom-hooks-loader.ts +165 -21
  467. package/src/hooks/handler.ts +33 -6
  468. package/src/hooks/hook-activity-store.ts +6 -1
  469. package/src/hooks/hooks-config.ts +47 -2
  470. package/src/hooks/llm-client.ts +2 -2
  471. package/src/hooks/loader-utils.ts +4 -4
  472. package/src/hooks/manager.ts +67 -16
  473. package/src/hooks/policy-evaluator.ts +58 -19
  474. package/src/hooks/policy-helpers.ts +2 -2
  475. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02nt~6d._.js +0 -3
  476. package/.next/standalone/.next/static/chunks/0c_ljlxa._4lc.js +0 -6
  477. package/.next/standalone/.next/static/chunks/15jpradyu_531.css +0 -1
  478. package/.next/standalone/docs/cli-reference.md +0 -175
  479. package/.next/standalone/docs/custom-hooks.md +0 -261
  480. package/.next/standalone/docs/getting-started.md +0 -128
  481. package/.next/standalone/docs/introduction.md +0 -47
  482. /package/.next/standalone/.next/static/{WS-OQSqL1Lp1w_obXfjvl → WRbDp8A_ORPof197CezOZ}/_buildManifest.js +0 -0
  483. /package/.next/standalone/.next/static/{WS-OQSqL1Lp1w_obXfjvl → WRbDp8A_ORPof197CezOZ}/_clientMiddlewareManifest.js +0 -0
  484. /package/.next/standalone/.next/static/{WS-OQSqL1Lp1w_obXfjvl → WRbDp8A_ORPof197CezOZ}/_ssgManifest.js +0 -0
@@ -0,0 +1,32 @@
1
+ ---
2
+ ---
3
+ title: Список политик
4
+ description: "Посмотрите, какие политики включены, их параметры и пользовательские политики"
5
+ ---
6
+
7
+ ```bash
8
+ failproofai policies
9
+ ```
10
+
11
+ Показывает все политики с их статусом, настроенными параметрами и пользовательскими политиками.
12
+
13
+ ## Пример вывода
14
+
15
+ ```text
16
+ Failproof AI Hook Policies (user)
17
+
18
+ Status Name Description
19
+ ────── ──────────────────────────────────────────────────────────────
20
+ ✓ block-sudo Block sudo commands
21
+ allowPatterns: ["sudo systemctl status"]
22
+ ✓ block-rm-rf Block recursive deletions
23
+ ✗ block-curl-pipe-sh Block curl|bash patterns
24
+ ✓ sanitize-api-keys Redact API keys from output
25
+ additionalPatterns: [{ regex: "MY_TOKEN_...", label: "..." }]
26
+
27
+ ── Custom Policies (/home/alice/myproject/my-policies.js) ──────────────
28
+ ✓ require-jira-ticket Block commits without ticket
29
+ ✓ approval-gate Approval gate for destructive ops
30
+ ```
31
+
32
+ Неизвестные ключи в `policyParams` здесь помечаются, чтобы вы могли рано поймать опечатки.
@@ -0,0 +1,43 @@
1
+ ---
2
+ title: Удаление политик
3
+ description: "Удаление записей hook из settings Claude Code"
4
+ ---
5
+
6
+ ```bash
7
+ failproofai policies --uninstall [policy-names...] [options]
8
+ ```
9
+
10
+ Удаляет записи failproofai hook из `settings.json` Claude Code.
11
+
12
+ Альтернативные команды: `failproofai p -u`
13
+
14
+ ## Опции
15
+
16
+ | Флаг | Описание |
17
+ |------|-------------|
18
+ | `--scope user` | Удалить из глобальных параметров (по умолчанию) |
19
+ | `--scope project` | Удалить из параметров проекта |
20
+ | `--scope local` | Удалить из локальных параметров |
21
+ | `--scope all` | Удалить из всех областей одновременно |
22
+ | `--custom` / `-c` | Очистить `customPoliciesPath` из конфига |
23
+
24
+ ## Поведение
25
+
26
+ - **Без имён политик** - удаляет все записи failproofai hook из файла параметров
27
+ - **С конкретными именами** - отключает эти политики, но сохраняет установленные hook
28
+
29
+ ## Примеры
30
+
31
+ ```bash
32
+ # Удалить все hook глобально
33
+ failproofai policies --uninstall
34
+
35
+ # Отключить определённую политику (сохраняя установленные hook)
36
+ failproofai policies --uninstall block-sudo
37
+
38
+ # Удалить hook из всех областей
39
+ failproofai policies --uninstall --scope all
40
+
41
+ # Очистить путь к пользовательским политикам
42
+ failproofai policies --uninstall --custom
43
+ ```
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: Проверка версии
3
+ description: "Вывести установленную версию failproofai"
4
+ ---
5
+
6
+ ```bash
7
+ failproofai --version
8
+ # or
9
+ failproofai -v
10
+ ```
11
+
12
+ Выводит номер установленной версии.
@@ -0,0 +1,223 @@
1
+ ---
2
+ ---
3
+ title: Конфигурация
4
+ description: "Формат файла конфигурации, трёхуровневая система и правила слияния"
5
+ icon: gear
6
+ ---
7
+
8
+ failproofai использует JSON файлы конфигурации для управления активными политиками, их поведением и источниками пользовательских политик. Конфигурация разработана так, чтобы её было легко делиться с командой — закоммитьте её в репозиторий, и каждый разработчик получит одинаковую защиту агента.
9
+
10
+ ---
11
+
12
+ ## Уровни конфигурации
13
+
14
+ Существует три уровня конфигурации, оцениваемые в порядке приоритета:
15
+
16
+ | Уровень | Путь файла | Назначение |
17
+ |---------|-----------|-----------|
18
+ | **project** | `.failproofai/policies-config.json` | Настройки репозитория, коммитятся в систему контроля версий |
19
+ | **local** | `.failproofai/policies-config.local.json` | Личные переопределения на уровне репозитория, в .gitignore |
20
+ | **global** | `~/.failproofai/policies-config.json` | Пользовательские стандартные значения для всех проектов |
21
+
22
+ Когда failproofai получает событие hook, он загружает и объединяет все три существующих файла для текущей директории.
23
+
24
+ ### Правила слияния
25
+
26
+ **`enabledPolicies`** — объединение всех трёх уровней. Политика, активированная на любом уровне, работает.
27
+
28
+ ```text
29
+ project: ["block-sudo"]
30
+ local: ["block-rm-rf"]
31
+ global: ["block-sudo", "sanitize-api-keys"]
32
+
33
+ resolved: ["block-sudo", "block-rm-rf", "sanitize-api-keys"] ← объединение без дубликатов
34
+ ```
35
+
36
+ **`policyParams`** — первый уровень, определивший параметры для данной политики, полностью выигрывает. Нет глубокого слияния значений в параметрах политики.
37
+
38
+ ```text
39
+ project: block-sudo → { allowPatterns: ["sudo apt-get update"] }
40
+ global: block-sudo → { allowPatterns: ["sudo systemctl status"] }
41
+
42
+ resolved: { allowPatterns: ["sudo apt-get update"] } ← выигрывает project, global игнорируется
43
+ ```
44
+
45
+ ```text
46
+ project: (нет записи block-sudo)
47
+ local: (нет записи block-sudo)
48
+ global: block-sudo → { allowPatterns: ["sudo systemctl status"] }
49
+
50
+ resolved: { allowPatterns: ["sudo systemctl status"] } ← переходит на global
51
+ ```
52
+
53
+ **`customPoliciesPath`** — первый уровень, определивший его, выигрывает.
54
+
55
+ **`llm`** — первый уровень, определивший его, выигрывает.
56
+
57
+ ---
58
+
59
+ ## Формат файла конфигурации
60
+
61
+ ```json
62
+ {
63
+ "enabledPolicies": [
64
+ "block-sudo",
65
+ "block-rm-rf",
66
+ "block-push-master",
67
+ "sanitize-api-keys",
68
+ "sanitize-jwt",
69
+ "block-env-files",
70
+ "block-read-outside-cwd"
71
+ ],
72
+ "policyParams": {
73
+ "block-sudo": {
74
+ "allowPatterns": ["sudo systemctl status", "sudo journalctl"]
75
+ },
76
+ "block-push-master": {
77
+ "protectedBranches": ["main", "release", "prod"]
78
+ },
79
+ "block-rm-rf": {
80
+ "allowPaths": ["/tmp"]
81
+ },
82
+ "block-read-outside-cwd": {
83
+ "allowPaths": ["/shared/data", "/opt/company"]
84
+ },
85
+ "sanitize-api-keys": {
86
+ "additionalPatterns": [
87
+ { "regex": "myco_[A-Za-z0-9]{32}", "label": "MyCo API key" }
88
+ ]
89
+ },
90
+ "warn-large-file-write": {
91
+ "thresholdKb": 512
92
+ }
93
+ },
94
+ "customPoliciesPath": "/home/alice/myproject/my-policies.js"
95
+ }
96
+ ```
97
+
98
+ ---
99
+
100
+ ## Справка по полям
101
+
102
+ ### `enabledPolicies`
103
+
104
+ Тип: `string[]`
105
+
106
+ Список имён политик для активации. Имена должны точно совпадать с идентификаторами политик, показываемыми командой `failproofai policies`. Полный список см. в разделе [Built-in Policies](/ru/built-in-policies).
107
+
108
+ Политики, отсутствующие в `enabledPolicies`, неактивны, даже если у них есть записи в `policyParams`.
109
+
110
+ ### `policyParams`
111
+
112
+ Тип: `Record<string, Record<string, unknown>>`
113
+
114
+ Переопределения параметров для каждой политики. Внешний ключ — имя политики; внутренние ключи — специфичны для политики. Каждая политика документирует свои доступные параметры в разделе [Built-in Policies](/ru/built-in-policies).
115
+
116
+ Если политика имеет параметры, но вы их не указали, используются встроенные значения по умолчанию политики. Пользователи, которые вообще не конфигурируют `policyParams`, получают идентичное поведение с предыдущими версиями.
117
+
118
+ Неизвестные ключи в блоке параметров политики молча игнорируются при срабатывании hook, но отмечаются как предупреждения при выполнении `failproofai policies`.
119
+
120
+ #### `hint` (кросс-функциональный)
121
+
122
+ Тип: `string` (опционально)
123
+
124
+ Сообщение, добавляемое к причине, когда политика возвращает `deny` или `instruct`. Используйте его, чтобы дать Claude практические рекомендации без изменения самой политики.
125
+
126
+ Работает с любым типом политики — встроенной, пользовательской (`custom/`), проектной конвенции (`.failproofai-project/`) или пользовательской конвенции (`.failproofai-user/`).
127
+
128
+ ```json
129
+ {
130
+ "policyParams": {
131
+ "block-force-push": {
132
+ "hint": "Попробуйте создать свежую ветку вместо этого."
133
+ },
134
+ "block-sudo": {
135
+ "allowPatterns": ["sudo apt-get"],
136
+ "hint": "Используйте apt-get напрямую без sudo."
137
+ },
138
+ "custom/my-policy": {
139
+ "hint": "Сначала запросите одобрение у пользователя."
140
+ }
141
+ }
142
+ }
143
+ ```
144
+
145
+ Когда `block-force-push` запрещает, Claude видит: *"Force-pushing заблокирован. Попробуйте создать свежую ветку вместо этого."*
146
+
147
+ Значения, не являющиеся строками, и пустые строки молча игнорируются. Если `hint` не установлен, поведение не изменяется (обратная совместимость).
148
+
149
+ ### `customPoliciesPath`
150
+
151
+ Тип: `string` (абсолютный путь)
152
+
153
+ Путь к JavaScript файлу, содержащему пользовательские hook политики. Устанавливается автоматически командой `failproofai policies --install --custom <path>` (путь преобразуется в абсолютный перед сохранением).
154
+
155
+ Файл загружается заново при каждом события hook — кеширования нет. Детали разработки см. в разделе [Custom Policies](/ru/custom-policies).
156
+
157
+ ### Политики на основе конвенций (v0.0.2-beta.7+)
158
+
159
+ В дополнение к явному `customPoliciesPath`, failproofai автоматически обнаруживает и загружает файлы политик из директорий `.failproofai/policies/`:
160
+
161
+ | Уровень | Директория | Уровень |
162
+ |---------|-----------|--------|
163
+ | Project | `.failproofai/policies/` | Общая с командой через систему контроля версий |
164
+ | User | `~/.failproofai/policies/` | Личная, применяется ко всем проектам |
165
+
166
+ **Соответствие файлов:** Загружаются только файлы, соответствующие маске `*policies.{js,mjs,ts}` (например, `security-policies.mjs`, `workflow-policies.js`). Другие файлы в директории игнорируются.
167
+
168
+ **Конфигурация не требуется:** Политики на основе конвенций не требуют записей в `policies-config.json`. Просто поместите файлы в директорию, и они будут обнаружены при следующем событии hook.
169
+
170
+ **Загрузка объединением:** Сканируются обе директории конвенций — проектная и пользовательская. Загружаются все соответствующие файлы с обоих уровней (в отличие от `customPoliciesPath`, который использует first-scope-wins).
171
+
172
+ Детали и примеры см. в разделе [Custom Policies](/ru/custom-policies).
173
+
174
+ ### `llm`
175
+
176
+ Тип: `object` (опционально)
177
+
178
+ Конфигурация LLM клиента для политик, делающих AI вызовы. Не требуется для большинства установок.
179
+
180
+ ```json
181
+ {
182
+ "llm": {
183
+ "model": "claude-sonnet-4-6",
184
+ "apiKey": "sk-ant-..."
185
+ }
186
+ }
187
+ ```
188
+
189
+ ---
190
+
191
+ ## Управление конфигурацией через CLI
192
+
193
+ Команды `policies --install` и `policies --uninstall` записывают в `settings.json` Claude Code (точки входа для hook), в то время как `policies-config.json` — это файл, который вы управляете напрямую. Это два отдельных файла:
194
+
195
+ - **`settings.json`** — указывает Claude Code вызывать `failproofai --hook <event>` при каждом использовании инструмента
196
+ - **`policies-config.json`** — указывает failproofai, какие политики оценивать и с какими параметрами
197
+
198
+ Вы можете редактировать `policies-config.json` напрямую в любое время; изменения вступают в силу на следующем события hook без необходимости перезагрузки.
199
+
200
+ ---
201
+
202
+ ## Пример: конфигурация на уровне проекта с командными стандартами
203
+
204
+ Закоммитьте `.failproofai/policies-config.json` в ваш репозиторий:
205
+
206
+ ```json
207
+ {
208
+ "enabledPolicies": [
209
+ "block-sudo",
210
+ "block-rm-rf",
211
+ "block-push-master",
212
+ "sanitize-api-keys",
213
+ "block-env-files"
214
+ ],
215
+ "policyParams": {
216
+ "block-push-master": {
217
+ "protectedBranches": ["main", "release", "hotfix"]
218
+ }
219
+ }
220
+ }
221
+ ```
222
+
223
+ Каждый разработчик может затем создать `.failproofai/policies-config.local.json` (в .gitignore) для личных переопределений без влияния на коллег.
@@ -0,0 +1,357 @@
1
+ ---
2
+ title: Пользовательские политики
3
+ description: "Напишите свои собственные политики на JavaScript - применяйте соглашения, предотвращайте дрейф, обнаруживайте сбои, интегрируйте с внешними системами"
4
+ icon: code
5
+ ---
6
+
7
+ Пользовательские политики позволяют написать правила для любого поведения агента: применять соглашения проекта, предотвращать дрейф, блокировать деструктивные операции, обнаруживать зависшие агенты или интегрироваться с Slack, рабочими процессами одобрения и многим другим. Они используют ту же систему событий перехватчиков и решения `allow`, `deny`, `instruct`, что и встроенные политики.
8
+
9
+ ---
10
+
11
+ ## Быстрый пример
12
+
13
+ ```js
14
+ // my-policies.js
15
+ import { customPolicies, allow, deny, instruct } from "failproofai";
16
+
17
+ customPolicies.add({
18
+ name: "no-production-writes",
19
+ description: "Block writes to paths containing 'production'",
20
+ match: { events: ["PreToolUse"] },
21
+ fn: async (ctx) => {
22
+ if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow();
23
+ const path = ctx.toolInput?.file_path ?? "";
24
+ if (path.includes("production")) {
25
+ return deny("Writes to production paths are blocked");
26
+ }
27
+ return allow();
28
+ },
29
+ });
30
+ ```
31
+
32
+ Установите её:
33
+
34
+ ```bash
35
+ failproofai policies --install --custom ./my-policies.js
36
+ ```
37
+
38
+ ---
39
+
40
+ ## Два способа загрузки пользовательских политик
41
+
42
+ ### Вариант 1: На основе соглашений (рекомендуется, v0.0.2-beta.7+)
43
+
44
+ Поместите файлы `*policies.{js,mjs,ts}` в `.failproofai/policies/` и они будут загружены автоматически — никаких флагов или изменений конфигурации не требуется. Это работает как git hooks: поместите файл, и он просто работает.
45
+
46
+ ```
47
+ # На уровне проекта — коммитится в git, делится с командой
48
+ .failproofai/policies/security-policies.mjs
49
+ .failproofai/policies/workflow-policies.mjs
50
+
51
+ # На уровне пользователя — личные, применяется ко всем проектам
52
+ ~/.failproofai/policies/my-policies.mjs
53
+ ```
54
+
55
+ **Как это работает:**
56
+ - Сканируются оба каталога — проекта и пользователя (объединение — не первый приоритет)
57
+ - Файлы загружаются в алфавитном порядке в каждом каталоге. Используйте префиксы `01-`, `02-` для управления порядком
58
+ - Загружаются только файлы, соответствующие `*policies.{js,mjs,ts}`; остальные файлы игнорируются
59
+ - Каждый файл загружается независимо (fail-open для каждого файла)
60
+ - Работает вместе с явным `--custom` и встроенными политиками
61
+
62
+ <Tip>
63
+ Политики на основе соглашений — это самый простой способ поделиться политиками с командой. Закоммитьте `.failproofai/policies/` в git, и каждый член команды получит их автоматически.
64
+ </Tip>
65
+
66
+ ### Вариант 2: Явный путь к файлу
67
+
68
+ ```bash
69
+ # Установите с файлом пользовательских политик
70
+ failproofai policies --install --custom ./my-policies.js
71
+
72
+ # Замените путь к файлу политик
73
+ failproofai policies --install --custom ./new-policies.js
74
+
75
+ # Удалите путь к пользовательским политикам из конфигурации
76
+ failproofai policies --uninstall --custom
77
+ ```
78
+
79
+ Разрешённый абсолютный путь сохраняется в `policies-config.json` как `customPoliciesPath`. Файл загружается заново при каждом событии перехватчика — кэширования между событиями нет.
80
+
81
+ ### Использование обоих способов вместе
82
+
83
+ Политики на основе соглашений и явный файл `--custom` могут сосуществовать. Порядок загрузки:
84
+
85
+ 1. Явный файл `customPoliciesPath` (если настроен)
86
+ 2. Файлы соглашений проекта (`{cwd}/.failproofai/policies/`, в алфавитном порядке)
87
+ 3. Файлы соглашений пользователя (`~/.failproofai/policies/`, в алфавитном порядке)
88
+
89
+ ---
90
+
91
+ ## API
92
+
93
+ ### Импорт
94
+
95
+ ```js
96
+ import { customPolicies, allow, deny, instruct } from "failproofai";
97
+ ```
98
+
99
+ ### `customPolicies.add(hook)`
100
+
101
+ Регистрирует политику. Вызывайте столько раз, сколько нужно для нескольких политик в одном файле.
102
+
103
+ ```ts
104
+ customPolicies.add({
105
+ name: string; // обязательно - уникальный идентификатор
106
+ description?: string; // отображается в выводе `failproofai policies`
107
+ match?: { events?: HookEventType[] }; // фильтр по типу события; опустите, чтобы совпадал все
108
+ fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
109
+ });
110
+ ```
111
+
112
+ ### Помощники для принятия решений
113
+
114
+ | Функция | Эффект | Используйте когда |
115
+ |---------|--------|------------------|
116
+ | `allow()` | Разрешить операцию молча | Действие безопасно, сообщение не требуется |
117
+ | `deny(message)` | Заблокировать операцию | Агент не должен выполнять это действие |
118
+ | `instruct(message)` | Добавить контекст без блокировки | Дайте агенту дополнительный контекст для выполнения задачи |
119
+
120
+ `deny(message)` — сообщение отображается Claude с префиксом `"Blocked by failproofai:"`. Один `deny` короткозамыкает всю дальнейшую оценку.
121
+
122
+ `instruct(message)` — сообщение добавляется в контекст Claude для текущего вызова инструмента. Все сообщения `instruct` накапливаются и доставляются вместе.
123
+
124
+ <Tip>
125
+ Вы можете добавить дополнительные рекомендации к любому сообщению `deny` или `instruct`, добавив поле `hint` в `policyParams` — без изменения кода. Это работает для пользовательских (`custom/`), проектных (`failproofai-project/`) и пользовательских (`failproofai-user/`) политик. См. [Конфигурация → hint](/ru/configuration#hint-cross-cutting) для подробностей.
126
+ </Tip>
127
+
128
+ ### Информационные сообщения allow (бета)
129
+
130
+ <Note>
131
+ `allow(message)` — это функция бета, доступная с v0.0.2-beta.3. API может измениться в будущих версиях. Более ранние версии поддерживают только `allow()` без аргументов.
132
+ </Note>
133
+
134
+ `allow(message)` разрешает операцию **и** отправляет информационное сообщение обратно Claude. Сообщение доставляется как `additionalContext` в ответе stdout обработчика перехватчика — тот же механизм, используемый `instruct`, но семантически отличается: это обновление статуса, а не предупреждение.
135
+
136
+ | Функция | Эффект | Используйте когда |
137
+ |---------|--------|------------------|
138
+ | `allow(message)` | Разрешить и отправить контекст Claude | Подтвердить, что проверка прошла, или объяснить, почему проверка была пропущена |
139
+
140
+ Варианты использования:
141
+ - **Подтверждения статуса:** `allow("All CI checks passed.")` — указывает Claude, что всё зелено
142
+ - **Объяснения fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — указывает Claude, почему проверка была пропущена, чтобы он имел полный контекст
143
+ - **Несколько сообщений накапливаются:** если несколько политик возвращают `allow(message)`, все сообщения объединяются с новыми строками и доставляются вместе
144
+
145
+ ```js
146
+ customPolicies.add({
147
+ name: "confirm-branch-status",
148
+ match: { events: ["Stop"] },
149
+ fn: async (ctx) => {
150
+ const cwd = ctx.session?.cwd;
151
+ if (!cwd) return allow("No working directory, skipping branch check.");
152
+
153
+ // ... check branch status ...
154
+ if (allPushed) {
155
+ return allow("Branch is up to date with remote.");
156
+ }
157
+ return deny("Unpushed changes detected.");
158
+ },
159
+ });
160
+ ```
161
+
162
+ ### Поля `PolicyContext`
163
+
164
+ | Поле | Тип | Описание |
165
+ |------|-----|---------|
166
+ | `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
167
+ | `toolName` | `string \| undefined` | Вызываемый инструмент (например `"Bash"`, `"Write"`, `"Read"`) |
168
+ | `toolInput` | `Record<string, unknown> \| undefined` | Входные параметры инструмента |
169
+ | `payload` | `Record<string, unknown>` | Полная необработанная полезная нагрузка события от Claude Code |
170
+ | `session` | `SessionMetadata \| undefined` | Контекст сессии (см. ниже) |
171
+
172
+ ### Поля `SessionMetadata`
173
+
174
+ | Поле | Тип | Описание |
175
+ |------|-----|---------|
176
+ | `sessionId` | `string` | Идентификатор сессии Claude Code |
177
+ | `cwd` | `string` | Рабочий каталог сессии Claude Code |
178
+ | `transcriptPath` | `string` | Путь к файлу транскрипта JSONL сессии |
179
+
180
+ ### Типы событий
181
+
182
+ | Событие | Когда срабатывает | Содержимое `toolInput` |
183
+ |---------|------------------|----------------------|
184
+ | `PreToolUse` | До запуска инструмента Claude | Вход инструмента (например `{ command: "..." }` для Bash) |
185
+ | `PostToolUse` | После завершения инструмента | Вход инструмента + `tool_result` (выход) |
186
+ | `Notification` | Когда Claude отправляет уведомление | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - перехватчики должны всегда возвращать `allow()`, они не могут блокировать уведомления |
187
+ | `Stop` | Когда сессия Claude заканчивается | Пусто |
188
+
189
+ ---
190
+
191
+ ## Порядок оценки
192
+
193
+ Политики оцениваются в следующем порядке:
194
+
195
+ 1. Встроенные политики (в порядке определения)
196
+ 2. Явные пользовательские политики из `customPoliciesPath` (в порядке `.add()`)
197
+ 3. Политики соглашений из проекта `.failproofai/policies/` (файлы в алфавитном порядке, `.add()` внутри)
198
+ 4. Политики соглашений из пользователя `~/.failproofai/policies/` (файлы в алфавитном порядке, `.add()` внутри)
199
+
200
+ <Note>
201
+ Первый `deny` короткозамыкает все последующие политики. Все сообщения `instruct` накапливаются и доставляются вместе.
202
+ </Note>
203
+
204
+ ---
205
+
206
+ ## Транзитивные импорты
207
+
208
+ Файлы пользовательских политик могут импортировать локальные модули, используя относительные пути:
209
+
210
+ ```js
211
+ // my-policies.js
212
+ import { isBlockedPath } from "./utils.js";
213
+ import { checkApproval } from "./approval-client.js";
214
+
215
+ customPolicies.add({
216
+ name: "approval-gate",
217
+ fn: async (ctx) => {
218
+ if (ctx.toolName !== "Bash") return allow();
219
+ const approved = await checkApproval(ctx.toolInput?.command, ctx.session?.sessionId);
220
+ return approved ? allow() : deny("Approval required for this command");
221
+ },
222
+ });
223
+ ```
224
+
225
+ Все относительные импорты, достижимые из входного файла, разрешаются. Это реализуется путём переписывания импортов `from "failproofai"` на фактический путь dist и создания временных файлов `.mjs` для обеспечения совместимости ESM.
226
+
227
+ ---
228
+
229
+ ## Фильтрация по типам событий
230
+
231
+ Используйте `match.events` для ограничения срабатывания политики:
232
+
233
+ ```js
234
+ customPolicies.add({
235
+ name: "require-summary-on-stop",
236
+ match: { events: ["Stop"] },
237
+ fn: async (ctx) => {
238
+ // Срабатывает только при завершении сессии
239
+ // ctx.session.transcriptPath содержит полный журнал сессии
240
+ return allow();
241
+ },
242
+ });
243
+ ```
244
+
245
+ Опустите `match` полностью, чтобы срабатывать на каждом типе события.
246
+
247
+ ---
248
+
249
+ ## Обработка ошибок и режимы отказа
250
+
251
+ Пользовательские политики — это **fail-open**: ошибки никогда не блокируют встроенные политики и не приводят к сбою обработчика перехватчика.
252
+
253
+ | Отказ | Поведение |
254
+ |-------|----------|
255
+ | `customPoliciesPath` не установлен | Явные пользовательские политики не запускаются; встроенные политики продолжают нормально работать |
256
+ | Файл не найден | Предупреждение записывается в `~/.failproofai/hook.log`; встроенные политики продолжают работать |
257
+ | Синтаксис/ошибка импорта (явная) | Ошибка записывается в `~/.failproofai/hook.log`; явные пользовательские политики пропускаются |
258
+ | Синтаксис/ошибка импорта (соглашение) | Ошибка записывается; этот файл пропускается, другие файлы соглашений загружаются |
259
+ | `fn` выбрасывает ошибку во время выполнения | Ошибка записывается; этот перехватчик рассматривается как `allow`; другие перехватчики продолжают работу |
260
+ | `fn` занимает больше 10 секунд | Истечение времени ожидания записывается; рассматривается как `allow` |
261
+ | Каталог соглашений отсутствует | Политики соглашений не запускаются; нет ошибки |
262
+
263
+ <Tip>
264
+ Для отладки ошибок пользовательских политик используйте файл журнала:
265
+
266
+ ```bash
267
+ tail -f ~/.failproofai/hook.log
268
+ ```
269
+ </Tip>
270
+
271
+ ---
272
+
273
+ ## Полный пример: несколько политик
274
+
275
+ ```js
276
+ // my-policies.js
277
+ import { customPolicies, allow, deny, instruct } from "failproofai";
278
+
279
+ // Предотвращайте запись агента в каталог secrets/
280
+ customPolicies.add({
281
+ name: "block-secrets-dir",
282
+ description: "Prevent agent from writing to secrets/ directory",
283
+ match: { events: ["PreToolUse"] },
284
+ fn: async (ctx) => {
285
+ if (!["Write", "Edit"].includes(ctx.toolName ?? "")) return allow();
286
+ const path = ctx.toolInput?.file_path ?? "";
287
+ if (path.includes("secrets/")) return deny("Writing to secrets/ is not permitted");
288
+ return allow();
289
+ },
290
+ });
291
+
292
+ // Держите агента на правильном пути: проверьте тесты перед коммитом
293
+ customPolicies.add({
294
+ name: "remind-test-before-commit",
295
+ description: "Keep the agent on track: verify tests pass before committing",
296
+ match: { events: ["PreToolUse"] },
297
+ fn: async (ctx) => {
298
+ if (ctx.toolName !== "Bash") return allow();
299
+ const cmd = ctx.toolInput?.command ?? "";
300
+ if (/git\s+commit/.test(cmd)) {
301
+ return instruct("Verify all tests pass before committing. Run `bun test` if you haven't already.");
302
+ }
303
+ return allow();
304
+ },
305
+ });
306
+
307
+ // Предотвращайте незапланированные изменения зависимостей во время заморозки
308
+ customPolicies.add({
309
+ name: "dependency-freeze",
310
+ description: "Prevent unplanned dependency changes during freeze period",
311
+ match: { events: ["PreToolUse"] },
312
+ fn: async (ctx) => {
313
+ if (ctx.toolName !== "Bash") return allow();
314
+ const cmd = ctx.toolInput?.command ?? "";
315
+ const isInstall = /^(npm install|yarn add|bun add|pnpm add)\s+\S/.test(cmd);
316
+ if (isInstall && process.env.DEPENDENCY_FREEZE === "1") {
317
+ return deny("Package installs are frozen. Unset DEPENDENCY_FREEZE to allow.");
318
+ }
319
+ return allow();
320
+ },
321
+ });
322
+
323
+ export { customPolicies };
324
+ ```
325
+
326
+ ---
327
+
328
+ ## Примеры
329
+
330
+ Каталог `examples/` содержит готовые файлы политик:
331
+
332
+ | Файл | Содержимое |
333
+ |------|-----------|
334
+ | `examples/policies-basic.js` | Пять начальных политик, охватывающих типичные режимы отказа агента |
335
+ | `examples/policies-advanced/index.js` | Продвинутые паттерны: транзитивные импорты, асинхронные вызовы, очистка выводов и перехватчики завершения сессии |
336
+ | `examples/convention-policies/security-policies.mjs` | Политики безопасности на основе соглашений (блокировка записей .env, предотвращение переписывания истории git) |
337
+ | `examples/convention-policies/workflow-policies.mjs` | Политики рабочего процесса на основе соглашений (напоминания о тестах, аудит записей файлов) |
338
+
339
+ ### Использование примеров явных файлов
340
+
341
+ ```bash
342
+ failproofai policies --install --custom ./examples/policies-basic.js
343
+ ```
344
+
345
+ ### Использование примеров на основе соглашений
346
+
347
+ ```bash
348
+ # Скопируйте на уровень проекта
349
+ mkdir -p .failproofai/policies
350
+ cp examples/convention-policies/*.mjs .failproofai/policies/
351
+
352
+ # Или скопируйте на уровень пользователя
353
+ mkdir -p ~/.failproofai/policies
354
+ cp examples/convention-policies/*.mjs ~/.failproofai/policies/
355
+ ```
356
+
357
+ Команда установки не требуется — файлы выбираются автоматически при следующем событии перехватчика.