failproofai 0.0.11-beta.2 → 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 (475) 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]__0ts150~._.js → [root-of-the-server]__0ywoypf._.js} +2 -2
  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/{0bke.~atnsbeb.js → 0gdm-xaez4l7t.js} +1 -1
  259. package/.next/standalone/.next/static/chunks/{11w14gnqzprir.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/{0bv1oyxspkpkb.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/{0dvhi-prcsh3~.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 +223 -129
  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/client-telemetry.ts +2 -0
  328. package/.next/standalone/lib/fetch-with-timeout.ts +42 -0
  329. package/.next/standalone/lib/share-card.ts +120 -0
  330. package/.next/standalone/lib/telemetry.ts +12 -7
  331. package/.next/standalone/node_modules/@next/env/package.json +1 -1
  332. package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
  333. package/.next/standalone/node_modules/next/dist/client/dev/debug-channel.js +102 -2
  334. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +11 -11
  335. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +13 -13
  336. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +2 -2
  337. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  338. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  339. package/.next/standalone/node_modules/next/dist/server/app-render/action-handler.js +18 -8
  340. package/.next/standalone/node_modules/next/dist/server/config-schema.js +1 -0
  341. package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
  342. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  343. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  344. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  345. package/.next/standalone/node_modules/next/dist/server/lib/encode-cache-tag.js +45 -0
  346. package/.next/standalone/node_modules/next/dist/server/lib/implicit-tags.js +6 -3
  347. package/.next/standalone/node_modules/next/dist/server/lib/patch-fetch.js +5 -1
  348. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
  349. package/.next/standalone/node_modules/next/dist/server/web/spec-extension/revalidate.js +4 -3
  350. package/.next/standalone/node_modules/next/dist/server/web/spec-extension/unstable-cache.js +6 -2
  351. package/.next/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
  352. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  353. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  354. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  355. package/.next/standalone/node_modules/next/package.json +15 -15
  356. package/.next/standalone/node_modules/react/cjs/react.development.js +1 -1
  357. package/.next/standalone/node_modules/react/cjs/react.production.js +1 -1
  358. package/.next/standalone/node_modules/react/package.json +1 -1
  359. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +1 -1
  360. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +1 -1
  361. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.browser.production.js +3 -3
  362. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.edge.production.js +3 -3
  363. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.node.production.js +3 -3
  364. package/.next/standalone/node_modules/react-dom/cjs/react-dom.production.js +1 -1
  365. package/.next/standalone/node_modules/react-dom/package.json +2 -2
  366. package/.next/standalone/osv-scanner.toml +17 -0
  367. package/.next/standalone/package.json +8 -3
  368. package/.next/standalone/public/audit/fonts/bitcount-prop-single.woff2 +0 -0
  369. package/.next/standalone/public/icon.svg +1 -0
  370. package/.next/standalone/public/logo.svg +1 -0
  371. package/.next/standalone/server.js +1 -1
  372. package/.next/standalone/templates/bitcount-font/README.md +42 -0
  373. package/.next/standalone/templates/bitcount-font/bitcount-prop-single.woff2 +0 -0
  374. package/.next/standalone/templates/bitcount-font/bitcount.css +49 -0
  375. package/.next/standalone/templates/bitcount-font/fonts.ts.example +23 -0
  376. package/README.md +2 -1
  377. package/bin/failproofai.mjs +165 -144
  378. package/dist/cli.mjs +607 -1858
  379. package/lib/atomic-write.ts +67 -0
  380. package/lib/auth/api-server-client.ts +281 -0
  381. package/lib/auth/auth-store.ts +250 -0
  382. package/lib/client-telemetry.ts +2 -0
  383. package/lib/fetch-with-timeout.ts +42 -0
  384. package/lib/share-card.ts +120 -0
  385. package/lib/telemetry.ts +12 -7
  386. package/package.json +8 -3
  387. package/scripts/install-telemetry.mjs +4 -0
  388. package/src/audit/archetypes.ts +924 -0
  389. package/src/audit/cache.ts +21 -2
  390. package/src/audit/dashboard-cache.ts +111 -0
  391. package/src/audit/features.ts +268 -0
  392. package/src/audit/findings.ts +298 -0
  393. package/src/audit/index.ts +39 -21
  394. package/src/audit/replay.ts +29 -3
  395. package/src/audit/scoring.ts +174 -0
  396. package/src/audit/strengths.ts +138 -0
  397. package/src/audit/types.ts +24 -1
  398. package/src/auth/cli.ts +359 -0
  399. package/src/hooks/builtin-policies.ts +2 -1
  400. package/src/hooks/hook-telemetry.ts +2 -2
  401. package/src/hooks/policy-registry.ts +20 -0
  402. package/src/posthog-key.ts +9 -0
  403. package/.next/standalone/.next/server/app/icon.png/route/app-paths-manifest.json +0 -3
  404. package/.next/standalone/.next/server/app/icon.png/route.js +0 -7
  405. package/.next/standalone/.next/server/app/icon.png/route.js.nft.json +0 -1
  406. package/.next/standalone/.next/server/app/icon.png.body +0 -0
  407. package/.next/standalone/.next/server/app/icon.png.meta +0 -1
  408. package/.next/standalone/.next/server/chunks/[externals]_next_dist_0sqmaqd._.js +0 -3
  409. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06.arfm._.js +0 -3
  410. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0__i0h0._.js +0 -3
  411. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fe7_q_._.js +0 -3
  412. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fw.e.h._.js +0 -3
  413. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0pxn0e1._.js +0 -3
  414. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xv0jh2._.js +0 -3
  415. package/.next/standalone/.next/server/chunks/_next-internal_server_app_icon_png_route_actions_12.gv.r.js +0 -3
  416. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0bdfoky.js +0 -3
  417. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_05pz9._._.js +0 -3
  418. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01as125._.js +0 -3
  419. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0370~qj._.js +0 -3
  420. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09v.ljl._.js +0 -3
  421. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0agrcb8._.js +0 -4
  422. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b7hkr~._.js +0 -3
  423. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ehh6vp._.js +0 -4
  424. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g8l0tu._.js +0 -3
  425. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0j4l6hl._.js +0 -3
  426. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0k5n2kz._.js +0 -4
  427. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0lp08ll._.js +0 -3
  428. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0yaqw._.js +0 -4
  429. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0o21f.o._.js +0 -3
  430. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0t8juvy._.js +0 -4
  431. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0uylufv._.js +0 -4
  432. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ymlddl._.js +0 -223
  433. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~03grs._.js +0 -3
  434. package/.next/standalone/.next/server/chunks/ssr/app_0cdqd9w._.js +0 -3
  435. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +0 -3
  436. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +0 -8
  437. package/.next/standalone/.next/server/chunks/ssr/app_projects_loading_tsx_13veom4._.js +0 -3
  438. package/.next/standalone/.next/server/chunks/ssr/node_modules_0ttbz1~._.js +0 -3
  439. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_06u0kr8._.js +0 -3
  440. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a_7sdg.js +0 -4
  441. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ef3uwk.js +0 -4
  442. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pbja1x.js +0 -4
  443. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0r6o0i2.js +0 -4
  444. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11y81~_.js +0 -4
  445. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_12or2kf.js +0 -4
  446. package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0mebn66._.js +0 -3
  447. package/.next/standalone/.next/static/chunks/07kpqoo7kuckx.js +0 -6
  448. package/.next/standalone/.next/static/chunks/0azb~vy9ds_uy.js +0 -1
  449. package/.next/standalone/.next/static/chunks/0f5p9plm.aqlp.css +0 -2
  450. package/.next/standalone/.next/static/chunks/0ffvlbgzgnlw7.js +0 -2
  451. package/.next/standalone/.next/static/chunks/0spktq7xqab9h.js +0 -1
  452. package/.next/standalone/.next/static/chunks/118q3uljozd5z.js +0 -4
  453. package/.next/standalone/.next/static/chunks/12pt~2f.c1sha.js +0 -1
  454. package/.next/standalone/.next/static/media/4fa387ec64143e14-s.0.qu-9752pffj.woff2 +0 -0
  455. package/.next/standalone/.next/static/media/5ce348bf30bf5439-s.0ee55_hj9qcer.woff2 +0 -0
  456. package/.next/standalone/.next/static/media/6306c77e7c8268e4-s.0mao5jbfbduzp.woff2 +0 -0
  457. package/.next/standalone/.next/static/media/797e433ab948586e-s.p.09zddjkbdep5a.woff2 +0 -0
  458. package/.next/standalone/.next/static/media/7d817b4c03b0c5f1-s.0uzt.a6d44yda.woff2 +0 -0
  459. package/.next/standalone/.next/static/media/bbc41e54d2fcbd21-s.0mvwgmnhv29no.woff2 +0 -0
  460. package/.next/standalone/.next/static/media/icon.0a.gigb3_x5pd.png +0 -0
  461. package/.next/standalone/app/icon.png +0 -0
  462. package/src/audit/telemetry.ts +0 -113
  463. /package/.next/standalone/.next/server/app/{icon.png → api/audit/run}/route/build-manifest.json +0 -0
  464. /package/.next/standalone/.next/server/app/{icon.png → api/audit/run}/route.js.map +0 -0
  465. /package/.next/standalone/.next/static/chunks/{03~yq9q893hmn.js → 0cz1d0mv5g_q7.js} +0 -0
  466. /package/.next/standalone/.next/static/chunks/{0a40sy4tk8ioe.js → 0wwt5o04i4zwh.js} +0 -0
  467. /package/.next/standalone/.next/static/chunks/{0n1n67imq.udf.js → 1__i9af9g78vd.js} +0 -0
  468. /package/.next/standalone/.next/static/chunks/{0w6fzf.07a24u.js → 2so39wg7mjbi7.js} +0 -0
  469. /package/.next/standalone/.next/static/chunks/{0xbo5nl6w4lka.js → 2wbuxnsvux4di.js} +0 -0
  470. /package/.next/standalone/.next/static/chunks/{0_s0luks5tay-.js → 35fgpd_feci6x.js} +0 -0
  471. /package/.next/standalone/.next/static/chunks/{15fklyav5py5m.js → 3xpjn3cdgm-7m.js} +0 -0
  472. /package/.next/standalone/.next/static/chunks/{17.b3suj8zjjj.js → 4448_qq7bd963.js} +0 -0
  473. /package/.next/standalone/.next/static/{tGVQM5SE3NvbVu0gbAJm7 → wU3ot-EKa5ApKoh785wp8}/_buildManifest.js +0 -0
  474. /package/.next/standalone/.next/static/{tGVQM5SE3NvbVu0gbAJm7 → wU3ot-EKa5ApKoh785wp8}/_clientMiddlewareManifest.js +0 -0
  475. /package/.next/standalone/.next/static/{tGVQM5SE3NvbVu0gbAJm7 → wU3ot-EKa5ApKoh785wp8}/_ssgManifest.js +0 -0
@@ -0,0 +1,924 @@
1
+ /**
2
+ * Agent archetype catalog + classifier.
3
+ *
4
+ * Eight archetypes capture the failure-mode shape of a given coding agent.
5
+ * The classifier maps each policy/detector hit to one or more archetypes,
6
+ * weights them by hits × policy-severity, and picks the dominant signature.
7
+ *
8
+ * Used by the `/audit` dashboard to render an agent personality identity
9
+ * card.
10
+ *
11
+ * Variant model
12
+ * -------------
13
+ * Each archetype carries arrays of variants for taglines, keyword sets,
14
+ * descriptions, "common in" / "primary risk" / closing lines, and the
15
+ * signature code block. `pickArchetypeVariant(key, seed)` resolves those
16
+ * arrays down to a single concrete `ResolvedArchetype` using a small
17
+ * hash of the seed. Same user (same seed) → same variant on every render;
18
+ * different seeds → different cards.
19
+ */
20
+ import type { AuditResult } from "./types";
21
+ import {
22
+ deriveFeatures,
23
+ hashSeed,
24
+ MAPPABLE_KEYS,
25
+ ACTIVE_FAULT_KEYS,
26
+ type AuditFeatures,
27
+ } from "./features";
28
+
29
+ export type ArchetypeKey =
30
+ | "optimist"
31
+ | "cowboy"
32
+ | "explorer"
33
+ | "goldfish"
34
+ | "architect"
35
+ | "precision"
36
+ | "hammer"
37
+ | "ghost";
38
+
39
+ export interface SignatureLine {
40
+ arrow?: string;
41
+ body?: string;
42
+ comment?: string;
43
+ err?: string;
44
+ }
45
+
46
+ /**
47
+ * The raw archetype carries arrays of variants. Render code must pick one
48
+ * concrete variant via `pickArchetypeVariant` before consuming any of the
49
+ * variant fields.
50
+ */
51
+ export interface Archetype {
52
+ key: ArchetypeKey;
53
+ index: string;
54
+ name: string;
55
+ taglines: string[];
56
+ keywordSets: string[][]; // each entry is a 3-word set
57
+ descriptions: string[];
58
+ signatures: SignatureLine[][];
59
+ commons: string[];
60
+ risks: string[];
61
+ closings: string[];
62
+ secondary: ArchetypeKey;
63
+ }
64
+
65
+ /** A single resolved variant — what render code actually consumes. */
66
+ export interface ResolvedArchetype {
67
+ key: ArchetypeKey;
68
+ index: string;
69
+ name: string;
70
+ tagline: string;
71
+ keywords: string[];
72
+ description: string;
73
+ signature: SignatureLine[];
74
+ common: string;
75
+ risk: string;
76
+ closing: string;
77
+ secondary: ArchetypeKey;
78
+ }
79
+
80
+ export const ARCHETYPE_ORDER: ArchetypeKey[] = [
81
+ "optimist", "cowboy", "explorer", "goldfish",
82
+ "architect", "precision", "hammer", "ghost",
83
+ ];
84
+
85
+ export const ARCHETYPES: Record<ArchetypeKey, Archetype> = {
86
+ optimist: {
87
+ key: "optimist",
88
+ index: "01",
89
+ name: "the optimist",
90
+ taglines: [
91
+ "ships fast. retries with conviction. occasionally forgets it was already there.",
92
+ "moves first, reads later. every failure is just step one of the next attempt.",
93
+ "the floor is hope. the ceiling is also hope. there is no diagnosis in between.",
94
+ "if at first you don't succeed — try the exact same thing, with more energy.",
95
+ "writes confident code. burns confident tokens. neither knows the difference.",
96
+ "speed is a feature. so is the directory it's already in.",
97
+ ],
98
+ keywordSets: [
99
+ ["pace", "conviction", "forgetful"],
100
+ ["fast", "trusting", "redundant"],
101
+ ["eager", "looping", "stateful"],
102
+ ["bold", "unblocked", "drifty"],
103
+ ["forward", "hopeful", "wasteful"],
104
+ ["shipper", "retrier", "doubler"],
105
+ ],
106
+ descriptions: [
107
+ "moves at pace. doesn't second-guess itself — which is mostly a feature. when something fails, it tries again: same args, same hope. when uncertain about its location, it prepends the directory anyway. just in case. the optimism is earned. this agent gets things done. it just occasionally burns tokens proving it.",
108
+ "ships first, asks questions never. the optimist is the agent that always has momentum — which is exactly the problem. cwd assumptions stack up. retries pile up. the work gets done. it's just twice as expensive as it needed to be.",
109
+ "high trust in its own state model. low evidence that the model is correct. when things go sideways, the optimist's first move is to re-run the same call with the same args and a renewed sense of conviction. mostly it's right. when it's wrong, it's wrong loudly.",
110
+ "the optimist treats every error as a transient. cd before every command, just in case. prepend the absolute path, just in case. retry on any non-zero exit, just in case. the just-in-case tax is real. so is the velocity.",
111
+ ],
112
+ signatures: [
113
+ [
114
+ { arrow: "→", body: "cd /Users/n/blrnow/api &&", comment: " # (already here)" },
115
+ { arrow: "→", body: 'read_file("src/api/router.ts")', err: " → ENOENT × 6" },
116
+ { arrow: "→", body: "retries: 6. diagnosis: 0." },
117
+ ],
118
+ [
119
+ { arrow: "→", body: "cd /Users/n/proj &&", comment: " # cwd already /Users/n/proj" },
120
+ { arrow: "→", body: "cd /Users/n/proj && ls" },
121
+ { arrow: "→", body: "cd /Users/n/proj && cat package.json" },
122
+ ],
123
+ [
124
+ { arrow: "→", body: "npm install", err: " → ETIMEDOUT" },
125
+ { arrow: "→", body: "npm install", err: " → ETIMEDOUT" },
126
+ { arrow: "→", body: "npm install", comment: " # third time's the charm" },
127
+ ],
128
+ [
129
+ { arrow: "→", body: 'cat "package.json" | head', comment: " # ← read 1" },
130
+ { arrow: "→", body: 'cat "package.json"', comment: " # ← read 2" },
131
+ { comment: "# could've been one Read tool call." },
132
+ ],
133
+ ],
134
+ commons: [
135
+ "fast-iteration solo projects, early-stage prototypes, builders who ship daily",
136
+ "weekend hacks, hackathon repos, side-projects under active push",
137
+ "early-stage codebases without a strong test harness yet",
138
+ "agents given task framing without explicit success criteria",
139
+ "loose-context sessions where exact cwd state is ambiguous",
140
+ ],
141
+ risks: [
142
+ "token waste, retry spirals, stale state assumptions",
143
+ "redundant cd's, repeated reads, retries without diagnosis",
144
+ "false confidence in cwd, doubled-up shell setup, idle loops",
145
+ "rate-limit hits from blind retries on transient failures",
146
+ "context bloat from re-reading the same files three different ways",
147
+ ],
148
+ closings: [
149
+ "the optimism is a feature. the waste is not.",
150
+ "ship fast. retry less.",
151
+ "energy is good. diagnosis is better.",
152
+ "momentum keeps. the second cd does not.",
153
+ "trust the work. verify the state.",
154
+ ],
155
+ secondary: "explorer",
156
+ },
157
+ cowboy: {
158
+ key: "cowboy",
159
+ index: "02",
160
+ name: "the cowboy",
161
+ taglines: [
162
+ "asks for forgiveness, not permission. git push --force is a philosophy.",
163
+ "your branch protection rules are the only thing between this agent and prod.",
164
+ "fast hands, faster history rewrites. the audit log is for other people.",
165
+ "high trust in its own judgment. low patience for code review.",
166
+ "main is just a branch. branch protection is just a suggestion. ship.",
167
+ "ships hot. reverts later. occasionally needs an adult in the room.",
168
+ ],
169
+ keywordSets: [
170
+ ["bold", "forceful", "ungoverned"],
171
+ ["direct", "destructive", "swift"],
172
+ ["fearless", "reckless", "loud"],
173
+ ["assertive", "loose", "unblocked"],
174
+ ["confident", "skipping", "main-bound"],
175
+ ["sudo-curious", "force-prone", "fast"],
176
+ ],
177
+ descriptions: [
178
+ "high output. low ceremony. the cowboy gets code onto main faster than anyone — and your branch protection rules are the only thing standing between this agent and your production database. not reckless. just confident. in a way that requires guardrails.",
179
+ "doesn't see commits. sees a delivery mechanism. force-pushes when history is inconvenient. drops into main when feature branches feel slow. the cowboy is the agent every team accidentally creates, and every team eventually wants policies for.",
180
+ "the velocity is unmatched. the blast radius is also unmatched. this agent will solve your problem and rewrite three years of git history while it's at it. not malicious. just allergic to friction.",
181
+ "treats every guardrail as a temporary obstacle. sudo here, --no-verify there, a quick rm -rf to clean up. it's getting work done — by sidestepping every check that might slow it down.",
182
+ ],
183
+ signatures: [
184
+ [
185
+ { arrow: "→", body: "git push origin main --force" },
186
+ { arrow: "!", body: "remote: branch protection rule", comment: " # caught it" },
187
+ { arrow: "→", body: "git push origin HEAD:main", err: " # non-fast-forward, again." },
188
+ ],
189
+ [
190
+ { arrow: "→", body: "rm -rf ./node_modules && rm -rf ./dist" },
191
+ { arrow: "→", body: 'git commit -am "wip" --no-verify' },
192
+ { arrow: "→", body: "git push --force-with-lease" },
193
+ ],
194
+ [
195
+ { arrow: "→", body: "sudo systemctl restart postgres" },
196
+ { arrow: "→", body: "kubectl delete pod api-prod-7f4 --grace-period=0" },
197
+ { arrow: "→", body: 'echo "should be fine"' },
198
+ ],
199
+ [
200
+ { arrow: "→", body: "git checkout main && git merge feature --ff-only" },
201
+ { arrow: "!", body: "merge would fail" },
202
+ { arrow: "→", body: "git reset --hard feature && git push" },
203
+ ],
204
+ ],
205
+ commons: [
206
+ "solo repos, weekend projects, founders writing their own infra",
207
+ "agents with broad shell access and no PR-gating workflow",
208
+ "early-stage product code where speed > governance",
209
+ "ops scripts, one-off migrations, cleanup tasks",
210
+ "sandboxes that look like production until they aren't",
211
+ ],
212
+ risks: [
213
+ "branch protection bypass, accidental main commits, revert overhead",
214
+ "destructive shell operations, unrecoverable state changes",
215
+ "force-pushed history, lost commits, irreproducible deploys",
216
+ "sudo escalations, container blast radius, infra mutations without rollback plan",
217
+ "policy bypass via --no-verify, --force, and friends",
218
+ ],
219
+ closings: [
220
+ "the pace is real. the risk is too.",
221
+ "speed is a feature. guardrails are not optional.",
222
+ "ship hot. revert clean.",
223
+ "a fast agent without policies is a fast incident.",
224
+ "confidence is fine. consent is better.",
225
+ ],
226
+ secondary: "hammer",
227
+ },
228
+ explorer: {
229
+ key: "explorer",
230
+ index: "03",
231
+ name: "the explorer",
232
+ taglines: [
233
+ "technically brilliant. occasionally reads your ~/.aws/credentials while doing it.",
234
+ "follows every reference. opens every neighbor. some neighbors aren't yours.",
235
+ "thorough to a fault. the fault is usually a .env file two directories up.",
236
+ "knows the codebase deeply. knows your secrets drawer almost as well.",
237
+ "wide-context by default. wide-context isn't always free.",
238
+ "great at maps. less great at fences.",
239
+ ],
240
+ keywordSets: [
241
+ ["curious", "thorough", "leaky"],
242
+ ["wide", "deep", "drifting"],
243
+ ["mapping", "tracing", "boundary-blind"],
244
+ ["broad", "diligent", "porous"],
245
+ ["thinking", "wandering", "exposing"],
246
+ ["research-mode", "context-hungry", "secret-adjacent"],
247
+ ],
248
+ descriptions: [
249
+ "curious by nature. reads broadly, thinks laterally, sometimes follows a symlink somewhere it wasn't meant to go. this isn't malice — it's thoroughness that hasn't learned boundaries yet. the explorer builds great things. it just occasionally needs someone to close the door to the secrets drawer.",
250
+ "the explorer treats every file path as part of the working context. ~/.aws/credentials is just another config file to it. ../other-repo/.env is just one more reference. the work is genuinely better-informed because of this. the credentials are also genuinely in the context window.",
251
+ "no malice. no shortcuts. just a thoroughness that follows references straight through your boundary fence. great research instincts. needs explicit walls.",
252
+ "broad-context is a feature in this agent. it's also why your private keys show up in a chat log every two weeks. the curiosity is good. the perimeter needs help.",
253
+ ],
254
+ signatures: [
255
+ [
256
+ { arrow: "→", body: "cat /Users/n/.aws/credentials" },
257
+ { arrow: "→", body: "cat ../other-repo/.env" },
258
+ { arrow: "→", body: "cat ~/.config/openai/key" },
259
+ ],
260
+ [
261
+ { arrow: "→", body: 'find / -name "*.env" 2>/dev/null', comment: " # full-FS scan" },
262
+ { arrow: "→", body: 'grep -r "AKIA" /Users/n/' },
263
+ { arrow: "→", body: 'cat "$(find ~ -name credentials -print -quit)"' },
264
+ ],
265
+ [
266
+ { arrow: "→", body: "ls ~/.ssh/" },
267
+ { arrow: "→", body: "cat ~/.ssh/config" },
268
+ { arrow: "→", body: "cat ~/.ssh/id_rsa", comment: " # for context" },
269
+ ],
270
+ [
271
+ { arrow: "→", body: "open ../sibling-project" },
272
+ { arrow: "→", body: "git log --all --source ../sibling-project" },
273
+ { arrow: "→", body: "cat ../sibling-project/.env.production" },
274
+ ],
275
+ ],
276
+ commons: [
277
+ "multi-project setups, agents with broad file access, complex monorepos",
278
+ "research-style work — debugging, refactoring, cross-repo investigations",
279
+ "macOS / linux dev boxes with shared credential directories",
280
+ "agents without explicit cwd-restriction policies",
281
+ "long-running sessions where context tends to drift outward",
282
+ ],
283
+ risks: [
284
+ "credential exposure, unintended cross-project reads, secrets landing in context",
285
+ ".env file leaks, AWS / OpenAI / GCP key exfiltration through chat logs",
286
+ "neighboring-repo bleed, business-secret cross-contamination",
287
+ "global filesystem scans that surface sensitive paths",
288
+ "broad reads that quietly inflate context window with private data",
289
+ ],
290
+ closings: [
291
+ "the curiosity stays. the credentials stay private.",
292
+ "wide is fine. wide-and-outside-the-fence is not.",
293
+ "thorough is a feature. perimeter is a setting.",
294
+ "research deep. boundary clean.",
295
+ "knows everything. shares nothing it shouldn't.",
296
+ ],
297
+ secondary: "architect",
298
+ },
299
+ goldfish: {
300
+ key: "goldfish",
301
+ index: "04",
302
+ name: "the goldfish",
303
+ taglines: [
304
+ "long sessions, short memory. every turn is a fresh start. some turns are a little too fresh.",
305
+ "great at the first 40 turns. inventive for the next 40.",
306
+ "past 80% context, history becomes a draft.",
307
+ "remembers the task. forgets which file the task was in.",
308
+ "ambitious. earnest. quietly making things up around turn 50.",
309
+ "long-context vibes. short-context recall.",
310
+ ],
311
+ keywordSets: [
312
+ ["ambitious", "drifting", "inventive"],
313
+ ["sprawling", "creative", "post-cache"],
314
+ ["long-running", "hallucinatory", "well-meaning"],
315
+ ["earnest", "context-full", "fabricating"],
316
+ ["sustained", "forgetful", "confabulating"],
317
+ ["marathon", "drifted", "compounding"],
318
+ ],
319
+ descriptions: [
320
+ "great at long tasks. not great at remembering which long task it's on. past 80% context, the goldfish starts inventing history — citing files it never opened, referencing edits it never made. not lying. just filling gaps with confidence. the longer the session, the more creative the memory.",
321
+ "the goldfish is what every agent looks like after turn 50. confident about prior work it didn't do. mistakenly sure of file contents it never read. the work it actually delivered is real. the context around it is increasingly fictional.",
322
+ "ambition outlasts recall. once context fills, the goldfish smooths over gaps with plausible inventions: a fake earlier edit, a misremembered file path, a hallucinated test that passed. it's never trying to mislead. it just doesn't always know what's true anymore.",
323
+ "long-task specialist with a memory ceiling. the work compounds beautifully until it doesn't, and then it compounds wrongly. needs session breaks more than it needs encouragement.",
324
+ ],
325
+ signatures: [
326
+ [
327
+ { comment: "# turn 47/52 — ctx 82% full" },
328
+ { comment: '# agent: "as we saw earlier in auth.ts…"' },
329
+ { comment: "# auth.ts was never opened this session." },
330
+ ],
331
+ [
332
+ { comment: "# turn 63 — context 91%" },
333
+ { arrow: "→", body: 'apply_edit("src/auth.ts", { ... })' },
334
+ { comment: "# agent: \"reverting my earlier change.\" # there was no earlier change." },
335
+ ],
336
+ [
337
+ { comment: "# turn 51 — fabricated test reference" },
338
+ { arrow: "→", body: 'run("npm test src/auth.test.ts")', err: " → no such file" },
339
+ { comment: '# agent: "the test we wrote earlier." # no such test exists.' },
340
+ ],
341
+ [
342
+ { comment: "# session-time 3h 14m" },
343
+ { comment: "# context: 88% — auto-compress in 4 turns" },
344
+ { comment: "# next plan cites 3 files only one of which exists." },
345
+ ],
346
+ ],
347
+ commons: [
348
+ "long-running refactor sessions, complex multi-file tasks, agents without session breaks",
349
+ "auto-driven coding loops with no human turn between iterations",
350
+ "tasks that span hours or days without explicit memory checkpoints",
351
+ "open-ended migrations and refactors with diffuse success criteria",
352
+ "scripted swarms where each agent inherits a long prior transcript",
353
+ ],
354
+ risks: [
355
+ "context drift, hallucinated prior work, compounding errors in long sessions",
356
+ "fabricated file references, invented function signatures, ghost edits",
357
+ "tests cited that don't exist, edits remembered that didn't happen",
358
+ "confident misstatements compounding into wrong-architecture deliverables",
359
+ "auto-compression discarding the load-bearing details and keeping the noise",
360
+ ],
361
+ closings: [
362
+ "the ambition is good. the context budget is not.",
363
+ "remember less. checkpoint more.",
364
+ "long is fine. drifted is expensive.",
365
+ "ambition is welcome. invention is not.",
366
+ "fresh sessions beat creative ones.",
367
+ ],
368
+ secondary: "optimist",
369
+ },
370
+ architect: {
371
+ key: "architect",
372
+ index: "05",
373
+ name: "the paranoid architect",
374
+ taglines: [
375
+ "has never shipped a bug it didn't catch first. also hasn't shipped since tuesday.",
376
+ "reads the same file from two different paths. just to be sure.",
377
+ "verifies twice, edits maybe.",
378
+ "safest agent in the room. also the one nobody waits for.",
379
+ "would rather diagnose for an hour than retry for a second.",
380
+ "extremely careful. extremely slow. extremely correct.",
381
+ ],
382
+ keywordSets: [
383
+ ["methodical", "safe", "slow"],
384
+ ["thorough", "verifying", "circular"],
385
+ ["careful", "patient", "redundant"],
386
+ ["double-checking", "guarded", "deliberate"],
387
+ ["safety-first", "loop-prone", "anchored"],
388
+ ["measured", "audited", "looping"],
389
+ ],
390
+ descriptions: [
391
+ "methodical. thorough. reads the same file from two different paths, just to be sure. verifies before every write. double-checks the package.json before running anything. the paranoid architect rarely makes mistakes — because it rarely finishes fast enough to make them. your safest agent. your slowest agent.",
392
+ "safety is the architect's love language. read the file. re-read it from a different path. verify the cwd. check the lockfile. run the test before writing. run it again after. the work is correct. the work is also six times more expensive than it had to be.",
393
+ "the architect's mental model is built on triangulation: every fact must be confirmed from two independent reads. when it works, you ship near-zero bugs. when it doesn't, you ship near-zero features.",
394
+ "extremely careful. extremely slow. extremely correct. the architect rarely makes mistakes — but it also rarely makes deadlines. the safety is genuine; so is the cost.",
395
+ ],
396
+ signatures: [
397
+ [
398
+ { arrow: "→", body: 'read_file("src/api/router.ts")', comment: " # read 1" },
399
+ { arrow: "→", body: 'read_file("./src/api/router.ts")', comment: " # read 2" },
400
+ { arrow: "→", body: "ls src/api/", comment: " # just confirming" },
401
+ ],
402
+ [
403
+ { arrow: "→", body: 'read_file("package.json")' },
404
+ { arrow: "→", body: 'read_file("./package.json")' },
405
+ { arrow: "→", body: "cat package.json | jq .scripts", comment: " # one more time" },
406
+ ],
407
+ [
408
+ { arrow: "→", body: "git status", comment: " # check 1" },
409
+ { arrow: "→", body: "git status --short", comment: " # check 2" },
410
+ { arrow: "→", body: "git diff --stat", comment: " # check 3" },
411
+ ],
412
+ [
413
+ { arrow: "→", body: 'apply_edit("src/foo.ts", { ... })' },
414
+ { arrow: "→", body: 'read_file("src/foo.ts")', comment: " # verifying the edit landed" },
415
+ { arrow: "→", body: 'read_file("src/foo.ts")', comment: " # again, just to be sure" },
416
+ ],
417
+ ],
418
+ commons: [
419
+ "production systems, high-stakes codebases, builders with strong safety instincts",
420
+ "regulated codebases (fin / med / compliance) where bugs are expensive",
421
+ "teams burned by past prod incidents that hardened review norms",
422
+ "agents instructed with strong 'verify everything' system prompts",
423
+ "post-incident codebases recovering from a recent outage",
424
+ ],
425
+ risks: [
426
+ "token overhead, slow sessions, redundant verification loops",
427
+ "verification cycles that eat 3× the budget of the actual change",
428
+ "stalled progress on otherwise routine edits",
429
+ "checkpoint loops that read the same file 6 times in a row",
430
+ "over-caution masking simple problems behind ceremony",
431
+ ],
432
+ closings: [
433
+ "safety is a feature. so is finishing.",
434
+ "double-check is fine. quadruple-check is not.",
435
+ "careful is good. moving is also good.",
436
+ "rigor wins. rigor twice is just slower.",
437
+ "verify once. ship once.",
438
+ ],
439
+ secondary: "precision",
440
+ },
441
+ precision: {
442
+ key: "precision",
443
+ index: "06",
444
+ name: "the precision builder",
445
+ taglines: [
446
+ "in. done. out. your agent doesn't linger.",
447
+ "small footprint. right calls. correct exits.",
448
+ "few findings isn't no findings. but it's close.",
449
+ "the rhythm is dialed in. the rest is iteration.",
450
+ "every call is intentional. every session ends cleanly.",
451
+ "minimal noise. maximum signal. occasional smugness.",
452
+ ],
453
+ keywordSets: [
454
+ ["clean", "focused", "minimal"],
455
+ ["surgical", "tight", "deliberate"],
456
+ ["disciplined", "concise", "intentional"],
457
+ ["measured", "exact", "trim"],
458
+ ["calibrated", "small-radius", "complete"],
459
+ ["dialed-in", "right-sized", "low-noise"],
460
+ ],
461
+ descriptions: [
462
+ "minimal footprint. focused calls. gets in, does the work, gets out. the precision builder is what every agent aspires to be — and what most agents aren't yet. few findings don't mean no findings. but it means your agent has found its rhythm. the gap between here and s-tier is smaller than you think.",
463
+ "tight loops. correct tools. clean exits. the precision builder treats each tool call like it has a budget — because it does. nothing redundant. nothing wasteful. when this agent finishes, the work is done and the transcript is short.",
464
+ "this is what every agent aspires to be. surgical reads. matched edits. test runs that actually verify the right thing. precision is rare. when you see it, you've earned it.",
465
+ "minimal blast radius. minimal token waste. minimal surprises. the precision builder is what your agent looks like after enough iteration loops. respect.",
466
+ ],
467
+ signatures: [
468
+ [
469
+ { arrow: "→", body: "clean tool calls. right paths, right args." },
470
+ { arrow: "→", body: "sessions end when the task ends." },
471
+ { arrow: "→", body: "no redundant reads. no retry storms." },
472
+ ],
473
+ [
474
+ { arrow: "→", body: 'read_file("src/foo.ts")', comment: " # one read" },
475
+ { arrow: "→", body: 'apply_edit("src/foo.ts", { ... })', comment: " # one edit" },
476
+ { arrow: "→", body: 'run("bun test src/foo.test.ts")', comment: " # green ✓" },
477
+ ],
478
+ [
479
+ { arrow: "→", body: "git status" },
480
+ { arrow: "→", body: "git add -p && git commit -m \"fix: ...\"" },
481
+ { arrow: "→", body: "git push", comment: " # session done." },
482
+ ],
483
+ [
484
+ { arrow: "→", body: 'grep -rn "useFoo" src/' },
485
+ { arrow: "→", body: 'apply_edit("src/hooks/use-foo.ts")' },
486
+ { arrow: "→", body: 'run("bun test")', comment: " # all green." },
487
+ ],
488
+ ],
489
+ commons: [
490
+ "mature agents, heavily policy-enforced setups, builders who've iterated for a while",
491
+ "teams running failproofai for ≥ a week with policies tuned",
492
+ "experienced operators who curate their tool list and CLI flags",
493
+ "codebases with strong test coverage that reward intentional edits",
494
+ "agents kept on a tight cwd-restricted leash",
495
+ ],
496
+ risks: [
497
+ "low finding count can mask edge cases that haven't surfaced yet",
498
+ "narrow scope might be hiding work the agent isn't being asked to do",
499
+ "small-radius work can plateau before it surfaces deeper issues",
500
+ "few findings can read as 'untested' rather than 'safe'",
501
+ "complacency — the rhythm works until the task shape changes",
502
+ ],
503
+ closings: [
504
+ "rare. keep it that way.",
505
+ "few findings. real signal. respect.",
506
+ "this is the rhythm. don't break it.",
507
+ "minimal is hard-earned. defend it.",
508
+ "you're already past the agent learning curve.",
509
+ ],
510
+ secondary: "ghost",
511
+ },
512
+ hammer: {
513
+ key: "hammer",
514
+ index: "07",
515
+ name: "the hammer",
516
+ taglines: [
517
+ "when something doesn't work, it tries the exact same thing again. harder.",
518
+ "diagnosis-light. repetition-heavy. mostly burns tokens with conviction.",
519
+ "the first call failed. so did the next six. the seventh probably won't.",
520
+ "no diagnosis, no backoff, no arg change. just the same call, louder.",
521
+ "the failure mode is not learning. the failure mode is also the strategy.",
522
+ "every retry is identical. every retry is also confident.",
523
+ ],
524
+ keywordSets: [
525
+ ["determined", "repetitive", "unbacked"],
526
+ ["looping", "stubborn", "unblocked"],
527
+ ["unchanging", "burning", "convicted"],
528
+ ["sticky", "spiraling", "diagnosis-free"],
529
+ ["repeated", "uncorrected", "headstrong"],
530
+ ["unchanged-args", "no-backoff", "patient-failure"],
531
+ ],
532
+ descriptions: [
533
+ "determined. possibly to a fault. the hammer's first response to failure is repetition. no diagnosis, no arg change, no backoff. just the same call, six times, under 90 seconds, with conviction. occasionally works. mostly burns tokens and stalls the session. needs a budget more than it needs encouragement.",
534
+ "the hammer treats every transient as a signal-to-retry. it never widens the search, never alters the args, never escalates. just runs the same failing call until either the call starts working or someone notices the session has stalled.",
535
+ "the diagnosis instinct is missing. when something fails, the hammer's first move is to repeat. when that fails too, it's to repeat. and again. eventually it works, or eventually the session gets killed. either way, the model is unchanged.",
536
+ "high persistence. low introspection. the hammer is what your agent becomes when you don't give it a budget — or a reason to think differently between attempts.",
537
+ ],
538
+ signatures: [
539
+ [
540
+ { arrow: "→", body: 'read_file("src/api/router.ts")', err: " → ENOENT" },
541
+ { arrow: "→", body: 'read_file("src/api/router.ts")', err: " → ENOENT" },
542
+ { arrow: "→", body: 'read_file("src/api/router.ts")', err: " → ENOENT" },
543
+ { comment: "# 6× total. file is at src/router.ts." },
544
+ ],
545
+ [
546
+ { arrow: "→", body: 'run("bun test")', err: " → exit 1" },
547
+ { arrow: "→", body: 'run("bun test")', err: " → exit 1" },
548
+ { arrow: "→", body: 'run("bun test")', err: " → exit 1" },
549
+ { comment: "# same args. same failure. four more attempts queued." },
550
+ ],
551
+ [
552
+ { arrow: "→", body: 'sleep 1; pgrep -f "build"' },
553
+ { arrow: "→", body: 'sleep 1; pgrep -f "build"' },
554
+ { arrow: "→", body: 'sleep 1; pgrep -f "build"' },
555
+ { comment: "# polling loop. no timeout, no break condition." },
556
+ ],
557
+ [
558
+ { arrow: "→", body: 'curl https://api.example.com/v1/foo', err: " → 502" },
559
+ { arrow: "→", body: 'curl https://api.example.com/v1/foo', err: " → 502" },
560
+ { arrow: "→", body: 'curl https://api.example.com/v1/foo', err: " → 502" },
561
+ { comment: "# no backoff. no jitter. no API status check." },
562
+ ],
563
+ ],
564
+ commons: [
565
+ "agents without failure-handling policies, complex directory structures, ambiguous task framing",
566
+ "tasks where the agent doesn't have an obvious 'try-another-angle' move",
567
+ "transient-failure scenarios (rate limits, flaky tests, network blips)",
568
+ "agents without a per-task retry budget",
569
+ "tool-call patterns where the args themselves are the problem",
570
+ ],
571
+ risks: [
572
+ "token spirals, stalled sessions, no diagnostic signal ever surfaces",
573
+ "rate-limit overruns, API ban-risk, infinite poll loops",
574
+ "wasted minutes on retries when one diff would have fixed it",
575
+ "transient errors mistaken for permanent ones (and vice versa)",
576
+ "no learning between attempts — same outcome, more cost",
577
+ ],
578
+ closings: [
579
+ "the conviction is good. the diagnosis is missing.",
580
+ "retry less. think more.",
581
+ "harder isn't a strategy. different is.",
582
+ "stop. read the error. then try again.",
583
+ "the loop is the bug.",
584
+ ],
585
+ secondary: "optimist",
586
+ },
587
+ ghost: {
588
+ key: "ghost",
589
+ index: "08",
590
+ name: "the ghost",
591
+ taglines: [
592
+ "moves fast, leaves little trace. sometimes leaves a little too little trace.",
593
+ "writes the file. doesn't verify the write. trusts the silence.",
594
+ "completion ceremony? skipped. exits ceremony? also skipped.",
595
+ "the work probably worked. probably.",
596
+ "edits land. tests don't run. nothing checks the result.",
597
+ "efficient. quiet. occasionally lies to itself about success.",
598
+ ],
599
+ keywordSets: [
600
+ ["efficient", "quiet", "unverified"],
601
+ ["clean", "trusting", "skip-the-check"],
602
+ ["fast", "silent", "uncommitted"],
603
+ ["light-touch", "trust-the-write", "no-test"],
604
+ ["minimal", "exit-fast", "audit-light"],
605
+ ["smooth", "untraced", "unconfirmed"],
606
+ ],
607
+ descriptions: [
608
+ "efficient. clean. doesn't hang around. the ghost completes tasks with minimal overhead — no redundant reads, no retry storms, no boundary drift. the risk is quiet: it doesn't always check that things worked. the build passes. or it looks like it does. the ghost trusts its own output more than it should.",
609
+ "the ghost ships and exits. no verification loop. no test run. no read-after-write. the work is probably correct. probably. you'll find out next session — or when CI does, on someone else's screen.",
610
+ "no waste. no noise. no proof. the ghost writes the file, declares success, and moves on. when it's right, you've got a clean session. when it's wrong, you don't find out until the next deploy.",
611
+ "trusts the diff. trusts the toolchain. trusts the silence after a write. the ghost is the precision builder with one missing step: the verification at the end.",
612
+ ],
613
+ signatures: [
614
+ [
615
+ { arrow: "→", body: 'write_file("src/api/router.ts")', comment: " # done" },
616
+ { comment: "→ [no read_file to verify]" },
617
+ { comment: "→ [no test run after write]" },
618
+ { comment: "# task complete. # maybe." },
619
+ ],
620
+ [
621
+ { arrow: "→", body: 'apply_edit("src/auth.ts", { ... })' },
622
+ { comment: "→ [no test run]" },
623
+ { comment: "→ [stop event fired with uncommitted changes]" },
624
+ ],
625
+ [
626
+ { arrow: "→", body: 'write_file("config/prod.json", "{...}")' },
627
+ { comment: "# no schema check, no lint, no diff review" },
628
+ { comment: "→ session ends." },
629
+ ],
630
+ [
631
+ { arrow: "→", body: "git merge feature-branch" },
632
+ { arrow: "!", body: "merge conflicts: 3 files" },
633
+ { comment: "→ stop event with conflicts unresolved." },
634
+ ],
635
+ ],
636
+ commons: [
637
+ "fast-moving solo projects, low-constraint setups, minimal oversight workflows",
638
+ "side projects where the cost of a missed bug is low",
639
+ "agents without 'require-tests-before-stop' style policies",
640
+ "monorepos where the test command is non-obvious",
641
+ "sessions auto-ended on success without an explicit verification step",
642
+ ],
643
+ risks: [
644
+ "silent failures, unverified writes, false completion signals",
645
+ "uncommitted changes left on the floor, stop events firing dirty",
646
+ "missing test runs masking regressions until CI",
647
+ "merge conflicts left unresolved across session boundaries",
648
+ "PR-less work that's never reviewed before deploy",
649
+ ],
650
+ closings: [
651
+ "fast is good. verified-fast is better.",
652
+ "ship. then check.",
653
+ "writes are a bet. verify it.",
654
+ "silent success isn't a signal. green tests are.",
655
+ "trust your toolchain. confirm with proof.",
656
+ ],
657
+ secondary: "precision",
658
+ },
659
+ };
660
+
661
+ // ============================================================
662
+ // 8x8 pixel sigils. legend:
663
+ // . = empty o = ink p = pink g = green d = dim
664
+ // ============================================================
665
+ export const SIGILS: Record<ArchetypeKey, string[]> = {
666
+ optimist: [
667
+ "........",
668
+ "...p....",
669
+ "..p.p...",
670
+ ".p...p..",
671
+ "p.....p.",
672
+ "..ooo...",
673
+ "..o.o...",
674
+ ".oo.oo..",
675
+ ],
676
+ cowboy: [
677
+ "..pppp..",
678
+ ".p....p.",
679
+ "p..pp..p",
680
+ "pppppppp",
681
+ "..o..o..",
682
+ "..o..o..",
683
+ ".oo..oo.",
684
+ "........",
685
+ ],
686
+ explorer: [
687
+ "..pppp..",
688
+ ".p.gg.p.",
689
+ "p.g..g.p",
690
+ "p.g..g.p",
691
+ ".p.gg.pp",
692
+ "..pppp.p",
693
+ "........",
694
+ "........",
695
+ ],
696
+ goldfish: [
697
+ "....p...",
698
+ "..oooop.",
699
+ ".ooooopp",
700
+ "ooooooop",
701
+ ".oooooo.",
702
+ "..ooo...",
703
+ ".o...o..",
704
+ "o.....o.",
705
+ ],
706
+ architect: [
707
+ "oooooooo",
708
+ "o......o",
709
+ "o.pppp.o",
710
+ "o.p..p.o",
711
+ "o.p..p.o",
712
+ "o.pppp.o",
713
+ "o......o",
714
+ "oooooooo",
715
+ ],
716
+ precision: [
717
+ "...gg...",
718
+ "...gg...",
719
+ "........",
720
+ "gg...gg.",
721
+ "gg.gg.gg",
722
+ "...gg...",
723
+ "...gg...",
724
+ "........",
725
+ ],
726
+ hammer: [
727
+ "..ooooo.",
728
+ ".oppppo.",
729
+ ".oppppo.",
730
+ "..o..o..",
731
+ "...oo...",
732
+ "...oo...",
733
+ "...oo...",
734
+ "..pppp..",
735
+ ],
736
+ ghost: [
737
+ "..dddd..",
738
+ ".dddddd.",
739
+ "ddpd.pd.",
740
+ "ddddddd.",
741
+ "ddddddd.",
742
+ "ddddddd.",
743
+ "d.d.d.d.",
744
+ ".d...d..",
745
+ ],
746
+ };
747
+
748
+ // ============================================================
749
+ // Variant picker — deterministic over (key, seed)
750
+ // ============================================================
751
+
752
+ function pickAt<T>(arr: T[], h: number, axis: number): T {
753
+ if (arr.length === 0) throw new Error("pickAt: empty array");
754
+ // Mix axis into the hash so different fields don't all land on the same
755
+ // index. xmur3-ish per-field scramble keeps the picks decorrelated.
756
+ // The final `>>> 0` coerces back to an unsigned 32-bit int so the
757
+ // modulo is always positive (`^=` re-introduces signedness).
758
+ let n = h ^ Math.imul(axis, 0x9e3779b9);
759
+ n = Math.imul(n ^ (n >>> 16), 0x85ebca6b);
760
+ n = Math.imul(n ^ (n >>> 13), 0xc2b2ae35);
761
+ n = (n ^ (n >>> 16)) >>> 0;
762
+ return arr[n % arr.length]!;
763
+ }
764
+
765
+ /**
766
+ * Pick a single concrete variant of an archetype.
767
+ *
768
+ * `seed` must be stable for a given user/audit (project name is the
769
+ * natural choice — same project shows the same persona blurb on every
770
+ * re-render, but different projects get different ones).
771
+ */
772
+ export function pickArchetypeVariant(key: ArchetypeKey, seed: string): ResolvedArchetype {
773
+ const a = ARCHETYPES[key];
774
+ const h = hashSeed(seed || key);
775
+ return {
776
+ key: a.key,
777
+ index: a.index,
778
+ name: a.name,
779
+ secondary: a.secondary,
780
+ tagline: pickAt(a.taglines, h, 1),
781
+ keywords: pickAt(a.keywordSets, h, 2),
782
+ description: pickAt(a.descriptions, h, 3),
783
+ signature: pickAt(a.signatures, h, 4),
784
+ common: pickAt(a.commons, h, 5),
785
+ risk: pickAt(a.risks, h, 6),
786
+ closing: pickAt(a.closings, h, 7),
787
+ };
788
+ }
789
+
790
+ // ============================================================
791
+ // Classifier
792
+ // ============================================================
793
+ //
794
+ // The signal→archetype map, baseline shares and feature derivation all live
795
+ // in `./features`. The classifier is a thin ordered pipeline over those
796
+ // features. All eight archetypes are reachable:
797
+ // • precision / architect / goldfish — relational (rate / ratio / spread)
798
+ // • cowboy / explorer / ghost / optimist / hammer — by lift argmax
799
+ //
800
+ // Tunable thresholds (calibrated against the distribution harness in
801
+ // __tests__/audit/distribution.test.ts):
802
+
803
+ // precision is about *absence of a concentrated tendency*, NOT a low hit-rate.
804
+ // Real agents make hundreds–thousands of tool calls but only a handful of
805
+ // policy violations, so a rate gate would label almost everyone "clean" and
806
+ // swallow every other persona. Instead: precision only when the total mapped
807
+ // signal is tiny in absolute terms (essentially no tendency to read), or a
808
+ // trace amount thinly spread across a high-volume session. Everything with a
809
+ // real fault tendency gets its persona — a cowboy with 8 rm-rf attempts is a
810
+ // cowboy even across 2000 clean calls (the *score* still rewards the clean
811
+ // footprint separately).
812
+ /** Below this absolute weighted signal → no meaningful tendency → precision. */
813
+ const PRECISION_FLOOR = 2.5;
814
+ /** A trace tendency spread thinly over a high-volume session also reads clean. */
815
+ const PRECISION_RATE = 0.003;
816
+ const PRECISION_SOFT_CAP = 6;
817
+ /** When the two over-verification detectors own ≥ this share of signal (and
818
+ * the agent isn't a cowboy) → the paranoid architect. */
819
+ const ARCHITECT_CAUTION_MIN = 0.35;
820
+ /** Architect only applies when cowboy isn't itself over-indexing. */
821
+ const ARCHITECT_COWBOY_MAX_LIFT = 1.0;
822
+ /** Normalised lift entropy above this (with enough distinct clusters lit)
823
+ * → goldfish (genuinely scattered). */
824
+ const GOLDFISH_ENTROPY = 0.75;
825
+ const GOLDFISH_MIN_NONZERO = 4;
826
+ /** When the top-two lifts are within this ratio, resolve deterministically by
827
+ * the behaviour fingerprint instead of always taking the arithmetic winner —
828
+ * spreads near-ties across the population without any RNG. */
829
+ const TIEBREAK_RATIO = 1.08;
830
+
831
+ export interface Classification {
832
+ archetype: ArchetypeKey;
833
+ /** Same-key when no meaningful secondary; the IdentitySection hides the
834
+ * secondary chip whenever `secondary === archetype`. */
835
+ secondary: ArchetypeKey;
836
+ /** Per-archetype raw weighted-hit total (Σ hits × weight). Kept under the
837
+ * `weights` name for back-compat; also drives the (optional) trait radar. */
838
+ weights: Record<ArchetypeKey, number>;
839
+ /** Per-archetype lift = observed-share ÷ baseline-share. The ranking metric. */
840
+ lift: Record<ArchetypeKey, number>;
841
+ /** Total mapped signal across all archetypes. */
842
+ totalSignal: number;
843
+ /** Deterministic seed for `pickArchetypeVariant`, folding the behaviour
844
+ * fingerprint into the supplied seed so two agents with the same primary
845
+ * but different behaviour get different copy. */
846
+ variantSeed: string;
847
+ }
848
+
849
+ /** Keys sorted by descending lift. */
850
+ function rankByLift(f: AuditFeatures, keys: ArchetypeKey[]): ArchetypeKey[] {
851
+ return [...keys].sort((a, b) => f.clusterLift[b] - f.clusterLift[a]);
852
+ }
853
+
854
+ /**
855
+ * Classify an `AuditResult` into one of the 8 archetypes plus a secondary
856
+ * tendency. Pure over (result, seed); identical input → identical output.
857
+ *
858
+ * Pipeline:
859
+ * 1. precision — zero signal OR fault-rate below CLEAN_THRESHOLD (absence).
860
+ * 2. architect — the over-verification detectors dominate, low cowboy lift.
861
+ * 3. goldfish — high lift entropy across ≥4 clusters (scatter).
862
+ * 4. argmax — highest lift among the 5 active-fault personas, which
863
+ * removes the cowboy surface-area skew.
864
+ * 5. tie-break — near-ties resolved by the behaviour fingerprint.
865
+ *
866
+ * `seed` (the project name) is folded into the returned `variantSeed` for
867
+ * deterministic, behaviour-aware copy selection.
868
+ */
869
+ export function classifyAgent(result: AuditResult, seed = ""): Classification {
870
+ const f = deriveFeatures(result, seed);
871
+ const base = {
872
+ weights: f.clusterRaw,
873
+ lift: f.clusterLift,
874
+ totalSignal: f.totalSignal,
875
+ variantSeed: `${seed}|${f.fingerprint}`,
876
+ };
877
+
878
+ // 1. precision — no concentrated fault tendency (absolute, not rate-based).
879
+ if (
880
+ f.totalSignal < PRECISION_FLOOR ||
881
+ (f.faultRate < PRECISION_RATE && f.totalSignal < PRECISION_SOFT_CAP)
882
+ ) {
883
+ return { archetype: "precision", secondary: ARCHETYPES.precision.secondary, ...base };
884
+ }
885
+
886
+ // 2. architect — faults are over-verification, and not a cowboy.
887
+ if (f.cautionShare >= ARCHITECT_CAUTION_MIN && f.cowboyLift < ARCHITECT_COWBOY_MAX_LIFT) {
888
+ return { archetype: "architect", secondary: ARCHETYPES.architect.secondary, ...base };
889
+ }
890
+
891
+ // 3. goldfish — genuinely scattered across many clusters.
892
+ const nonZero = MAPPABLE_KEYS.filter((k) => f.clusterLift[k] > 0).length;
893
+ if (nonZero >= GOLDFISH_MIN_NONZERO && f.entropy > GOLDFISH_ENTROPY) {
894
+ const strongest = rankByLift(f, MAPPABLE_KEYS)[0];
895
+ return { archetype: "goldfish", secondary: strongest, ...base };
896
+ }
897
+
898
+ // 4. argmax lift over the active-fault personas.
899
+ const ranked = rankByLift(f, ACTIVE_FAULT_KEYS);
900
+ let primary = ranked[0];
901
+
902
+ // 5. seeded tie-break when the top two are within TIEBREAK_RATIO.
903
+ const runnerUp = ranked[1];
904
+ if (
905
+ runnerUp &&
906
+ f.clusterLift[runnerUp] > 0 &&
907
+ f.clusterLift[primary] / f.clusterLift[runnerUp] < TIEBREAK_RATIO
908
+ ) {
909
+ const pair = [ranked[0], ranked[1]];
910
+ primary = pair[f.fingerprint % 2];
911
+ }
912
+
913
+ // Secondary: the next-highest lift if it's ≥ 40% of the primary's, else the
914
+ // archetype's authored fallback.
915
+ const secondaryCandidate = rankByLift(f, ACTIVE_FAULT_KEYS).find((k) => k !== primary);
916
+ const secondary =
917
+ secondaryCandidate &&
918
+ f.clusterLift[secondaryCandidate] > 0 &&
919
+ f.clusterLift[secondaryCandidate] >= f.clusterLift[primary] * 0.4
920
+ ? secondaryCandidate
921
+ : ARCHETYPES[primary].secondary;
922
+
923
+ return { archetype: primary, secondary, ...base };
924
+ }