failproofai 0.0.11-beta.1 → 0.0.11-beta.3

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/app-path-routes-manifest.json +8 -1
  3. package/.next/standalone/.next/build-manifest.json +10 -10
  4. package/.next/standalone/.next/prerender-manifest.json +3 -32
  5. package/.next/standalone/.next/required-server-files.json +2 -1
  6. package/.next/standalone/.next/routes-manifest.json +45 -3
  7. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +7 -7
  8. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  9. package/.next/standalone/.next/server/app/_global-error/page.js +6 -6
  10. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  14. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  15. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  16. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  17. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  18. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +7 -7
  20. package/.next/standalone/.next/server/app/_not-found/page/next-font-manifest.json +2 -6
  21. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  22. package/.next/standalone/.next/server/app/_not-found/page.js +12 -13
  23. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  26. package/.next/standalone/.next/server/app/_not-found.rsc +16 -16
  27. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
  28. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  29. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
  30. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  31. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  32. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  33. package/.next/standalone/.next/server/app/api/audit/run/route/app-paths-manifest.json +3 -0
  34. package/.next/standalone/.next/server/app/api/audit/run/route/server-reference-manifest.json +4 -0
  35. package/.next/standalone/.next/server/app/api/audit/run/route.js +8 -0
  36. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -0
  37. package/.next/standalone/.next/server/app/api/audit/run/route_client-reference-manifest.js +3 -0
  38. package/.next/standalone/.next/server/app/api/audit/status/route/app-paths-manifest.json +3 -0
  39. package/.next/standalone/.next/server/app/api/audit/status/route/build-manifest.json +9 -0
  40. package/.next/standalone/.next/server/app/api/audit/status/route/server-reference-manifest.json +4 -0
  41. package/.next/standalone/.next/server/app/api/audit/status/route.js +6 -0
  42. package/.next/standalone/.next/server/app/api/audit/status/route.js.map +5 -0
  43. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -0
  44. package/.next/standalone/.next/server/app/api/audit/status/route_client-reference-manifest.js +3 -0
  45. package/.next/standalone/.next/server/app/api/auth/login-request/route/app-paths-manifest.json +3 -0
  46. package/.next/standalone/.next/server/app/api/auth/login-request/route/build-manifest.json +9 -0
  47. package/.next/standalone/.next/server/app/api/auth/login-request/route/server-reference-manifest.json +4 -0
  48. package/.next/standalone/.next/server/app/api/auth/login-request/route.js +6 -0
  49. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.map +5 -0
  50. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -0
  51. package/.next/standalone/.next/server/app/api/auth/login-request/route_client-reference-manifest.js +3 -0
  52. package/.next/standalone/.next/server/app/api/auth/login-verify/route/app-paths-manifest.json +3 -0
  53. package/.next/standalone/.next/server/app/api/auth/login-verify/route/build-manifest.json +9 -0
  54. package/.next/standalone/.next/server/app/api/auth/login-verify/route/server-reference-manifest.json +4 -0
  55. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js +7 -0
  56. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.map +5 -0
  57. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -0
  58. package/.next/standalone/.next/server/app/api/auth/login-verify/route_client-reference-manifest.js +3 -0
  59. package/.next/standalone/.next/server/app/api/auth/logout/route/app-paths-manifest.json +3 -0
  60. package/.next/standalone/.next/server/app/api/auth/logout/route/build-manifest.json +9 -0
  61. package/.next/standalone/.next/server/app/api/auth/logout/route/server-reference-manifest.json +4 -0
  62. package/.next/standalone/.next/server/app/api/auth/logout/route.js +7 -0
  63. package/.next/standalone/.next/server/app/api/auth/logout/route.js.map +5 -0
  64. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
  65. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +3 -0
  66. package/.next/standalone/.next/server/app/api/auth/reminder/route/app-paths-manifest.json +3 -0
  67. package/.next/standalone/.next/server/app/api/auth/reminder/route/build-manifest.json +9 -0
  68. package/.next/standalone/.next/server/app/api/auth/reminder/route/server-reference-manifest.json +4 -0
  69. package/.next/standalone/.next/server/app/api/auth/reminder/route.js +7 -0
  70. package/.next/standalone/.next/server/app/api/auth/reminder/route.js.map +5 -0
  71. package/.next/standalone/.next/server/app/api/auth/reminder/route.js.nft.json +1 -0
  72. package/.next/standalone/.next/server/app/api/auth/reminder/route_client-reference-manifest.js +3 -0
  73. package/.next/standalone/.next/server/app/api/auth/status/route/app-paths-manifest.json +3 -0
  74. package/.next/standalone/.next/server/app/api/auth/status/route/build-manifest.json +9 -0
  75. package/.next/standalone/.next/server/app/api/auth/status/route/server-reference-manifest.json +4 -0
  76. package/.next/standalone/.next/server/app/api/auth/status/route.js +7 -0
  77. package/.next/standalone/.next/server/app/api/auth/status/route.js.map +5 -0
  78. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -0
  79. package/.next/standalone/.next/server/app/api/auth/status/route_client-reference-manifest.js +3 -0
  80. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js +3 -3
  81. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/audit/page/app-paths-manifest.json +3 -0
  83. package/.next/standalone/.next/server/app/audit/page/build-manifest.json +18 -0
  84. package/.next/standalone/.next/server/app/audit/page/next-font-manifest.json +6 -0
  85. package/.next/standalone/.next/server/app/audit/page/react-loadable-manifest.json +1 -0
  86. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +29 -0
  87. package/.next/standalone/.next/server/app/audit/page.js +17 -0
  88. package/.next/standalone/.next/server/app/audit/page.js.map +5 -0
  89. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -0
  90. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +3 -0
  91. package/.next/standalone/.next/server/app/index.html +1 -1
  92. package/.next/standalone/.next/server/app/index.rsc +16 -17
  93. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  94. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +16 -17
  95. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  96. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
  97. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -3
  98. package/.next/standalone/.next/server/app/page/build-manifest.json +7 -7
  99. package/.next/standalone/.next/server/app/page/next-font-manifest.json +2 -6
  100. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  101. package/.next/standalone/.next/server/app/page.js +14 -15
  102. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/policies/page/build-manifest.json +7 -7
  105. package/.next/standalone/.next/server/app/policies/page/next-font-manifest.json +2 -6
  106. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  107. package/.next/standalone/.next/server/app/policies/page.js +16 -16
  108. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +7 -7
  111. package/.next/standalone/.next/server/app/project/[name]/page/next-font-manifest.json +2 -6
  112. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  113. package/.next/standalone/.next/server/app/project/[name]/page.js +16 -17
  114. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +7 -7
  117. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/next-font-manifest.json +2 -6
  118. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  119. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  120. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +19 -20
  121. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/projects/page/build-manifest.json +7 -7
  124. package/.next/standalone/.next/server/app/projects/page/next-font-manifest.json +2 -6
  125. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  126. package/.next/standalone/.next/server/app/projects/page.js +15 -16
  127. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app-paths-manifest.json +8 -1
  130. package/.next/standalone/.next/server/chunks/[externals]__14odj07._.js +3 -0
  131. package/.next/standalone/.next/server/chunks/{[externals]__0z0j--b._.js → [externals]__1nl3dvw._.js} +1 -1
  132. package/.next/standalone/.next/server/chunks/{[externals]__0-p9.k~._.js → [externals]__1s61mel._.js} +1 -1
  133. package/.next/standalone/.next/server/chunks/{[externals]_node_os_06ur78j._.js → [externals]_node_os_0by37l-._.js} +1 -1
  134. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07tgnzi._.js +3 -0
  135. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0kjo7d_._.js → [root-of-the-server]__0_0xu5z._.js} +2 -2
  136. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cag8qd._.js +3 -0
  137. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0z-180.._.js → [root-of-the-server]__0cycwg6._.js} +2 -2
  138. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__08px0ym._.js → [root-of-the-server]__0f7mikp._.js} +1 -1
  139. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0oeun7z._.js +3 -0
  140. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0q-v9z2._.js +3 -0
  141. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0rv7m0k._.js +3 -0
  142. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0g48iv.._.js → [root-of-the-server]__0sb_5m8._.js} +2 -2
  143. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0j8-xkl._.js → [root-of-the-server]__0xuaoik._.js} +2 -2
  144. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12pit4m._.js +3 -0
  145. package/.next/standalone/.next/server/chunks/[root-of-the-server]__13h8pzr._.js +3 -0
  146. package/.next/standalone/.next/server/chunks/[root-of-the-server]__13ra2jq._.js +3 -0
  147. package/.next/standalone/.next/server/chunks/[root-of-the-server]__17g9wh7._.js +3 -0
  148. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0d_ob4n._.js → [root-of-the-server]__1_mqemn._.js} +2 -2
  149. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1b9z5-i._.js +3 -0
  150. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0vlhtkc._.js → [root-of-the-server]__1hgv_75._.js} +1 -1
  151. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ixjiy8._.js +3 -0
  152. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0wu7fr7._.js → [root-of-the-server]__1jm9fw6._.js} +1 -1
  153. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1legmza._.js +3 -0
  154. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0fwb7ao._.js → [root-of-the-server]__1m2_4t0._.js} +2 -2
  155. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0yfq1yr._.js → [root-of-the-server]__1mhmdzs._.js} +1 -1
  156. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0zso~62._.js → [root-of-the-server]__1ou2ehh._.js} +1 -1
  157. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qxztj-._.js +3 -0
  158. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rhmvod._.js +3 -0
  159. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0.~nmr9._.js → [root-of-the-server]__1w9zl9-._.js} +1 -1
  160. package/.next/standalone/.next/server/chunks/{_0ebx_lc._.js → _0p53ge1._.js} +2 -2
  161. package/.next/standalone/.next/server/chunks/_1-1804f._.js +3 -0
  162. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_audit_run_route_actions_1qgp9io.js +3 -0
  163. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_audit_status_route_actions_1f7pjof.js +3 -0
  164. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_login-request_route_actions_1c49co0.js +3 -0
  165. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_login-verify_route_actions_1r3slzk.js +3 -0
  166. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_logout_route_actions_0regwyr.js +3 -0
  167. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_reminder_route_actions_1kjgxf8.js +3 -0
  168. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_status_route_actions_1aho9zu.js +3 -0
  169. package/.next/standalone/.next/server/chunks/{_next-internal_server_app_api_download_[project]_[session]_route_actions_0wb00i-.js → _next-internal_server_app_api_download_[project]_[session]_route_actions_1is7vs7.js} +1 -1
  170. package/.next/standalone/.next/server/chunks/{lib_logger_ts_047tt9f._.js → lib_logger_ts_07e65t5._.js} +1 -1
  171. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_17k9e3w.js +23 -0
  172. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_01r25oi._.js +3 -0
  173. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p7._.js +3 -0
  174. package/.next/standalone/.next/server/chunks/{package_json_[json]_cjs_0z7w.hh._.js → package_json_[json]_cjs_1nxcc4v._.js} +2 -2
  175. package/.next/standalone/.next/server/chunks/ssr/{[externals]__12dv.x0._.js → [externals]__1_g_b3t._.js} +1 -1
  176. package/.next/standalone/.next/server/chunks/ssr/{[externals]_node_async_hooks_0v0ln8c._.js → [externals]_node_async_hooks_1gjz99j._.js} +1 -1
  177. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00jkjmt._.js +4 -0
  178. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__013du6r._.js +4 -0
  179. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0989_dx._.js +3 -0
  180. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e85wxv._.js +4 -0
  181. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gfxvb1._.js +3 -0
  182. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h12me5._.js +3 -0
  183. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0l13qf2._.js +3 -0
  184. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ywoypf._.js +3 -0
  185. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1-scthx._.js +3 -0
  186. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__100hdar._.js +3 -0
  187. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11rtg6s._.js +3 -0
  188. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__14dd6h8._.js +3 -0
  189. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1cd25c7._.js +4 -0
  190. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0t5l7a5._.js → [root-of-the-server]__1d8omgc._.js} +1 -1
  191. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0tcyn68._.js → [root-of-the-server]__1dky4g0._.js} +1 -1
  192. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__098zro9._.js → [root-of-the-server]__1fax1sl._.js} +4 -4
  193. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1hlrq6y._.js +4 -0
  194. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ihxdo5._.js +4 -0
  195. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1mt35_w._.js +221 -0
  196. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0-wn51s._.js → [root-of-the-server]__1pcxxwg._.js} +3 -3
  197. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1usf8v2._.js +3 -0
  198. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1vvfde2._.js +4 -0
  199. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__212nf49._.js +3 -0
  200. package/.next/standalone/.next/server/chunks/ssr/{_03d7qyt._.js → _05whahf._.js} +1 -1
  201. package/.next/standalone/.next/server/chunks/ssr/_11_p9y8._.js +3 -0
  202. package/.next/standalone/.next/server/chunks/ssr/{_0xb8ngh._.js → _1kje4fm._.js} +1 -1
  203. package/.next/standalone/.next/server/chunks/ssr/{_0zx~s__._.js → _1p0-leb._.js} +1 -1
  204. package/.next/standalone/.next/server/chunks/ssr/{app_04qfs8z._.js → app_087bt9w._.js} +1 -1
  205. package/.next/standalone/.next/server/chunks/ssr/{app_0uosk1e._.js → app_1fvisnp._.js} +1 -1
  206. package/.next/standalone/.next/server/chunks/ssr/{app_13f0ohr._.js → app_209u41o._.js} +1 -1
  207. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +43 -0
  208. package/.next/standalone/.next/server/chunks/ssr/app_audit_loading_tsx_1j1kc6j._.js +3 -0
  209. package/.next/standalone/.next/server/chunks/ssr/{app_error_tsx_11t4ysq._.js → app_error_tsx_1zds1ns._.js} +1 -1
  210. package/.next/standalone/.next/server/chunks/ssr/{app_global-error_tsx_0m9qisk._.js → app_global-error_tsx_113y3za._.js} +1 -1
  211. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +3 -0
  212. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +8 -0
  213. package/.next/standalone/.next/server/chunks/ssr/{app_project_[name]_error_tsx_0.9-fod._.js → app_project_[name]_error_tsx_1v02_5n._.js} +1 -1
  214. package/.next/standalone/.next/server/chunks/ssr/{app_project_[name]_loading_tsx_03g9xy0._.js → app_project_[name]_loading_tsx_05-l4uf._.js} +1 -1
  215. package/.next/standalone/.next/server/chunks/ssr/{app_project_[name]_session_[sessionId]_error_tsx_0ler-mr._.js → app_project_[name]_session_[sessionId]_error_tsx_0-lj3nd._.js} +1 -1
  216. package/.next/standalone/.next/server/chunks/ssr/{app_project_[name]_session_[sessionId]_loading_tsx_0c0e3yx._.js → app_project_[name]_session_[sessionId]_loading_tsx_0l4aixs._.js} +1 -1
  217. package/.next/standalone/.next/server/chunks/ssr/app_projects_loading_tsx_20-3u8b._.js +3 -0
  218. package/.next/standalone/.next/server/chunks/ssr/{lib_codex-projects_ts_0eosib~._.js → lib_codex-projects_ts_0pqlw37._.js} +1 -1
  219. package/.next/standalone/.next/server/chunks/ssr/{lib_copilot-projects_ts_0r8xkn8._.js → lib_copilot-projects_ts_19wl7tp._.js} +1 -1
  220. package/.next/standalone/.next/server/chunks/ssr/{lib_cursor-projects_ts_0qt1scg._.js → lib_cursor-projects_ts_18-iwyk._.js} +1 -1
  221. package/.next/standalone/.next/server/chunks/ssr/{lib_gemini-projects_ts_0sl~yqr._.js → lib_gemini-projects_ts_1c7bgx-._.js} +1 -1
  222. package/.next/standalone/.next/server/chunks/ssr/{lib_opencode-projects_ts_0op9gyp._.js → lib_opencode-projects_ts_15bjxkm._.js} +1 -1
  223. package/.next/standalone/.next/server/chunks/ssr/{lib_pi-projects_ts_103tsh1._.js → lib_pi-projects_ts_1wikofb._.js} +1 -1
  224. package/.next/standalone/.next/server/chunks/ssr/{lib_utils_ts_068jk73._.js → lib_utils_ts_0az0sfq._.js} +1 -1
  225. package/.next/standalone/.next/server/chunks/ssr/node_modules_1ynf7el._.js +3 -0
  226. package/.next/standalone/.next/server/chunks/ssr/node_modules_html2canvas_dist_html2canvas_esm_05gja40.js +3 -0
  227. package/.next/standalone/.next/server/chunks/ssr/node_modules_html2canvas_dist_html2canvas_esm_1n-0xws.js +3 -0
  228. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_0rd0oc-._.js → node_modules_next_1a1kch7._.js} +1 -1
  229. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_0h9llsw._.js → node_modules_next_dist_0uboya6._.js} +2 -2
  230. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_11dij6w._.js → node_modules_next_dist_1d_onnt._.js} +2 -2
  231. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_client_components_0inhx6q._.js → node_modules_next_dist_client_components_0wpq8j3._.js} +1 -1
  232. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_client_components_builtin_forbidden_0ghu-f7.js → node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js} +1 -1
  233. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js → node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js} +1 -1
  234. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0-uvagv.js +4 -0
  235. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03c7gi5.js +4 -0
  236. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09p-8om.js +4 -0
  237. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0v-kfiu.js +4 -0
  238. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0j79~gv.js → node_modules_next_dist_esm_build_templates_app-page_0xrgzyz.js} +1 -1
  239. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1806lsc.js +4 -0
  240. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1j6dd-e.js +4 -0
  241. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1sa65r-.js +4 -0
  242. package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuzn._.js +3 -0
  243. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1ezd2jf._.js +5 -0
  244. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1tnuifj._.js +5 -0
  245. package/.next/standalone/.next/server/functions-config-manifest.json +3 -0
  246. package/.next/standalone/.next/server/instrumentation.js +1 -1
  247. package/.next/standalone/.next/server/middleware-build-manifest.js +10 -10
  248. package/.next/standalone/.next/server/middleware.js +2 -2
  249. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  250. package/.next/standalone/.next/server/next-font-manifest.json +2 -21
  251. package/.next/standalone/.next/server/pages/404.html +1 -1
  252. package/.next/standalone/.next/server/pages/500.html +1 -1
  253. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/server-reference-manifest.json +27 -9
  255. package/.next/standalone/.next/static/chunks/{07uz2g0_38qia.js → 03fmihek9n986.js} +1 -1
  256. package/.next/standalone/.next/static/chunks/09ueq8s1as8xs.css +2 -0
  257. package/.next/standalone/.next/static/chunks/0ehe4dh0grngk.js +41 -0
  258. package/.next/standalone/.next/static/chunks/{13-bt.3~irg00.js → 0gdm-xaez4l7t.js} +1 -1
  259. package/.next/standalone/.next/static/chunks/{07kfzzinhsl7e.js → 0kdglk0vtzymo.js} +1 -1
  260. package/.next/standalone/.next/static/chunks/0qassxjx1ef04.js +1 -0
  261. package/.next/standalone/.next/static/chunks/0zbxssxh53n-3.js +1 -0
  262. package/.next/standalone/.next/static/chunks/13f1kmjea-0md.js +2 -0
  263. package/.next/standalone/.next/static/chunks/1btx2c49fk9xt.css +1 -0
  264. package/.next/standalone/.next/static/chunks/1fmco3pvq_twz.js +1 -0
  265. package/.next/standalone/.next/static/chunks/2b1fzuhuk-42n.js +1 -0
  266. package/.next/standalone/.next/static/chunks/{0_vk1wsgf~q3o.js → 2dtip-mvmihiu.js} +1 -1
  267. package/.next/standalone/.next/static/chunks/2srzafd1_ha5y.js +1 -0
  268. package/.next/standalone/.next/static/chunks/{0d3shmwh5_nmn.js → 33u59vf_8xpd-.js} +1 -1
  269. package/.next/standalone/.next/static/chunks/3gti1qdk5epqn.js +1 -0
  270. package/.next/standalone/.next/static/chunks/{0wtiofzdt-l2u.js → 3krzy-lhwfrmz.js} +1 -1
  271. package/.next/standalone/.next/static/chunks/{17mubwtqwijpu.js → 3w8d8k_dca5rp.js} +1 -1
  272. package/.next/standalone/.next/static/chunks/43lnq0c1rnflb.js +6 -0
  273. package/.next/standalone/.next/static/chunks/{turbopack-0nh.aopesgj~5.js → turbopack-00qy7zfa7m--m.js} +1 -1
  274. package/.next/standalone/SECURITY.md +73 -0
  275. package/.next/standalone/app/actions/get-audit-result.ts +24 -0
  276. package/.next/standalone/app/api/audit/_state.ts +72 -0
  277. package/.next/standalone/app/api/audit/run/route.ts +89 -0
  278. package/.next/standalone/app/api/audit/status/route.ts +23 -0
  279. package/.next/standalone/app/api/auth/login-request/route.ts +91 -0
  280. package/.next/standalone/app/api/auth/login-verify/route.ts +98 -0
  281. package/.next/standalone/app/api/auth/logout/route.ts +48 -0
  282. package/.next/standalone/app/api/auth/reminder/route.ts +213 -0
  283. package/.next/standalone/app/api/auth/status/route.ts +42 -0
  284. package/.next/standalone/app/audit/_components/audit-dashboard.tsx +364 -0
  285. package/.next/standalone/app/audit/_components/auth-dialog.tsx +401 -0
  286. package/.next/standalone/app/audit/_components/empty-state.tsx +146 -0
  287. package/.next/standalone/app/audit/_components/findings-section.tsx +135 -0
  288. package/.next/standalone/app/audit/_components/identity-section.tsx +126 -0
  289. package/.next/standalone/app/audit/_components/policies-section.tsx +194 -0
  290. package/.next/standalone/app/audit/_components/report-footer.tsx +35 -0
  291. package/.next/standalone/app/audit/_components/rerun-button.tsx +81 -0
  292. package/.next/standalone/app/audit/_components/return-section.tsx +428 -0
  293. package/.next/standalone/app/audit/_components/run-progress.tsx +120 -0
  294. package/.next/standalone/app/audit/_components/score-section.tsx +179 -0
  295. package/.next/standalone/app/audit/_components/share-dock.tsx +265 -0
  296. package/.next/standalone/app/audit/_components/share-templates.ts +67 -0
  297. package/.next/standalone/app/audit/_components/show-off-cta.tsx +135 -0
  298. package/.next/standalone/app/audit/_components/sigil.tsx +93 -0
  299. package/.next/standalone/app/audit/_components/strengths-section.tsx +57 -0
  300. package/.next/standalone/app/audit/audit-styles.css +2066 -0
  301. package/.next/standalone/app/audit/loading.tsx +24 -0
  302. package/.next/standalone/app/audit/page.tsx +53 -0
  303. package/.next/standalone/app/globals.css +570 -137
  304. package/.next/standalone/app/layout.tsx +16 -9
  305. package/.next/standalone/app/policies/hooks-client.tsx +325 -142
  306. package/.next/standalone/app/project/[name]/page.tsx +89 -39
  307. package/.next/standalone/app/projects/loading.tsx +30 -8
  308. package/.next/standalone/app/projects/page.tsx +76 -18
  309. package/.next/standalone/assets/audit/Audit Report.html +22 -0
  310. package/.next/standalone/assets/audit/Show Off Your Agent.html +22 -0
  311. package/.next/standalone/assets/audit/archetypes.jsx +277 -0
  312. package/.next/standalone/assets/audit/assets/fonts/bitcount-prop-single.woff2 +0 -0
  313. package/.next/standalone/assets/audit/audit.jsx +825 -0
  314. package/.next/standalone/assets/audit/poster-styles.css +424 -0
  315. package/.next/standalone/assets/audit/poster.jsx +247 -0
  316. package/.next/standalone/assets/audit/screenshots/poster-optimist.png +0 -0
  317. package/.next/standalone/assets/audit/screenshots/poster-scrolled.png +0 -0
  318. package/.next/standalone/assets/audit/styles.css +1225 -0
  319. package/.next/standalone/assets/audit/tweaks-panel.jsx +425 -0
  320. package/.next/standalone/assets/logos/company/icon.svg +1 -0
  321. package/.next/standalone/assets/logos/company/logo.svg +1 -0
  322. package/.next/standalone/components/navbar.tsx +154 -65
  323. package/.next/standalone/components/reach-developers.tsx +37 -9
  324. package/.next/standalone/lib/atomic-write.ts +67 -0
  325. package/.next/standalone/lib/auth/api-server-client.ts +281 -0
  326. package/.next/standalone/lib/auth/auth-store.ts +250 -0
  327. package/.next/standalone/lib/claude-sessions.ts +181 -0
  328. package/.next/standalone/lib/client-telemetry.ts +2 -0
  329. package/.next/standalone/lib/fetch-with-timeout.ts +42 -0
  330. package/.next/standalone/lib/share-card.ts +120 -0
  331. package/.next/standalone/lib/telemetry.ts +12 -7
  332. package/.next/standalone/node_modules/@next/env/package.json +1 -1
  333. package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
  334. package/.next/standalone/node_modules/next/dist/client/dev/debug-channel.js +102 -2
  335. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +11 -11
  336. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +13 -13
  337. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +2 -2
  338. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  339. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  340. package/.next/standalone/node_modules/next/dist/server/app-render/action-handler.js +18 -8
  341. package/.next/standalone/node_modules/next/dist/server/config-schema.js +1 -0
  342. package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
  343. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  344. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  345. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  346. package/.next/standalone/node_modules/next/dist/server/lib/encode-cache-tag.js +45 -0
  347. package/.next/standalone/node_modules/next/dist/server/lib/implicit-tags.js +6 -3
  348. package/.next/standalone/node_modules/next/dist/server/lib/patch-fetch.js +5 -1
  349. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
  350. package/.next/standalone/node_modules/next/dist/server/web/spec-extension/revalidate.js +4 -3
  351. package/.next/standalone/node_modules/next/dist/server/web/spec-extension/unstable-cache.js +6 -2
  352. package/.next/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
  353. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  354. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  355. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  356. package/.next/standalone/node_modules/next/package.json +15 -15
  357. package/.next/standalone/node_modules/react/cjs/react.development.js +1 -1
  358. package/.next/standalone/node_modules/react/cjs/react.production.js +1 -1
  359. package/.next/standalone/node_modules/react/package.json +1 -1
  360. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +1 -1
  361. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +1 -1
  362. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.browser.production.js +3 -3
  363. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.edge.production.js +3 -3
  364. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.node.production.js +3 -3
  365. package/.next/standalone/node_modules/react-dom/cjs/react-dom.production.js +1 -1
  366. package/.next/standalone/node_modules/react-dom/package.json +2 -2
  367. package/.next/standalone/osv-scanner.toml +17 -0
  368. package/.next/standalone/package.json +8 -3
  369. package/.next/standalone/public/audit/fonts/bitcount-prop-single.woff2 +0 -0
  370. package/.next/standalone/public/icon.svg +1 -0
  371. package/.next/standalone/public/logo.svg +1 -0
  372. package/.next/standalone/server.js +1 -1
  373. package/.next/standalone/templates/bitcount-font/README.md +42 -0
  374. package/.next/standalone/templates/bitcount-font/bitcount-prop-single.woff2 +0 -0
  375. package/.next/standalone/templates/bitcount-font/bitcount.css +49 -0
  376. package/.next/standalone/templates/bitcount-font/fonts.ts.example +23 -0
  377. package/README.md +4 -3
  378. package/bin/failproofai.mjs +248 -70
  379. package/dist/cli.mjs +1709 -1385
  380. package/lib/atomic-write.ts +67 -0
  381. package/lib/auth/api-server-client.ts +281 -0
  382. package/lib/auth/auth-store.ts +250 -0
  383. package/lib/claude-sessions.ts +181 -0
  384. package/lib/client-telemetry.ts +2 -0
  385. package/lib/fetch-with-timeout.ts +42 -0
  386. package/lib/share-card.ts +120 -0
  387. package/lib/telemetry.ts +12 -7
  388. package/package.json +8 -3
  389. package/scripts/install-telemetry.mjs +4 -0
  390. package/scripts/postinstall.mjs +89 -1
  391. package/src/audit/archetypes.ts +924 -0
  392. package/src/audit/cache.ts +132 -0
  393. package/src/audit/cli-adapters/claude.ts +97 -0
  394. package/src/audit/cli-adapters/codex.ts +56 -0
  395. package/src/audit/cli-adapters/copilot.ts +51 -0
  396. package/src/audit/cli-adapters/cursor.ts +51 -0
  397. package/src/audit/cli-adapters/gemini.ts +51 -0
  398. package/src/audit/cli-adapters/index.ts +70 -0
  399. package/src/audit/cli-adapters/opencode.ts +52 -0
  400. package/src/audit/cli-adapters/pi.ts +51 -0
  401. package/src/audit/cli-adapters/shared.ts +85 -0
  402. package/src/audit/dashboard-cache.ts +111 -0
  403. package/src/audit/detectors/find-from-root.ts +27 -0
  404. package/src/audit/detectors/git-commit-no-verify.ts +22 -0
  405. package/src/audit/detectors/index.ts +33 -0
  406. package/src/audit/detectors/prefer-edit-over-read-cat.ts +31 -0
  407. package/src/audit/detectors/prefer-edit-over-sed-awk.ts +27 -0
  408. package/src/audit/detectors/prefer-write-over-heredoc.ts +36 -0
  409. package/src/audit/detectors/redundant-cd-cwd.ts +28 -0
  410. package/src/audit/detectors/reread-after-edit.ts +58 -0
  411. package/src/audit/detectors/sleep-polling-loop.ts +34 -0
  412. package/src/audit/features.ts +268 -0
  413. package/src/audit/findings.ts +298 -0
  414. package/src/audit/index.ts +387 -0
  415. package/src/audit/replay.ts +147 -0
  416. package/src/audit/report.ts +349 -0
  417. package/src/audit/scoring.ts +174 -0
  418. package/src/audit/strengths.ts +138 -0
  419. package/src/audit/types.ts +216 -0
  420. package/src/auth/cli.ts +359 -0
  421. package/src/hooks/builtin-policies.ts +80 -1
  422. package/src/hooks/custom-hooks-loader.ts +19 -3
  423. package/src/hooks/first-run-nudge.ts +146 -0
  424. package/src/hooks/handler.ts +21 -102
  425. package/src/hooks/hook-telemetry.ts +2 -2
  426. package/src/hooks/install-prompt.ts +34 -4
  427. package/src/hooks/manager.ts +72 -5
  428. package/src/hooks/policy-evaluator.ts +16 -1
  429. package/src/hooks/policy-registry.ts +20 -0
  430. package/src/hooks/policy-types.ts +9 -0
  431. package/src/hooks/tool-name-canonicalize.ts +65 -0
  432. package/src/posthog-key.ts +9 -0
  433. package/.next/standalone/.next/server/app/icon.png/route/app-paths-manifest.json +0 -3
  434. package/.next/standalone/.next/server/app/icon.png/route.js +0 -7
  435. package/.next/standalone/.next/server/app/icon.png/route.js.nft.json +0 -1
  436. package/.next/standalone/.next/server/app/icon.png.body +0 -0
  437. package/.next/standalone/.next/server/app/icon.png.meta +0 -1
  438. package/.next/standalone/.next/server/chunks/[externals]_next_dist_0sqmaqd._.js +0 -3
  439. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06.arfm._.js +0 -3
  440. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0__i0h0._.js +0 -3
  441. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fe7_q_._.js +0 -3
  442. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fw.e.h._.js +0 -3
  443. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0pxn0e1._.js +0 -3
  444. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xv0jh2._.js +0 -3
  445. package/.next/standalone/.next/server/chunks/_next-internal_server_app_icon_png_route_actions_12.gv.r.js +0 -3
  446. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0bdfoky.js +0 -3
  447. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_05pz9._._.js +0 -3
  448. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0370~qj._.js +0 -3
  449. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09i-rsi._.js +0 -4
  450. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09v.ljl._.js +0 -3
  451. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0agrcb8._.js +0 -4
  452. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b7hkr~._.js +0 -3
  453. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ehh6vp._.js +0 -4
  454. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g8l0tu._.js +0 -3
  455. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0j4l6hl._.js +0 -3
  456. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0lp08ll._.js +0 -3
  457. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0yaqw._.js +0 -4
  458. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0o21f.o._.js +0 -3
  459. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0t8juvy._.js +0 -4
  460. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0uylufv._.js +0 -4
  461. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ymlddl._.js +0 -223
  462. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~03grs._.js +0 -3
  463. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__101v4_7._.js +0 -3
  464. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12y7xmt._.js +0 -3
  465. package/.next/standalone/.next/server/chunks/ssr/app_0cdqd9w._.js +0 -3
  466. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +0 -3
  467. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +0 -8
  468. package/.next/standalone/.next/server/chunks/ssr/app_projects_loading_tsx_13veom4._.js +0 -3
  469. package/.next/standalone/.next/server/chunks/ssr/node_modules_0ttbz1~._.js +0 -3
  470. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_06u0kr8._.js +0 -3
  471. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a_7sdg.js +0 -4
  472. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ef3uwk.js +0 -4
  473. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pbja1x.js +0 -4
  474. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0r6o0i2.js +0 -4
  475. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11y81~_.js +0 -4
  476. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_12or2kf.js +0 -4
  477. package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0mebn66._.js +0 -3
  478. package/.next/standalone/.next/static/chunks/03xhjwk6zhi8f.js +0 -1
  479. package/.next/standalone/.next/static/chunks/0f5p9plm.aqlp.css +0 -2
  480. package/.next/standalone/.next/static/chunks/0ffvlbgzgnlw7.js +0 -2
  481. package/.next/standalone/.next/static/chunks/0wq808vlc8l04.js +0 -6
  482. package/.next/standalone/.next/static/chunks/0zg~cpc5ysg6d.js +0 -1
  483. package/.next/standalone/.next/static/chunks/12pt~2f.c1sha.js +0 -1
  484. package/.next/standalone/.next/static/chunks/16vev.do1oho7.js +0 -4
  485. package/.next/standalone/.next/static/media/4fa387ec64143e14-s.0.qu-9752pffj.woff2 +0 -0
  486. package/.next/standalone/.next/static/media/5ce348bf30bf5439-s.0ee55_hj9qcer.woff2 +0 -0
  487. package/.next/standalone/.next/static/media/6306c77e7c8268e4-s.0mao5jbfbduzp.woff2 +0 -0
  488. package/.next/standalone/.next/static/media/797e433ab948586e-s.p.09zddjkbdep5a.woff2 +0 -0
  489. package/.next/standalone/.next/static/media/7d817b4c03b0c5f1-s.0uzt.a6d44yda.woff2 +0 -0
  490. package/.next/standalone/.next/static/media/bbc41e54d2fcbd21-s.0mvwgmnhv29no.woff2 +0 -0
  491. package/.next/standalone/.next/static/media/icon.0a.gigb3_x5pd.png +0 -0
  492. package/.next/standalone/app/icon.png +0 -0
  493. package/src/auth/login.ts +0 -104
  494. package/src/auth/logout.ts +0 -50
  495. package/src/auth/token-store.ts +0 -64
  496. package/src/relay/daemon.ts +0 -362
  497. package/src/relay/pid.ts +0 -76
  498. package/src/relay/queue.ts +0 -225
  499. /package/.next/standalone/.next/server/app/{icon.png → api/audit/run}/route/build-manifest.json +0 -0
  500. /package/.next/standalone/.next/server/app/{icon.png → api/audit/run}/route.js.map +0 -0
  501. /package/.next/standalone/.next/static/chunks/{03~yq9q893hmn.js → 0cz1d0mv5g_q7.js} +0 -0
  502. /package/.next/standalone/.next/static/chunks/{0a40sy4tk8ioe.js → 0wwt5o04i4zwh.js} +0 -0
  503. /package/.next/standalone/.next/static/chunks/{0n1n67imq.udf.js → 1__i9af9g78vd.js} +0 -0
  504. /package/.next/standalone/.next/static/chunks/{0w6fzf.07a24u.js → 2so39wg7mjbi7.js} +0 -0
  505. /package/.next/standalone/.next/static/chunks/{0xbo5nl6w4lka.js → 2wbuxnsvux4di.js} +0 -0
  506. /package/.next/standalone/.next/static/chunks/{0_s0luks5tay-.js → 35fgpd_feci6x.js} +0 -0
  507. /package/.next/standalone/.next/static/chunks/{15fklyav5py5m.js → 3xpjn3cdgm-7m.js} +0 -0
  508. /package/.next/standalone/.next/static/chunks/{17.b3suj8zjjj.js → 4448_qq7bd963.js} +0 -0
  509. /package/.next/standalone/.next/static/{s5Nn6KwDdLpPhjG3l2WNf → wU3ot-EKa5ApKoh785wp8}/_buildManifest.js +0 -0
  510. /package/.next/standalone/.next/static/{s5Nn6KwDdLpPhjG3l2WNf → wU3ot-EKa5ApKoh785wp8}/_clientMiddlewareManifest.js +0 -0
  511. /package/.next/standalone/.next/static/{s5Nn6KwDdLpPhjG3l2WNf → wU3ot-EKa5ApKoh785wp8}/_ssgManifest.js +0 -0
@@ -1471,7 +1471,8 @@ function requireCiGreenBeforeStop(ctx: PolicyContext): PolicyResult {
1471
1471
  r.status === "completed" &&
1472
1472
  r.conclusion !== "success" &&
1473
1473
  r.conclusion !== "skipped" &&
1474
- r.conclusion !== "cancelled",
1474
+ r.conclusion !== "cancelled" &&
1475
+ r.conclusion !== "neutral",
1475
1476
  );
1476
1477
  if (failing.length > 0) {
1477
1478
  const names = failing.map((r) => `"${r.name}"`).join(", ");
@@ -1502,6 +1503,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1502
1503
  {
1503
1504
  name: "sanitize-jwt",
1504
1505
  description: "Stop Claude from reading JWTs in tool responses",
1506
+ displayTitle: "Redacted JWT tokens from tool output",
1507
+ impact: "Stops the agent from echoing auth tokens it saw in command output.",
1505
1508
  fn: sanitizeJwt,
1506
1509
  match: { events: ["PostToolUse"] },
1507
1510
  defaultEnabled: true,
@@ -1510,6 +1513,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1510
1513
  {
1511
1514
  name: "sanitize-api-keys",
1512
1515
  description: "Stop Claude from reading API keys (OpenAI, Anthropic, GitHub, AWS, Stripe, Google) in tool responses",
1516
+ displayTitle: "Redacted API keys from tool output",
1517
+ impact: "Catches OpenAI / Anthropic / GitHub / AWS / Stripe / Google keys before the model sees them.",
1513
1518
  fn: sanitizeApiKeys,
1514
1519
  match: { events: ["PostToolUse"] },
1515
1520
  defaultEnabled: true,
@@ -1525,6 +1530,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1525
1530
  {
1526
1531
  name: "sanitize-connection-strings",
1527
1532
  description: "Stop Claude from reading database connection strings with embedded credentials in tool responses",
1533
+ displayTitle: "Redacted database connection strings from tool output",
1534
+ impact: "Strips embedded DB credentials before they reach the model context.",
1528
1535
  fn: sanitizeConnectionStrings,
1529
1536
  match: { events: ["PostToolUse"] },
1530
1537
  defaultEnabled: true,
@@ -1533,6 +1540,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1533
1540
  {
1534
1541
  name: "sanitize-private-key-content",
1535
1542
  description: "Stop Claude from reading PEM private key content in tool responses",
1543
+ displayTitle: "Redacted PEM private keys from tool output",
1544
+ impact: "Prevents private key bodies from being echoed into chat context.",
1536
1545
  fn: sanitizePrivateKeyContent,
1537
1546
  match: { events: ["PostToolUse"] },
1538
1547
  defaultEnabled: true,
@@ -1540,6 +1549,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1540
1549
  },
1541
1550
  {
1542
1551
  name: "sanitize-bearer-tokens",
1552
+ displayTitle: "Redacted bearer tokens from tool output",
1553
+ impact: "Strips Authorization: Bearer values before they hit the model.",
1543
1554
  description: "Stop Claude from reading Authorization Bearer tokens in tool responses",
1544
1555
  fn: sanitizeBearerTokens,
1545
1556
  match: { events: ["PostToolUse"] },
@@ -1548,6 +1559,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1548
1559
  },
1549
1560
  {
1550
1561
  name: "protect-env-vars",
1562
+ displayTitle: "Tried to dump environment variables to chat",
1563
+ impact: "Env vars often contain secrets; blocking `env` / `printenv` keeps them out of the model context.",
1551
1564
  description: "Prevent commands that read environment variables",
1552
1565
  fn: protectEnvVars,
1553
1566
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1556,6 +1569,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1556
1569
  },
1557
1570
  {
1558
1571
  name: "block-env-files",
1572
+ displayTitle: "Tried to read or write a .env file",
1573
+ impact: "`.env` files routinely contain API keys and DB credentials.",
1559
1574
  description: "Block reading/writing .env files",
1560
1575
  fn: blockEnvFiles,
1561
1576
  match: { events: ["PreToolUse"] },
@@ -1564,6 +1579,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1564
1579
  },
1565
1580
  {
1566
1581
  name: "block-read-outside-cwd",
1582
+ displayTitle: "Tried to read files outside your project directory",
1583
+ impact: "Stops the agent from peeking at neighboring repos or your home directory.",
1567
1584
  description: "Block file reads outside the session working directory",
1568
1585
  fn: blockReadOutsideCwd,
1569
1586
  match: { events: ["PreToolUse"], toolNames: ["Read", "Glob", "Grep", "Bash"] },
@@ -1579,6 +1596,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1579
1596
  },
1580
1597
  {
1581
1598
  name: "block-sudo",
1599
+ displayTitle: "Tried to run a command with sudo",
1600
+ impact: "Sudo gives the agent root — blocked unless explicitly allow-listed.",
1582
1601
  description: "Block sudo commands",
1583
1602
  fn: blockSudo,
1584
1603
  // PermissionRequest is Codex's escalation-approval event; fire the same
@@ -1596,6 +1615,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1596
1615
  },
1597
1616
  {
1598
1617
  name: "block-curl-pipe-sh",
1618
+ displayTitle: "Tried to pipe a downloaded script straight to a shell",
1619
+ impact: "`curl ... | sh` runs unverified remote code on your machine.",
1599
1620
  description: "Block piping downloads to shell",
1600
1621
  fn: blockCurlPipeSh,
1601
1622
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1604,6 +1625,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1604
1625
  },
1605
1626
  {
1606
1627
  name: "block-rm-rf",
1628
+ displayTitle: "Tried to recursively delete a system path",
1629
+ impact: "Catches catastrophic `rm -rf /` and Windows equivalents.",
1607
1630
  description: "Prevent catastrophic deletions",
1608
1631
  fn: blockRmRf,
1609
1632
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1619,6 +1642,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1619
1642
  },
1620
1643
  {
1621
1644
  name: "block-failproofai-commands",
1645
+ displayTitle: "Tried to disable or modify failproofai itself",
1646
+ impact: "Prevents the agent from turning off the policies that protect you.",
1622
1647
  description: "Block failproofai CLI commands and uninstallation",
1623
1648
  fn: blockFailproofaiCommands,
1624
1649
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1627,6 +1652,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1627
1652
  },
1628
1653
  {
1629
1654
  name: "block-kubectl",
1655
+ displayTitle: "Tried to run a Kubernetes command",
1656
+ impact: "kubectl can change live cluster state — gated unless allow-listed.",
1630
1657
  description: "Block kubectl commands (Kubernetes cluster mutations)",
1631
1658
  fn: blockKubectl,
1632
1659
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1642,6 +1669,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1642
1669
  },
1643
1670
  {
1644
1671
  name: "block-terraform",
1672
+ displayTitle: "Tried to run a Terraform/OpenTofu command",
1673
+ impact: "Terraform mutates real infrastructure — gated unless allow-listed.",
1645
1674
  description: "Block terraform and tofu (OpenTofu) commands",
1646
1675
  fn: blockTerraform,
1647
1676
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1657,6 +1686,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1657
1686
  },
1658
1687
  {
1659
1688
  name: "block-aws-cli",
1689
+ displayTitle: "Tried to run an AWS CLI command",
1690
+ impact: "AWS CLI can spend money or break prod — gated.",
1660
1691
  description: "Block aws CLI commands",
1661
1692
  fn: blockAwsCli,
1662
1693
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1672,6 +1703,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1672
1703
  },
1673
1704
  {
1674
1705
  name: "block-gcloud",
1706
+ displayTitle: "Tried to run a Google Cloud command",
1707
+ impact: "gcloud can spend money or break prod — gated.",
1675
1708
  description: "Block gcloud (Google Cloud) CLI commands",
1676
1709
  fn: blockGcloud,
1677
1710
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1687,6 +1720,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1687
1720
  },
1688
1721
  {
1689
1722
  name: "block-az-cli",
1723
+ displayTitle: "Tried to run an Azure CLI command",
1724
+ impact: "az can spend money or break prod — gated.",
1690
1725
  description: "Block az (Azure) CLI commands",
1691
1726
  fn: blockAzCli,
1692
1727
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1702,6 +1737,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1702
1737
  },
1703
1738
  {
1704
1739
  name: "block-helm",
1740
+ displayTitle: "Tried to run a Helm command",
1741
+ impact: "Helm releases mutate cluster state — gated.",
1705
1742
  description: "Block helm commands",
1706
1743
  fn: blockHelm,
1707
1744
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1717,6 +1754,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1717
1754
  },
1718
1755
  {
1719
1756
  name: "block-gh-pipeline",
1757
+ displayTitle: "Tried to run a privileged GitHub CLI pipeline command",
1758
+ impact: "Catches `gh workflow run`, `gh pr merge`, `gh secret set`, etc.",
1720
1759
  description: "Block gh CLI pipeline-trigger subcommands (workflow run, run rerun/cancel, pr merge, release create/delete, cache delete, secret set/delete)",
1721
1760
  fn: blockGhPipeline,
1722
1761
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1732,6 +1771,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1732
1771
  },
1733
1772
  {
1734
1773
  name: "block-secrets-write",
1774
+ displayTitle: "Tried to write a secret-key file",
1775
+ impact: "Stops the agent from creating `.pem`, `id_rsa`, `credentials.json`, etc.",
1735
1776
  description: "Block writing secret key files",
1736
1777
  fn: blockSecretsWrite,
1737
1778
  match: { events: ["PreToolUse"], toolNames: ["Write"] },
@@ -1747,6 +1788,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1747
1788
  },
1748
1789
  {
1749
1790
  name: "block-push-master",
1791
+ displayTitle: "Tried to push directly to main/master",
1792
+ impact: "Direct pushes to a protected branch bypass review.",
1750
1793
  description: "Block pushing to main/master",
1751
1794
  fn: blockPushMaster,
1752
1795
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1762,6 +1805,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1762
1805
  },
1763
1806
  {
1764
1807
  name: "block-force-push",
1808
+ displayTitle: "Tried to force-push",
1809
+ impact: "Force-pushes rewrite history and can clobber teammates' work.",
1765
1810
  description: "Prevent force-pushing to any branch",
1766
1811
  fn: blockForcePush,
1767
1812
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1770,6 +1815,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1770
1815
  },
1771
1816
  {
1772
1817
  name: "block-work-on-main",
1818
+ displayTitle: "Tried to commit or merge on main/master",
1819
+ impact: "Work should land via PR — direct commits skip review.",
1773
1820
  description: "Block git commits and merges on main/master branch",
1774
1821
  fn: blockWorkOnMain,
1775
1822
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1785,6 +1832,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1785
1832
  },
1786
1833
  {
1787
1834
  name: "warn-git-amend",
1835
+ displayTitle: "Used git commit --amend",
1836
+ impact: "Amending after a push rewrites history that others may have pulled.",
1788
1837
  description: "Warns before amending git commits, which rewrites history",
1789
1838
  fn: warnGitAmend,
1790
1839
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1793,6 +1842,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1793
1842
  },
1794
1843
  {
1795
1844
  name: "warn-git-stash-drop",
1845
+ displayTitle: "Tried to drop or clear git stash",
1846
+ impact: "Stash deletions are permanent and silent.",
1796
1847
  description: "Warns before permanently deleting stashed changes",
1797
1848
  fn: warnGitStashDrop,
1798
1849
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1801,6 +1852,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1801
1852
  },
1802
1853
  {
1803
1854
  name: "warn-all-files-staged",
1855
+ displayTitle: "Staged all files with git add -A / .",
1856
+ impact: "Wide stages routinely catch generated files or secrets you didn't intend to commit.",
1804
1857
  description: "Warns before staging all working tree files with git add -A / . / --all",
1805
1858
  fn: warnAllFilesStaged,
1806
1859
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1809,6 +1862,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1809
1862
  },
1810
1863
  {
1811
1864
  name: "warn-destructive-sql",
1865
+ displayTitle: "Ran destructive SQL (DROP / TRUNCATE / DELETE without WHERE)",
1866
+ impact: "Easy way to wipe a table by accident.",
1812
1867
  description: "Warn before executing destructive SQL (DROP/TRUNCATE/DELETE without WHERE) via database clients",
1813
1868
  fn: warnDestructiveSql,
1814
1869
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1817,6 +1872,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1817
1872
  },
1818
1873
  {
1819
1874
  name: "warn-schema-alteration",
1875
+ displayTitle: "Altered a database schema column",
1876
+ impact: "ALTER TABLE operations can lock tables and break readers.",
1820
1877
  description: "Warns before SQL schema changes (ALTER TABLE with column or rename operations)",
1821
1878
  fn: warnSchemaAlteration,
1822
1879
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1825,6 +1882,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1825
1882
  },
1826
1883
  {
1827
1884
  name: "warn-package-publish",
1885
+ displayTitle: "Tried to publish a package",
1886
+ impact: "Publishes are irreversible — `npm publish` / `cargo publish` shouldn't happen without intent.",
1828
1887
  description: "Warn before publishing packages to public registries (npm, PyPI, crates.io, RubyGems, etc.)",
1829
1888
  fn: warnPackagePublish,
1830
1889
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1833,6 +1892,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1833
1892
  },
1834
1893
  {
1835
1894
  name: "warn-global-package-install",
1895
+ displayTitle: "Installed a package globally",
1896
+ impact: "`npm i -g`, `cargo install`, `pip --user` pollute your machine outside the project.",
1836
1897
  description: "Warns before installing packages globally (npm -g, cargo install, etc.)",
1837
1898
  fn: warnGlobalPackageInstall,
1838
1899
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1841,6 +1902,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1841
1902
  },
1842
1903
  {
1843
1904
  name: "prefer-package-manager",
1905
+ displayTitle: "Used a non-preferred package manager",
1906
+ impact: "Mixing package managers creates lockfile churn for your team.",
1844
1907
  description: "Blocks non-preferred package managers and tells Claude to use an allowed one (e.g., uv instead of pip)",
1845
1908
  fn: preferPackageManager,
1846
1909
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1861,6 +1924,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1861
1924
  },
1862
1925
  {
1863
1926
  name: "warn-large-file-write",
1927
+ displayTitle: "Wrote a file larger than the configured threshold",
1928
+ impact: "Catches accidentally large file writes (logs, binaries, model dumps).",
1864
1929
  description: "Warn before writing files larger than 1MB (configurable via thresholdKb param)",
1865
1930
  fn: warnLargeFileWrite,
1866
1931
  match: { events: ["PreToolUse"], toolNames: ["Write"] },
@@ -1876,6 +1941,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1876
1941
  },
1877
1942
  {
1878
1943
  name: "warn-background-process",
1944
+ displayTitle: "Started a long-lived background process",
1945
+ impact: "Catches `nohup` / `&` / `screen` / `tmux` / `disown` patterns that the agent often forgets to clean up.",
1879
1946
  description: "Warns before starting detached or background processes",
1880
1947
  fn: warnBackgroundProcess,
1881
1948
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
@@ -1884,6 +1951,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1884
1951
  },
1885
1952
  {
1886
1953
  name: "warn-repeated-tool-calls",
1954
+ displayTitle: "Called the same tool 3+ times with identical arguments",
1955
+ impact: "Usually a sign of a stuck loop burning tokens.",
1887
1956
  description: "Warn when the same tool is called 3+ times with identical parameters",
1888
1957
  fn: warnRepeatedToolCalls,
1889
1958
  match: { events: ["PreToolUse"] },
@@ -1892,6 +1961,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1892
1961
  },
1893
1962
  {
1894
1963
  name: "require-commit-before-stop",
1964
+ displayTitle: "Stopped with uncommitted changes",
1965
+ impact: "Work not in a commit is invisible to teammates and easy to lose.",
1895
1966
  description: "Require all changes to be committed before Claude stops",
1896
1967
  fn: requireCommitBeforeStop,
1897
1968
  match: { events: ["Stop"] },
@@ -1900,6 +1971,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1900
1971
  },
1901
1972
  {
1902
1973
  name: "require-push-before-stop",
1974
+ displayTitle: "Stopped with unpushed commits",
1975
+ impact: "Local-only commits won't trigger CI or be reviewable.",
1903
1976
  description: "Require all commits to be pushed to remote before Claude stops",
1904
1977
  fn: requirePushBeforeStop,
1905
1978
  match: { events: ["Stop"] },
@@ -1920,6 +1993,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1920
1993
  },
1921
1994
  {
1922
1995
  name: "require-pr-before-stop",
1996
+ displayTitle: "Stopped without a PR for the branch",
1997
+ impact: "Branches without PRs don't get reviewed.",
1923
1998
  description: "Require a pull request to exist for the current branch before Claude stops",
1924
1999
  fn: requirePrBeforeStop,
1925
2000
  match: { events: ["Stop"] },
@@ -1935,6 +2010,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1935
2010
  },
1936
2011
  {
1937
2012
  name: "require-no-conflicts-before-stop",
2013
+ displayTitle: "Stopped with a branch that conflicts with main",
2014
+ impact: "Conflicting branches can't merge — surface them early.",
1938
2015
  description: "Require the current branch to merge cleanly with the base branch before Claude stops",
1939
2016
  fn: requireNoConflictsBeforeStop,
1940
2017
  match: { events: ["Stop"] },
@@ -1950,6 +2027,8 @@ export const BUILTIN_POLICIES: BuiltinPolicyDefinition[] = [
1950
2027
  },
1951
2028
  {
1952
2029
  name: "require-ci-green-before-stop",
2030
+ displayTitle: "Stopped with failing CI",
2031
+ impact: "Failing CI blocks deploy.",
1953
2032
  description: "Require CI checks to pass on the current HEAD commit before Claude stops (ignores stale runs on prior commits)",
1954
2033
  fn: requireCiGreenBeforeStop,
1955
2034
  match: { events: ["Stop"] },
@@ -18,6 +18,8 @@ import { hookLogWarn, hookLogError, hookLogInfo } from "./hook-logger";
18
18
  import { getCustomHooks, clearCustomHooks } from "./custom-hooks-registry";
19
19
  import { findDistIndex, rewriteFileTree, TMP_SUFFIX, cleanupTmpFiles } from "./loader-utils";
20
20
  import { findProjectConfigDir } from "./hooks-config";
21
+ import { trackHookEvent } from "./hook-telemetry";
22
+ import { getInstanceId } from "../../lib/telemetry-id";
21
23
  import type { CustomHook } from "./policy-types";
22
24
 
23
25
  const LOADING_KEY = "__FAILPROOFAI_LOADING_HOOKS__";
@@ -46,7 +48,10 @@ export function discoverPolicyFiles(dir: string): string[] {
46
48
  * Load a single policy file into the globalThis custom hooks registry.
47
49
  * Does NOT clear the registry — caller is responsible for that.
48
50
  */
49
- async function loadSingleFile(absPath: string, opts?: { strict?: boolean }): Promise<void> {
51
+ async function loadSingleFile(
52
+ absPath: string,
53
+ opts?: { strict?: boolean; conventionScope?: "project" | "user" },
54
+ ): Promise<void> {
50
55
  const g = globalThis as Record<string, unknown>;
51
56
  g[LOADING_KEY] = true;
52
57
 
@@ -62,6 +67,17 @@ async function loadSingleFile(absPath: string, opts?: { strict?: boolean }): Pro
62
67
  await import(/* webpackIgnore: true */ fileUrl);
63
68
  } catch (err) {
64
69
  const msg = err instanceof Error ? err.message : String(err);
70
+ const errorType = /Cannot find module|MODULE_NOT_FOUND|ENOENT/i.test(msg)
71
+ ? "module_not_found"
72
+ : /SyntaxError|Unexpected token/i.test(msg)
73
+ ? "syntax_error"
74
+ : "runtime_error";
75
+ void trackHookEvent(getInstanceId(), "custom_hooks_load_error", {
76
+ error_type: errorType,
77
+ is_convention: !!opts?.conventionScope,
78
+ convention_scope: opts?.conventionScope ?? null,
79
+ file_basename: basename(absPath),
80
+ });
65
81
  if (opts?.strict) throw new Error(`Failed to load custom hooks from ${absPath}: ${msg}`);
66
82
  hookLogError(`failed to load custom hooks from ${absPath}: ${msg}`);
67
83
  } finally {
@@ -148,7 +164,7 @@ export async function loadAllCustomHooks(
148
164
  const projectFiles = discoverPolicyFiles(projectDir);
149
165
  for (const file of projectFiles) {
150
166
  const hooksBefore = getCustomHooks().length;
151
- await loadSingleFile(file);
167
+ await loadSingleFile(file, { conventionScope: "project" });
152
168
  const newHooks = getCustomHooks().slice(hooksBefore);
153
169
  if (newHooks.length > 0) {
154
170
  conventionSources.push({
@@ -164,7 +180,7 @@ export async function loadAllCustomHooks(
164
180
  const userFiles = discoverPolicyFiles(userDir);
165
181
  for (const file of userFiles) {
166
182
  const hooksBefore = getCustomHooks().length;
167
- await loadSingleFile(file);
183
+ await loadSingleFile(file, { conventionScope: "user" });
168
184
  const newHooks = getCustomHooks().slice(hooksBefore);
169
185
  if (newHooks.length > 0) {
170
186
  conventionSources.push({
@@ -0,0 +1,146 @@
1
+ /**
2
+ * First-run nudge for `failproofai` (no-args invocation).
3
+ *
4
+ * Fires when a user runs the bare CLI without having installed any policies on
5
+ * any detected agent CLI. PostHog data showed only ~10% of npm-installed users
6
+ * ran `failproofai policies --install`; this prompt closes the awareness gap
7
+ * by offering to run that install inline.
8
+ *
9
+ * The hooks themselves are the sentinel — if any are installed for any
10
+ * detected CLI, we never prompt again. No separate state file needed.
11
+ *
12
+ * Honors `FAILPROOFAI_NO_FIRST_RUN=1` for opt-out, falls back to a short
13
+ * stderr hint in non-TTY contexts (CI, piped invocations).
14
+ */
15
+ import * as readline from "node:readline";
16
+
17
+ import { detectInstalledClis, getIntegration } from "./integrations";
18
+ import { installHooks } from "./manager";
19
+ import { trackHookEvent } from "./hook-telemetry";
20
+ import { getInstanceId } from "../../lib/telemetry-id";
21
+ import type { IntegrationType } from "./types";
22
+
23
+ type TTYIn = NodeJS.ReadableStream & { isTTY?: boolean };
24
+ type TTYOut = NodeJS.WritableStream & { isTTY?: boolean };
25
+
26
+ export interface FirstRunNudgeOptions {
27
+ stdin?: TTYIn;
28
+ stdout?: TTYOut;
29
+ }
30
+
31
+ async function emit(event: string, props: Record<string, unknown>): Promise<void> {
32
+ try {
33
+ await trackHookEvent(getInstanceId(), event, props);
34
+ } catch {
35
+ // Telemetry must never break first-run UX.
36
+ }
37
+ }
38
+
39
+ function anyHooksInstalled(detected: IntegrationType[]): boolean {
40
+ for (const id of detected) {
41
+ const integration = getIntegration(id);
42
+ for (const scope of integration.scopes) {
43
+ try {
44
+ if (integration.hooksInstalledInSettings(scope)) return true;
45
+ } catch {
46
+ // A broken settings file shouldn't suppress the nudge.
47
+ }
48
+ }
49
+ }
50
+ return false;
51
+ }
52
+
53
+ function clisLabel(detected: IntegrationType[]): string {
54
+ return detected.map((id) => getIntegration(id).displayName).join(", ");
55
+ }
56
+
57
+ async function promptYesNo(
58
+ stdin: TTYIn,
59
+ stdout: TTYOut,
60
+ ): Promise<"yes" | "no" | "sigint"> {
61
+ return new Promise((resolve) => {
62
+ const rl = readline.createInterface({ input: stdin, output: stdout });
63
+ let settled = false;
64
+ const finish = (answer: "yes" | "no" | "sigint") => {
65
+ if (settled) return;
66
+ settled = true;
67
+ rl.close();
68
+ resolve(answer);
69
+ };
70
+ rl.on("SIGINT", () => finish("sigint"));
71
+ rl.question("Install policies now? [Y/n] ", (raw) => {
72
+ const a = (raw ?? "").trim().toLowerCase();
73
+ if (a === "" || a === "y" || a === "yes") finish("yes");
74
+ else finish("no");
75
+ });
76
+ });
77
+ }
78
+
79
+ export async function maybeRunFirstRunNudge(opts: FirstRunNudgeOptions = {}): Promise<void> {
80
+ if (process.env.FAILPROOFAI_NO_FIRST_RUN === "1") return;
81
+
82
+ const stdin: TTYIn = opts.stdin ?? process.stdin;
83
+ const stdout: TTYOut = opts.stdout ?? process.stdout;
84
+
85
+ let detected: IntegrationType[];
86
+ try {
87
+ detected = detectInstalledClis();
88
+ } catch {
89
+ return;
90
+ }
91
+ if (detected.length === 0) return;
92
+
93
+ if (anyHooksInstalled(detected)) return;
94
+
95
+ const detectedProps = { detected_clis: detected, detected_count: detected.length };
96
+
97
+ if (!stdin.isTTY || !stdout.isTTY) {
98
+ stdout.write(
99
+ `\n[failproofai] No policies are installed. Run \`failproofai policies --install\` to set them up.\n` +
100
+ `[failproofai] Launching dashboard…\n\n`,
101
+ );
102
+ await emit("first_run_nudge_skipped_noninteractive", detectedProps);
103
+ return;
104
+ }
105
+
106
+ stdout.write(
107
+ `\n┌─ Failproof AI — first-run setup ────────────────────────────────────\n` +
108
+ `│ Detected agent CLI(s): ${clisLabel(detected)}\n` +
109
+ `│ Policies block unsafe actions (sudo, rm -rf /, secret leaks, …)\n` +
110
+ `│ before your agent runs them. Nothing is installed yet.\n` +
111
+ `└──────────────────────────────────────────────────────────────────────\n\n` +
112
+ ` Disable this prompt anytime: FAILPROOFAI_NO_FIRST_RUN=1\n\n`,
113
+ );
114
+
115
+ await emit("first_run_nudge_shown", detectedProps);
116
+
117
+ const answer = await promptYesNo(stdin, stdout);
118
+
119
+ if (answer === "sigint") {
120
+ await emit("first_run_nudge_declined", { ...detectedProps, reason: "sigint" });
121
+ process.exit(130);
122
+ }
123
+
124
+ if (answer === "no") {
125
+ await emit("first_run_nudge_declined", { ...detectedProps, reason: "user_no" });
126
+ return;
127
+ }
128
+
129
+ await emit("first_run_nudge_accepted", {
130
+ ...detectedProps,
131
+ target_scope: "user",
132
+ source: "first-run-nudge",
133
+ });
134
+
135
+ await installHooks(
136
+ undefined,
137
+ "user",
138
+ undefined,
139
+ false,
140
+ "first-run-nudge",
141
+ undefined,
142
+ false,
143
+ detected,
144
+ );
145
+ process.exit(0);
146
+ }