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,260 +0,0 @@
1
- ---
2
- title: Test
3
- description: "Unit test, test end-to-end e assistenti di test"
4
- icon: flask-vial
5
- ---
6
-
7
- failproofai dispone di due suite di test: **unit test** (veloci, con mock) e **test end-to-end** (invocazioni reali di subprocess).
8
-
9
- ---
10
-
11
- ## Esecuzione dei test
12
-
13
- ```bash
14
- # Esegui tutti gli unit test una sola volta
15
- bun run test:run
16
-
17
- # Esegui gli unit test in modalità watch
18
- bun run test
19
-
20
- # Esegui i test E2E (richiede setup - vedi sotto)
21
- bun run test:e2e
22
-
23
- # Verifica i tipi senza compilare
24
- bunx tsc --noEmit
25
-
26
- # Linting
27
- bun run lint
28
- ```
29
-
30
- ---
31
-
32
- ## Unit test
33
-
34
- Gli unit test si trovano in `__tests__/` e utilizzano [Vitest](https://vitest.dev) con `happy-dom`.
35
-
36
- ```text
37
- __tests__/
38
- hooks/
39
- builtin-policies.test.ts # Logica delle policy per ogni builtin
40
- hooks-config.test.ts # Caricamento della config e merge dello scope
41
- policy-evaluator.test.ts # Iniezione di parametri e ordine di valutazione
42
- custom-hooks-registry.test.ts # Registry di globalThis add/get/clear
43
- custom-hooks-loader.test.ts # Loader ESM, importazioni transitive, gestione errori
44
- manager.test.ts # Operazioni install/remove/list
45
- components/
46
- sessions-list.test.tsx # Componente lista sessioni
47
- project-list.test.tsx # Componente lista progetti
48
- ...
49
- lib/
50
- logger.test.ts
51
- paths.test.ts
52
- date-filters.test.ts
53
- telemetry.test.ts
54
- ...
55
- actions/
56
- get-hooks-config.test.ts
57
- get-hook-activity.test.ts
58
- ...
59
- contexts/
60
- ThemeContext.test.tsx
61
- AutoRefreshContext.test.tsx
62
- ```
63
-
64
- ### Scrivere un unit test per una policy
65
-
66
- ```typescript
67
- import { describe, it, expect, beforeEach } from "vitest";
68
- import { getBuiltinPolicies } from "../../src/hooks/builtin-policies";
69
- import { allow, deny } from "../../src/hooks/policy-types";
70
-
71
- describe("block-sudo", () => {
72
- const policy = getBuiltinPolicies().find((p) => p.name === "block-sudo")!;
73
-
74
- it("denies sudo commands", () => {
75
- const ctx = {
76
- eventType: "PreToolUse" as const,
77
- payload: {},
78
- toolName: "Bash",
79
- toolInput: { command: "sudo apt install nodejs" },
80
- params: { allowPatterns: [] },
81
- };
82
- expect(policy.fn(ctx)).toEqual(deny("sudo command blocked by failproofai"));
83
- });
84
-
85
- it("allows non-sudo commands", () => {
86
- const ctx = {
87
- eventType: "PreToolUse" as const,
88
- payload: {},
89
- toolName: "Bash",
90
- toolInput: { command: "ls -la" },
91
- params: { allowPatterns: [] },
92
- };
93
- expect(policy.fn(ctx)).toEqual(allow());
94
- });
95
-
96
- it("allows patterns in allowPatterns", () => {
97
- const ctx = {
98
- eventType: "PreToolUse" as const,
99
- payload: {},
100
- toolName: "Bash",
101
- toolInput: { command: "sudo systemctl status nginx" },
102
- params: { allowPatterns: ["sudo systemctl status"] },
103
- };
104
- expect(policy.fn(ctx)).toEqual(allow());
105
- });
106
- });
107
- ```
108
-
109
- ---
110
-
111
- ## Test end-to-end
112
-
113
- I test E2E invocano il binario `failproofai` reale come subprocess, inviano un payload JSON a stdin e effettuano asserzioni sull'output stdout e il codice di uscita. Questo verifica il percorso di integrazione completo che utilizza Claude Code.
114
-
115
- ### Setup
116
-
117
- I test E2E eseguono il binario direttamente dal codice sorgente del repository. Prima della prima esecuzione, compila il bundle CJS che i file di custom hook utilizzano quando importano da `'failproofai'`:
118
-
119
- ```bash
120
- bun build src/index.ts --outdir dist --target node --format cjs
121
- ```
122
-
123
- Quindi esegui i test:
124
-
125
- ```bash
126
- bun run test:e2e
127
- ```
128
-
129
- Ricompila `dist/` ogni volta che modifichi l'API pubblica dei hook (`src/hooks/custom-hooks-registry.ts`, `src/hooks/policy-helpers.ts`, o `src/hooks/policy-types.ts`).
130
-
131
- ### Struttura dei test E2E
132
-
133
- ```text
134
- __tests__/e2e/
135
- helpers/
136
- hook-runner.ts # Avvia il binario, invia payload JSON, cattura codice di uscita + stdout + stderr
137
- fixture-env.ts # Directory temp isolate per test con file di config
138
- payloads.ts # Factory di payload conformi a Claude per ogni tipo di evento
139
- hooks/
140
- builtin-policies.e2e.test.ts # Ogni policy builtin con subprocess reale
141
- custom-hooks.e2e.test.ts # Caricamento e valutazione di custom hook
142
- config-scopes.e2e.test.ts # Merge della configurazione tra project/local/global
143
- policy-params.e2e.test.ts # Iniezione di parametri per ogni policy parametrizzata
144
- ```
145
-
146
- ### Utilizzo degli helper E2E
147
-
148
- **`FixtureEnv`** - ambiente isolato per ogni test:
149
-
150
- ```typescript
151
- import { createFixtureEnv } from "../helpers/fixture-env";
152
-
153
- const env = createFixtureEnv();
154
- // env.cwd - directory temporanea; passa come payload.cwd per raccogliere .failproofai/policies-config.json
155
- // env.home - directory home isolata; nessun vero ~/.failproofai in conflitto
156
-
157
- env.writeConfig({
158
- enabledPolicies: ["block-sudo"],
159
- policyParams: {
160
- "block-sudo": { allowPatterns: ["sudo systemctl status"] },
161
- },
162
- });
163
- ```
164
-
165
- `createFixtureEnv()` registra la pulizia `afterEach` automaticamente.
166
-
167
- **`runHook`** - invoca il binario:
168
-
169
- ```typescript
170
- import { runHook } from "../helpers/hook-runner";
171
- import { Payloads } from "../helpers/payloads";
172
-
173
- const result = await runHook(
174
- "PreToolUse",
175
- Payloads.preToolUse.bash("sudo apt install nodejs", env.cwd),
176
- { homeDir: env.home }
177
- );
178
-
179
- expect(result.exitCode).toBe(0);
180
- expect(result.parsed?.hookSpecificOutput?.permissionDecision).toBe("deny");
181
- ```
182
-
183
- **`Payloads`** - factory di payload già pronti:
184
-
185
- ```typescript
186
- Payloads.preToolUse.bash(command, cwd)
187
- Payloads.preToolUse.write(filePath, content, cwd)
188
- Payloads.preToolUse.read(filePath, cwd)
189
- Payloads.postToolUse.bash(command, output, cwd)
190
- Payloads.postToolUse.read(filePath, content, cwd)
191
- Payloads.notification(message, cwd)
192
- Payloads.stop(cwd)
193
- ```
194
-
195
- ### Scrivere un test E2E
196
-
197
- ```typescript
198
- import { describe, it, expect } from "vitest";
199
- import { createFixtureEnv } from "../helpers/fixture-env";
200
- import { runHook } from "../helpers/hook-runner";
201
- import { Payloads } from "../helpers/payloads";
202
-
203
- describe("block-rm-rf (E2E)", () => {
204
- it("denies rm -rf", async () => {
205
- const env = createFixtureEnv();
206
- env.writeConfig({ enabledPolicies: ["block-rm-rf"] });
207
-
208
- const result = await runHook(
209
- "PreToolUse",
210
- Payloads.preToolUse.bash("rm -rf /", env.cwd),
211
- { homeDir: env.home }
212
- );
213
-
214
- expect(result.exitCode).toBe(0);
215
- expect(result.parsed?.hookSpecificOutput?.permissionDecision).toBe("deny");
216
- });
217
-
218
- it("allows non-recursive rm", async () => {
219
- const env = createFixtureEnv();
220
- env.writeConfig({ enabledPolicies: ["block-rm-rf"] });
221
-
222
- const result = await runHook(
223
- "PreToolUse",
224
- Payloads.preToolUse.bash("rm /tmp/file.txt", env.cwd),
225
- { homeDir: env.home }
226
- );
227
-
228
- expect(result.exitCode).toBe(0);
229
- expect(result.stdout).toBe(""); // allow → stdout vuoto
230
- });
231
- });
232
- ```
233
-
234
- ### Forme di risposta E2E
235
-
236
- | Decisione | Codice di uscita | stdout |
237
- |-----------|------------------|--------|
238
- | `PreToolUse` deny | `0` | `{"hookSpecificOutput":{"permissionDecision":"deny","permissionDecisionReason":"..."}}` |
239
- | `PostToolUse` deny | `0` | `{"hookSpecificOutput":{"additionalContext":"Blocked ... because: ..."}}` |
240
- | Instruct (non-Stop) | `0` | `{"hookSpecificOutput":{"additionalContext":"Instruction from failproofai: ..."}}` |
241
- | Stop instruct | `2` | stdout vuoto; ragione in stderr |
242
- | Allow | `0` | stringa vuota |
243
-
244
- ### Config di Vitest
245
-
246
- I test E2E utilizzano `vitest.config.e2e.mts` con:
247
-
248
- - `environment: "node"` - nessuna global del browser necessaria
249
- - `pool: "forks"` - vera isolazione dei processi (i test avviano subprocess)
250
- - `testTimeout: 20_000` - 20s per test (startup del binario + valutazione hook)
251
-
252
- Il pool `forks` è importante: i worker basati su thread condividono `globalThis`, il che può interferire con i test che avviano subprocess. I fork basati su processi evitano questo problema.
253
-
254
- ---
255
-
256
- ## CI
257
-
258
- L'esecuzione CI completa (`bun run lint && bunx tsc --noEmit && bun run test:run && bun run build`) è richiesta per essere approvata prima di fare merge. La suite E2E viene eseguita come un job CI separato in parallelo.
259
-
260
- Consulta [Contributing](../CONTRIBUTING.md) per la checklist completa pre-merge.
@@ -1,332 +0,0 @@
1
- ---
2
- title: アーキテクチャ
3
- description: "フックハンドラー、設定の読み込み、ポリシー評価の内部動作について"
4
- icon: sitemap
5
- ---
6
-
7
- このドキュメントでは、failproofai の内部動作を説明します。フックシステムがエージェントのツール呼び出しをどのようにインターセプトするか、設定がどのように読み込まれてマージされるか、ポリシーがどのように評価されるか、そしてダッシュボードがエージェントのアクティビティをどのように監視するかについて解説します。
8
-
9
- ---
10
-
11
- ## 概要
12
-
13
- failproofai には独立した2つのサブシステムがあります。
14
-
15
- 1. **フックハンドラー** - Claude Code がエージェントのツール呼び出しのたびに起動する高速な CLI サブプロセスです。ポリシーを評価して判断結果を返します。
16
- 2. **エージェントモニター(ダッシュボード)** - エージェントセッションの監視とポリシー管理のための Next.js ウェブアプリケーションです。
17
-
18
- 両サブシステムは `~/.failproofai/` とプロジェクトの `.failproofai/` ディレクトリにある設定ファイルを共有しますが、別々のプロセスとして動作し、ファイルシステムを通じてのみ通信します。
19
-
20
- ---
21
-
22
- ## フックハンドラー
23
-
24
- ### Claude Code との統合
25
-
26
- `failproofai policies --install` を実行すると、`~/.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 はその後、各ツール呼び出しの前に `failproofai --hook PreToolUse` をサブプロセスとして起動し、stdin に JSON ペイロードを渡します。
48
-
49
- ### ペイロード形式
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
- `PostToolUse` イベントの場合、ペイロードにはツールの出力を含む `tool_result` も含まれます。
64
-
65
- ハンドラーは stdin に対して 1 MB の上限を適用します。これを超えるペイロードは破棄され、すべてのポリシーは暗黙的に allow となります。
66
-
67
- ### レスポンス形式
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(Stop 以外の任意のイベント):**
89
- ```json
90
- {
91
- "hookSpecificOutput": {
92
- "additionalContext": "Instruction from failproofai: Verify tests pass before committing."
93
- }
94
- }
95
- ```
96
-
97
- **Stop イベントの instruct:**
98
- - 終了コード:`2`
99
- - 理由は stdout ではなく stderr に書き込まれます
100
-
101
- **Allow:**
102
- - 終了コード:`0`
103
- - stdout は空
104
-
105
- **メッセージ付き Allow:**
106
-
107
- `allow(message)` を使うと、操作が許可されている場合でも、ポリシーが Claude に情報コンテキストを返せます。フックハンドラーは以下の JSON を **stdout** に書き込みます(設定ファイルではなく、上記の deny や instruct レスポンスと同様に、ハンドラープロセスから Claude Code へのレスポンスです)。
108
-
109
- ```json
110
- // フックハンドラープロセスが stdout に書き込む内容
111
- {
112
- "hookSpecificOutput": {
113
- "additionalContext": "All CI checks passed on branch 'feat/my-feature'."
114
- }
115
- }
116
- ```
117
- - 終了コード:`0`(操作は許可されます)
118
- - 複数のポリシーがメッセージ付きの `allow` を返した場合、各メッセージは改行で結合されて1つの `additionalContext` 文字列になります
119
- - どのポリシーもメッセージを提供しない場合、stdout は空になります(従来と同じ動作)
120
-
121
- ### 処理パイプライン
122
-
123
- `src/hooks/handler.ts` がパイプライン全体を実装しています。
124
-
125
- ```text
126
- stdin JSON
127
- → ペイロードのパース(最大 1 MB)
128
- → セッションメタデータの抽出(session_id, cwd, tool_name, tool_input など)
129
- → readMergedHooksConfig(cwd) ← プロジェクト・ローカル・グローバル設定をマージ
130
- → 有効な組み込みポリシーを解決済みパラメーターで登録
131
- → customPoliciesPath からカスタムポリシーを読み込む(設定されている場合)
132
- → カスタムポリシーをポリシーレジストリに登録
133
- → すべてのポリシーを評価(組み込みが先、次にカスタム)
134
- → 最初の deny で短絡評価
135
- → instruct の判断は蓄積
136
- → allow のメッセージは蓄積
137
- → JSON 判断結果を stdout に書き込む
138
- → イベントを ~/.failproofai/hook-activity.jsonl に保存
139
- → 終了
140
- ```
141
-
142
- プロセス全体は、LLM 呼び出しなしの典型的なペイロードで 100ms 以内に完了します。
143
-
144
- ---
145
-
146
- ## 設定の読み込み
147
-
148
- `src/hooks/hooks-config.ts` が3スコープの設定読み込みを実装しています。
149
-
150
- ```text
151
- [1] {cwd}/.failproofai/policies-config.json ← プロジェクト(最高優先度)
152
- [2] {cwd}/.failproofai/policies-config.local.json ← ローカル
153
- [3] ~/.failproofai/policies-config.json ← グローバル(最低優先度)
154
- ```
155
-
156
- マージロジック:
157
- - `enabledPolicies` - 3つのファイルすべての重複排除された和集合
158
- - `policyParams` - ポリシーごとのキーで、最初に定義したファイルの値が全体として優先されます
159
- - `customPoliciesPath` - 最初に定義したファイルの値が優先されます
160
- - `llm` - 最初に定義したファイルの値が優先されます
161
-
162
- ウェブダッシュボードは、プロジェクトの cwd を使って起動されるわけではないため、読み書きに `readHooksConfig()`(グローバルのみ)を使用します。
163
-
164
- ---
165
-
166
- ## ポリシー評価
167
-
168
- `src/hooks/policy-evaluator.ts` がポリシーを順番に実行します。
169
-
170
- 各ポリシーに対して:
171
-
172
- 1. ポリシーの `params` スキーマを検索します(存在する場合)。
173
- 2. マージされた設定から `policyParams[policy.name]` を読み込みます。
174
- 3. スキーマのデフォルト値にユーザー指定の値をマージして `ctx.params` を生成します。
175
- 4. 解決されたコンテキストで `policy.fn(ctx)` を呼び出します。
176
- 5. 結果が `deny` の場合、直ちに処理を停止してその判断を返します。
177
- 6. 結果が `instruct` の場合、メッセージを蓄積して次のポリシーに進みます。
178
- 7. 結果が `allow` の場合、次のポリシーに進みます。
179
-
180
- すべてのポリシーの実行後:
181
- - `deny` が返されていた場合、deny レスポンスを発行します。
182
- - `instruct` の返却が収集されていた場合、すべてのメッセージを結合した単一の instruct レスポンスを発行します。
183
- - それ以外の場合、allow レスポンスを発行します(stdout は空、終了コード 0)。
184
-
185
- ---
186
-
187
- ## 組み込みポリシー
188
-
189
- `src/hooks/builtin-policies.ts` が全26件の組み込みポリシーを `BuiltinPolicyDefinition` オブジェクトとして定義しています。
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
- `params` を受け付けるポリシーは、各パラメーターの型とデフォルト値を持つ `PolicyParamsSchema` を宣言します。ポリシー評価器は `fn` を呼び出す前に解決済みの値を `ctx.params` に注入します。デフォルト値は常に先に適用されるため、ポリシー関数は null チェックなしで `ctx.params` を読み込めます。
208
-
209
- ポリシー内部のパターンマッチングは、生の文字列マッチングではなく、パース済みのコマンドトークン(argv)を使用します。これにより、シェル演算子インジェクションによるバイパスを防ぎます(例えば、`sudo systemctl status *` に対するパターンは、コマンドに `; rm -rf /` を追加してもバイパスできません)。
210
-
211
- ---
212
-
213
- ## カスタムポリシー
214
-
215
- `src/hooks/custom-hooks-registry.ts` が `globalThis` ベースのレジストリを実装しています。
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 { ... } // テストで使用
226
- ```
227
-
228
- `src/hooks/custom-hooks-loader.ts` がユーザーのポリシーファイルを読み込みます。
229
-
230
- 1. 設定から `customPoliciesPath` を読み込み、存在しない場合はスキップします。
231
- 2. 絶対パスに解決してファイルの存在を確認します。
232
- 3. `from "failproofai"` のすべてのインポートを実際の dist パスに書き換え、`customPolicies` が同じ `globalThis` レジストリを参照するようにします。
233
- 4. ESM 互換性を確保するために、推移的なローカルインポートを再帰的に書き換えます。
234
- 5. 一時的な `.mjs` ファイルを書き込み、エントリファイルを `import()` します。
235
- 6. `getCustomHooks()` を呼び出して登録済みのフックを取得します。
236
- 7. `finally` ブロックですべての一時ファイルを削除します。
237
-
238
- エラー(ファイルが見つからない、構文エラー、インポートの失敗など)が発生した場合、エラーは `~/.failproofai/hook.log` に記録され、ローダーは空の配列を返します。組み込みポリシーへの影響はありません。
239
-
240
- カスタムポリシーはすべての組み込みポリシーの後に評価されます。カスタムポリシーの `deny` は、それ以降のカスタムポリシーの短絡評価を引き起こしますが(ただし、その時点ですべての組み込みポリシーは実行済みです)。
241
-
242
- ---
243
-
244
- ## アクティビティログ
245
-
246
- 各フックイベントの後、ハンドラーは `~/.failproofai/hook-activity.jsonl` に 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
- allow 以外の判断を行ったポリシーごとに1行が記録されます。allow の判断はファイルサイズを小さく保つために記録されません。
262
-
263
- ---
264
-
265
- ## ダッシュボードのアーキテクチャ
266
-
267
- ダッシュボードは、App Router と React Server Components および Server Actions を使用した **Next.js 16** アプリケーションです。
268
-
269
- ```text
270
- app/
271
- layout.tsx ← ルートレイアウト(テーマ、テレメトリー、ナビゲーション)
272
- projects/page.tsx ← サーバーコンポーネント:すべての Claude プロジェクトを一覧表示
273
- project/[name]/page.tsx ← サーバーコンポーネント:プロジェクト内のセッションを一覧表示
274
- project/[name]/session/
275
- [sessionId]/page.tsx ← サーバーコンポーネント:セッションビューアーを表示
276
- policies/page.tsx ← クライアントコンポーネント:ポリシー管理 + アクティビティログ
277
- actions/
278
- get-hooks-config.ts ← 設定とポリシーリストの読み込み
279
- update-hooks-config.ts ← ポリシーの有効・無効の切り替え
280
- update-policy-params.ts ← ポリシーパラメーターの更新
281
- get-hook-activity.ts ← アクティビティログのページネーション・検索
282
- install-hooks-web.ts ← ブラウザからのフックのインストール・削除
283
- api/
284
- download/[project]/[session]/route.ts ← セッションを ZIP/JSONL としてエクスポート
285
- ```
286
-
287
- **データフロー:**
288
-
289
- - ページコンポーネントは `lib/projects.ts` と `lib/log-entries.ts` を呼び出し、ファイルシステムから直接プロジェクト・セッションデータを読み込みます(読み取りに API レイヤーは不要)。
290
- - Policies ページはすべての変更操作(切り替え、パラメーター更新、インストール・削除)に Server Actions を使用します。
291
- - セッションビューアーは Claude の JSONL トランスクリプト形式をパースし、メッセージとツール呼び出しのタイムラインを表示します。
292
-
293
- **主要な設計上の決定事項:**
294
-
295
- - データベースなし - すべての永続状態はプレーンファイル(`~/.failproofai/`、`~/.claude/projects/`)に保存されます。
296
- - 変更操作には Server Actions を使用 - CRUD 操作に REST API は不要です。
297
- - 読み取りページには React Server Components を使用 - 初期表示が高速で、データ取得のクライアントバンドルが不要です。
298
- - クライアントコンポーネントはインタラクティブ性が必要な箇所のみ使用(ポリシーの切り替え、アクティビティ検索、ログビューアー)。
299
-
300
- ---
301
-
302
- ## ファイル構成
303
-
304
- ```text
305
- failproofai/
306
- ├── bin/
307
- │ └── failproofai.mjs # CLI ルーター(hook / dashboard / install など)
308
- ├── src/hooks/
309
- │ ├── handler.ts # フックイベントパイプライン
310
- │ ├── builtin-policies.ts # 26件のポリシー定義
311
- │ ├── policy-evaluator.ts # ポリシー実行エンジン
312
- │ ├── policy-registry.ts # ポリシーの登録と検索
313
- │ ├── policy-types.ts # TypeScript インターフェース
314
- │ ├── hooks-config.ts # マルチスコープ設定の読み込み
315
- │ ├── custom-hooks-registry.ts # globalThis ベースのフックレジストリ
316
- │ ├── custom-hooks-loader.ts # ユーザー JS フック用の ESM ローダー
317
- │ ├── manager.ts # インストール・削除・一覧操作
318
- │ ├── install-prompt.ts # インタラクティブなポリシー選択プロンプト
319
- │ ├── hook-logger.ts # hook.log へのログ記録
320
- │ ├── hook-activity-store.ts # hook-activity.jsonl へのアクティビティ保存
321
- │ └── llm-client.ts # LLM API クライアント(AI 駆動ポリシー用)
322
- ├── app/ # Next.js ダッシュボード(ページ + サーバーアクション)
323
- ├── lib/ # 共有ユーティリティ
324
- │ ├── projects.ts # ファイルシステムから Claude プロジェクトを列挙
325
- │ ├── log-entries.ts # Claude トランスクリプト JSONL 形式のパース
326
- │ ├── paths.ts # システムパスの解決
327
- │ └── ...
328
- ├── components/ # 共有 React UI コンポーネント
329
- ├── contexts/ # React コンテキストプロバイダー(テーマ、自動更新、テレメトリー)
330
- ├── examples/ # カスタムフックのサンプルファイル
331
- └── __tests__/ # ユニットテストおよび E2E テスト
332
- ```