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,31 @@
1
+ ---
2
+ title: عرض السياسات
3
+ description: "اطّلع على السياسات المُفعّلة وپاراميتراتها والسياسات المخصصة"
4
+ ---
5
+
6
+ ```bash
7
+ failproofai policies
8
+ ```
9
+
10
+ يعرض جميع السياسات مع حالتها والپاراميترات المُعدّة والسياسات المخصصة.
11
+
12
+ ## نموذج من المخرجات
13
+
14
+ ```text
15
+ Failproof AI Hook Policies (user)
16
+
17
+ Status Name Description
18
+ ────── ──────────────────────────────────────────────────────────────
19
+ ✓ block-sudo Block sudo commands
20
+ allowPatterns: ["sudo systemctl status"]
21
+ ✓ block-rm-rf Block recursive deletions
22
+ ✗ block-curl-pipe-sh Block curl|bash patterns
23
+ ✓ sanitize-api-keys Redact API keys from output
24
+ additionalPatterns: [{ regex: "MY_TOKEN_...", label: "..." }]
25
+
26
+ ── Custom Policies (/home/alice/myproject/my-policies.js) ──────────────
27
+ ✓ require-jira-ticket Block commits without ticket
28
+ ✓ approval-gate Approval gate for destructive ops
29
+ ```
30
+
31
+ يتم هنا تحديد المفاتيح غير المعروفة في `policyParams` بحيث يمكنك اكتشاف الأخطاء الإملائية مبكراً.
@@ -0,0 +1,43 @@
1
+ ---
2
+ title: إلغاء تثبيت السياسات
3
+ description: "إزالة مدخلات Hook من إعدادات 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
+ - **أسماء محددة** - يعطّل تلك السياسات لكن يبقي Hooks مثبتة
28
+
29
+ ## أمثلة
30
+
31
+ ```bash
32
+ # إزالة جميع Hooks عامة
33
+ failproofai policies --uninstall
34
+
35
+ # تعطيل سياسة محددة (يبقي Hooks مثبتة)
36
+ failproofai policies --uninstall block-sudo
37
+
38
+ # إزالة Hooks من كل نطاق
39
+ failproofai policies --uninstall --scope all
40
+
41
+ # مسح مسار السياسات المخصصة
42
+ failproofai policies --uninstall --custom
43
+ ```
@@ -0,0 +1,13 @@
1
+ ---
2
+ ---
3
+ title: التحقق من الإصدار
4
+ description: "طباعة إصدار failproofai المثبت"
5
+ ---
6
+
7
+ ```bash
8
+ failproofai --version
9
+ # or
10
+ failproofai -v
11
+ ```
12
+
13
+ يطبع رقم الإصدار المثبت.
@@ -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
+ | **مشروع** | `.failproofai/policies-config.json` | إعدادات لكل مستودع، مرتبطة بالتحكم في الإصدار |
19
+ | **محلي** | `.failproofai/policies-config.local.json` | تجاوزات شخصية لكل مستودع، في gitignored |
20
+ | **عام** | `~/.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"] } ← المشروع يفوز، يتم تجاهل العام
43
+ ```
44
+
45
+ ```text
46
+ project: (no block-sudo entry)
47
+ local: (no block-sudo entry)
48
+ global: block-sudo → { allowPatterns: ["sudo systemctl status"] }
49
+
50
+ resolved: { allowPatterns: ["sudo systemctl status"] } ← ينتقل إلى العام
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`. انظر [السياسات المدمجة](/ar/built-in-policies) للقائمة الكاملة.
107
+
108
+ السياسات غير الموجودة في `enabledPolicies` غير نشطة، حتى لو كانت لديها إدخالات في `policyParams`.
109
+
110
+ ### `policyParams`
111
+
112
+ النوع: `Record<string, Record<string, unknown>>`
113
+
114
+ تجاوزات معاملات لكل سياسة. المفتاح الخارجي هو اسم السياسة؛ المفاتيح الداخلية خاصة بكل سياسة. تتوثق كل سياسة معاملاتها المتاحة في [السياسات المدمجة](/ar/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": "Try creating a fresh branch instead."
133
+ },
134
+ "block-sudo": {
135
+ "allowPatterns": ["sudo apt-get"],
136
+ "hint": "Use apt-get directly without sudo."
137
+ },
138
+ "custom/my-policy": {
139
+ "hint": "Ask the user for approval first."
140
+ }
141
+ }
142
+ }
143
+ ```
144
+
145
+ عندما يرفض `block-force-push`، يرى Claude: *"Force-pushing is blocked. Try creating a fresh branch instead."*
146
+
147
+ القيم غير الحرفية والسلاسل الفارغة يتم تجاهلها بصمت. إذا لم يتم تعيين `hint`، فإن السلوك لم يتغير (متوافق للخلف).
148
+
149
+ ### `customPoliciesPath`
150
+
151
+ النوع: `string` (مسار مطلق)
152
+
153
+ المسار إلى ملف JavaScript يحتوي على سياسات hook مخصصة. يتم تعيينه تلقائيًا بواسطة `failproofai policies --install --custom <path>` (يتم حل المسار إلى مسار مطلق قبل تخزينه).
154
+
155
+ يتم تحميل الملف جديدًا في كل حدث hook - لا يوجد تخزين مؤقت. انظر [السياسات المخصصة](/ar/custom-policies) لتفاصيل الإنشاء.
156
+
157
+ ### السياسات القائمة على الاتفاقية (v0.0.2-beta.7+)
158
+
159
+ بالإضافة إلى `customPoliciesPath` الصريح، يقوم failproofai تلقائيًا باكتشاف وتحميل ملفات السياسة من المجلدات `.failproofai/policies/`:
160
+
161
+ | المستوى | المجلد | النطاق |
162
+ |-------|--------|---------|
163
+ | مشروع | `.failproofai/policies/` | مشاركة مع الفريق عبر التحكم في الإصدار |
164
+ | مستخدم | `~/.failproofai/policies/` | شخصي، ينطبق على جميع المشاريع |
165
+
166
+ **مطابقة الملفات:** يتم تحميل الملفات المطابقة فقط لـ `*policies.{js,mjs,ts}` (مثل `security-policies.mjs`, `workflow-policies.js`). الملفات الأخرى في المجلد يتم تجاهلها.
167
+
168
+ **لا يلزم التكوين:** لا تتطلب سياسات الاتفاقية إدخالات في `policies-config.json`. فقط أسقط الملفات في المجلد وسيتم التقاطها في حدث hook التالي.
169
+
170
+ **التحميل المتحد:** يتم مسح كلا مجلدي الاتفاقية للمشروع والمستخدم. جميع الملفات المطابقة من كلا المستويين يتم تحميلها (بخلاف `customPoliciesPath` الذي يستخدم نطاق-أول-يفوز).
171
+
172
+ انظر [السياسات المخصصة](/ar/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` (في gitignored) للتجاوزات الشخصية دون التأثير على زملائه.
@@ -0,0 +1,359 @@
1
+ ---
2
+
3
+ ---
4
+ title: السياسات المخصصة
5
+ description: "اكتب سياساتك الخاصة في JavaScript - فرض الاتفاقيات، منع الانجراف، الكشف عن الأعطال، التكامل مع الأنظمة الخارجية"
6
+ icon: code
7
+ ---
8
+
9
+ تتيح لك السياسات المخصصة كتابة قواعد لأي سلوك وكيل: فرض اتفاقيات المشروع، منع الانجراف، التحكم في العمليات الضارة، الكشف عن الوكلاء المعلقة، أو التكامل مع Slack وسير العمل الموافقات والمزيد. تستخدم نفس نظام حدث الخطاف وقرارات `allow` و `deny` و `instruct` كما هو الحال في السياسات المدمجة.
10
+
11
+ ---
12
+
13
+ ## مثال سريع
14
+
15
+ ```js
16
+ // my-policies.js
17
+ import { customPolicies, allow, deny, instruct } from "failproofai";
18
+
19
+ customPolicies.add({
20
+ name: "no-production-writes",
21
+ description: "Block writes to paths containing 'production'",
22
+ match: { events: ["PreToolUse"] },
23
+ fn: async (ctx) => {
24
+ if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow();
25
+ const path = ctx.toolInput?.file_path ?? "";
26
+ if (path.includes("production")) {
27
+ return deny("Writes to production paths are blocked");
28
+ }
29
+ return allow();
30
+ },
31
+ });
32
+ ```
33
+
34
+ تثبيتها:
35
+
36
+ ```bash
37
+ failproofai policies --install --custom ./my-policies.js
38
+ ```
39
+
40
+ ---
41
+
42
+ ## طريقتان لتحميل السياسات المخصصة
43
+
44
+ ### الخيار 1: المبنية على الاتفاقية (موصى به، v0.0.2-beta.7+)
45
+
46
+ أسقط ملفات `*policies.{js,mjs,ts}` في `.failproofai/policies/` وسيتم تحميلها تلقائياً - لا تحتاج إلى أعلام أو تغييرات في الإعدادات. يعمل هذا مثل خطافات git: أسقط ملفاً، وهو يعمل فقط.
47
+
48
+ ```
49
+ # Project level — committed to git, shared with the team
50
+ .failproofai/policies/security-policies.mjs
51
+ .failproofai/policies/workflow-policies.mjs
52
+
53
+ # User level — personal, applies to all projects
54
+ ~/.failproofai/policies/my-policies.mjs
55
+ ```
56
+
57
+ **كيفية عمله:**
58
+ - يتم فحص كلا المجلدات (المشروع والمستخدم) (الاتحاد - وليس first-scope-wins)
59
+ - يتم تحميل الملفات أبجدياً في كل مجلد. اجعل البادئة `01-` أو `02-` للتحكم في الترتيب
60
+ - يتم تحميل الملفات المطابقة `*policies.{js,mjs,ts}` فقط؛ يتم تجاهل الملفات الأخرى
61
+ - يتم تحميل كل ملف بشكل مستقل (fail-open لكل ملف)
62
+ - يعمل جنباً إلى جنب مع السياسات الصريحة `--custom` والمدمجة
63
+
64
+ <Tip>
65
+ سياسات الاتفاقية هي أسهل طريقة لمشاركة السياسات عبر الفريق. التزم `.failproofai/policies/` بـ git ويحصل كل عضو في الفريق عليها تلقائياً.
66
+ </Tip>
67
+
68
+ ### الخيار 2: مسار الملف الصريح
69
+
70
+ ```bash
71
+ # Install with a custom policies file
72
+ failproofai policies --install --custom ./my-policies.js
73
+
74
+ # Replace the policies file path
75
+ failproofai policies --install --custom ./new-policies.js
76
+
77
+ # Remove the custom policies path from config
78
+ failproofai policies --uninstall --custom
79
+ ```
80
+
81
+ يتم حفظ المسار المطلق المُحل في `policies-config.json` كـ `customPoliciesPath`. يتم تحميل الملف بشكل جديد في كل حدث خطاف - لا يوجد تخزين مؤقت بين الأحداث.
82
+
83
+ ### استخدام كليهما معاً
84
+
85
+ يمكن لسياسات الاتفاقية والملف الصريح `--custom` أن يتعايشا. ترتيب التحميل:
86
+
87
+ 1. ملف `customPoliciesPath` الصريح (إذا تم تكوينه)
88
+ 2. ملفات اتفاقية المشروع (`{cwd}/.failproofai/policies/`، أبجدياً)
89
+ 3. ملفات اتفاقية المستخدم (`~/.failproofai/policies/`، أبجدياً)
90
+
91
+ ---
92
+
93
+ ## واجهة برمجية التطبيقات
94
+
95
+ ### الاستيراد
96
+
97
+ ```js
98
+ import { customPolicies, allow, deny, instruct } from "failproofai";
99
+ ```
100
+
101
+ ### `customPolicies.add(hook)`
102
+
103
+ تسجيل سياسة. اتصل بها عدة مرات حسب الحاجة لسياسات متعددة في نفس الملف.
104
+
105
+ ```ts
106
+ customPolicies.add({
107
+ name: string; // required - unique identifier
108
+ description?: string; // shown in `failproofai policies` output
109
+ match?: { events?: HookEventType[] }; // filter by event type; omit to match all
110
+ fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
111
+ });
112
+ ```
113
+
114
+ ### مساعدو القرار
115
+
116
+ | الدالة | التأثير | استخدم عندما |
117
+ |----------|--------|----------|
118
+ | `allow()` | السماح بالعملية بصمت | الإجراء آمن، لا توجد رسالة مطلوبة |
119
+ | `deny(message)` | حظر العملية | يجب ألا يتخذ الوكيل هذا الإجراء |
120
+ | `instruct(message)` | إضافة سياق دون حظر | إعطاء الوكيل سياق إضافي للبقاء على المسار |
121
+
122
+ `deny(message)` - تظهر الرسالة إلى Claude بسابقة `"Blocked by failproofai:"`. يقطع `deny` واحد كل تقييم آخر.
123
+
124
+ `instruct(message)` - يتم إلحاق الرسالة بسياق Claude لاستدعاء الأداة الحالي. يتم تجميع جميع رسائل `instruct` وتسليمها معاً.
125
+
126
+ <Tip>
127
+ يمكنك إلحاق إرشادات إضافية بأي رسالة `deny` أو `instruct` بإضافة حقل `hint` في `policyParams` - لا حاجة لتغيير الرمز. يعمل هذا أيضاً للسياسات المخصصة (`custom/`)، واتفاقية المشروع (`.failproofai-project/`)، واتفاقية المستخدم (`.failproofai-user/`). انظر [التكوين → hint](/ar/configuration#hint-cross-cutting) للتفاصيل.
128
+ </Tip>
129
+
130
+ ### رسائل السماح المعلوماتية (بيتا)
131
+
132
+ <Note>
133
+ `allow(message)` هي ميزة بيتا متاحة منذ v0.0.2-beta.3. قد تتغير واجهة برمجية التطبيقات في الإصدارات المستقبلية. الإصدارات السابقة تدعم فقط `allow()` بدون وسائط.
134
+ </Note>
135
+
136
+ `allow(message)` يسمح بالعملية **و** يرسل رسالة معلومات مرة أخرى إلى Claude. يتم تسليم الرسالة كـ `additionalContext` في استجابة stdout لمعالج الخطاف - نفس الآلية المستخدمة من قبل `instruct`، لكن مختلفة من الناحية الدلالية: إنها تحديث حالة وليست تحذير.
137
+
138
+ | الدالة | التأثير | استخدم عندما |
139
+ |----------|--------|----------|
140
+ | `allow(message)` | السماح وإرسال السياق إلى Claude | تأكيد نجاح الفحص، أو شرح سبب تخطي الفحص |
141
+
142
+ حالات الاستخدام:
143
+ - **تأكيدات الحالة:** `allow("All CI checks passed.")` - يخبر Claude أن كل شيء أخضر
144
+ - **شروحات fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` - يخبر Claude سبب تخطي الفحص حتى يكون لديه السياق الكامل
145
+ - **تراكم الرسائل المتعددة:** إذا أرجعت عدة سياسات `allow(message)`، يتم ربط جميع الرسائل بخطوط جديدة وتسليمها معاً
146
+
147
+ ```js
148
+ customPolicies.add({
149
+ name: "confirm-branch-status",
150
+ match: { events: ["Stop"] },
151
+ fn: async (ctx) => {
152
+ const cwd = ctx.session?.cwd;
153
+ if (!cwd) return allow("No working directory, skipping branch check.");
154
+
155
+ // ... check branch status ...
156
+ if (allPushed) {
157
+ return allow("Branch is up to date with remote.");
158
+ }
159
+ return deny("Unpushed changes detected.");
160
+ },
161
+ });
162
+ ```
163
+
164
+ ### حقول `PolicyContext`
165
+
166
+ | الحقل | النوع | الوصف |
167
+ |-------|------|-------------|
168
+ | `eventType` | `string` | `"PreToolUse"`، `"PostToolUse"`، `"Notification"`، `"Stop"` |
169
+ | `toolName` | `string \| undefined` | الأداة التي يتم استدعاؤها (مثل `"Bash"`، `"Write"`، `"Read"`) |
170
+ | `toolInput` | `Record<string, unknown> \| undefined` | معاملات إدخال الأداة |
171
+ | `payload` | `Record<string, unknown>` | حمل الحدث الخام الكامل من Claude Code |
172
+ | `session` | `SessionMetadata \| undefined` | سياق الجلسة (انظر أدناه) |
173
+
174
+ ### حقول `SessionMetadata`
175
+
176
+ | الحقل | النوع | الوصف |
177
+ |-------|------|-------------|
178
+ | `sessionId` | `string` | معرّف جلسة Claude Code |
179
+ | `cwd` | `string` | دليل العمل لجلسة Claude Code |
180
+ | `transcriptPath` | `string` | المسار إلى ملف النسخة JSONL الخاص بالجلسة |
181
+
182
+ ### أنواع الأحداث
183
+
184
+ | الحدث | متى يتم تشغيله | محتويات `toolInput` |
185
+ |-------|--------------|----------------------|
186
+ | `PreToolUse` | قبل تشغيل Claude لأداة | إدخال الأداة (مثل `{ command: "..." }` لـ Bash) |
187
+ | `PostToolUse` | بعد اكتمال الأداة | إدخال الأداة + `tool_result` (الإخراج) |
188
+ | `Notification` | عندما يرسل Claude إشعاراً | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - يجب أن تعيد الخطافات دائماً `allow()`، فلا يمكنها حظر الإشعارات |
189
+ | `Stop` | عند انتهاء جلسة Claude | فارغة |
190
+
191
+ ---
192
+
193
+ ## ترتيب التقييم
194
+
195
+ يتم تقييم السياسات بهذا الترتيب:
196
+
197
+ 1. السياسات المدمجة (بترتيب التعريف)
198
+ 2. السياسات المخصصة الصريحة من `customPoliciesPath` (بترتيب `.add()`)
199
+ 3. سياسات الاتفاقية من `.failproofai/policies/` للمشروع (ملفات أبجدياً، ترتيب `.add()` بداخلها)
200
+ 4. سياسات الاتفاقية من `~/.failproofai/policies/` للمستخدم (ملفات أبجدياً، ترتيب `.add()` بداخلها)
201
+
202
+ <Note>
203
+ يقطع أول `deny` جميع السياسات اللاحقة. يتم تجميع جميع رسائل `instruct` وتسليمها معاً.
204
+ </Note>
205
+
206
+ ---
207
+
208
+ ## الواردات المتعدية
209
+
210
+ يمكن لملفات السياسة المخصصة استيراد الوحدات المحلية باستخدام المسارات النسبية:
211
+
212
+ ```js
213
+ // my-policies.js
214
+ import { isBlockedPath } from "./utils.js";
215
+ import { checkApproval } from "./approval-client.js";
216
+
217
+ customPolicies.add({
218
+ name: "approval-gate",
219
+ fn: async (ctx) => {
220
+ if (ctx.toolName !== "Bash") return allow();
221
+ const approved = await checkApproval(ctx.toolInput?.command, ctx.session?.sessionId);
222
+ return approved ? allow() : deny("Approval required for this command");
223
+ },
224
+ });
225
+ ```
226
+
227
+ يتم حل جميع الواردات النسبية الممكنة من ملف الإدخال. يتم تطبيق هذا بإعادة كتابة واردات `from "failproofai"` إلى مسار dist الفعلي وإنشاء ملفات `.mjs` مؤقتة لضمان توافق ESM.
228
+
229
+ ---
230
+
231
+ ## تصفية نوع الحدث
232
+
233
+ استخدم `match.events` لتحديد متى يتم تشغيل سياسة:
234
+
235
+ ```js
236
+ customPolicies.add({
237
+ name: "require-summary-on-stop",
238
+ match: { events: ["Stop"] },
239
+ fn: async (ctx) => {
240
+ // Only fires when the session ends
241
+ // ctx.session.transcriptPath contains the full session log
242
+ return allow();
243
+ },
244
+ });
245
+ ```
246
+
247
+ حذف `match` بالكامل للتشغيل في كل نوع حدث.
248
+
249
+ ---
250
+
251
+ ## معالجة الأخطاء وأوضاع الفشل
252
+
253
+ السياسات المخصصة هي **fail-open**: الأخطاء لا تحظر السياسات المدمجة أو تعطل معالج الخطاف.
254
+
255
+ | الفشل | السلوك |
256
+ |---------|----------|
257
+ | `customPoliciesPath` لم تُعيّن | لا تعمل السياسات المخصصة الصريحة؛ سياسات الاتفاقية والمدمجة تستمر بشكل طبيعي |
258
+ | ملف غير موجود | تم تسجيل تحذير في `~/.failproofai/hook.log`؛ المدمجة تستمر |
259
+ | خطأ في الصيغة/الاستيراد (صريح) | تم تسجيل الخطأ في `~/.failproofai/hook.log`؛ سياسات مخصصة صريحة تم تخطيها |
260
+ | خطأ في الصيغة/الاستيراد (اتفاقية) | تم تسجيل الخطأ؛ هذا الملف تم تخطيه، ملفات اتفاقية أخرى لا تزال تحمل |
261
+ | `fn` رمي في وقت التشغيل | تم تسجيل الخطأ؛ تم التعامل مع الخطاف كـ `allow`؛ الخطافات الأخرى تستمر |
262
+ | `fn` يستغرق أكثر من 10 ثوان | تم تسجيل المهلة الزمنية؛ تم التعامل معها كـ `allow` |
263
+ | مجلد الاتفاقية مفقود | لا تعمل سياسات الاتفاقية؛ لا خطأ |
264
+
265
+ <Tip>
266
+ لتصحيح أخطاء السياسة المخصصة، راقب ملف السجل:
267
+
268
+ ```bash
269
+ tail -f ~/.failproofai/hook.log
270
+ ```
271
+ </Tip>
272
+
273
+ ---
274
+
275
+ ## مثال كامل: سياسات متعددة
276
+
277
+ ```js
278
+ // my-policies.js
279
+ import { customPolicies, allow, deny, instruct } from "failproofai";
280
+
281
+ // Prevent agent from writing to secrets/ directory
282
+ customPolicies.add({
283
+ name: "block-secrets-dir",
284
+ description: "Prevent agent from writing to secrets/ directory",
285
+ match: { events: ["PreToolUse"] },
286
+ fn: async (ctx) => {
287
+ if (!["Write", "Edit"].includes(ctx.toolName ?? "")) return allow();
288
+ const path = ctx.toolInput?.file_path ?? "";
289
+ if (path.includes("secrets/")) return deny("Writing to secrets/ is not permitted");
290
+ return allow();
291
+ },
292
+ });
293
+
294
+ // Keep the agent on track: verify tests before committing
295
+ customPolicies.add({
296
+ name: "remind-test-before-commit",
297
+ description: "Keep the agent on track: verify tests pass before committing",
298
+ match: { events: ["PreToolUse"] },
299
+ fn: async (ctx) => {
300
+ if (ctx.toolName !== "Bash") return allow();
301
+ const cmd = ctx.toolInput?.command ?? "";
302
+ if (/git\s+commit/.test(cmd)) {
303
+ return instruct("Verify all tests pass before committing. Run `bun test` if you haven't already.");
304
+ }
305
+ return allow();
306
+ },
307
+ });
308
+
309
+ // Prevent unplanned dependency changes during freeze
310
+ customPolicies.add({
311
+ name: "dependency-freeze",
312
+ description: "Prevent unplanned dependency changes during freeze period",
313
+ match: { events: ["PreToolUse"] },
314
+ fn: async (ctx) => {
315
+ if (ctx.toolName !== "Bash") return allow();
316
+ const cmd = ctx.toolInput?.command ?? "";
317
+ const isInstall = /^(npm install|yarn add|bun add|pnpm add)\s+\S/.test(cmd);
318
+ if (isInstall && process.env.DEPENDENCY_FREEZE === "1") {
319
+ return deny("Package installs are frozen. Unset DEPENDENCY_FREEZE to allow.");
320
+ }
321
+ return allow();
322
+ },
323
+ });
324
+
325
+ export { customPolicies };
326
+ ```
327
+
328
+ ---
329
+
330
+ ## أمثلة
331
+
332
+ يحتوي دليل `examples/` على ملفات السياسات الجاهزة للتشغيل:
333
+
334
+ | الملف | المحتوى |
335
+ |------|----------|
336
+ | `examples/policies-basic.js` | خمس سياسات للمبتدئين تغطي أوضاع فشل الوكيل الشائعة |
337
+ | `examples/policies-advanced/index.js` | أنماط متقدمة: واردات متعدية، استدعاءات غير متزامنة، تنقية الإخراج، وخطافات نهاية الجلسة |
338
+ | `examples/convention-policies/security-policies.mjs` | سياسات الأمان المبنية على الاتفاقية (حظر كتابة .env، منع إعادة كتابة سجل git) |
339
+ | `examples/convention-policies/workflow-policies.mjs` | سياسات سير العمل المبنية على الاتفاقية (تذكيرات الاختبار، ملفات التدقيق) |
340
+
341
+ ### استخدام أمثلة الملفات الصريحة
342
+
343
+ ```bash
344
+ failproofai policies --install --custom ./examples/policies-basic.js
345
+ ```
346
+
347
+ ### استخدام أمثلة الاتفاقية
348
+
349
+ ```bash
350
+ # Copy to project level
351
+ mkdir -p .failproofai/policies
352
+ cp examples/convention-policies/*.mjs .failproofai/policies/
353
+
354
+ # Or copy to user level
355
+ mkdir -p ~/.failproofai/policies
356
+ cp examples/convention-policies/*.mjs ~/.failproofai/policies/
357
+ ```
358
+
359
+ لا حاجة لأمر التثبيت - يتم اختيار الملفات تلقائياً عند حدث الخطاف التالي.