failproofai 0.0.6-beta.2 → 0.0.6-beta.4

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 (511) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +7 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  6. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  10. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  11. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  12. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  13. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  14. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  19. package/.next/standalone/.next/server/app/_not-found.rsc +17 -17
  20. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +17 -17
  21. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  22. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  23. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  24. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  25. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  26. package/.next/standalone/.next/server/app/index.html +1 -1
  27. package/.next/standalone/.next/server/app/index.rsc +16 -16
  28. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  29. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +16 -16
  30. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  31. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +11 -11
  32. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  33. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  34. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  37. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  40. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  43. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  44. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  47. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +1 -1
  50. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
  51. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
  52. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
  53. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
  54. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
  55. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
  56. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0i5kvry._.js → [root-of-the-server]__0om-5pe._.js} +2 -2
  57. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +2 -2
  58. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__05akje6._.js → [root-of-the-server]__111.vxi._.js} +2 -2
  59. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
  60. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
  61. package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
  62. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
  63. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
  64. package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0mebn66._.js +1 -1
  65. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  66. package/.next/standalone/.next/server/pages/404.html +2 -2
  67. package/.next/standalone/.next/server/pages/500.html +1 -1
  68. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
  70. package/.next/standalone/.next/static/chunks/{05j1px0r8yzh6.js → 02dqjyv6_9mhq.js} +2 -2
  71. package/.next/standalone/.next/static/chunks/{14cl9poem30dq.js → 070orfsl6.xal.js} +1 -1
  72. package/.next/standalone/.next/static/chunks/0mir9jdxn35~s.css +1 -0
  73. package/.next/standalone/.next/static/chunks/{00j0rr7rh8ef8.js → 0o547jv-k_k35.js} +1 -1
  74. package/.next/standalone/.next/static/chunks/{0ijk_kek9_wyx.js → 0pk2h2.mjxy.m.js} +1 -1
  75. package/.next/standalone/.next/static/chunks/{0xpl.oscrakvx.js → 0rcwkbh24w38b.js} +1 -1
  76. package/.next/standalone/.next/static/chunks/{1052sguyd-.ka.js → 140xx_tfr~lm_.js} +1 -1
  77. package/.next/standalone/.next/static/chunks/{0npb~873.wvg3.js → 169_e4dq~1~b6.js} +1 -1
  78. package/.next/standalone/.next/static/chunks/{0badv41uxa56..js → 17ne4p.1sw1jy.js} +1 -1
  79. package/.next/standalone/next.config.ts +6 -0
  80. package/.next/standalone/package.json +2 -2
  81. package/.next/standalone/server.js +1 -1
  82. package/bin/failproofai.mjs +91 -4
  83. package/dist/cli.mjs +1155 -54
  84. package/package.json +2 -2
  85. package/scripts/prune-standalone.mjs +128 -0
  86. package/src/auth/login.ts +104 -0
  87. package/src/auth/logout.ts +50 -0
  88. package/src/auth/token-store.ts +64 -0
  89. package/src/hooks/builtin-policies.ts +22 -20
  90. package/src/hooks/handler.ts +35 -15
  91. package/src/relay/daemon.ts +362 -0
  92. package/src/relay/pid.ts +76 -0
  93. package/src/relay/queue.ts +225 -0
  94. package/.next/standalone/.claude/settings.json +0 -316
  95. package/.next/standalone/.failproofai/policies/review-policies.mjs +0 -113
  96. package/.next/standalone/.failproofai/policies/workflow-policies.mjs +0 -63
  97. package/.next/standalone/.failproofai/policies-config.json +0 -39
  98. package/.next/standalone/.next/static/chunks/0gu_a.a80ritd.css +0 -1
  99. package/.next/standalone/AGENTS.md +0 -80
  100. package/.next/standalone/CHANGELOG.md +0 -151
  101. package/.next/standalone/CLAUDE.md +0 -165
  102. package/.next/standalone/CONTRIBUTING.md +0 -76
  103. package/.next/standalone/Dockerfile.docs +0 -12
  104. package/.next/standalone/LICENSE +0 -42
  105. package/.next/standalone/README.md +0 -301
  106. package/.next/standalone/bin/failproofai.mjs +0 -352
  107. package/.next/standalone/bun.lock +0 -1119
  108. package/.next/standalone/components.json +0 -23
  109. package/.next/standalone/dist/cli.mjs +0 -3595
  110. package/.next/standalone/dist/index.js +0 -80
  111. package/.next/standalone/docs/ar/architecture.mdx +0 -334
  112. package/.next/standalone/docs/ar/built-in-policies.mdx +0 -574
  113. package/.next/standalone/docs/ar/cli/dashboard.mdx +0 -28
  114. package/.next/standalone/docs/ar/cli/environment-variables.mdx +0 -34
  115. package/.next/standalone/docs/ar/cli/hook.mdx +0 -31
  116. package/.next/standalone/docs/ar/cli/install-policies.mdx +0 -48
  117. package/.next/standalone/docs/ar/cli/list-policies.mdx +0 -31
  118. package/.next/standalone/docs/ar/cli/remove-policies.mdx +0 -43
  119. package/.next/standalone/docs/ar/cli/version.mdx +0 -13
  120. package/.next/standalone/docs/ar/configuration.mdx +0 -223
  121. package/.next/standalone/docs/ar/custom-policies.mdx +0 -354
  122. package/.next/standalone/docs/ar/dashboard.mdx +0 -142
  123. package/.next/standalone/docs/ar/examples.mdx +0 -307
  124. package/.next/standalone/docs/ar/for-agents.mdx +0 -39
  125. package/.next/standalone/docs/ar/getting-started.mdx +0 -187
  126. package/.next/standalone/docs/ar/introduction.mdx +0 -58
  127. package/.next/standalone/docs/ar/package-aliases.mdx +0 -82
  128. package/.next/standalone/docs/ar/testing.mdx +0 -261
  129. package/.next/standalone/docs/architecture.mdx +0 -332
  130. package/.next/standalone/docs/built-in-policies.mdx +0 -574
  131. package/.next/standalone/docs/cli/dashboard.mdx +0 -28
  132. package/.next/standalone/docs/cli/environment-variables.mdx +0 -34
  133. package/.next/standalone/docs/cli/hook.mdx +0 -30
  134. package/.next/standalone/docs/cli/install-policies.mdx +0 -47
  135. package/.next/standalone/docs/cli/list-policies.mdx +0 -31
  136. package/.next/standalone/docs/cli/remove-policies.mdx +0 -43
  137. package/.next/standalone/docs/cli/version.mdx +0 -12
  138. package/.next/standalone/docs/configuration.mdx +0 -222
  139. package/.next/standalone/docs/custom-policies.mdx +0 -353
  140. package/.next/standalone/docs/dashboard.mdx +0 -142
  141. package/.next/standalone/docs/de/architecture.mdx +0 -332
  142. package/.next/standalone/docs/de/built-in-policies.mdx +0 -574
  143. package/.next/standalone/docs/de/cli/dashboard.mdx +0 -28
  144. package/.next/standalone/docs/de/cli/environment-variables.mdx +0 -34
  145. package/.next/standalone/docs/de/cli/hook.mdx +0 -30
  146. package/.next/standalone/docs/de/cli/install-policies.mdx +0 -47
  147. package/.next/standalone/docs/de/cli/list-policies.mdx +0 -31
  148. package/.next/standalone/docs/de/cli/remove-policies.mdx +0 -43
  149. package/.next/standalone/docs/de/cli/version.mdx +0 -12
  150. package/.next/standalone/docs/de/configuration.mdx +0 -222
  151. package/.next/standalone/docs/de/custom-policies.mdx +0 -353
  152. package/.next/standalone/docs/de/dashboard.mdx +0 -142
  153. package/.next/standalone/docs/de/examples.mdx +0 -307
  154. package/.next/standalone/docs/de/for-agents.mdx +0 -38
  155. package/.next/standalone/docs/de/getting-started.mdx +0 -186
  156. package/.next/standalone/docs/de/introduction.mdx +0 -57
  157. package/.next/standalone/docs/de/package-aliases.mdx +0 -82
  158. package/.next/standalone/docs/de/testing.mdx +0 -260
  159. package/.next/standalone/docs/docs.json +0 -1002
  160. package/.next/standalone/docs/es/architecture.mdx +0 -332
  161. package/.next/standalone/docs/es/built-in-policies.mdx +0 -574
  162. package/.next/standalone/docs/es/cli/dashboard.mdx +0 -28
  163. package/.next/standalone/docs/es/cli/environment-variables.mdx +0 -34
  164. package/.next/standalone/docs/es/cli/hook.mdx +0 -30
  165. package/.next/standalone/docs/es/cli/install-policies.mdx +0 -47
  166. package/.next/standalone/docs/es/cli/list-policies.mdx +0 -31
  167. package/.next/standalone/docs/es/cli/remove-policies.mdx +0 -43
  168. package/.next/standalone/docs/es/cli/version.mdx +0 -12
  169. package/.next/standalone/docs/es/configuration.mdx +0 -222
  170. package/.next/standalone/docs/es/custom-policies.mdx +0 -353
  171. package/.next/standalone/docs/es/dashboard.mdx +0 -142
  172. package/.next/standalone/docs/es/examples.mdx +0 -307
  173. package/.next/standalone/docs/es/for-agents.mdx +0 -38
  174. package/.next/standalone/docs/es/getting-started.mdx +0 -186
  175. package/.next/standalone/docs/es/introduction.mdx +0 -57
  176. package/.next/standalone/docs/es/package-aliases.mdx +0 -82
  177. package/.next/standalone/docs/es/testing.mdx +0 -260
  178. package/.next/standalone/docs/examples.mdx +0 -307
  179. package/.next/standalone/docs/favicon.ico +0 -0
  180. package/.next/standalone/docs/for-agents.mdx +0 -38
  181. package/.next/standalone/docs/fr/architecture.mdx +0 -332
  182. package/.next/standalone/docs/fr/built-in-policies.mdx +0 -574
  183. package/.next/standalone/docs/fr/cli/dashboard.mdx +0 -28
  184. package/.next/standalone/docs/fr/cli/environment-variables.mdx +0 -34
  185. package/.next/standalone/docs/fr/cli/hook.mdx +0 -30
  186. package/.next/standalone/docs/fr/cli/install-policies.mdx +0 -47
  187. package/.next/standalone/docs/fr/cli/list-policies.mdx +0 -31
  188. package/.next/standalone/docs/fr/cli/remove-policies.mdx +0 -43
  189. package/.next/standalone/docs/fr/cli/version.mdx +0 -12
  190. package/.next/standalone/docs/fr/configuration.mdx +0 -222
  191. package/.next/standalone/docs/fr/custom-policies.mdx +0 -353
  192. package/.next/standalone/docs/fr/dashboard.mdx +0 -142
  193. package/.next/standalone/docs/fr/examples.mdx +0 -307
  194. package/.next/standalone/docs/fr/for-agents.mdx +0 -38
  195. package/.next/standalone/docs/fr/getting-started.mdx +0 -186
  196. package/.next/standalone/docs/fr/introduction.mdx +0 -57
  197. package/.next/standalone/docs/fr/package-aliases.mdx +0 -82
  198. package/.next/standalone/docs/fr/testing.mdx +0 -260
  199. package/.next/standalone/docs/getting-started.mdx +0 -186
  200. package/.next/standalone/docs/he/architecture.mdx +0 -333
  201. package/.next/standalone/docs/he/built-in-policies.mdx +0 -574
  202. package/.next/standalone/docs/he/cli/dashboard.mdx +0 -28
  203. package/.next/standalone/docs/he/cli/environment-variables.mdx +0 -34
  204. package/.next/standalone/docs/he/cli/hook.mdx +0 -30
  205. package/.next/standalone/docs/he/cli/install-policies.mdx +0 -47
  206. package/.next/standalone/docs/he/cli/list-policies.mdx +0 -32
  207. package/.next/standalone/docs/he/cli/remove-policies.mdx +0 -43
  208. package/.next/standalone/docs/he/cli/version.mdx +0 -12
  209. package/.next/standalone/docs/he/configuration.mdx +0 -223
  210. package/.next/standalone/docs/he/custom-policies.mdx +0 -353
  211. package/.next/standalone/docs/he/dashboard.mdx +0 -142
  212. package/.next/standalone/docs/he/examples.mdx +0 -307
  213. package/.next/standalone/docs/he/for-agents.mdx +0 -38
  214. package/.next/standalone/docs/he/getting-started.mdx +0 -186
  215. package/.next/standalone/docs/he/introduction.mdx +0 -57
  216. package/.next/standalone/docs/he/package-aliases.mdx +0 -82
  217. package/.next/standalone/docs/he/testing.mdx +0 -260
  218. package/.next/standalone/docs/hi/architecture.mdx +0 -334
  219. package/.next/standalone/docs/hi/built-in-policies.mdx +0 -576
  220. package/.next/standalone/docs/hi/cli/dashboard.mdx +0 -28
  221. package/.next/standalone/docs/hi/cli/environment-variables.mdx +0 -34
  222. package/.next/standalone/docs/hi/cli/hook.mdx +0 -30
  223. package/.next/standalone/docs/hi/cli/install-policies.mdx +0 -47
  224. package/.next/standalone/docs/hi/cli/list-policies.mdx +0 -31
  225. package/.next/standalone/docs/hi/cli/remove-policies.mdx +0 -43
  226. package/.next/standalone/docs/hi/cli/version.mdx +0 -12
  227. package/.next/standalone/docs/hi/configuration.mdx +0 -222
  228. package/.next/standalone/docs/hi/custom-policies.mdx +0 -354
  229. package/.next/standalone/docs/hi/dashboard.mdx +0 -142
  230. package/.next/standalone/docs/hi/examples.mdx +0 -309
  231. package/.next/standalone/docs/hi/for-agents.mdx +0 -38
  232. package/.next/standalone/docs/hi/getting-started.mdx +0 -187
  233. package/.next/standalone/docs/hi/introduction.mdx +0 -57
  234. package/.next/standalone/docs/hi/package-aliases.mdx +0 -82
  235. package/.next/standalone/docs/hi/testing.mdx +0 -260
  236. package/.next/standalone/docs/i18n/README.ar.md +0 -312
  237. package/.next/standalone/docs/i18n/README.de.md +0 -307
  238. package/.next/standalone/docs/i18n/README.es.md +0 -307
  239. package/.next/standalone/docs/i18n/README.fr.md +0 -307
  240. package/.next/standalone/docs/i18n/README.he.md +0 -312
  241. package/.next/standalone/docs/i18n/README.hi.md +0 -307
  242. package/.next/standalone/docs/i18n/README.it.md +0 -307
  243. package/.next/standalone/docs/i18n/README.ja.md +0 -307
  244. package/.next/standalone/docs/i18n/README.ko.md +0 -307
  245. package/.next/standalone/docs/i18n/README.pt-br.md +0 -307
  246. package/.next/standalone/docs/i18n/README.ru.md +0 -308
  247. package/.next/standalone/docs/i18n/README.tr.md +0 -307
  248. package/.next/standalone/docs/i18n/README.vi.md +0 -307
  249. package/.next/standalone/docs/i18n/README.zh.md +0 -307
  250. package/.next/standalone/docs/introduction.mdx +0 -57
  251. package/.next/standalone/docs/it/architecture.mdx +0 -334
  252. package/.next/standalone/docs/it/built-in-policies.mdx +0 -574
  253. package/.next/standalone/docs/it/cli/dashboard.mdx +0 -28
  254. package/.next/standalone/docs/it/cli/environment-variables.mdx +0 -34
  255. package/.next/standalone/docs/it/cli/hook.mdx +0 -30
  256. package/.next/standalone/docs/it/cli/install-policies.mdx +0 -47
  257. package/.next/standalone/docs/it/cli/list-policies.mdx +0 -31
  258. package/.next/standalone/docs/it/cli/remove-policies.mdx +0 -43
  259. package/.next/standalone/docs/it/cli/version.mdx +0 -12
  260. package/.next/standalone/docs/it/configuration.mdx +0 -222
  261. package/.next/standalone/docs/it/custom-policies.mdx +0 -353
  262. package/.next/standalone/docs/it/dashboard.mdx +0 -142
  263. package/.next/standalone/docs/it/examples.mdx +0 -307
  264. package/.next/standalone/docs/it/for-agents.mdx +0 -38
  265. package/.next/standalone/docs/it/getting-started.mdx +0 -186
  266. package/.next/standalone/docs/it/introduction.mdx +0 -57
  267. package/.next/standalone/docs/it/package-aliases.mdx +0 -82
  268. package/.next/standalone/docs/it/testing.mdx +0 -260
  269. package/.next/standalone/docs/ja/architecture.mdx +0 -332
  270. package/.next/standalone/docs/ja/built-in-policies.mdx +0 -572
  271. package/.next/standalone/docs/ja/cli/dashboard.mdx +0 -28
  272. package/.next/standalone/docs/ja/cli/environment-variables.mdx +0 -34
  273. package/.next/standalone/docs/ja/cli/hook.mdx +0 -30
  274. package/.next/standalone/docs/ja/cli/install-policies.mdx +0 -47
  275. package/.next/standalone/docs/ja/cli/list-policies.mdx +0 -31
  276. package/.next/standalone/docs/ja/cli/remove-policies.mdx +0 -43
  277. package/.next/standalone/docs/ja/cli/version.mdx +0 -12
  278. package/.next/standalone/docs/ja/configuration.mdx +0 -222
  279. package/.next/standalone/docs/ja/custom-policies.mdx +0 -353
  280. package/.next/standalone/docs/ja/dashboard.mdx +0 -142
  281. package/.next/standalone/docs/ja/examples.mdx +0 -307
  282. package/.next/standalone/docs/ja/for-agents.mdx +0 -38
  283. package/.next/standalone/docs/ja/getting-started.mdx +0 -186
  284. package/.next/standalone/docs/ja/introduction.mdx +0 -57
  285. package/.next/standalone/docs/ja/package-aliases.mdx +0 -82
  286. package/.next/standalone/docs/ja/testing.mdx +0 -260
  287. package/.next/standalone/docs/ko/architecture.mdx +0 -332
  288. package/.next/standalone/docs/ko/built-in-policies.mdx +0 -572
  289. package/.next/standalone/docs/ko/cli/dashboard.mdx +0 -28
  290. package/.next/standalone/docs/ko/cli/environment-variables.mdx +0 -34
  291. package/.next/standalone/docs/ko/cli/hook.mdx +0 -30
  292. package/.next/standalone/docs/ko/cli/install-policies.mdx +0 -47
  293. package/.next/standalone/docs/ko/cli/list-policies.mdx +0 -31
  294. package/.next/standalone/docs/ko/cli/remove-policies.mdx +0 -43
  295. package/.next/standalone/docs/ko/cli/version.mdx +0 -12
  296. package/.next/standalone/docs/ko/configuration.mdx +0 -222
  297. package/.next/standalone/docs/ko/custom-policies.mdx +0 -353
  298. package/.next/standalone/docs/ko/dashboard.mdx +0 -142
  299. package/.next/standalone/docs/ko/examples.mdx +0 -307
  300. package/.next/standalone/docs/ko/for-agents.mdx +0 -38
  301. package/.next/standalone/docs/ko/getting-started.mdx +0 -186
  302. package/.next/standalone/docs/ko/introduction.mdx +0 -57
  303. package/.next/standalone/docs/ko/package-aliases.mdx +0 -82
  304. package/.next/standalone/docs/ko/testing.mdx +0 -260
  305. package/.next/standalone/docs/logo/dark.svg +0 -21
  306. package/.next/standalone/docs/logo/exosphere-dark.png +0 -0
  307. package/.next/standalone/docs/logo/exosphere-light.png +0 -0
  308. package/.next/standalone/docs/logo/light.svg +0 -21
  309. package/.next/standalone/docs/package-aliases.mdx +0 -82
  310. package/.next/standalone/docs/pt-br/architecture.mdx +0 -332
  311. package/.next/standalone/docs/pt-br/built-in-policies.mdx +0 -574
  312. package/.next/standalone/docs/pt-br/cli/dashboard.mdx +0 -28
  313. package/.next/standalone/docs/pt-br/cli/environment-variables.mdx +0 -34
  314. package/.next/standalone/docs/pt-br/cli/hook.mdx +0 -30
  315. package/.next/standalone/docs/pt-br/cli/install-policies.mdx +0 -47
  316. package/.next/standalone/docs/pt-br/cli/list-policies.mdx +0 -31
  317. package/.next/standalone/docs/pt-br/cli/remove-policies.mdx +0 -43
  318. package/.next/standalone/docs/pt-br/cli/version.mdx +0 -12
  319. package/.next/standalone/docs/pt-br/configuration.mdx +0 -222
  320. package/.next/standalone/docs/pt-br/custom-policies.mdx +0 -353
  321. package/.next/standalone/docs/pt-br/dashboard.mdx +0 -142
  322. package/.next/standalone/docs/pt-br/examples.mdx +0 -307
  323. package/.next/standalone/docs/pt-br/for-agents.mdx +0 -38
  324. package/.next/standalone/docs/pt-br/getting-started.mdx +0 -186
  325. package/.next/standalone/docs/pt-br/introduction.mdx +0 -57
  326. package/.next/standalone/docs/pt-br/package-aliases.mdx +0 -82
  327. package/.next/standalone/docs/pt-br/testing.mdx +0 -260
  328. package/.next/standalone/docs/ru/architecture.mdx +0 -333
  329. package/.next/standalone/docs/ru/built-in-policies.mdx +0 -574
  330. package/.next/standalone/docs/ru/cli/dashboard.mdx +0 -28
  331. package/.next/standalone/docs/ru/cli/environment-variables.mdx +0 -34
  332. package/.next/standalone/docs/ru/cli/hook.mdx +0 -30
  333. package/.next/standalone/docs/ru/cli/install-policies.mdx +0 -48
  334. package/.next/standalone/docs/ru/cli/list-policies.mdx +0 -32
  335. package/.next/standalone/docs/ru/cli/remove-policies.mdx +0 -43
  336. package/.next/standalone/docs/ru/cli/version.mdx +0 -12
  337. package/.next/standalone/docs/ru/configuration.mdx +0 -222
  338. package/.next/standalone/docs/ru/custom-policies.mdx +0 -354
  339. package/.next/standalone/docs/ru/dashboard.mdx +0 -142
  340. package/.next/standalone/docs/ru/examples.mdx +0 -309
  341. package/.next/standalone/docs/ru/for-agents.mdx +0 -38
  342. package/.next/standalone/docs/ru/getting-started.mdx +0 -186
  343. package/.next/standalone/docs/ru/introduction.mdx +0 -57
  344. package/.next/standalone/docs/ru/package-aliases.mdx +0 -82
  345. package/.next/standalone/docs/ru/testing.mdx +0 -260
  346. package/.next/standalone/docs/testing.mdx +0 -260
  347. package/.next/standalone/docs/tr/architecture.mdx +0 -333
  348. package/.next/standalone/docs/tr/built-in-policies.mdx +0 -574
  349. package/.next/standalone/docs/tr/cli/dashboard.mdx +0 -28
  350. package/.next/standalone/docs/tr/cli/environment-variables.mdx +0 -34
  351. package/.next/standalone/docs/tr/cli/hook.mdx +0 -30
  352. package/.next/standalone/docs/tr/cli/install-policies.mdx +0 -47
  353. package/.next/standalone/docs/tr/cli/list-policies.mdx +0 -31
  354. package/.next/standalone/docs/tr/cli/remove-policies.mdx +0 -44
  355. package/.next/standalone/docs/tr/cli/version.mdx +0 -12
  356. package/.next/standalone/docs/tr/configuration.mdx +0 -222
  357. package/.next/standalone/docs/tr/custom-policies.mdx +0 -353
  358. package/.next/standalone/docs/tr/dashboard.mdx +0 -142
  359. package/.next/standalone/docs/tr/examples.mdx +0 -308
  360. package/.next/standalone/docs/tr/for-agents.mdx +0 -38
  361. package/.next/standalone/docs/tr/getting-started.mdx +0 -186
  362. package/.next/standalone/docs/tr/introduction.mdx +0 -57
  363. package/.next/standalone/docs/tr/package-aliases.mdx +0 -82
  364. package/.next/standalone/docs/tr/testing.mdx +0 -260
  365. package/.next/standalone/docs/vi/architecture.mdx +0 -334
  366. package/.next/standalone/docs/vi/built-in-policies.mdx +0 -575
  367. package/.next/standalone/docs/vi/cli/dashboard.mdx +0 -28
  368. package/.next/standalone/docs/vi/cli/environment-variables.mdx +0 -34
  369. package/.next/standalone/docs/vi/cli/hook.mdx +0 -30
  370. package/.next/standalone/docs/vi/cli/install-policies.mdx +0 -47
  371. package/.next/standalone/docs/vi/cli/list-policies.mdx +0 -31
  372. package/.next/standalone/docs/vi/cli/remove-policies.mdx +0 -43
  373. package/.next/standalone/docs/vi/cli/version.mdx +0 -13
  374. package/.next/standalone/docs/vi/configuration.mdx +0 -222
  375. package/.next/standalone/docs/vi/custom-policies.mdx +0 -353
  376. package/.next/standalone/docs/vi/dashboard.mdx +0 -142
  377. package/.next/standalone/docs/vi/examples.mdx +0 -308
  378. package/.next/standalone/docs/vi/for-agents.mdx +0 -38
  379. package/.next/standalone/docs/vi/getting-started.mdx +0 -186
  380. package/.next/standalone/docs/vi/introduction.mdx +0 -57
  381. package/.next/standalone/docs/vi/package-aliases.mdx +0 -82
  382. package/.next/standalone/docs/vi/testing.mdx +0 -260
  383. package/.next/standalone/docs/zh/architecture.mdx +0 -332
  384. package/.next/standalone/docs/zh/built-in-policies.mdx +0 -572
  385. package/.next/standalone/docs/zh/cli/dashboard.mdx +0 -28
  386. package/.next/standalone/docs/zh/cli/environment-variables.mdx +0 -34
  387. package/.next/standalone/docs/zh/cli/hook.mdx +0 -30
  388. package/.next/standalone/docs/zh/cli/install-policies.mdx +0 -47
  389. package/.next/standalone/docs/zh/cli/list-policies.mdx +0 -31
  390. package/.next/standalone/docs/zh/cli/remove-policies.mdx +0 -43
  391. package/.next/standalone/docs/zh/cli/version.mdx +0 -12
  392. package/.next/standalone/docs/zh/configuration.mdx +0 -222
  393. package/.next/standalone/docs/zh/custom-policies.mdx +0 -353
  394. package/.next/standalone/docs/zh/dashboard.mdx +0 -142
  395. package/.next/standalone/docs/zh/examples.mdx +0 -307
  396. package/.next/standalone/docs/zh/for-agents.mdx +0 -38
  397. package/.next/standalone/docs/zh/getting-started.mdx +0 -186
  398. package/.next/standalone/docs/zh/introduction.mdx +0 -57
  399. package/.next/standalone/docs/zh/package-aliases.mdx +0 -82
  400. package/.next/standalone/docs/zh/testing.mdx +0 -260
  401. package/.next/standalone/eslint.config.mjs +0 -15
  402. package/.next/standalone/examples/convention-policies/security-policies.mjs +0 -40
  403. package/.next/standalone/examples/convention-policies/workflow-policies.mjs +0 -41
  404. package/.next/standalone/examples/policies-advanced/index.js +0 -103
  405. package/.next/standalone/examples/policies-advanced/utils.js +0 -35
  406. package/.next/standalone/examples/policies-basic.js +0 -77
  407. package/.next/standalone/examples/policies-notification.js +0 -104
  408. package/.next/standalone/node_modules/@img/colour/color.cjs +0 -1594
  409. package/.next/standalone/node_modules/@img/colour/index.cjs +0 -1
  410. package/.next/standalone/node_modules/@img/colour/package.json +0 -45
  411. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/README.md +0 -46
  412. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  413. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +0 -1
  414. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  415. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +0 -42
  416. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/versions.json +0 -30
  417. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +0 -46
  418. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  419. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +0 -1
  420. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  421. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +0 -42
  422. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +0 -30
  423. package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  424. package/.next/standalone/node_modules/@img/sharp-linux-x64/package.json +0 -46
  425. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  426. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +0 -46
  427. package/.next/standalone/node_modules/detect-libc/lib/detect-libc.js +0 -313
  428. package/.next/standalone/node_modules/detect-libc/lib/elf.js +0 -39
  429. package/.next/standalone/node_modules/detect-libc/lib/filesystem.js +0 -51
  430. package/.next/standalone/node_modules/detect-libc/lib/process.js +0 -24
  431. package/.next/standalone/node_modules/detect-libc/package.json +0 -44
  432. package/.next/standalone/node_modules/sharp/lib/channel.js +0 -177
  433. package/.next/standalone/node_modules/sharp/lib/colour.js +0 -195
  434. package/.next/standalone/node_modules/sharp/lib/composite.js +0 -212
  435. package/.next/standalone/node_modules/sharp/lib/constructor.js +0 -499
  436. package/.next/standalone/node_modules/sharp/lib/index.js +0 -16
  437. package/.next/standalone/node_modules/sharp/lib/input.js +0 -809
  438. package/.next/standalone/node_modules/sharp/lib/is.js +0 -143
  439. package/.next/standalone/node_modules/sharp/lib/libvips.js +0 -207
  440. package/.next/standalone/node_modules/sharp/lib/operation.js +0 -1016
  441. package/.next/standalone/node_modules/sharp/lib/output.js +0 -1666
  442. package/.next/standalone/node_modules/sharp/lib/resize.js +0 -595
  443. package/.next/standalone/node_modules/sharp/lib/sharp.js +0 -121
  444. package/.next/standalone/node_modules/sharp/lib/utility.js +0 -291
  445. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/comparator.js +0 -143
  446. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/range.js +0 -557
  447. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/semver.js +0 -333
  448. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/cmp.js +0 -54
  449. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/coerce.js +0 -62
  450. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/compare.js +0 -7
  451. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/eq.js +0 -5
  452. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gt.js +0 -5
  453. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gte.js +0 -5
  454. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lt.js +0 -5
  455. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lte.js +0 -5
  456. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/neq.js +0 -5
  457. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/parse.js +0 -18
  458. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/satisfies.js +0 -12
  459. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/constants.js +0 -37
  460. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/debug.js +0 -11
  461. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/identifiers.js +0 -29
  462. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/lrucache.js +0 -42
  463. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/parse-options.js +0 -17
  464. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/re.js +0 -223
  465. package/.next/standalone/node_modules/sharp/node_modules/semver/package.json +0 -78
  466. package/.next/standalone/node_modules/sharp/package.json +0 -202
  467. package/.next/standalone/scripts/alias-proxy.js +0 -18
  468. package/.next/standalone/scripts/dev.ts +0 -3
  469. package/.next/standalone/scripts/install-telemetry.mjs +0 -108
  470. package/.next/standalone/scripts/launch.ts +0 -83
  471. package/.next/standalone/scripts/parse-script-args.ts +0 -87
  472. package/.next/standalone/scripts/postinstall.mjs +0 -121
  473. package/.next/standalone/scripts/preuninstall.mjs +0 -131
  474. package/.next/standalone/scripts/publish-aliases.mjs +0 -87
  475. package/.next/standalone/scripts/start.ts +0 -3
  476. package/.next/standalone/scripts/sync-hook-events-prompt.md +0 -60
  477. package/.next/standalone/scripts/translate-docs/cache.ts +0 -62
  478. package/.next/standalone/scripts/translate-docs/cli.ts +0 -357
  479. package/.next/standalone/scripts/translate-docs/config.ts +0 -248
  480. package/.next/standalone/scripts/translate-docs/mdx-translator.ts +0 -153
  481. package/.next/standalone/scripts/translate-docs/mintlify-nav.ts +0 -107
  482. package/.next/standalone/scripts/translate-docs/readme-translator.ts +0 -154
  483. package/.next/standalone/scripts/translate-docs/translator.ts +0 -68
  484. package/.next/standalone/scripts/translate-docs/types.ts +0 -43
  485. package/.next/standalone/src/cli-error.ts +0 -18
  486. package/.next/standalone/src/hooks/builtin-policies.ts +0 -1613
  487. package/.next/standalone/src/hooks/custom-hooks-loader.ts +0 -205
  488. package/.next/standalone/src/hooks/custom-hooks-registry.ts +0 -30
  489. package/.next/standalone/src/hooks/handler.ts +0 -202
  490. package/.next/standalone/src/hooks/hook-activity-store.ts +0 -349
  491. package/.next/standalone/src/hooks/hook-logger.ts +0 -133
  492. package/.next/standalone/src/hooks/hook-telemetry.ts +0 -43
  493. package/.next/standalone/src/hooks/hooks-config.ts +0 -166
  494. package/.next/standalone/src/hooks/install-prompt.ts +0 -357
  495. package/.next/standalone/src/hooks/llm-client.ts +0 -90
  496. package/.next/standalone/src/hooks/loader-utils.ts +0 -178
  497. package/.next/standalone/src/hooks/manager.ts +0 -692
  498. package/.next/standalone/src/hooks/policy-evaluator.ts +0 -224
  499. package/.next/standalone/src/hooks/policy-helpers.ts +0 -16
  500. package/.next/standalone/src/hooks/policy-registry.ts +0 -90
  501. package/.next/standalone/src/hooks/policy-types.ts +0 -77
  502. package/.next/standalone/src/hooks/types.ts +0 -63
  503. package/.next/standalone/src/index.ts +0 -19
  504. package/.next/standalone/src/posthog-key.ts +0 -5
  505. package/.next/standalone/tailwind.config.ts +0 -11
  506. package/.next/standalone/tsconfig.json +0 -42
  507. package/.next/standalone/vitest.config.e2e.mts +0 -24
  508. package/.next/standalone/vitest.config.mts +0 -23
  509. /package/.next/standalone/.next/static/{A9pNTZdoYJTVyPAYwQMx5 → wOkJXoch1UmRAmyIuKZWc}/_buildManifest.js +0 -0
  510. /package/.next/standalone/.next/static/{A9pNTZdoYJTVyPAYwQMx5 → wOkJXoch1UmRAmyIuKZWc}/_clientMiddlewareManifest.js +0 -0
  511. /package/.next/standalone/.next/static/{A9pNTZdoYJTVyPAYwQMx5 → wOkJXoch1UmRAmyIuKZWc}/_ssgManifest.js +0 -0
@@ -1,261 +0,0 @@
1
- ---
2
- ---
3
- title: الاختبارات
4
- description: "اختبارات الوحدات واختبارات الشامل (E2E) ومساعدات الاختبارات"
5
- icon: flask-vial
6
- ---
7
-
8
- يتضمن failproofai مجموعتي اختبارات: **اختبارات الوحدات** (سريعة، محاكاة) و**اختبارات الشامل** (استدعاءات عملية فرعية حقيقية).
9
-
10
- ---
11
-
12
- ## تشغيل الاختبارات
13
-
14
- ```bash
15
- # تشغيل جميع اختبارات الوحدات مرة واحدة
16
- bun run test:run
17
-
18
- # تشغيل اختبارات الوحدات في وضع المراقبة
19
- bun run test
20
-
21
- # تشغيل اختبارات الشامل (يتطلب إعدادًا - انظر أدناه)
22
- bun run test:e2e
23
-
24
- # فحص النوع بدون بناء
25
- bunx tsc --noEmit
26
-
27
- # فحص الكود
28
- bun run lint
29
- ```
30
-
31
- ---
32
-
33
- ## اختبارات الوحدات
34
-
35
- تقع اختبارات الوحدات في `__tests__/` وتستخدم [Vitest](https://vitest.dev) مع `happy-dom`.
36
-
37
- ```text
38
- __tests__/
39
- hooks/
40
- builtin-policies.test.ts # منطق السياسة لكل سياسة مدمجة
41
- hooks-config.test.ts # تحميل الإعدادات ودمج النطاق
42
- policy-evaluator.test.ts # حقن المعاملات وترتيب التقييم
43
- custom-hooks-registry.test.ts # سجل globalThis للإضافة والحصول والمسح
44
- custom-hooks-loader.test.ts # محمل ESM والاستيرادات المتعدية ومعالجة الأخطاء
45
- manager.test.ts # عمليات التثبيت والإزالة والقائمة
46
- components/
47
- sessions-list.test.tsx # مكون قائمة الجلسات
48
- project-list.test.tsx # مكون قائمة المشاريع
49
- ...
50
- lib/
51
- logger.test.ts
52
- paths.test.ts
53
- date-filters.test.ts
54
- telemetry.test.ts
55
- ...
56
- actions/
57
- get-hooks-config.test.ts
58
- get-hook-activity.test.ts
59
- ...
60
- contexts/
61
- ThemeContext.test.tsx
62
- AutoRefreshContext.test.tsx
63
- ```
64
-
65
- ### كتابة اختبار وحدة للسياسة
66
-
67
- ```typescript
68
- import { describe, it, expect, beforeEach } from "vitest";
69
- import { getBuiltinPolicies } from "../../src/hooks/builtin-policies";
70
- import { allow, deny } from "../../src/hooks/policy-types";
71
-
72
- describe("block-sudo", () => {
73
- const policy = getBuiltinPolicies().find((p) => p.name === "block-sudo")!;
74
-
75
- it("denies sudo commands", () => {
76
- const ctx = {
77
- eventType: "PreToolUse" as const,
78
- payload: {},
79
- toolName: "Bash",
80
- toolInput: { command: "sudo apt install nodejs" },
81
- params: { allowPatterns: [] },
82
- };
83
- expect(policy.fn(ctx)).toEqual(deny("sudo command blocked by failproofai"));
84
- });
85
-
86
- it("allows non-sudo commands", () => {
87
- const ctx = {
88
- eventType: "PreToolUse" as const,
89
- payload: {},
90
- toolName: "Bash",
91
- toolInput: { command: "ls -la" },
92
- params: { allowPatterns: [] },
93
- };
94
- expect(policy.fn(ctx)).toEqual(allow());
95
- });
96
-
97
- it("allows patterns in allowPatterns", () => {
98
- const ctx = {
99
- eventType: "PreToolUse" as const,
100
- payload: {},
101
- toolName: "Bash",
102
- toolInput: { command: "sudo systemctl status nginx" },
103
- params: { allowPatterns: ["sudo systemctl status"] },
104
- };
105
- expect(policy.fn(ctx)).toEqual(allow());
106
- });
107
- });
108
- ```
109
-
110
- ---
111
-
112
- ## اختبارات الشامل (E2E)
113
-
114
- تستدعي اختبارات الشامل ملف failproofai الثنائي الفعلي كعملية فرعية، وترسل حمولة JSON إلى stdin، وتتحقق من مخرجات stdout وكود الخروج. يختبر هذا مسار التكامل الكامل الذي يستخدمه Claude Code.
115
-
116
- ### الإعداد
117
-
118
- تشغل اختبارات الشامل الملف الثنائي مباشرة من مصدر المستودع. قبل التشغيل الأول، قم بناء حزمة CJS التي تستخدمها ملفات hook المخصصة عند الاستيراد من `'failproofai'`:
119
-
120
- ```bash
121
- bun build src/index.ts --outdir dist --target node --format cjs
122
- ```
123
-
124
- ثم قم بتشغيل الاختبارات:
125
-
126
- ```bash
127
- bun run test:e2e
128
- ```
129
-
130
- أعد بناء `dist/` في أي وقت تغير فيه API hook العام (`src/hooks/custom-hooks-registry.ts` أو `src/hooks/policy-helpers.ts` أو `src/hooks/policy-types.ts`).
131
-
132
- ### هيكل اختبار الشامل
133
-
134
- ```text
135
- __tests__/e2e/
136
- helpers/
137
- hook-runner.ts # تشغيل الملف الثنائي وإرسال حمولة JSON والتقاط كود الخروج والمخرجات والأخطاء
138
- fixture-env.ts # دليل مؤقت معزول لكل اختبار مع ملفات الإعدادات
139
- payloads.ts # مصانع الحمولة الدقيقة لـ Claude لكل نوع حدث
140
- hooks/
141
- builtin-policies.e2e.test.ts # كل سياسة مدمجة مع عملية فرعية حقيقية
142
- custom-hooks.e2e.test.ts # تحميل وتقييم hook المخصص
143
- config-scopes.e2e.test.ts # دمج الإعدادات عبر المشروع/المحلي/العام
144
- policy-params.e2e.test.ts # حقن المعاملات لكل سياسة معاملات
145
- ```
146
-
147
- ### استخدام مساعدات الشامل
148
-
149
- **`FixtureEnv`** - بيئة معزولة لكل اختبار:
150
-
151
- ```typescript
152
- import { createFixtureEnv } from "../helpers/fixture-env";
153
-
154
- const env = createFixtureEnv();
155
- // env.cwd - دليل مؤقت؛ مرره كـ payload.cwd للتقاط .failproofai/policies-config.json
156
- // env.home - دليل منزل معزول؛ لا تسرب ~/ failproofai حقيقي
157
-
158
- env.writeConfig({
159
- enabledPolicies: ["block-sudo"],
160
- policyParams: {
161
- "block-sudo": { allowPatterns: ["sudo systemctl status"] },
162
- },
163
- });
164
- ```
165
-
166
- `createFixtureEnv()` يسجل تنظيف `afterEach` تلقائيًا.
167
-
168
- **`runHook`** - استدعاء الملف الثنائي:
169
-
170
- ```typescript
171
- import { runHook } from "../helpers/hook-runner";
172
- import { Payloads } from "../helpers/payloads";
173
-
174
- const result = await runHook(
175
- "PreToolUse",
176
- Payloads.preToolUse.bash("sudo apt install nodejs", env.cwd),
177
- { homeDir: env.home }
178
- );
179
-
180
- expect(result.exitCode).toBe(0);
181
- expect(result.parsed?.hookSpecificOutput?.permissionDecision).toBe("deny");
182
- ```
183
-
184
- **`Payloads`** - مصانع حمولة جاهزة:
185
-
186
- ```typescript
187
- Payloads.preToolUse.bash(command, cwd)
188
- Payloads.preToolUse.write(filePath, content, cwd)
189
- Payloads.preToolUse.read(filePath, cwd)
190
- Payloads.postToolUse.bash(command, output, cwd)
191
- Payloads.postToolUse.read(filePath, content, cwd)
192
- Payloads.notification(message, cwd)
193
- Payloads.stop(cwd)
194
- ```
195
-
196
- ### كتابة اختبار شامل
197
-
198
- ```typescript
199
- import { describe, it, expect } from "vitest";
200
- import { createFixtureEnv } from "../helpers/fixture-env";
201
- import { runHook } from "../helpers/hook-runner";
202
- import { Payloads } from "../helpers/payloads";
203
-
204
- describe("block-rm-rf (E2E)", () => {
205
- it("denies rm -rf", async () => {
206
- const env = createFixtureEnv();
207
- env.writeConfig({ enabledPolicies: ["block-rm-rf"] });
208
-
209
- const result = await runHook(
210
- "PreToolUse",
211
- Payloads.preToolUse.bash("rm -rf /", env.cwd),
212
- { homeDir: env.home }
213
- );
214
-
215
- expect(result.exitCode).toBe(0);
216
- expect(result.parsed?.hookSpecificOutput?.permissionDecision).toBe("deny");
217
- });
218
-
219
- it("allows non-recursive rm", async () => {
220
- const env = createFixtureEnv();
221
- env.writeConfig({ enabledPolicies: ["block-rm-rf"] });
222
-
223
- const result = await runHook(
224
- "PreToolUse",
225
- Payloads.preToolUse.bash("rm /tmp/file.txt", env.cwd),
226
- { homeDir: env.home }
227
- );
228
-
229
- expect(result.exitCode).toBe(0);
230
- expect(result.stdout).toBe(""); // allow → empty stdout
231
- });
232
- });
233
- ```
234
-
235
- ### أشكال استجابة الشامل
236
-
237
- | القرار | كود الخروج | stdout |
238
- |----------|-----------|--------|
239
- | `PreToolUse` deny | `0` | `{"hookSpecificOutput":{"permissionDecision":"deny","permissionDecisionReason":"..."}}` |
240
- | `PostToolUse` deny | `0` | `{"hookSpecificOutput":{"additionalContext":"Blocked ... because: ..."}}` |
241
- | Instruct (غير Stop) | `0` | `{"hookSpecificOutput":{"additionalContext":"Instruction from failproofai: ..."}}` |
242
- | تعليمات Stop | `2` | stdout فارغة؛ السبب في stderr |
243
- | السماح | `0` | سلسلة فارغة |
244
-
245
- ### إعدادات Vitest
246
-
247
- تستخدم اختبارات الشامل `vitest.config.e2e.mts` مع:
248
-
249
- - `environment: "node"` - لا توجد حاجة لمتغيرات المتصفح العام
250
- - `pool: "forks"` - عزل العملية الحقيقي (اختبارات تشغيل العمليات الفرعية)
251
- - `testTimeout: 20_000` - 20 ثانية لكل اختبار (بدء الملف الثنائي وتقييم hook)
252
-
253
- مجموعة `forks` مهمة: تشارك العمال المستندة إلى الخيط `globalThis`، وهو ما قد يتداخل مع اختبارات توليد العمليات الفرعية. تتجنب الفروع المستندة إلى العملية هذا.
254
-
255
- ---
256
-
257
- ## CI
258
-
259
- يجب أن تنجح عملية CI الكاملة (`bun run lint && bunx tsc --noEmit && bun run test:run && bun run build`) قبل الدمج. تعمل مجموعة الشامل كوظيفة CI منفصلة بالتوازي.
260
-
261
- انظر [المساهمة](../CONTRIBUTING.md) للحصول على قائمة التحقق الكاملة قبل الدمج.
@@ -1,332 +0,0 @@
1
- ---
2
- title: Architecture
3
- description: "How the hook handler, config loading, and policy evaluation work internally"
4
- icon: sitemap
5
- ---
6
-
7
- This document explains how failproofai works internally: how the hook system intercepts agent tool calls, how configuration is loaded and merged, how policies are evaluated, and how the dashboard monitors agent activity.
8
-
9
- ---
10
-
11
- ## Overview
12
-
13
- failproofai has two independent subsystems:
14
-
15
- 1. **Hook handler** - A fast CLI subprocess that Claude Code invokes on every agent tool call. Evaluates policies and returns a decision.
16
- 2. **Agent Monitor (Dashboard)** - A Next.js web application for monitoring agent sessions and managing policies.
17
-
18
- Both subsystems share configuration files in `~/.failproofai/` and the project's `.failproofai/` directory, but they run as separate processes and communicate only through the filesystem.
19
-
20
- ---
21
-
22
- ## Hook handler
23
-
24
- ### Integration with Claude Code
25
-
26
- When you run `failproofai policies --install`, it writes entries like this into `~/.claude/settings.json`:
27
-
28
- ```json
29
- {
30
- "hooks": {
31
- "PreToolUse": [
32
- {
33
- "matcher": "",
34
- "hooks": [
35
- {
36
- "type": "command",
37
- "command": "failproofai --hook PreToolUse"
38
- }
39
- ]
40
- }
41
- ],
42
- "PostToolUse": [ ... ]
43
- }
44
- }
45
- ```
46
-
47
- Claude Code then invokes `failproofai --hook PreToolUse` as a subprocess before each tool call, passing a JSON payload on stdin.
48
-
49
- ### Payload format
50
-
51
- ```json
52
- {
53
- "session_id": "abc123",
54
- "transcript_path": "/home/user/.claude/projects/myproject/sessions/abc123.jsonl",
55
- "cwd": "/home/user/myproject",
56
- "permission_mode": "default",
57
- "hook_event_name": "PreToolUse",
58
- "tool_name": "Bash",
59
- "tool_input": { "command": "sudo apt install nodejs" }
60
- }
61
- ```
62
-
63
- For `PostToolUse` events, the payload also contains `tool_result` with the tool's output.
64
-
65
- The handler enforces a 1 MB stdin limit. Payloads exceeding this are discarded and all policies implicitly allow.
66
-
67
- ### Response format
68
-
69
- **Deny (PreToolUse):**
70
- ```json
71
- {
72
- "hookSpecificOutput": {
73
- "permissionDecision": "deny",
74
- "permissionDecisionReason": "Blocked by failproofai: sudo command blocked"
75
- }
76
- }
77
- ```
78
-
79
- **Deny (PostToolUse):**
80
- ```json
81
- {
82
- "hookSpecificOutput": {
83
- "additionalContext": "Blocked by failproofai because: API key detected in output"
84
- }
85
- }
86
- ```
87
-
88
- **Instruct (any event except Stop):**
89
- ```json
90
- {
91
- "hookSpecificOutput": {
92
- "additionalContext": "Instruction from failproofai: Verify tests pass before committing."
93
- }
94
- }
95
- ```
96
-
97
- **Stop event instruct:**
98
- - Exit code: `2`
99
- - Reason written to stderr (not stdout)
100
-
101
- **Allow:**
102
- - Exit code: `0`
103
- - Empty stdout
104
-
105
- **Allow with message:**
106
-
107
- `allow(message)` lets a policy send informational context back to Claude even when the operation is permitted. The hook handler writes the following JSON to **stdout** (not a config file — this is the handler's response to Claude Code, just like deny and instruct responses above):
108
-
109
- ```json
110
- // Written to stdout by the hook handler process
111
- {
112
- "hookSpecificOutput": {
113
- "additionalContext": "All CI checks passed on branch 'feat/my-feature'."
114
- }
115
- }
116
- ```
117
- - Exit code: `0` (operation is allowed)
118
- - When multiple policies return `allow` with a message, their messages are joined with newlines into a single `additionalContext` string
119
- - If no policy provides a message, stdout is empty (same as before)
120
-
121
- ### Processing pipeline
122
-
123
- `src/hooks/handler.ts` implements the full pipeline:
124
-
125
- ```text
126
- stdin JSON
127
- → parse payload (max 1 MB)
128
- → extract session metadata (session_id, cwd, tool_name, tool_input, etc.)
129
- → readMergedHooksConfig(cwd) ← merges project + local + global config
130
- → register enabled builtin policies with resolved params
131
- → load custom policies from customPoliciesPath (if set)
132
- → register custom policies into policy registry
133
- → evaluate all policies (builtins first, then custom)
134
- → first deny short-circuits
135
- → instruct decisions accumulate
136
- → allow messages accumulate
137
- → write JSON decision to stdout
138
- → persist event to ~/.failproofai/hook-activity.jsonl
139
- → exit
140
- ```
141
-
142
- The entire process runs in under 100ms for typical payloads with no LLM calls.
143
-
144
- ---
145
-
146
- ## Configuration loading
147
-
148
- `src/hooks/hooks-config.ts` implements three-scope config loading.
149
-
150
- ```text
151
- [1] {cwd}/.failproofai/policies-config.json ← project (highest priority)
152
- [2] {cwd}/.failproofai/policies-config.local.json ← local
153
- [3] ~/.failproofai/policies-config.json ← global (lowest priority)
154
- ```
155
-
156
- Merge logic:
157
- - `enabledPolicies` - deduplicated union across all three files
158
- - `policyParams` - per-policy key, first file that defines it wins entirely
159
- - `customPoliciesPath` - first file that defines it wins
160
- - `llm` - first file that defines it wins
161
-
162
- The web dashboard uses `readHooksConfig()` (global only) for reading and writing, since it is not invoked with a project cwd.
163
-
164
- ---
165
-
166
- ## Policy evaluation
167
-
168
- `src/hooks/policy-evaluator.ts` runs policies in order.
169
-
170
- For each policy:
171
-
172
- 1. Look up the policy's `params` schema (if it has one).
173
- 2. Read `policyParams[policy.name]` from the merged config.
174
- 3. Merge user-provided values over schema defaults to produce `ctx.params`.
175
- 4. Call `policy.fn(ctx)` with the resolved context.
176
- 5. If the result is `deny`, stop immediately and return that decision.
177
- 6. If the result is `instruct`, accumulate the message and continue.
178
- 7. If the result is `allow`, continue to the next policy.
179
-
180
- After all policies run:
181
- - If any `deny` was returned, emit the deny response.
182
- - If any `instruct` returns were collected, emit a single instruct response with all messages joined.
183
- - Otherwise, emit an allow response (empty stdout, exit 0).
184
-
185
- ---
186
-
187
- ## Builtin policies
188
-
189
- `src/hooks/builtin-policies.ts` defines all 26 built-in policies as `BuiltinPolicyDefinition` objects:
190
-
191
- ```typescript
192
- interface BuiltinPolicyDefinition {
193
- name: string;
194
- description: string;
195
- fn: (ctx: PolicyContext) => PolicyResult;
196
- match: {
197
- events: HookEventType[];
198
- tools?: string[];
199
- };
200
- defaultEnabled: boolean;
201
- category: string;
202
- beta?: boolean;
203
- params?: PolicyParamsSchema;
204
- }
205
- ```
206
-
207
- Policies that accept `params` declare a `PolicyParamsSchema` with types and defaults for each parameter. The policy evaluator injects resolved values into `ctx.params` before calling `fn`. Policy functions read `ctx.params` without null-guarding because defaults are always applied first.
208
-
209
- Pattern matching inside policies uses parsed command tokens (argv), not raw string matching. This prevents bypass via shell operator injection (e.g. a pattern for `sudo systemctl status *` cannot be bypassed by appending `; rm -rf /` to the command).
210
-
211
- ---
212
-
213
- ## Custom policies
214
-
215
- `src/hooks/custom-hooks-registry.ts` implements a `globalThis`-backed registry:
216
-
217
- ```typescript
218
- const REGISTRY_KEY = "__failproofai_custom_hooks__";
219
-
220
- export const customPolicies = {
221
- add(hook: CustomHook): void { ... }
222
- };
223
-
224
- export function getCustomHooks(): CustomHook[] { ... }
225
- export function clearCustomHooks(): void { ... } // used in tests
226
- ```
227
-
228
- `src/hooks/custom-hooks-loader.ts` loads the user's policy file:
229
-
230
- 1. Read `customPoliciesPath` from config; skip if absent.
231
- 2. Resolve to absolute path; check file exists.
232
- 3. Rewrite all `from "failproofai"` imports to the actual dist path so `customPolicies` resolves to the same `globalThis` registry.
233
- 4. Recursively rewrite transitive local imports to ensure ESM compatibility.
234
- 5. Write temporary `.mjs` files and `import()` the entry file.
235
- 6. Call `getCustomHooks()` to retrieve registered hooks.
236
- 7. Clean up all temp files in a `finally` block.
237
-
238
- On any error (file not found, syntax error, import failure), the error is logged to `~/.failproofai/hook.log` and the loader returns an empty array. Built-in policies are unaffected.
239
-
240
- Custom policies are evaluated after all built-in policies. A custom policy `deny` still short-circuits further custom policies (but all built-ins have already run by that point).
241
-
242
- ---
243
-
244
- ## Activity logging
245
-
246
- After each hook event, the handler appends a JSONL line to `~/.failproofai/hook-activity.jsonl`:
247
-
248
- ```json
249
- {
250
- "timestamp": "2026-04-06T12:34:56.789Z",
251
- "sessionId": "abc123",
252
- "eventType": "PreToolUse",
253
- "toolName": "Bash",
254
- "policyName": "block-sudo",
255
- "decision": "deny",
256
- "reason": "sudo command blocked by failproofai",
257
- "durationMs": 12
258
- }
259
- ```
260
-
261
- One line per policy that made a non-allow decision. Allow decisions are not logged (to keep the file small).
262
-
263
- ---
264
-
265
- ## Dashboard architecture
266
-
267
- The dashboard is a **Next.js 16** application using the App Router with React Server Components and Server Actions.
268
-
269
- ```text
270
- app/
271
- layout.tsx ← Root layout (theme, telemetry, nav)
272
- projects/page.tsx ← Server component: list all Claude projects
273
- project/[name]/page.tsx ← Server component: list sessions in a project
274
- project/[name]/session/
275
- [sessionId]/page.tsx ← Server component: render session viewer
276
- policies/page.tsx ← Client component: policy management + activity log
277
- actions/
278
- get-hooks-config.ts ← Read config + policy list
279
- update-hooks-config.ts ← Toggle policy on/off
280
- update-policy-params.ts ← Update policy parameters
281
- get-hook-activity.ts ← Paginate/search activity log
282
- install-hooks-web.ts ← Install/remove hooks from the browser
283
- api/
284
- download/[project]/[session]/route.ts ← Export session as ZIP/JSONL
285
- ```
286
-
287
- **Data flow:**
288
-
289
- - Page components call `lib/projects.ts` and `lib/log-entries.ts` to read project/session data directly from the filesystem (no API layer for reads).
290
- - The Policies page uses Server Actions for all mutations (toggle, params update, install/remove).
291
- - The session viewer parses Claude's JSONL transcript format and renders a timeline of messages and tool calls.
292
-
293
- **Key design decisions:**
294
-
295
- - No database - all persistent state is in plain files (`~/.failproofai/`, `~/.claude/projects/`).
296
- - Server Actions for mutations - no REST API needed for CRUD operations.
297
- - React Server Components for read pages - faster initial load, no client bundle for data fetching.
298
- - Client components only where interactivity is needed (policy toggles, activity search, log viewer).
299
-
300
- ---
301
-
302
- ## File layout
303
-
304
- ```text
305
- failproofai/
306
- ├── bin/
307
- │ └── failproofai.mjs # CLI router (hook / dashboard / install / etc.)
308
- ├── src/hooks/
309
- │ ├── handler.ts # Hook event pipeline
310
- │ ├── builtin-policies.ts # 26 policy definitions
311
- │ ├── policy-evaluator.ts # Policy execution engine
312
- │ ├── policy-registry.ts # Policy registration and lookup
313
- │ ├── policy-types.ts # TypeScript interfaces
314
- │ ├── hooks-config.ts # Multi-scope config loading
315
- │ ├── custom-hooks-registry.ts # globalThis-backed hook registry
316
- │ ├── custom-hooks-loader.ts # ESM loader for user JS hooks
317
- │ ├── manager.ts # install / remove / list operations
318
- │ ├── install-prompt.ts # Interactive policy selection prompt
319
- │ ├── hook-logger.ts # Logging to hook.log
320
- │ ├── hook-activity-store.ts # Persist activity to hook-activity.jsonl
321
- │ └── llm-client.ts # LLM API client (for AI-powered policies)
322
- ├── app/ # Next.js dashboard (pages + server actions)
323
- ├── lib/ # Shared utilities
324
- │ ├── projects.ts # Enumerate Claude projects from filesystem
325
- │ ├── log-entries.ts # Parse Claude transcript JSONL format
326
- │ ├── paths.ts # Resolve system paths
327
- │ └── ...
328
- ├── components/ # Shared React UI components
329
- ├── contexts/ # React context providers (theme, auto-refresh, telemetry)
330
- ├── examples/ # Example custom hook files
331
- └── __tests__/ # Unit and E2E tests
332
- ```