failproofai 0.0.2-beta.7 → 0.0.2-beta.9

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 (390) 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 +3 -3
  6. package/.next/standalone/.next/prerender-manifest.json +3 -3
  7. package/.next/standalone/.next/required-server-files.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  9. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  10. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  14. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  15. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  16. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  17. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  19. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  22. package/.next/standalone/.next/server/app/_not-found.rsc +17 -17
  23. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +17 -17
  24. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  25. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  26. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  27. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  28. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  29. package/.next/standalone/.next/server/app/index.html +1 -1
  30. package/.next/standalone/.next/server/app/index.rsc +16 -16
  31. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  32. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +16 -16
  33. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  34. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +11 -11
  35. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  36. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  37. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  40. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  43. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  46. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  47. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  50. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +3 -0
  53. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kjo7d_._.js +1 -1
  54. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
  55. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
  56. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
  57. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
  58. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
  59. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
  60. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__05zi2mt._.js → [root-of-the-server]__0vn1ciw._.js} +2 -2
  61. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +2 -1
  62. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0kkt_9z._.js → [root-of-the-server]__0z-n~~r._.js} +2 -2
  63. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
  64. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
  65. package/.next/standalone/.next/server/chunks/ssr/_0x..fj-._.js +1 -1
  66. package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
  67. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
  68. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
  69. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  70. package/.next/standalone/.next/server/pages/404.html +2 -2
  71. package/.next/standalone/.next/server/pages/500.html +1 -1
  72. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
  74. package/.next/standalone/.next/static/chunks/{0ltx5i0xv85_s.js → 04wavch6dsfes.js} +1 -1
  75. package/.next/standalone/.next/static/chunks/{13jdpvk~s2da8.js → 0drr--vxs_m-c.js} +1 -1
  76. package/.next/standalone/.next/static/chunks/{0jf9lx3rkmqx_.css → 0gu_a.a80ritd.css} +1 -1
  77. package/.next/standalone/.next/static/chunks/{0e76l4~hq_sei.js → 0i1ilz5554nv9.js} +1 -1
  78. package/.next/standalone/.next/static/chunks/{0suauczjqzn07.js → 0keqg6-cjs8aa.js} +1 -1
  79. package/.next/standalone/.next/static/chunks/{0w.rtg9.m8dk-.js → 0myzx7y.rqqi3.js} +2 -2
  80. package/.next/standalone/.next/static/chunks/{02u4v.k5amfah.js → 0zfrusm~j404v.js} +1 -1
  81. package/.next/standalone/.next/static/chunks/{0bkizbynk9via.js → 10xhknzfyigcu.js} +1 -1
  82. package/.next/standalone/.next/static/chunks/{0q7atesxo-36k.js → 16yg3xhkmdb9v.js} +1 -1
  83. package/.next/standalone/CHANGELOG.md +27 -0
  84. package/.next/standalone/CLAUDE.md +14 -0
  85. package/.next/standalone/README.md +16 -0
  86. package/.next/standalone/bun.lock +45 -0
  87. package/.next/standalone/dist/cli.mjs +44 -23
  88. package/.next/standalone/docs/ar/architecture.mdx +333 -0
  89. package/.next/standalone/docs/ar/built-in-policies.mdx +566 -0
  90. package/.next/standalone/docs/ar/cli/dashboard.mdx +28 -0
  91. package/.next/standalone/docs/ar/cli/environment-variables.mdx +34 -0
  92. package/.next/standalone/docs/ar/cli/hook.mdx +31 -0
  93. package/.next/standalone/docs/ar/cli/install-policies.mdx +49 -0
  94. package/.next/standalone/docs/ar/cli/list-policies.mdx +31 -0
  95. package/.next/standalone/docs/ar/cli/remove-policies.mdx +45 -0
  96. package/.next/standalone/docs/ar/cli/version.mdx +13 -0
  97. package/.next/standalone/docs/ar/configuration.mdx +223 -0
  98. package/.next/standalone/docs/ar/custom-policies.mdx +359 -0
  99. package/.next/standalone/docs/ar/dashboard.mdx +142 -0
  100. package/.next/standalone/docs/ar/examples.mdx +254 -0
  101. package/.next/standalone/docs/ar/for-agents.mdx +39 -0
  102. package/.next/standalone/docs/ar/getting-started.mdx +134 -0
  103. package/.next/standalone/docs/ar/introduction.mdx +58 -0
  104. package/.next/standalone/docs/ar/package-aliases.mdx +82 -0
  105. package/.next/standalone/docs/ar/testing.mdx +261 -0
  106. package/.next/standalone/docs/built-in-policies.mdx +17 -1
  107. package/.next/standalone/docs/configuration.mdx +1 -1
  108. package/.next/standalone/docs/custom-policies.mdx +3 -3
  109. package/.next/standalone/docs/de/architecture.mdx +332 -0
  110. package/.next/standalone/docs/de/built-in-policies.mdx +564 -0
  111. package/.next/standalone/docs/de/cli/dashboard.mdx +28 -0
  112. package/.next/standalone/docs/de/cli/environment-variables.mdx +34 -0
  113. package/.next/standalone/docs/de/cli/hook.mdx +30 -0
  114. package/.next/standalone/docs/de/cli/install-policies.mdx +48 -0
  115. package/.next/standalone/docs/de/cli/list-policies.mdx +31 -0
  116. package/.next/standalone/docs/de/cli/remove-policies.mdx +44 -0
  117. package/.next/standalone/docs/de/cli/version.mdx +12 -0
  118. package/.next/standalone/docs/de/configuration.mdx +222 -0
  119. package/.next/standalone/docs/de/custom-policies.mdx +357 -0
  120. package/.next/standalone/docs/de/dashboard.mdx +142 -0
  121. package/.next/standalone/docs/de/examples.mdx +253 -0
  122. package/.next/standalone/docs/de/for-agents.mdx +38 -0
  123. package/.next/standalone/docs/de/getting-started.mdx +134 -0
  124. package/.next/standalone/docs/de/introduction.mdx +57 -0
  125. package/.next/standalone/docs/de/package-aliases.mdx +82 -0
  126. package/.next/standalone/docs/de/testing.mdx +260 -0
  127. package/.next/standalone/docs/docs.json +922 -35
  128. package/.next/standalone/docs/es/architecture.mdx +332 -0
  129. package/.next/standalone/docs/es/built-in-policies.mdx +564 -0
  130. package/.next/standalone/docs/es/cli/dashboard.mdx +28 -0
  131. package/.next/standalone/docs/es/cli/environment-variables.mdx +34 -0
  132. package/.next/standalone/docs/es/cli/hook.mdx +30 -0
  133. package/.next/standalone/docs/es/cli/install-policies.mdx +48 -0
  134. package/.next/standalone/docs/es/cli/list-policies.mdx +31 -0
  135. package/.next/standalone/docs/es/cli/remove-policies.mdx +44 -0
  136. package/.next/standalone/docs/es/cli/version.mdx +12 -0
  137. package/.next/standalone/docs/es/configuration.mdx +222 -0
  138. package/.next/standalone/docs/es/custom-policies.mdx +357 -0
  139. package/.next/standalone/docs/es/dashboard.mdx +142 -0
  140. package/.next/standalone/docs/es/examples.mdx +253 -0
  141. package/.next/standalone/docs/es/for-agents.mdx +38 -0
  142. package/.next/standalone/docs/es/getting-started.mdx +134 -0
  143. package/.next/standalone/docs/es/introduction.mdx +57 -0
  144. package/.next/standalone/docs/es/package-aliases.mdx +82 -0
  145. package/.next/standalone/docs/es/testing.mdx +260 -0
  146. package/.next/standalone/docs/fr/architecture.mdx +332 -0
  147. package/.next/standalone/docs/fr/built-in-policies.mdx +564 -0
  148. package/.next/standalone/docs/fr/cli/dashboard.mdx +28 -0
  149. package/.next/standalone/docs/fr/cli/environment-variables.mdx +34 -0
  150. package/.next/standalone/docs/fr/cli/hook.mdx +30 -0
  151. package/.next/standalone/docs/fr/cli/install-policies.mdx +48 -0
  152. package/.next/standalone/docs/fr/cli/list-policies.mdx +31 -0
  153. package/.next/standalone/docs/fr/cli/remove-policies.mdx +44 -0
  154. package/.next/standalone/docs/fr/cli/version.mdx +12 -0
  155. package/.next/standalone/docs/fr/configuration.mdx +222 -0
  156. package/.next/standalone/docs/fr/custom-policies.mdx +357 -0
  157. package/.next/standalone/docs/fr/dashboard.mdx +142 -0
  158. package/.next/standalone/docs/fr/examples.mdx +253 -0
  159. package/.next/standalone/docs/fr/for-agents.mdx +38 -0
  160. package/.next/standalone/docs/fr/getting-started.mdx +134 -0
  161. package/.next/standalone/docs/fr/introduction.mdx +57 -0
  162. package/.next/standalone/docs/fr/package-aliases.mdx +82 -0
  163. package/.next/standalone/docs/fr/testing.mdx +260 -0
  164. package/.next/standalone/docs/he/architecture.mdx +333 -0
  165. package/.next/standalone/docs/he/built-in-policies.mdx +564 -0
  166. package/.next/standalone/docs/he/cli/dashboard.mdx +28 -0
  167. package/.next/standalone/docs/he/cli/environment-variables.mdx +34 -0
  168. package/.next/standalone/docs/he/cli/hook.mdx +30 -0
  169. package/.next/standalone/docs/he/cli/install-policies.mdx +48 -0
  170. package/.next/standalone/docs/he/cli/list-policies.mdx +32 -0
  171. package/.next/standalone/docs/he/cli/remove-policies.mdx +44 -0
  172. package/.next/standalone/docs/he/cli/version.mdx +12 -0
  173. package/.next/standalone/docs/he/configuration.mdx +222 -0
  174. package/.next/standalone/docs/he/custom-policies.mdx +357 -0
  175. package/.next/standalone/docs/he/dashboard.mdx +142 -0
  176. package/.next/standalone/docs/he/examples.mdx +253 -0
  177. package/.next/standalone/docs/he/for-agents.mdx +38 -0
  178. package/.next/standalone/docs/he/getting-started.mdx +135 -0
  179. package/.next/standalone/docs/he/introduction.mdx +57 -0
  180. package/.next/standalone/docs/he/package-aliases.mdx +82 -0
  181. package/.next/standalone/docs/he/testing.mdx +260 -0
  182. package/.next/standalone/docs/hi/architecture.mdx +334 -0
  183. package/.next/standalone/docs/hi/built-in-policies.mdx +564 -0
  184. package/.next/standalone/docs/hi/cli/dashboard.mdx +28 -0
  185. package/.next/standalone/docs/hi/cli/environment-variables.mdx +34 -0
  186. package/.next/standalone/docs/hi/cli/hook.mdx +30 -0
  187. package/.next/standalone/docs/hi/cli/install-policies.mdx +48 -0
  188. package/.next/standalone/docs/hi/cli/list-policies.mdx +31 -0
  189. package/.next/standalone/docs/hi/cli/remove-policies.mdx +44 -0
  190. package/.next/standalone/docs/hi/cli/version.mdx +12 -0
  191. package/.next/standalone/docs/hi/configuration.mdx +222 -0
  192. package/.next/standalone/docs/hi/custom-policies.mdx +357 -0
  193. package/.next/standalone/docs/hi/dashboard.mdx +142 -0
  194. package/.next/standalone/docs/hi/examples.mdx +255 -0
  195. package/.next/standalone/docs/hi/for-agents.mdx +38 -0
  196. package/.next/standalone/docs/hi/getting-started.mdx +134 -0
  197. package/.next/standalone/docs/hi/introduction.mdx +57 -0
  198. package/.next/standalone/docs/hi/package-aliases.mdx +82 -0
  199. package/.next/standalone/docs/hi/testing.mdx +260 -0
  200. package/.next/standalone/docs/i18n/README.ar.md +312 -0
  201. package/.next/standalone/docs/i18n/README.de.md +307 -0
  202. package/.next/standalone/docs/i18n/README.es.md +307 -0
  203. package/.next/standalone/docs/i18n/README.fr.md +307 -0
  204. package/.next/standalone/docs/i18n/README.he.md +312 -0
  205. package/.next/standalone/docs/i18n/README.hi.md +307 -0
  206. package/.next/standalone/docs/i18n/README.it.md +307 -0
  207. package/.next/standalone/docs/i18n/README.ja.md +307 -0
  208. package/.next/standalone/docs/i18n/README.ko.md +307 -0
  209. package/.next/standalone/docs/i18n/README.pt-br.md +307 -0
  210. package/.next/standalone/docs/i18n/README.ru.md +308 -0
  211. package/.next/standalone/docs/i18n/README.tr.md +308 -0
  212. package/.next/standalone/docs/i18n/README.vi.md +308 -0
  213. package/.next/standalone/docs/i18n/README.zh.md +307 -0
  214. package/.next/standalone/docs/it/architecture.mdx +333 -0
  215. package/.next/standalone/docs/it/built-in-policies.mdx +564 -0
  216. package/.next/standalone/docs/it/cli/dashboard.mdx +28 -0
  217. package/.next/standalone/docs/it/cli/environment-variables.mdx +34 -0
  218. package/.next/standalone/docs/it/cli/hook.mdx +30 -0
  219. package/.next/standalone/docs/it/cli/install-policies.mdx +48 -0
  220. package/.next/standalone/docs/it/cli/list-policies.mdx +31 -0
  221. package/.next/standalone/docs/it/cli/remove-policies.mdx +44 -0
  222. package/.next/standalone/docs/it/cli/version.mdx +12 -0
  223. package/.next/standalone/docs/it/configuration.mdx +223 -0
  224. package/.next/standalone/docs/it/custom-policies.mdx +358 -0
  225. package/.next/standalone/docs/it/dashboard.mdx +142 -0
  226. package/.next/standalone/docs/it/examples.mdx +253 -0
  227. package/.next/standalone/docs/it/for-agents.mdx +38 -0
  228. package/.next/standalone/docs/it/getting-started.mdx +134 -0
  229. package/.next/standalone/docs/it/introduction.mdx +57 -0
  230. package/.next/standalone/docs/it/package-aliases.mdx +82 -0
  231. package/.next/standalone/docs/it/testing.mdx +260 -0
  232. package/.next/standalone/docs/ja/architecture.mdx +332 -0
  233. package/.next/standalone/docs/ja/built-in-policies.mdx +562 -0
  234. package/.next/standalone/docs/ja/cli/dashboard.mdx +28 -0
  235. package/.next/standalone/docs/ja/cli/environment-variables.mdx +34 -0
  236. package/.next/standalone/docs/ja/cli/hook.mdx +30 -0
  237. package/.next/standalone/docs/ja/cli/install-policies.mdx +48 -0
  238. package/.next/standalone/docs/ja/cli/list-policies.mdx +31 -0
  239. package/.next/standalone/docs/ja/cli/remove-policies.mdx +44 -0
  240. package/.next/standalone/docs/ja/cli/version.mdx +12 -0
  241. package/.next/standalone/docs/ja/configuration.mdx +222 -0
  242. package/.next/standalone/docs/ja/custom-policies.mdx +357 -0
  243. package/.next/standalone/docs/ja/dashboard.mdx +142 -0
  244. package/.next/standalone/docs/ja/examples.mdx +253 -0
  245. package/.next/standalone/docs/ja/for-agents.mdx +38 -0
  246. package/.next/standalone/docs/ja/getting-started.mdx +134 -0
  247. package/.next/standalone/docs/ja/introduction.mdx +57 -0
  248. package/.next/standalone/docs/ja/package-aliases.mdx +82 -0
  249. package/.next/standalone/docs/ja/testing.mdx +260 -0
  250. package/.next/standalone/docs/ko/architecture.mdx +332 -0
  251. package/.next/standalone/docs/ko/built-in-policies.mdx +562 -0
  252. package/.next/standalone/docs/ko/cli/dashboard.mdx +28 -0
  253. package/.next/standalone/docs/ko/cli/environment-variables.mdx +34 -0
  254. package/.next/standalone/docs/ko/cli/hook.mdx +30 -0
  255. package/.next/standalone/docs/ko/cli/install-policies.mdx +48 -0
  256. package/.next/standalone/docs/ko/cli/list-policies.mdx +31 -0
  257. package/.next/standalone/docs/ko/cli/remove-policies.mdx +44 -0
  258. package/.next/standalone/docs/ko/cli/version.mdx +12 -0
  259. package/.next/standalone/docs/ko/configuration.mdx +222 -0
  260. package/.next/standalone/docs/ko/custom-policies.mdx +357 -0
  261. package/.next/standalone/docs/ko/dashboard.mdx +142 -0
  262. package/.next/standalone/docs/ko/examples.mdx +253 -0
  263. package/.next/standalone/docs/ko/for-agents.mdx +38 -0
  264. package/.next/standalone/docs/ko/getting-started.mdx +134 -0
  265. package/.next/standalone/docs/ko/introduction.mdx +57 -0
  266. package/.next/standalone/docs/ko/package-aliases.mdx +82 -0
  267. package/.next/standalone/docs/ko/testing.mdx +260 -0
  268. package/.next/standalone/docs/pt-br/architecture.mdx +332 -0
  269. package/.next/standalone/docs/pt-br/built-in-policies.mdx +564 -0
  270. package/.next/standalone/docs/pt-br/cli/dashboard.mdx +28 -0
  271. package/.next/standalone/docs/pt-br/cli/environment-variables.mdx +34 -0
  272. package/.next/standalone/docs/pt-br/cli/hook.mdx +30 -0
  273. package/.next/standalone/docs/pt-br/cli/install-policies.mdx +48 -0
  274. package/.next/standalone/docs/pt-br/cli/list-policies.mdx +31 -0
  275. package/.next/standalone/docs/pt-br/cli/remove-policies.mdx +44 -0
  276. package/.next/standalone/docs/pt-br/cli/version.mdx +12 -0
  277. package/.next/standalone/docs/pt-br/configuration.mdx +222 -0
  278. package/.next/standalone/docs/pt-br/custom-policies.mdx +357 -0
  279. package/.next/standalone/docs/pt-br/dashboard.mdx +142 -0
  280. package/.next/standalone/docs/pt-br/examples.mdx +253 -0
  281. package/.next/standalone/docs/pt-br/for-agents.mdx +38 -0
  282. package/.next/standalone/docs/pt-br/getting-started.mdx +134 -0
  283. package/.next/standalone/docs/pt-br/introduction.mdx +57 -0
  284. package/.next/standalone/docs/pt-br/package-aliases.mdx +82 -0
  285. package/.next/standalone/docs/pt-br/testing.mdx +260 -0
  286. package/.next/standalone/docs/ru/architecture.mdx +334 -0
  287. package/.next/standalone/docs/ru/built-in-policies.mdx +562 -0
  288. package/.next/standalone/docs/ru/cli/dashboard.mdx +28 -0
  289. package/.next/standalone/docs/ru/cli/environment-variables.mdx +34 -0
  290. package/.next/standalone/docs/ru/cli/hook.mdx +30 -0
  291. package/.next/standalone/docs/ru/cli/install-policies.mdx +48 -0
  292. package/.next/standalone/docs/ru/cli/list-policies.mdx +32 -0
  293. package/.next/standalone/docs/ru/cli/remove-policies.mdx +44 -0
  294. package/.next/standalone/docs/ru/cli/version.mdx +12 -0
  295. package/.next/standalone/docs/ru/configuration.mdx +223 -0
  296. package/.next/standalone/docs/ru/custom-policies.mdx +357 -0
  297. package/.next/standalone/docs/ru/dashboard.mdx +142 -0
  298. package/.next/standalone/docs/ru/examples.mdx +254 -0
  299. package/.next/standalone/docs/ru/for-agents.mdx +38 -0
  300. package/.next/standalone/docs/ru/getting-started.mdx +134 -0
  301. package/.next/standalone/docs/ru/introduction.mdx +57 -0
  302. package/.next/standalone/docs/ru/package-aliases.mdx +82 -0
  303. package/.next/standalone/docs/ru/testing.mdx +260 -0
  304. package/.next/standalone/docs/tr/architecture.mdx +333 -0
  305. package/.next/standalone/docs/tr/built-in-policies.mdx +562 -0
  306. package/.next/standalone/docs/tr/cli/dashboard.mdx +28 -0
  307. package/.next/standalone/docs/tr/cli/environment-variables.mdx +34 -0
  308. package/.next/standalone/docs/tr/cli/hook.mdx +30 -0
  309. package/.next/standalone/docs/tr/cli/install-policies.mdx +48 -0
  310. package/.next/standalone/docs/tr/cli/list-policies.mdx +31 -0
  311. package/.next/standalone/docs/tr/cli/remove-policies.mdx +45 -0
  312. package/.next/standalone/docs/tr/cli/version.mdx +12 -0
  313. package/.next/standalone/docs/tr/configuration.mdx +223 -0
  314. package/.next/standalone/docs/tr/custom-policies.mdx +357 -0
  315. package/.next/standalone/docs/tr/dashboard.mdx +142 -0
  316. package/.next/standalone/docs/tr/examples.mdx +253 -0
  317. package/.next/standalone/docs/tr/for-agents.mdx +38 -0
  318. package/.next/standalone/docs/tr/getting-started.mdx +134 -0
  319. package/.next/standalone/docs/tr/introduction.mdx +57 -0
  320. package/.next/standalone/docs/tr/package-aliases.mdx +82 -0
  321. package/.next/standalone/docs/tr/testing.mdx +260 -0
  322. package/.next/standalone/docs/vi/architecture.mdx +333 -0
  323. package/.next/standalone/docs/vi/built-in-policies.mdx +564 -0
  324. package/.next/standalone/docs/vi/cli/dashboard.mdx +28 -0
  325. package/.next/standalone/docs/vi/cli/environment-variables.mdx +34 -0
  326. package/.next/standalone/docs/vi/cli/hook.mdx +30 -0
  327. package/.next/standalone/docs/vi/cli/install-policies.mdx +48 -0
  328. package/.next/standalone/docs/vi/cli/list-policies.mdx +31 -0
  329. package/.next/standalone/docs/vi/cli/remove-policies.mdx +44 -0
  330. package/.next/standalone/docs/vi/cli/version.mdx +13 -0
  331. package/.next/standalone/docs/vi/configuration.mdx +222 -0
  332. package/.next/standalone/docs/vi/custom-policies.mdx +357 -0
  333. package/.next/standalone/docs/vi/dashboard.mdx +142 -0
  334. package/.next/standalone/docs/vi/examples.mdx +253 -0
  335. package/.next/standalone/docs/vi/for-agents.mdx +38 -0
  336. package/.next/standalone/docs/vi/getting-started.mdx +134 -0
  337. package/.next/standalone/docs/vi/introduction.mdx +57 -0
  338. package/.next/standalone/docs/vi/package-aliases.mdx +82 -0
  339. package/.next/standalone/docs/vi/testing.mdx +260 -0
  340. package/.next/standalone/docs/zh/architecture.mdx +332 -0
  341. package/.next/standalone/docs/zh/built-in-policies.mdx +562 -0
  342. package/.next/standalone/docs/zh/cli/dashboard.mdx +28 -0
  343. package/.next/standalone/docs/zh/cli/environment-variables.mdx +34 -0
  344. package/.next/standalone/docs/zh/cli/hook.mdx +30 -0
  345. package/.next/standalone/docs/zh/cli/install-policies.mdx +48 -0
  346. package/.next/standalone/docs/zh/cli/list-policies.mdx +31 -0
  347. package/.next/standalone/docs/zh/cli/remove-policies.mdx +44 -0
  348. package/.next/standalone/docs/zh/cli/version.mdx +12 -0
  349. package/.next/standalone/docs/zh/configuration.mdx +222 -0
  350. package/.next/standalone/docs/zh/custom-policies.mdx +357 -0
  351. package/.next/standalone/docs/zh/dashboard.mdx +142 -0
  352. package/.next/standalone/docs/zh/examples.mdx +253 -0
  353. package/.next/standalone/docs/zh/for-agents.mdx +38 -0
  354. package/.next/standalone/docs/zh/getting-started.mdx +134 -0
  355. package/.next/standalone/docs/zh/introduction.mdx +57 -0
  356. package/.next/standalone/docs/zh/package-aliases.mdx +82 -0
  357. package/.next/standalone/docs/zh/testing.mdx +260 -0
  358. package/.next/standalone/package.json +8 -2
  359. package/.next/standalone/scripts/translate-docs/cache.ts +62 -0
  360. package/.next/standalone/scripts/translate-docs/cli.ts +357 -0
  361. package/.next/standalone/scripts/translate-docs/config.ts +248 -0
  362. package/.next/standalone/scripts/translate-docs/mdx-translator.ts +153 -0
  363. package/.next/standalone/scripts/translate-docs/mintlify-nav.ts +107 -0
  364. package/.next/standalone/scripts/translate-docs/readme-translator.ts +154 -0
  365. package/.next/standalone/scripts/translate-docs/translator.ts +68 -0
  366. package/.next/standalone/scripts/translate-docs/types.ts +43 -0
  367. package/.next/standalone/server.js +1 -1
  368. package/.next/standalone/src/hooks/custom-hooks-loader.ts +12 -5
  369. package/.next/standalone/src/hooks/handler.ts +9 -3
  370. package/.next/standalone/src/hooks/manager.ts +10 -2
  371. package/.next/standalone/src/hooks/policy-evaluator.ts +20 -16
  372. package/README.md +16 -0
  373. package/dist/cli.mjs +44 -23
  374. package/package.json +8 -2
  375. package/scripts/translate-docs/cache.ts +62 -0
  376. package/scripts/translate-docs/cli.ts +357 -0
  377. package/scripts/translate-docs/config.ts +248 -0
  378. package/scripts/translate-docs/mdx-translator.ts +153 -0
  379. package/scripts/translate-docs/mintlify-nav.ts +107 -0
  380. package/scripts/translate-docs/readme-translator.ts +154 -0
  381. package/scripts/translate-docs/translator.ts +68 -0
  382. package/scripts/translate-docs/types.ts +43 -0
  383. package/src/hooks/custom-hooks-loader.ts +12 -5
  384. package/src/hooks/handler.ts +9 -3
  385. package/src/hooks/manager.ts +10 -2
  386. package/src/hooks/policy-evaluator.ts +20 -16
  387. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02nt~6d._.js +0 -3
  388. /package/.next/standalone/.next/static/{Opbai6exOQP2W488FWmr6 → XqGmAwGDuJ6fEQgD-8y60}/_buildManifest.js +0 -0
  389. /package/.next/standalone/.next/static/{Opbai6exOQP2W488FWmr6 → XqGmAwGDuJ6fEQgD-8y60}/_clientMiddlewareManifest.js +0 -0
  390. /package/.next/standalone/.next/static/{Opbai6exOQP2W488FWmr6 → XqGmAwGDuJ6fEQgD-8y60}/_ssgManifest.js +0 -0
@@ -0,0 +1,260 @@
1
+ ---
2
+ title: Tests
3
+ description: "Tests unitaires, tests E2E et utilitaires de test"
4
+ icon: flask-vial
5
+ ---
6
+
7
+ failproofai dispose de deux suites de tests : les **tests unitaires** (rapides, avec mocks) et les **tests de bout en bout** (invocations réelles de sous-processus).
8
+
9
+ ---
10
+
11
+ ## Lancer les tests
12
+
13
+ ```bash
14
+ # Lancer tous les tests unitaires une fois
15
+ bun run test:run
16
+
17
+ # Lancer les tests unitaires en mode watch
18
+ bun run test
19
+
20
+ # Lancer les tests E2E (nécessite une configuration - voir ci-dessous)
21
+ bun run test:e2e
22
+
23
+ # Vérification de types sans compilation
24
+ bunx tsc --noEmit
25
+
26
+ # Lint
27
+ bun run lint
28
+ ```
29
+
30
+ ---
31
+
32
+ ## Tests unitaires
33
+
34
+ Les tests unitaires se trouvent dans `__tests__/` et utilisent [Vitest](https://vitest.dev) avec `happy-dom`.
35
+
36
+ ```text
37
+ __tests__/
38
+ hooks/
39
+ builtin-policies.test.ts # Logique de politique pour chaque builtin
40
+ hooks-config.test.ts # Chargement de la config et fusion des scopes
41
+ policy-evaluator.test.ts # Injection de paramètres et ordre d'évaluation
42
+ custom-hooks-registry.test.ts # Registre globalThis add/get/clear
43
+ custom-hooks-loader.test.ts # Chargeur ESM, imports transitifs, gestion des erreurs
44
+ manager.test.ts # Opérations install/remove/list
45
+ components/
46
+ sessions-list.test.tsx # Composant liste des sessions
47
+ project-list.test.tsx # Composant liste des projets
48
+ ...
49
+ lib/
50
+ logger.test.ts
51
+ paths.test.ts
52
+ date-filters.test.ts
53
+ telemetry.test.ts
54
+ ...
55
+ actions/
56
+ get-hooks-config.test.ts
57
+ get-hook-activity.test.ts
58
+ ...
59
+ contexts/
60
+ ThemeContext.test.tsx
61
+ AutoRefreshContext.test.tsx
62
+ ```
63
+
64
+ ### Écrire un test unitaire de politique
65
+
66
+ ```typescript
67
+ import { describe, it, expect, beforeEach } from "vitest";
68
+ import { getBuiltinPolicies } from "../../src/hooks/builtin-policies";
69
+ import { allow, deny } from "../../src/hooks/policy-types";
70
+
71
+ describe("block-sudo", () => {
72
+ const policy = getBuiltinPolicies().find((p) => p.name === "block-sudo")!;
73
+
74
+ it("denies sudo commands", () => {
75
+ const ctx = {
76
+ eventType: "PreToolUse" as const,
77
+ payload: {},
78
+ toolName: "Bash",
79
+ toolInput: { command: "sudo apt install nodejs" },
80
+ params: { allowPatterns: [] },
81
+ };
82
+ expect(policy.fn(ctx)).toEqual(deny("sudo command blocked by failproofai"));
83
+ });
84
+
85
+ it("allows non-sudo commands", () => {
86
+ const ctx = {
87
+ eventType: "PreToolUse" as const,
88
+ payload: {},
89
+ toolName: "Bash",
90
+ toolInput: { command: "ls -la" },
91
+ params: { allowPatterns: [] },
92
+ };
93
+ expect(policy.fn(ctx)).toEqual(allow());
94
+ });
95
+
96
+ it("allows patterns in allowPatterns", () => {
97
+ const ctx = {
98
+ eventType: "PreToolUse" as const,
99
+ payload: {},
100
+ toolName: "Bash",
101
+ toolInput: { command: "sudo systemctl status nginx" },
102
+ params: { allowPatterns: ["sudo systemctl status"] },
103
+ };
104
+ expect(policy.fn(ctx)).toEqual(allow());
105
+ });
106
+ });
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Tests de bout en bout
112
+
113
+ Les tests E2E invoquent le vrai binaire `failproofai` en tant que sous-processus, lui envoient une charge utile JSON via stdin et vérifient la sortie stdout ainsi que le code de sortie. Cela permet de tester le chemin d'intégration complet utilisé par Claude Code.
114
+
115
+ ### Configuration
116
+
117
+ Les tests E2E exécutent le binaire directement depuis les sources du dépôt. Avant la première exécution, compilez le bundle CJS utilisé par les fichiers de hooks personnalisés lorsqu'ils importent depuis `'failproofai'` :
118
+
119
+ ```bash
120
+ bun build src/index.ts --outdir dist --target node --format cjs
121
+ ```
122
+
123
+ Lancez ensuite les tests :
124
+
125
+ ```bash
126
+ bun run test:e2e
127
+ ```
128
+
129
+ Recompilez `dist/` à chaque fois que vous modifiez l'API publique des hooks (`src/hooks/custom-hooks-registry.ts`, `src/hooks/policy-helpers.ts` ou `src/hooks/policy-types.ts`).
130
+
131
+ ### Structure des tests E2E
132
+
133
+ ```text
134
+ __tests__/e2e/
135
+ helpers/
136
+ hook-runner.ts # Lance le binaire, envoie le JSON de la charge utile, capture le code de sortie + stdout + stderr
137
+ fixture-env.ts # Répertoires temporaires isolés par test avec fichiers de configuration
138
+ payloads.ts # Factories de charges utiles fidèles à Claude pour chaque type d'événement
139
+ hooks/
140
+ builtin-policies.e2e.test.ts # Chaque politique builtin avec un vrai sous-processus
141
+ custom-hooks.e2e.test.ts # Chargement et évaluation des hooks personnalisés
142
+ config-scopes.e2e.test.ts # Fusion de config entre scopes projet/local/global
143
+ policy-params.e2e.test.ts # Injection de paramètres pour chaque politique paramétrée
144
+ ```
145
+
146
+ ### Utiliser les utilitaires E2E
147
+
148
+ **`FixtureEnv`** - environnement isolé par test :
149
+
150
+ ```typescript
151
+ import { createFixtureEnv } from "../helpers/fixture-env";
152
+
153
+ const env = createFixtureEnv();
154
+ // env.cwd - répertoire temporaire ; à passer en tant que payload.cwd pour charger .failproofai/policies-config.json
155
+ // env.home - répertoire home isolé ; évite les fuites depuis ~/.failproofai
156
+
157
+ env.writeConfig({
158
+ enabledPolicies: ["block-sudo"],
159
+ policyParams: {
160
+ "block-sudo": { allowPatterns: ["sudo systemctl status"] },
161
+ },
162
+ });
163
+ ```
164
+
165
+ `createFixtureEnv()` enregistre automatiquement un nettoyage `afterEach`.
166
+
167
+ **`runHook`** - invoquer le binaire :
168
+
169
+ ```typescript
170
+ import { runHook } from "../helpers/hook-runner";
171
+ import { Payloads } from "../helpers/payloads";
172
+
173
+ const result = await runHook(
174
+ "PreToolUse",
175
+ Payloads.preToolUse.bash("sudo apt install nodejs", env.cwd),
176
+ { homeDir: env.home }
177
+ );
178
+
179
+ expect(result.exitCode).toBe(0);
180
+ expect(result.parsed?.hookSpecificOutput?.permissionDecision).toBe("deny");
181
+ ```
182
+
183
+ **`Payloads`** - factories de charges utiles prêtes à l'emploi :
184
+
185
+ ```typescript
186
+ Payloads.preToolUse.bash(command, cwd)
187
+ Payloads.preToolUse.write(filePath, content, cwd)
188
+ Payloads.preToolUse.read(filePath, cwd)
189
+ Payloads.postToolUse.bash(command, output, cwd)
190
+ Payloads.postToolUse.read(filePath, content, cwd)
191
+ Payloads.notification(message, cwd)
192
+ Payloads.stop(cwd)
193
+ ```
194
+
195
+ ### Écrire un test E2E
196
+
197
+ ```typescript
198
+ import { describe, it, expect } from "vitest";
199
+ import { createFixtureEnv } from "../helpers/fixture-env";
200
+ import { runHook } from "../helpers/hook-runner";
201
+ import { Payloads } from "../helpers/payloads";
202
+
203
+ describe("block-rm-rf (E2E)", () => {
204
+ it("denies rm -rf", async () => {
205
+ const env = createFixtureEnv();
206
+ env.writeConfig({ enabledPolicies: ["block-rm-rf"] });
207
+
208
+ const result = await runHook(
209
+ "PreToolUse",
210
+ Payloads.preToolUse.bash("rm -rf /", env.cwd),
211
+ { homeDir: env.home }
212
+ );
213
+
214
+ expect(result.exitCode).toBe(0);
215
+ expect(result.parsed?.hookSpecificOutput?.permissionDecision).toBe("deny");
216
+ });
217
+
218
+ it("allows non-recursive rm", async () => {
219
+ const env = createFixtureEnv();
220
+ env.writeConfig({ enabledPolicies: ["block-rm-rf"] });
221
+
222
+ const result = await runHook(
223
+ "PreToolUse",
224
+ Payloads.preToolUse.bash("rm /tmp/file.txt", env.cwd),
225
+ { homeDir: env.home }
226
+ );
227
+
228
+ expect(result.exitCode).toBe(0);
229
+ expect(result.stdout).toBe(""); // allow → stdout vide
230
+ });
231
+ });
232
+ ```
233
+
234
+ ### Formats de réponse E2E
235
+
236
+ | Décision | Code de sortie | stdout |
237
+ |----------|----------------|--------|
238
+ | `PreToolUse` deny | `0` | `{"hookSpecificOutput":{"permissionDecision":"deny","permissionDecisionReason":"..."}}` |
239
+ | `PostToolUse` deny | `0` | `{"hookSpecificOutput":{"additionalContext":"Blocked ... because: ..."}}` |
240
+ | Instruct (hors Stop) | `0` | `{"hookSpecificOutput":{"additionalContext":"Instruction from failproofai: ..."}}` |
241
+ | Stop instruct | `2` | stdout vide ; raison dans stderr |
242
+ | Allow | `0` | chaîne vide |
243
+
244
+ ### Configuration Vitest
245
+
246
+ Les tests E2E utilisent `vitest.config.e2e.mts` avec :
247
+
248
+ - `environment: "node"` - aucune variable globale de navigateur requise
249
+ - `pool: "forks"` - véritable isolation des processus (les tests lancent des sous-processus)
250
+ - `testTimeout: 20_000` - 20 secondes par test (démarrage du binaire + évaluation des hooks)
251
+
252
+ Le pool `forks` est important : les workers basés sur des threads partagent `globalThis`, ce qui peut interférer avec les tests qui lancent des sous-processus. Les forks basés sur des processus évitent ce problème.
253
+
254
+ ---
255
+
256
+ ## Intégration continue
257
+
258
+ L'exécution complète en CI (`bun run lint && bunx tsc --noEmit && bun run test:run && bun run build`) doit passer avant toute fusion. La suite E2E s'exécute en tant que job CI distinct, en parallèle.
259
+
260
+ Consultez [Contributing](../CONTRIBUTING.md) pour la liste de vérification complète avant fusion.
@@ -0,0 +1,333 @@
1
+ ---
2
+ ---
3
+ title: ארכיטקטורה
4
+ description: "כיצד מטפל ה-hook, טעינת ההגדרות והערכת המדיניות עובדים באופן פנימי"
5
+ icon: sitemap
6
+ ---
7
+
8
+ מסמך זה מסביר כיצד failproofai עובד באופן פנימי: כיצד מערכת ה-hook מיירטת קריאות כלים של סוכנים, כיצד הגדרות נטענות ומתמזגות, כיצד מדיניות מוערכת, וכיצד לוח הבקרה עוקב אחרי פעילות סוכנים.
9
+
10
+ ---
11
+
12
+ ## סקירה כללית
13
+
14
+ ל-failproofai יש שתי תת-מערכות עצמאיות:
15
+
16
+ 1. **מטפל Hook** - תת-תהליך CLI מהיר שClaude Code מפעיל בכל קריאת כלי סוכן. מעריך מדיניות ומחזיר החלטה.
17
+ 2. **Agent Monitor (Dashboard)** - יישום Next.js לניטור של סשנים של סוכנים וניהול מדיניות.
18
+
19
+ שתי התת-מערכות משתפות קבצי הגדרות בתיקייה `~/.failproofai/` ובתיקייה `.failproofai/` של הפרויקט, אך הן פועלות כתהליכים נפרדים ותקשרות רק דרך מערכת הקבצים.
20
+
21
+ ---
22
+
23
+ ## מטפל Hook
24
+
25
+ ### שילוב עם Claude Code
26
+
27
+ כאשר אתה מריץ `failproofai policies --install`, הוא כותב ערכים כמו זה לתוך `~/.claude/settings.json`:
28
+
29
+ ```json
30
+ {
31
+ "hooks": {
32
+ "PreToolUse": [
33
+ {
34
+ "matcher": "",
35
+ "hooks": [
36
+ {
37
+ "type": "command",
38
+ "command": "failproofai --hook PreToolUse"
39
+ }
40
+ ]
41
+ }
42
+ ],
43
+ "PostToolUse": [ ... ]
44
+ }
45
+ }
46
+ ```
47
+
48
+ Claude Code לאחר מכן מפעיל את `failproofai --hook PreToolUse` כתת-תהליך לפני כל קריאת כלי, תוך העברת מטען JSON ל-stdin.
49
+
50
+ ### פורמט מטען
51
+
52
+ ```json
53
+ {
54
+ "session_id": "abc123",
55
+ "transcript_path": "/home/user/.claude/projects/myproject/sessions/abc123.jsonl",
56
+ "cwd": "/home/user/myproject",
57
+ "permission_mode": "default",
58
+ "hook_event_name": "PreToolUse",
59
+ "tool_name": "Bash",
60
+ "tool_input": { "command": "sudo apt install nodejs" }
61
+ }
62
+ ```
63
+
64
+ לאירועי `PostToolUse`, המטען מכיל גם `tool_result` עם הפלט של הכלי.
65
+
66
+ המטפל אוכף מגבלת stdin של 1 MB. מטענים החוצים זאת מושלכים וכל מדיניות מאפשרת באופן מובנה.
67
+
68
+ ### פורמט תجובה
69
+
70
+ **Deny (PreToolUse):**
71
+ ```json
72
+ {
73
+ "hookSpecificOutput": {
74
+ "permissionDecision": "deny",
75
+ "permissionDecisionReason": "Blocked by failproofai: sudo command blocked"
76
+ }
77
+ }
78
+ ```
79
+
80
+ **Deny (PostToolUse):**
81
+ ```json
82
+ {
83
+ "hookSpecificOutput": {
84
+ "additionalContext": "Blocked by failproofai because: API key detected in output"
85
+ }
86
+ }
87
+ ```
88
+
89
+ **Instruct (כל אירוע מלבד Stop):**
90
+ ```json
91
+ {
92
+ "hookSpecificOutput": {
93
+ "additionalContext": "Instruction from failproofai: Verify tests pass before committing."
94
+ }
95
+ }
96
+ ```
97
+
98
+ **אירוע Stop instruct:**
99
+ - קוד יציאה: `2`
100
+ - סיבה כתובה ל-stderr (לא stdout)
101
+
102
+ **Allow:**
103
+ - קוד יציאה: `0`
104
+ - stdout ריק
105
+
106
+ **Allow עם הודעה (beta):**
107
+
108
+ מאז v0.0.2-beta.3, `allow(message)` מאפשר למדיניות לשלוח הקשר מידע חזור ל-Claude גם כאשר הפעולה מורשית. מטפל ה-hook כותב את ה-JSON הבא ל-**stdout** (לא קובץ הגדרות — זו תגובת המטפל ל-Claude Code, בדיוק כמו תגובות deny ו-instruct לעיל):
109
+
110
+ ```json
111
+ // כתוב ל-stdout על ידי תהליך מטפל ה-hook
112
+ {
113
+ "hookSpecificOutput": {
114
+ "additionalContext": "All CI checks passed on branch 'feat/my-feature'."
115
+ }
116
+ }
117
+ ```
118
+ - קוד יציאה: `0` (פעולה מורשית)
119
+ - כאשר מדיניות מרובות מחזירות `allow` עם הודעה, הודעותיהן משולבות עם שורות חדשות לתוך מחרוזת `additionalContext` יחידה
120
+ - אם אף מדיניות לא מספקת הודעה, stdout ריק (זהה לקודם)
121
+
122
+ ### צינור עיבוד
123
+
124
+ `src/hooks/handler.ts` מיישם את כל הצינור:
125
+
126
+ ```text
127
+ stdin JSON
128
+ → parse payload (max 1 MB)
129
+ → extract session metadata (session_id, cwd, tool_name, tool_input, etc.)
130
+ → readMergedHooksConfig(cwd) ← merges project + local + global config
131
+ → register enabled builtin policies with resolved params
132
+ → load custom policies from customPoliciesPath (if set)
133
+ → register custom policies into policy registry
134
+ → evaluate all policies (builtins first, then custom)
135
+ → first deny short-circuits
136
+ → instruct decisions accumulate
137
+ → allow messages accumulate
138
+ → write JSON decision to stdout
139
+ → persist event to ~/.failproofai/hook-activity.jsonl
140
+ → exit
141
+ ```
142
+
143
+ כל התהליך פועל בפחות מ-100ms עבור מטענים טיפוסיים ללא קריאות LLM.
144
+
145
+ ---
146
+
147
+ ## טעינת הגדרות
148
+
149
+ `src/hooks/hooks-config.ts` מיישם טעינת הגדרות בשלוש טווחים.
150
+
151
+ ```text
152
+ [1] {cwd}/.failproofai/policies-config.json ← project (highest priority)
153
+ [2] {cwd}/.failproofai/policies-config.local.json ← local
154
+ [3] ~/.failproofai/policies-config.json ← global (lowest priority)
155
+ ```
156
+
157
+ לוגיקת מיזוג:
158
+ - `enabledPolicies` - איחוד מבודד בכל שלושה הקבצים
159
+ - `policyParams` - למפתח לכל מדיניות, הקובץ הראשון שמגדיר אותו מנצח במלואו
160
+ - `customPoliciesPath` - הקובץ הראשון שמגדיר אותו מנצח
161
+ - `llm` - הקובץ הראשון שמגדיר אותו מנצח
162
+
163
+ לוח הבקרה בדיקה משתמש ב-`readHooksConfig()` (גלובאלי בלבד) לקריאה וכתיבה, מכיוון שהוא אינו מופעל עם cwd של פרויקט.
164
+
165
+ ---
166
+
167
+ ## הערכת מדיניות
168
+
169
+ `src/hooks/policy-evaluator.ts` מפעיל מדיניות בסדר.
170
+
171
+ עבור כל מדיניות:
172
+
173
+ 1. חפש את סכמת `params` של המדיניות (אם יש לה אחת).
174
+ 2. קרא את `policyParams[policy.name]` מההגדרה המתמזגת.
175
+ 3. מזג ערכים המסופקים על ידי משתמש על ברירות ברירת המחדל של הסכמה לייצור `ctx.params`.
176
+ 4. קרא ל-`policy.fn(ctx)` עם ההקשר שנפתר.
177
+ 5. אם התוצאה היא `deny`, עצור מיד והחזר את ההחלטה הזו.
178
+ 6. אם התוצאה היא `instruct`, צבור את ההודעה והמשך.
179
+ 7. אם התוצאה היא `allow`, המשך למדיניות הבאה.
180
+
181
+ לאחר שכל המדיניות פועלות:
182
+ - אם הוחזר `deny`, פלוט את תגובת deny.
183
+ - אם התוצאות `instruct` נאספו, פלוט תגובת instruct יחידה עם כל ההודעות משולבות.
184
+ - אחרת, פלוט תגובת allow (stdout ריק, יציאה 0).
185
+
186
+ ---
187
+
188
+ ## מדיניות מובנית
189
+
190
+ `src/hooks/builtin-policies.ts` מגדיר את כל 26 מדיניות מובנית כאובייקטי `BuiltinPolicyDefinition`:
191
+
192
+ ```typescript
193
+ interface BuiltinPolicyDefinition {
194
+ name: string;
195
+ description: string;
196
+ fn: (ctx: PolicyContext) => PolicyResult;
197
+ match: {
198
+ events: HookEventType[];
199
+ tools?: string[];
200
+ };
201
+ defaultEnabled: boolean;
202
+ category: string;
203
+ beta?: boolean;
204
+ params?: PolicyParamsSchema;
205
+ }
206
+ ```
207
+
208
+ מדיניות המקבלת `params` מצהירה ספכמת `PolicyParamsSchema` עם סוגים וברירות מחדל לכל פרמטר. מעריך המדיניות מזריק ערכים שנפתרו ל-`ctx.params` לפני קריאה ל-`fn`. פונקציות מדיניות קוראות `ctx.params` ללא שמירה null מכיוון שברירות מחדל מוחלות תמיד קודם.
209
+
210
+ התאמת דפוס בתוך מדיניות משתמשת בטוקנים של פקודה מנותחים (argv), לא התאמה של מחרוזת גולמית. זה מונע עקיפה דרך הזרקת מפעילי shell (לדוגמה, דפוס עבור `sudo systemctl status *` לא יכול להיות מעוקף על ידי הוספת `; rm -rf /` לפקודה).
211
+
212
+ ---
213
+
214
+ ## מדיניות מותאמת אישית
215
+
216
+ `src/hooks/custom-hooks-registry.ts` מיישם רישום `globalThis`-backed:
217
+
218
+ ```typescript
219
+ const REGISTRY_KEY = "__failproofai_custom_hooks__";
220
+
221
+ export const customPolicies = {
222
+ add(hook: CustomHook): void { ... }
223
+ };
224
+
225
+ export function getCustomHooks(): CustomHook[] { ... }
226
+ export function clearCustomHooks(): void { ... } // used in tests
227
+ ```
228
+
229
+ `src/hooks/custom-hooks-loader.ts` טוען את קובץ המדיניות של המשתמש:
230
+
231
+ 1. קרא את `customPoliciesPath` מהגדרות; דלג אם היעדר.
232
+ 2. פתור לנתיב מוחלט; בדוק שהקובץ קיים.
233
+ 3. כתוב מחדש את כל `from "failproofai"` כדי להסב לנתיב dist בפועל כך `customPolicies` מתפתר לרישום `globalThis` זהה.
234
+ 4. כתוב מחדש רקורסיבי יבוא מקומי חולף כדי להבטיח תאימות ESM.
235
+ 5. כתוב קבצי `.mjs` זמניים ו-`import()` הקובץ הכניסה.
236
+ 6. קרא ל-`getCustomHooks()` כדי לאחזר hooks שנרשמו.
237
+ 7. נקה את כל הקבצים הזמניים בבלוק `finally`.
238
+
239
+ בכל שגיאה (קובץ לא נמצא, שגיאת תחביר, כשל בייבוא), השגיאה נרשמת ל-`~/.failproofai/hook.log` והטוען מחזיר מערך ריק. מדיניות מובנית אינה מושפעת.
240
+
241
+ מדיניות מותאמת אישית מוערכת לאחר כל מדיניות מובנית. מדיניות מותאמת אישית `deny` עדיין קוצרת מדיניות מותאמת אישית נוספת (אך כל הביומיניות כבר רצות בנקודה זו).
242
+
243
+ ---
244
+
245
+ ## רישום פעילות
246
+
247
+ לאחר כל אירוע hook, המטפל מצרף שורת JSONL ל-`~/.failproofai/hook-activity.jsonl`:
248
+
249
+ ```json
250
+ {
251
+ "timestamp": "2026-04-06T12:34:56.789Z",
252
+ "sessionId": "abc123",
253
+ "eventType": "PreToolUse",
254
+ "toolName": "Bash",
255
+ "policyName": "block-sudo",
256
+ "decision": "deny",
257
+ "reason": "sudo command blocked by failproofai",
258
+ "durationMs": 12
259
+ }
260
+ ```
261
+
262
+ שורה אחת לכל מדיניות שקיבלה החלטה שאינה allow. החלטות allow אינן נרשמות (כדי להקטין את גודל הקובץ).
263
+
264
+ ---
265
+
266
+ ## ארכיטקטורת לוח הבקרה
267
+
268
+ לוח הבקרה הוא יישום **Next.js 16** המשתמש ב-App Router עם React Server Components ו-Server Actions.
269
+
270
+ ```text
271
+ app/
272
+ layout.tsx ← Root layout (theme, telemetry, nav)
273
+ projects/page.tsx ← Server component: list all Claude projects
274
+ project/[name]/page.tsx ← Server component: list sessions in a project
275
+ project/[name]/session/
276
+ [sessionId]/page.tsx ← Server component: render session viewer
277
+ policies/page.tsx ← Client component: policy management + activity log
278
+ actions/
279
+ get-hooks-config.ts ← Read config + policy list
280
+ update-hooks-config.ts ← Toggle policy on/off
281
+ update-policy-params.ts ← Update policy parameters
282
+ get-hook-activity.ts ← Paginate/search activity log
283
+ install-hooks-web.ts ← Install/remove hooks from the browser
284
+ api/
285
+ download/[project]/[session]/route.ts ← Export session as ZIP/JSONL
286
+ ```
287
+
288
+ **זרימת נתונים:**
289
+
290
+ - רכיבי עמוד קוראים ל-`lib/projects.ts` ו-`lib/log-entries.ts` כדי לקרוא נתוני פרויקט/סשן ישירות מ-מערכת הקבצים (אין שכבת API לקריאה).
291
+ - עמוד המדיניות משתמש ב-Server Actions לכל מוטציות (toggle, params update, install/remove).
292
+ - מציג הסשן מנתח את פורמט התמלילון JSONL של Claude ומרנדר ציר זמן של הודעות וקריאות כלים.
293
+
294
+ **החלטות עיצוב מרכזיות:**
295
+
296
+ - אין בסיס נתונים - כל מצב מתמשך הוא בקבצים רגילים (`~/.failproofai/`, `~/.claude/projects/`).
297
+ - Server Actions למוטציות - אין צורך ב-REST API עבור פעולות CRUD.
298
+ - React Server Components עבור עמודי קריאה - טעינה ראשונית מהירה יותר, אין חבילת לקוח עבור הבאת נתונים.
299
+ - רכיבים לקוח רק כאשר יש צורך באינטראקטיביות (toggles מדיניות, חיפוש פעילות, מציג יומן).
300
+
301
+ ---
302
+
303
+ ## פריסת קובץ
304
+
305
+ ```text
306
+ failproofai/
307
+ ├── bin/
308
+ │ └── failproofai.mjs # CLI router (hook / dashboard / install / etc.)
309
+ ├── src/hooks/
310
+ │ ├── handler.ts # Hook event pipeline
311
+ │ ├── builtin-policies.ts # 26 policy definitions
312
+ │ ├── policy-evaluator.ts # Policy execution engine
313
+ │ ├── policy-registry.ts # Policy registration and lookup
314
+ │ ├── policy-types.ts # TypeScript interfaces
315
+ │ ├── hooks-config.ts # Multi-scope config loading
316
+ │ ├── custom-hooks-registry.ts # globalThis-backed hook registry
317
+ │ ├── custom-hooks-loader.ts # ESM loader for user JS hooks
318
+ │ ├── manager.ts # install / remove / list operations
319
+ │ ├── install-prompt.ts # Interactive policy selection prompt
320
+ │ ├── hook-logger.ts # Logging to hook.log
321
+ │ ├── hook-activity-store.ts # Persist activity to hook-activity.jsonl
322
+ │ └── llm-client.ts # LLM API client (for AI-powered policies)
323
+ ├── app/ # Next.js dashboard (pages + server actions)
324
+ ├── lib/ # Shared utilities
325
+ │ ├── projects.ts # Enumerate Claude projects from filesystem
326
+ │ ├── log-entries.ts # Parse Claude transcript JSONL format
327
+ │ ├── paths.ts # Resolve system paths
328
+ │ └── ...
329
+ ├── components/ # Shared React UI components
330
+ ├── contexts/ # React context providers (theme, auto-refresh, telemetry)
331
+ ├── examples/ # Example custom hook files
332
+ └── __tests__/ # Unit and E2E tests
333
+ ```