failproofai 0.0.10 โ 0.0.11-beta.10
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.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +9 -1
- package/.next/standalone/.next/build-manifest.json +10 -10
- package/.next/standalone/.next/prerender-manifest.json +3 -32
- package/.next/standalone/.next/required-server-files.json +2 -1
- package/.next/standalone/.next/routes-manifest.json +51 -3
- package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +7 -7
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js +6 -6
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +7 -7
- package/.next/standalone/.next/server/app/_not-found/page/next-font-manifest.json +2 -6
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +12 -13
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +16 -16
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/audit/invite/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/audit/invite/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/audit/invite/route.js +7 -0
- package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/audit/invite/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/audit/run/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/audit/run/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/audit/run/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/audit/run/route.js +8 -0
- package/.next/standalone/.next/server/app/api/audit/run/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/audit/run/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/audit/status/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/audit/status/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/audit/status/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/audit/status/route.js +6 -0
- package/.next/standalone/.next/server/app/api/audit/status/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/audit/status/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/auth/login-request/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/auth/login-request/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/auth/login-request/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/auth/login-request/route.js +6 -0
- package/.next/standalone/.next/server/app/api/auth/login-request/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/auth/login-request/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/auth/login-verify/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/auth/login-verify/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/auth/login-verify/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/auth/login-verify/route.js +7 -0
- package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/auth/login-verify/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/auth/logout/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/auth/logout/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/auth/logout/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/auth/logout/route.js +7 -0
- package/.next/standalone/.next/server/app/api/auth/logout/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/auth/reminder/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/auth/reminder/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/auth/reminder/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/auth/reminder/route.js +7 -0
- package/.next/standalone/.next/server/app/api/auth/reminder/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/auth/reminder/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/auth/reminder/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/auth/status/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/auth/status/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/auth/status/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/auth/status/route.js +7 -0
- package/.next/standalone/.next/server/app/api/auth/status/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/auth/status/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js +3 -3
- package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/audit/page/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/audit/page/build-manifest.json +18 -0
- package/.next/standalone/.next/server/app/audit/page/next-font-manifest.json +6 -0
- package/.next/standalone/.next/server/app/audit/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +29 -0
- package/.next/standalone/.next/server/app/audit/page.js +17 -0
- package/.next/standalone/.next/server/app/audit/page.js.map +5 -0
- package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +16 -17
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +16 -17
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -3
- package/.next/standalone/.next/server/app/page/build-manifest.json +7 -7
- package/.next/standalone/.next/server/app/page/next-font-manifest.json +2 -6
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js +14 -15
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/policies/page/build-manifest.json +7 -7
- package/.next/standalone/.next/server/app/policies/page/next-font-manifest.json +2 -6
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
- package/.next/standalone/.next/server/app/policies/page.js +16 -16
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +7 -7
- package/.next/standalone/.next/server/app/project/[name]/page/next-font-manifest.json +2 -6
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js +16 -17
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +7 -7
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/next-font-manifest.json +2 -6
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +19 -20
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/build-manifest.json +7 -7
- package/.next/standalone/.next/server/app/projects/page/next-font-manifest.json +2 -6
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js +15 -16
- package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +9 -1
- package/.next/standalone/.next/server/chunks/[externals]__14odj07._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[externals]__0z0j--b._.js โ [externals]__1nl3dvw._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{[externals]__0-p9.k~._.js โ [externals]__1s61mel._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{[externals]_node_os_06ur78j._.js โ [externals]_node_os_0by37l-._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0kjo7d_._.js โ [root-of-the-server]__0_0xu5z._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cag8qd._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0z-180.._.js โ [root-of-the-server]__0cycwg6._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__08px0ym._.js โ [root-of-the-server]__0f7mikp._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0q-v9z2._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0rv7m0k._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0g48iv.._.js โ [root-of-the-server]__0sb_5m8._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0j8-xkl._.js โ [root-of-the-server]__0xuaoik._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__13h8pzr._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__17g9wh7._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1_mqemn._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0vlhtkc._.js โ [root-of-the-server]__1hgv_75._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0wu7fr7._.js โ [root-of-the-server]__1jm9fw6._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1legmza._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__044xt9.._.js โ [root-of-the-server]__1m2_4t0._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0yfq1yr._.js โ [root-of-the-server]__1mhmdzs._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0zso~62._.js โ [root-of-the-server]__1ou2ehh._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qxztj-._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1r1h8v9._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rhmvod._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1uatkiv._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0.~nmr9._.js โ [root-of-the-server]__1w9zl9-._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1y6gxxb._.js +3 -0
- package/.next/standalone/.next/server/chunks/{_0ebx_lc._.js โ _0p53ge1._.js} +2 -2
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_audit_invite_route_actions_0-2n5sy.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_audit_run_route_actions_1qgp9io.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_audit_status_route_actions_1f7pjof.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_login-request_route_actions_1c49co0.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_login-verify_route_actions_1r3slzk.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_logout_route_actions_0regwyr.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_reminder_route_actions_1kjgxf8.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_status_route_actions_1aho9zu.js +3 -0
- 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
- package/.next/standalone/.next/server/chunks/{lib_logger_ts_047tt9f._.js โ lib_logger_ts_07e65t5._.js} +1 -1
- package/.next/standalone/.next/server/chunks/node_modules_0-tu4ot._.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_0ttxbz7._.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_1bnh1y0._.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_1epycqa._.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_1wpdcgo._.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_17k9e3w.js +23 -0
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_01r25oi._.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p7._.js +3 -0
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[externals]__12dv.x0._.js โ [externals]__1_g_b3t._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[externals]_node_async_hooks_0v0ln8c._.js โ [externals]_node_async_hooks_1gjz99j._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01tn1ou._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0808sha._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e4-6d8._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ehe24g._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0f62vu9._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g253ve._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h12me5._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0k65l27._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vxf0_g._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11rtg6s._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12mcauo._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__14dd6h8._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0t5l7a5._.js โ [root-of-the-server]__1d8omgc._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__10xgshr._.js โ [root-of-the-server]__1dky4g0._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1e-x7j4._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1fax1sl._.js +19 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1mt35_w._.js +221 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pcxxwg._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1usf8v2._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1uvfwgr._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1w6v_1u._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__212nf49._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_03d7qyt._.js โ _05whahf._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0il3fl1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_11_p9y8._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0xb8ngh._.js โ _1kje4fm._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0zx~s__._.js โ _1p0-leb._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{app_04qfs8z._.js โ app_087bt9w._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{app_0uosk1e._.js โ app_1fvisnp._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{app_13f0ohr._.js โ app_209u41o._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +65 -0
- package/.next/standalone/.next/server/chunks/ssr/app_audit_loading_tsx_1j1kc6j._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{app_error_tsx_11t4ysq._.js โ app_error_tsx_1zds1ns._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{app_global-error_tsx_0m9qisk._.js โ app_global-error_tsx_113y3za._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +8 -0
- 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
- package/.next/standalone/.next/server/chunks/ssr/{app_project_[name]_loading_tsx_03g9xy0._.js โ app_project_[name]_loading_tsx_05-l4uf._.js} +1 -1
- 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
- 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
- package/.next/standalone/.next/server/chunks/ssr/app_projects_loading_tsx_20-3u8b._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{lib_codex-projects_ts_0eosib~._.js โ lib_codex-projects_ts_0pqlw37._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{lib_copilot-projects_ts_0r8xkn8._.js โ lib_copilot-projects_ts_19wl7tp._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{lib_cursor-projects_ts_0qt1scg._.js โ lib_cursor-projects_ts_18-iwyk._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{lib_gemini-projects_ts_0sl~yqr._.js โ lib_gemini-projects_ts_1c7bgx-._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{lib_opencode-projects_ts_0op9gyp._.js โ lib_opencode-projects_ts_15bjxkm._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{lib_pi-projects_ts_103tsh1._.js โ lib_pi-projects_ts_1wikofb._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/lib_utils_ts_0az0sfq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_1ynf7el._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_html-to-image_es_index_0nye1s3.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_html-to-image_es_index_1ao30b1.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_0rd0oc-._.js โ node_modules_next_1a1kch7._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0uboya6._.js +6 -0
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_11dij6w._.js โ node_modules_next_dist_1d_onnt._.js} +2 -2
- 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
- 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
- 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
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0-uvagv.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03c7gi5.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09p-8om.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0v-kfiu.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xrgzyz.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1806lsc.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1j6dd-e.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1sa65r-.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuzn._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1ezd2jf._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1tnuifj._.js +5 -0
- package/.next/standalone/.next/server/functions-config-manifest.json +2 -2
- package/.next/standalone/.next/server/instrumentation.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +10 -10
- package/.next/standalone/.next/server/middleware.js +2 -2
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +2 -21
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +27 -9
- package/.next/standalone/.next/static/{dAuQps6jUwCz9X1Q5FFOO โ DOSSF5hRUtt3-QZEm-ZIk}/_clientMiddlewareManifest.js +2 -2
- package/.next/standalone/.next/static/chunks/{0pkl..xgo-qox.js โ 02e80j0576qfu.js} +1 -1
- package/.next/standalone/.next/static/chunks/{07uz2g0_38qia.js โ 03fmihek9n986.js} +1 -1
- package/.next/standalone/.next/static/chunks/0f7d7hnbh4djs.js +1 -0
- package/.next/standalone/.next/static/chunks/0h7auy7hzjyhw.js +1 -0
- package/.next/standalone/.next/static/chunks/0wwt5o04i4zwh.js +1 -0
- package/.next/standalone/.next/static/chunks/0zbxssxh53n-3.js +1 -0
- package/.next/standalone/.next/static/chunks/13f1kmjea-0md.js +2 -0
- package/.next/standalone/.next/static/chunks/13xzda05yw19e.js +1 -0
- package/.next/standalone/.next/static/chunks/{150i0n26fnvso.js โ 1__i9af9g78vd.js} +1 -1
- package/.next/standalone/.next/static/chunks/1uxa5lm6yco79.js +1 -0
- package/.next/standalone/.next/static/chunks/20dqelk3xz_ya.css +1 -0
- package/.next/standalone/.next/static/chunks/{0j171xiqge4rv.js โ 29lzaddhez98q.js} +1 -1
- package/.next/standalone/.next/static/chunks/29nrs5xs9c4hx.css +2 -0
- package/.next/standalone/.next/static/chunks/{0lt8ko3lw.5yt.js โ 2b_e9tyly10lo.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0rnqmir4cd5p9.js โ 2h0dkzyy0vocp.js} +1 -1
- package/.next/standalone/.next/static/chunks/2lp3a3a3_4_9o.js +63 -0
- package/.next/standalone/.next/static/chunks/{179yytvmam0ug.js โ 2nt_slonrn0rw.js} +1 -1
- package/.next/standalone/.next/static/chunks/2plcgtv_tkv9t.js +1 -0
- package/.next/standalone/.next/static/chunks/33k2epr1iz8_z.js +6 -0
- package/.next/standalone/.next/static/chunks/{0d3shmwh5_nmn.js โ 33u59vf_8xpd-.js} +1 -1
- package/.next/standalone/.next/static/chunks/3zkg2s2vzxc3d.js +1 -0
- package/.next/standalone/.next/static/chunks/{turbopack-05z7a19q43zfq.js โ turbopack-3lrm4f20fz89b.js} +1 -1
- package/.next/standalone/SECURITY.md +73 -0
- package/.next/standalone/app/actions/get-audit-result.ts +35 -0
- package/.next/standalone/app/api/audit/_state.ts +79 -0
- package/.next/standalone/app/api/audit/invite/route.ts +183 -0
- package/.next/standalone/app/api/audit/run/route.ts +103 -0
- package/.next/standalone/app/api/audit/status/route.ts +24 -0
- package/.next/standalone/app/api/auth/login-request/route.ts +91 -0
- package/.next/standalone/app/api/auth/login-verify/route.ts +98 -0
- package/.next/standalone/app/api/auth/logout/route.ts +48 -0
- package/.next/standalone/app/api/auth/reminder/route.ts +213 -0
- package/.next/standalone/app/api/auth/status/route.ts +42 -0
- package/.next/standalone/app/audit/_components/audit-dashboard.tsx +397 -0
- package/.next/standalone/app/audit/_components/audit-poster.tsx +326 -0
- package/.next/standalone/app/audit/_components/audit-progress-strip.tsx +98 -0
- package/.next/standalone/app/audit/_components/auth-dialog.tsx +375 -0
- package/.next/standalone/app/audit/_components/come-back-better-section.tsx +333 -0
- package/.next/standalone/app/audit/_components/empty-state.tsx +152 -0
- package/.next/standalone/app/audit/_components/how-to-improve-section.tsx +187 -0
- package/.next/standalone/app/audit/_components/invite-dialog.tsx +227 -0
- package/.next/standalone/app/audit/_components/quirks-section.tsx +75 -0
- package/.next/standalone/app/audit/_components/report-footer.tsx +35 -0
- package/.next/standalone/app/audit/_components/rerun-button.tsx +119 -0
- package/.next/standalone/app/audit/_components/run-progress.tsx +120 -0
- package/.next/standalone/app/audit/_components/share-templates.ts +94 -0
- package/.next/standalone/app/audit/_components/sigil.tsx +36 -0
- package/.next/standalone/app/audit/_components/strengths-section.tsx +45 -0
- package/.next/standalone/app/audit/audit-styles.css +1178 -0
- package/.next/standalone/app/audit/loading.tsx +24 -0
- package/.next/standalone/app/audit/page.tsx +63 -0
- package/.next/standalone/app/components/sessions-list.tsx +77 -80
- package/.next/standalone/app/globals.css +754 -139
- package/.next/standalone/app/layout.tsx +6 -8
- package/.next/standalone/app/policies/hooks-client.tsx +340 -141
- package/.next/standalone/app/project/[name]/page.tsx +31 -37
- package/.next/standalone/app/projects/loading.tsx +30 -8
- package/.next/standalone/app/projects/page.tsx +66 -17
- package/.next/standalone/assets/audit/Audit Report.html +22 -0
- package/.next/standalone/assets/audit/Show Off Your Agent.html +22 -0
- package/.next/standalone/assets/audit/archetypes.jsx +277 -0
- package/.next/standalone/assets/audit/assets/fonts/bitcount-prop-single.woff2 +0 -0
- package/.next/standalone/assets/audit/audit.jsx +825 -0
- package/.next/standalone/assets/audit/poster-styles.css +424 -0
- package/.next/standalone/assets/audit/poster.jsx +247 -0
- package/.next/standalone/assets/audit/screenshots/poster-optimist.png +0 -0
- package/.next/standalone/assets/audit/screenshots/poster-scrolled.png +0 -0
- package/.next/standalone/assets/audit/styles.css +1225 -0
- package/.next/standalone/assets/audit/tweaks-panel.jsx +425 -0
- package/.next/standalone/assets/logos/company/icon.svg +1 -0
- package/.next/standalone/assets/logos/company/logo.svg +1 -0
- package/.next/standalone/components/navbar.tsx +119 -65
- package/.next/standalone/components/reach-developers.tsx +39 -11
- package/.next/standalone/lib/atomic-write.ts +67 -0
- package/.next/standalone/lib/auth/api-server-client.ts +306 -0
- package/.next/standalone/lib/auth/auth-store.ts +250 -0
- package/.next/standalone/lib/claude-sessions.ts +181 -0
- package/.next/standalone/lib/client-telemetry.ts +2 -0
- package/.next/standalone/lib/fetch-with-timeout.ts +59 -0
- package/.next/standalone/lib/share-card.ts +144 -0
- package/.next/standalone/lib/telemetry.ts +12 -7
- package/.next/standalone/node_modules/@next/env/package.json +2 -2
- package/.next/standalone/node_modules/next/dist/build/static-paths/app.js +2 -1
- package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
- package/.next/standalone/node_modules/next/dist/build/utils.js +2 -1
- package/.next/standalone/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js +2 -2
- package/.next/standalone/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js +8 -2
- package/.next/standalone/node_modules/next/dist/client/dev/debug-channel.js +102 -2
- package/.next/standalone/node_modules/next/dist/client/route-params.js +23 -6
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +13 -13
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +13 -13
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +2 -2
- package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +10 -10
- package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/.next/standalone/node_modules/next/dist/server/app-render/action-handler.js +21 -14
- package/.next/standalone/node_modules/next/dist/server/app-render/app-render.js +62 -9
- package/.next/standalone/node_modules/next/dist/server/app-render/collect-segment-data.js +16 -0
- package/.next/standalone/node_modules/next/dist/server/app-render/create-component-tree.js +49 -19
- package/.next/standalone/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js +8 -20
- package/.next/standalone/node_modules/next/dist/server/app-render/metadata-insertion/create-server-inserted-metadata.js +8 -7
- package/.next/standalone/node_modules/next/dist/server/app-render/use-flight-response.js +2 -2
- package/.next/standalone/node_modules/next/dist/server/async-storage/work-store.js +2 -1
- package/.next/standalone/node_modules/next/dist/server/base-server.js +13 -5
- package/.next/standalone/node_modules/next/dist/server/config-schema.js +1 -0
- package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/dev/static-paths-worker.js +2 -1
- package/.next/standalone/node_modules/next/dist/server/image-optimizer.js +22 -2
- package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/encode-cache-tag.js +45 -0
- package/.next/standalone/node_modules/next/dist/server/lib/implicit-tags.js +6 -3
- package/.next/standalone/node_modules/next/dist/server/lib/is-rsc-request.js +18 -0
- package/.next/standalone/node_modules/next/dist/server/lib/mock-request.js +30 -5
- package/.next/standalone/node_modules/next/dist/server/lib/patch-fetch.js +5 -1
- package/.next/standalone/node_modules/next/dist/server/lib/patch-set-header.js +7 -0
- package/.next/standalone/node_modules/next/dist/server/lib/router-server.js +6 -3
- package/.next/standalone/node_modules/next/dist/server/lib/router-utils/resolve-routes.js +18 -4
- package/.next/standalone/node_modules/next/dist/server/lib/server-ipc/utils.js +3 -1
- package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/next-server.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/request/fallback-params.js +27 -1
- package/.next/standalone/node_modules/next/dist/server/route-modules/app-route/module.js +1 -0
- package/.next/standalone/node_modules/next/dist/server/route-modules/route-module.js +11 -1
- package/.next/standalone/node_modules/next/dist/server/server-utils.js +19 -2
- package/.next/standalone/node_modules/next/dist/server/stream-utils/node-web-streams-helper.js +5 -5
- package/.next/standalone/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/web/adapter.js +4 -1
- package/.next/standalone/node_modules/next/dist/server/web/edge-route-module-wrapper.js +2 -1
- package/.next/standalone/node_modules/next/dist/server/web/spec-extension/revalidate.js +4 -3
- package/.next/standalone/node_modules/next/dist/server/web/spec-extension/unstable-cache.js +6 -2
- package/.next/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
- package/.next/standalone/node_modules/next/dist/{server โ shared/lib}/htmlescape.js +15 -0
- package/.next/standalone/node_modules/next/dist/shared/lib/router/routes/app.js +13 -1
- package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js +56 -10
- package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
- package/.next/standalone/node_modules/next/package.json +15 -15
- package/.next/standalone/node_modules/react/cjs/react.development.js +1 -1
- package/.next/standalone/node_modules/react/cjs/react.production.js +1 -1
- package/.next/standalone/node_modules/react/package.json +1 -1
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +1 -1
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +1 -1
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.browser.production.js +3 -3
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.edge.production.js +3 -3
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.node.production.js +3 -3
- package/.next/standalone/node_modules/react-dom/cjs/react-dom.production.js +1 -1
- package/.next/standalone/node_modules/react-dom/package.json +2 -2
- package/.next/standalone/osv-scanner.toml +17 -0
- package/.next/standalone/package.json +26 -18
- package/.next/standalone/proxy.ts +1 -1
- package/.next/standalone/public/audit/fonts/bitcount-prop-single.woff2 +0 -0
- package/.next/standalone/public/icon.svg +1 -0
- package/.next/standalone/public/logo.svg +1 -0
- package/.next/standalone/server.js +1 -1
- package/.next/standalone/templates/bitcount-font/README.md +42 -0
- package/.next/standalone/templates/bitcount-font/bitcount-prop-single.woff2 +0 -0
- package/.next/standalone/templates/bitcount-font/bitcount.css +49 -0
- package/.next/standalone/templates/bitcount-font/fonts.ts.example +23 -0
- package/README.md +12 -5
- package/bin/failproofai.mjs +263 -70
- package/dist/cli.mjs +3830 -1617
- package/lib/atomic-write.ts +67 -0
- package/lib/auth/api-server-client.ts +306 -0
- package/lib/auth/auth-store.ts +250 -0
- package/lib/claude-sessions.ts +181 -0
- package/lib/client-telemetry.ts +2 -0
- package/lib/fetch-with-timeout.ts +59 -0
- package/lib/share-card.ts +144 -0
- package/lib/telemetry.ts +12 -7
- package/package.json +26 -18
- package/scripts/install-telemetry.mjs +4 -0
- package/scripts/launch.ts +2 -2
- package/scripts/postinstall.mjs +89 -1
- package/src/audit/archetypes.ts +944 -0
- package/src/audit/cache.ts +151 -0
- package/src/audit/cli-adapters/claude.ts +97 -0
- package/src/audit/cli-adapters/codex.ts +56 -0
- package/src/audit/cli-adapters/copilot.ts +51 -0
- package/src/audit/cli-adapters/cursor.ts +51 -0
- package/src/audit/cli-adapters/gemini.ts +51 -0
- package/src/audit/cli-adapters/index.ts +70 -0
- package/src/audit/cli-adapters/opencode.ts +52 -0
- package/src/audit/cli-adapters/pi.ts +51 -0
- package/src/audit/cli-adapters/shared.ts +85 -0
- package/src/audit/cli.ts +319 -0
- package/src/audit/dashboard-cache.ts +158 -0
- package/src/audit/detectors/find-from-root.ts +27 -0
- package/src/audit/detectors/git-commit-no-verify.ts +22 -0
- package/src/audit/detectors/index.ts +33 -0
- package/src/audit/detectors/prefer-edit-over-read-cat.ts +31 -0
- package/src/audit/detectors/prefer-edit-over-sed-awk.ts +27 -0
- package/src/audit/detectors/prefer-write-over-heredoc.ts +36 -0
- package/src/audit/detectors/redundant-cd-cwd.ts +28 -0
- package/src/audit/detectors/reread-after-edit.ts +58 -0
- package/src/audit/detectors/sleep-polling-loop.ts +34 -0
- package/src/audit/features.ts +314 -0
- package/src/audit/findings.ts +298 -0
- package/src/audit/index.ts +387 -0
- package/src/audit/open-browser.ts +69 -0
- package/src/audit/replay.ts +147 -0
- package/src/audit/report.ts +349 -0
- package/src/audit/scoring.ts +174 -0
- package/src/audit/social-proof.ts +34 -0
- package/src/audit/strengths.ts +138 -0
- package/src/audit/types.ts +216 -0
- package/src/auth/cli.ts +359 -0
- package/src/hooks/builtin-policies.ts +81 -2
- package/src/hooks/custom-hooks-loader.ts +19 -3
- package/src/hooks/first-run-nudge.ts +146 -0
- package/src/hooks/handler.ts +21 -102
- package/src/hooks/hook-telemetry.ts +2 -2
- package/src/hooks/install-prompt.ts +34 -4
- package/src/hooks/manager.ts +72 -5
- package/src/hooks/policy-evaluator.ts +19 -4
- package/src/hooks/policy-registry.ts +21 -1
- package/src/hooks/policy-types.ts +9 -0
- package/src/hooks/tool-name-canonicalize.ts +65 -0
- package/src/posthog-key.ts +9 -0
- package/.next/standalone/.next/server/app/icon.png/route/app-paths-manifest.json +0 -3
- package/.next/standalone/.next/server/app/icon.png/route.js +0 -7
- package/.next/standalone/.next/server/app/icon.png/route.js.nft.json +0 -1
- package/.next/standalone/.next/server/app/icon.png.body +0 -0
- package/.next/standalone/.next/server/app/icon.png.meta +0 -1
- package/.next/standalone/.next/server/chunks/[externals]_next_dist_0sqmaqd._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06.arfm._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0__i0h0._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d_ob4n._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fe7_q_._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fw.e.h._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0pxn0e1._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xv0jh2._.js +0 -3
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_icon_png_route_actions_12.gv.r.js +0 -3
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0bdfoky.js +0 -3
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_05pz9._._.js +0 -3
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02r.cjq._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0370~qj._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0609ezh._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07_-mkc._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09z7o2x._.js +0 -19
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0_sh2n0._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e9o9ri._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0l6swv1._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0logebz._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0mi5ejy._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0odijkc._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0podumr._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rkxer-._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rl2kwi._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vg0uey._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0x5limi._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ye1w50._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ymlddl._.js +0 -223
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__10._f0s._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/app_0cdqd9w._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +0 -8
- package/.next/standalone/.next/server/chunks/ssr/app_projects_loading_tsx_13veom4._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/lib_utils_ts_068jk73._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_0ttbz1~._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_06u0kr8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0h9llsw._.js +0 -6
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a_7sdg.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ef3uwk.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0j79~gv.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pbja1x.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0r6o0i2.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11y81~_.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_12or2kf.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0mebn66._.js +0 -3
- package/.next/standalone/.next/static/chunks/01q52wg_amm60.js +0 -2
- package/.next/standalone/.next/static/chunks/0kqar56yl~41o.js +0 -6
- package/.next/standalone/.next/static/chunks/0ml1.ck_5t36i.js +0 -1
- package/.next/standalone/.next/static/chunks/0w6fzf.07a24u.js +0 -1
- package/.next/standalone/.next/static/chunks/0zig0fh30t6ou.js +0 -1
- package/.next/standalone/.next/static/chunks/12l2t63hkyo2q.js +0 -1
- package/.next/standalone/.next/static/chunks/12pt~2f.c1sha.js +0 -1
- package/.next/standalone/.next/static/chunks/14lii11wmo450.js +0 -4
- package/.next/standalone/.next/static/chunks/17rm86uz2nd5a.css +0 -2
- package/.next/standalone/.next/static/media/4fa387ec64143e14-s.0q3udbd2bu5yp.woff2 +0 -0
- package/.next/standalone/.next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2 +0 -0
- package/.next/standalone/.next/static/media/bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2 +0 -0
- package/.next/standalone/.next/static/media/icon.0a.gigb3_x5pd.png +0 -0
- package/.next/standalone/app/icon.png +0 -0
- package/src/auth/login.ts +0 -104
- package/src/auth/logout.ts +0 -50
- package/src/auth/token-store.ts +0 -64
- package/src/relay/daemon.ts +0 -362
- package/src/relay/pid.ts +0 -76
- package/src/relay/queue.ts +0 -225
- /package/.next/standalone/.next/server/app/{icon.png โ api/audit/invite}/route/build-manifest.json +0 -0
- /package/.next/standalone/.next/server/app/{icon.png โ api/audit/invite}/route.js.map +0 -0
- /package/.next/standalone/.next/static/{dAuQps6jUwCz9X1Q5FFOO โ DOSSF5hRUtt3-QZEm-ZIk}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{dAuQps6jUwCz9X1Q5FFOO โ DOSSF5hRUtt3-QZEm-ZIk}/_ssgManifest.js +0 -0
- /package/.next/standalone/.next/static/chunks/{03~yq9q893hmn.js โ 0cz1d0mv5g_q7.js} +0 -0
- /package/.next/standalone/.next/static/chunks/{0xbo5nl6w4lka.js โ 2wbuxnsvux4di.js} +0 -0
- /package/.next/standalone/.next/static/chunks/{0_s0luks5tay-.js โ 35fgpd_feci6x.js} +0 -0
- /package/.next/standalone/.next/static/chunks/{15fklyav5py5m.js โ 3xpjn3cdgm-7m.js} +0 -0
- /package/.next/standalone/.next/static/chunks/{17.b3suj8zjjj.js โ 4448_qq7bd963.js} +0 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `triggerRun` โ POST /api/audit/run, then poll /api/audit/status until the
|
|
5
|
+
* server reports the run finished. Used by:
|
|
6
|
+
* - the audit empty-state CTA (`empty-state.tsx`),
|
|
7
|
+
* - the return-section's `[ re-audit now ]` button (`return-section.tsx`).
|
|
8
|
+
*
|
|
9
|
+
* The original `<RerunButton>` React component lived here too, but no
|
|
10
|
+
* caller ever rendered it (the rerun UI is integrated into the two
|
|
11
|
+
* sections above). Dropped in this refactor to remove dead code and the
|
|
12
|
+
* stale `lucide-react`/`usePostHog`/`cn` imports it dragged in.
|
|
13
|
+
*
|
|
14
|
+
* `triggerRun` throws `RerunError` on POST failure / network failure /
|
|
15
|
+
* poll-loop timeout โ callers should catch and render a distinct
|
|
16
|
+
* "rerun failed" state. The `kind` discriminates timeout vs other
|
|
17
|
+
* network failures so the UI can show different copy.
|
|
18
|
+
*/
|
|
19
|
+
import { fetchWithTimeout, isAbortError } from "@/lib/fetch-with-timeout";
|
|
20
|
+
|
|
21
|
+
export interface ScanParams {
|
|
22
|
+
/** Empty array = all CLIs. */
|
|
23
|
+
cli: string[];
|
|
24
|
+
/** "7d" | "30d" | "90d" | "all" (or any value accepted by parseSinceOpt). */
|
|
25
|
+
since: string;
|
|
26
|
+
/** Skip the per-transcript cache and produce a genuinely fresh scan. Set by
|
|
27
|
+
* the explicit re-audit affordance so "re-audit" never silently returns the
|
|
28
|
+
* identical cached result โ it re-scans every transcript from scratch. */
|
|
29
|
+
noCache?: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const POLL_INTERVAL_MS = 1000;
|
|
33
|
+
|
|
34
|
+
/** Give up polling only after this many *consecutive* status-fetch failures.
|
|
35
|
+
* There is no duration cap on a run (a cold all-history scan is unbounded), so
|
|
36
|
+
* the only thing that should stop a live poll is losing the server โ not the
|
|
37
|
+
* run taking a while. At POLL_INTERVAL_MS, this is ~10s of an unreachable
|
|
38
|
+
* server before we surface a network error. */
|
|
39
|
+
const MAX_CONSECUTIVE_POLL_FAILURES = 10;
|
|
40
|
+
|
|
41
|
+
/** Exported for unit testing the option-threading. */
|
|
42
|
+
export function paramsToBody(p: ScanParams) {
|
|
43
|
+
return {
|
|
44
|
+
cli: p.cli.length > 0 ? p.cli : undefined,
|
|
45
|
+
since: p.since === "all" ? undefined : p.since,
|
|
46
|
+
noCache: p.noCache ? true : undefined,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export class RerunError extends Error {
|
|
51
|
+
readonly kind: "post_failed" | "network" | "timeout";
|
|
52
|
+
constructor(kind: RerunError["kind"], message: string) {
|
|
53
|
+
super(message);
|
|
54
|
+
this.kind = kind;
|
|
55
|
+
this.name = "RerunError";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export async function triggerRun(scanParams: ScanParams): Promise<void> {
|
|
60
|
+
// Start the run. The route is fire-and-forget โ it kicks off runAudit() in
|
|
61
|
+
// the background and returns 202 in milliseconds โ so the default fast fetch
|
|
62
|
+
// timeout is correct here: it bounds the *kickoff request*, not the run.
|
|
63
|
+
// 409 (already running) is fine โ we just poll the in-flight run.
|
|
64
|
+
try {
|
|
65
|
+
const res = await fetchWithTimeout("/api/audit/run", {
|
|
66
|
+
method: "POST",
|
|
67
|
+
headers: { "content-type": "application/json" },
|
|
68
|
+
body: JSON.stringify(paramsToBody(scanParams)),
|
|
69
|
+
});
|
|
70
|
+
if (!res.ok && res.status !== 409) {
|
|
71
|
+
const text = await res.text().catch(() => "");
|
|
72
|
+
console.error("audit run failed:", res.status, text);
|
|
73
|
+
throw new RerunError("post_failed", `audit run failed (${res.status})`);
|
|
74
|
+
}
|
|
75
|
+
} catch (err) {
|
|
76
|
+
if (err instanceof RerunError) throw err;
|
|
77
|
+
console.error("audit run request failed:", err);
|
|
78
|
+
throw new RerunError(isAbortError(err) ? "timeout" : "network", "audit run request failed");
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Poll /api/audit/status until the run finishes. There is deliberately NO
|
|
82
|
+
// duration cap: a cold, all-history scan can run arbitrarily long and must
|
|
83
|
+
// not be guillotined client-side. The only failure mode that stops polling is
|
|
84
|
+
// losing the server, tracked as consecutive status-fetch failures.
|
|
85
|
+
let consecutiveFailures = 0;
|
|
86
|
+
for (;;) {
|
|
87
|
+
await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
|
|
88
|
+
|
|
89
|
+
let status: { running: boolean; error?: string | null } | null = null;
|
|
90
|
+
try {
|
|
91
|
+
const sres = await fetchWithTimeout("/api/audit/status", { cache: "no-store" });
|
|
92
|
+
if (sres.ok) {
|
|
93
|
+
status = (await sres.json()) as { running: boolean; error?: string | null };
|
|
94
|
+
}
|
|
95
|
+
} catch {
|
|
96
|
+
// Transient fetch/JSON failure (including a per-request timeout) โ handled
|
|
97
|
+
// by the connectivity backstop below.
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (status === null) {
|
|
101
|
+
// Status unreachable or non-OK. Only give up once the server has been
|
|
102
|
+
// unreachable for MAX_CONSECUTIVE_POLL_FAILURES polls in a row; a single
|
|
103
|
+
// blip must not kill a long, healthy run.
|
|
104
|
+
if (++consecutiveFailures >= MAX_CONSECUTIVE_POLL_FAILURES) {
|
|
105
|
+
throw new RerunError("network", "audit status poll lost the server");
|
|
106
|
+
}
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
consecutiveFailures = 0;
|
|
111
|
+
if (!status.running) {
|
|
112
|
+
// Run finished. A non-null error means the background runAudit() threw โ
|
|
113
|
+
// surface it (the dashboard cache was NOT updated). Otherwise it's a clean
|
|
114
|
+
// success: writeDashboardCache ran before finishRun(null).
|
|
115
|
+
if (status.error) throw new RerunError("post_failed", status.error);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Fake-progress UI shown while /api/audit/run is in flight. runAudit() does
|
|
5
|
+
* not emit granular progress events, so we animate through 4 plausible
|
|
6
|
+
* stages on a fixed 4s interval. The user sees motion + a clear "this is
|
|
7
|
+
* still working" signal.
|
|
8
|
+
*
|
|
9
|
+
* Real runs take up to 30 seconds. The 4 stages would otherwise march
|
|
10
|
+
* straight to 4/4 and 100% well before the run actually resolves, so we:
|
|
11
|
+
* - hold on the last stage in a "finishing up" label
|
|
12
|
+
* - cap the visual bar at 90% until the parent unmounts this component
|
|
13
|
+
*
|
|
14
|
+
* Visual: audit pixel-craft. A `.panel` with pink corner brackets, a
|
|
15
|
+
* scanline-style spinner header, a stack of stages with green "โ" /
|
|
16
|
+
* pink "โฎโฎ" / dim "โ" markers, and a marquee progress bar at the bottom
|
|
17
|
+
* filling pink-on-dark as the run advances.
|
|
18
|
+
*/
|
|
19
|
+
import React, { useEffect, useState } from "react";
|
|
20
|
+
|
|
21
|
+
const STAGES = [
|
|
22
|
+
{ label: "discovering transcripts", detail: "walking ~/.claude, ~/.codex, ~/.cursor, โฆ" },
|
|
23
|
+
{ label: "parsing session logs", detail: "reading JSONL + sqlite session stores" },
|
|
24
|
+
{ label: "running policy checks", detail: "replaying through 30 builtin policies" },
|
|
25
|
+
{ label: "aggregating results", detail: "counting hits, ranking by frequency" },
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const STAGE_DURATION_MS = 4000;
|
|
29
|
+
/** Visual cap until the actual run resolves. The component is unmounted
|
|
30
|
+
* by the parent on completion โ there is no "hit 100%" frame from here. */
|
|
31
|
+
const MAX_DISPLAY_PROGRESS = 0.9;
|
|
32
|
+
|
|
33
|
+
export function RunProgress() {
|
|
34
|
+
const [stage, setStage] = useState(0);
|
|
35
|
+
const [tick, setTick] = useState(0);
|
|
36
|
+
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const stageTimer = setInterval(() => {
|
|
39
|
+
setStage((s) => Math.min(s + 1, STAGES.length - 1));
|
|
40
|
+
}, STAGE_DURATION_MS);
|
|
41
|
+
const tickTimer = setInterval(() => setTick((t) => (t + 1) % 4), 350);
|
|
42
|
+
return () => {
|
|
43
|
+
clearInterval(stageTimer);
|
|
44
|
+
clearInterval(tickTimer);
|
|
45
|
+
};
|
|
46
|
+
}, []);
|
|
47
|
+
|
|
48
|
+
const dots = ".".repeat(tick + 1);
|
|
49
|
+
const onLastStage = stage === STAGES.length - 1;
|
|
50
|
+
const barRatio = Math.min(MAX_DISPLAY_PROGRESS, ((stage + 1) / STAGES.length) * MAX_DISPLAY_PROGRESS);
|
|
51
|
+
const barPercent = Math.round(barRatio * 100);
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<section className="section running-section" data-screen-label="00 Running">
|
|
55
|
+
<div className="section-mast">
|
|
56
|
+
<div className="section-label">
|
|
57
|
+
<span className="glyph">โโ</span> audit{" "}
|
|
58
|
+
<span style={{ color: "var(--dim)" }}>ยท</span> in progress
|
|
59
|
+
</div>
|
|
60
|
+
<div className="section-meta">
|
|
61
|
+
<span style={{ color: "var(--accent-pink)" }}>โ</span> scanning
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
<h2 className="section-h">scanning sessions{dots}</h2>
|
|
65
|
+
|
|
66
|
+
<div className="panel running-panel">
|
|
67
|
+
<div className="running-header">
|
|
68
|
+
<span className="running-prompt">$</span>
|
|
69
|
+
<span className="running-cmd">failproofai audit</span>
|
|
70
|
+
<span className="running-cursor" aria-hidden="true">โฎ</span>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<ul className="running-stages">
|
|
74
|
+
{STAGES.map((s, i) => {
|
|
75
|
+
const done = i < stage;
|
|
76
|
+
const active = i === stage;
|
|
77
|
+
return (
|
|
78
|
+
<li
|
|
79
|
+
key={i}
|
|
80
|
+
className={"running-stage" + (done ? " done" : active ? " active" : " queued")}
|
|
81
|
+
>
|
|
82
|
+
<span className="running-marker" aria-hidden="true">
|
|
83
|
+
{done ? "โ" : active ? "โฎโฎ" : "โ"}
|
|
84
|
+
</span>
|
|
85
|
+
<div className="running-stage-body">
|
|
86
|
+
<div className="running-stage-label">{s.label}</div>
|
|
87
|
+
{active && (
|
|
88
|
+
<div className="running-stage-detail">
|
|
89
|
+
{onLastStage ? "finishing upโฆ" : s.detail}
|
|
90
|
+
</div>
|
|
91
|
+
)}
|
|
92
|
+
</div>
|
|
93
|
+
{active && (
|
|
94
|
+
<span className="running-stage-spin" aria-hidden="true">
|
|
95
|
+
{["โ ", "โ ", "โ น", "โ ธ"][tick]}
|
|
96
|
+
</span>
|
|
97
|
+
)}
|
|
98
|
+
</li>
|
|
99
|
+
);
|
|
100
|
+
})}
|
|
101
|
+
</ul>
|
|
102
|
+
|
|
103
|
+
<div className="running-bar-label">
|
|
104
|
+
<span>progress</span>
|
|
105
|
+
<span style={{ color: "var(--dim)" }}>{barPercent}%</span>
|
|
106
|
+
</div>
|
|
107
|
+
<div className="running-bar-track">
|
|
108
|
+
<div
|
|
109
|
+
className="running-bar-fill"
|
|
110
|
+
style={{ width: `${barPercent}%` }}
|
|
111
|
+
/>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<p className="running-foot">
|
|
115
|
+
this can take a while depending on how much session history you have.
|
|
116
|
+
</p>
|
|
117
|
+
</div>
|
|
118
|
+
</section>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Social-share copy for the audit identity card.
|
|
3
|
+
*
|
|
4
|
+
* Ten short, curiosity-forward templates for X and ten short, professional
|
|
5
|
+
* templates for LinkedIn. `pickTemplate` selects one deterministically from a
|
|
6
|
+
* seed (the behaviour fingerprint), so a given audit run always renders the
|
|
7
|
+
* same post while different runs / personas vary โ then appends a clipboard
|
|
8
|
+
* paste hint. Pure โ no React, no DOM โ so it's unit-testable and shared by the
|
|
9
|
+
* client poster component.
|
|
10
|
+
*/
|
|
11
|
+
import type { Grade } from "@/src/audit/scoring";
|
|
12
|
+
|
|
13
|
+
export interface ShareCtx {
|
|
14
|
+
score: number;
|
|
15
|
+
/** Lowercased archetype name, e.g. "the cowboy". */
|
|
16
|
+
arch: string;
|
|
17
|
+
grade: Grade;
|
|
18
|
+
/** Count of unenabled prescribed policies. */
|
|
19
|
+
missing: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const pol = (n: number) => (n === 1 ? "policy" : "policies");
|
|
23
|
+
|
|
24
|
+
/** Appended to every picked share so the user knows the audit-card PNG is on
|
|
25
|
+
* their clipboard and just needs pasting into the post. */
|
|
26
|
+
const PASTE_LINE = "[ audit card copied to your clipboard โ paste it into the post ]";
|
|
27
|
+
|
|
28
|
+
/** Short, catchy, curiosity-forward โ for X / Twitter. Emoji-forward, no
|
|
29
|
+
* grade-tier framing (it sounds bad at the low end). Subtly tags @failproofai. */
|
|
30
|
+
export const X_TEMPLATES: ((c: ShareCtx) => string)[] = [
|
|
31
|
+
({ score, arch }) =>
|
|
32
|
+
`my AI coding agent has a personality and it's "${arch}" ๐ค \n\n${score}/100 on the failproofai audit. what's yours?\n\nnpx -y failproofai audit ยท @failproofai`,
|
|
33
|
+
({ score, arch }) =>
|
|
34
|
+
`turns out my coding agent is ${arch} ๐\n\n${score}/100 โ it read my own session logs and did not miss.\n\nnpx -y failproofai audit ยท @failproofai`,
|
|
35
|
+
({ score, arch }) =>
|
|
36
|
+
`my AI agent's archetype: ${arch} ๐\n\nscored ${score}/100. unsettlingly accurate.\n\nrun yours โ npx -y failproofai audit ยท @failproofai`,
|
|
37
|
+
({ score, arch, missing }) =>
|
|
38
|
+
`plot twist: my coding agent is ${arch} ๐ญ\n\n${score}/100${missing > 0 ? `, ${missing} ${pol(missing)} from clean` : `, somehow spotless`}.\n\nnpx -y failproofai audit ยท @failproofai`,
|
|
39
|
+
({ score, arch }) =>
|
|
40
|
+
`@failproofai audited my coding agent and called it ${arch} ${score >= 80 ? "๐" : "๐ฌ"}\n\n${score}/100. brutal, accurate, no notes.\n\nnpx -y failproofai audit`,
|
|
41
|
+
({ score, arch }) =>
|
|
42
|
+
`every AI agent has a tell. mine is "${arch}" ๐ฒ\n\n${score}/100. find out what yours does when you're not looking.\n\nnpx -y failproofai audit ยท @failproofai`,
|
|
43
|
+
({ score, arch }) =>
|
|
44
|
+
`${score}/100. archetype: ${arch}. ๐\n\n@failproofai reverse-engineered my agent's whole vibe from its logs.\n\nnpx -y failproofai audit`,
|
|
45
|
+
({ score, arch }) =>
|
|
46
|
+
`apparently my AI agent is "${arch}" and that explains a lot ๐
\n\n${score}/100. audit yours in 30s:\n\nnpx -y failproofai audit ยท @failproofai`,
|
|
47
|
+
({ score, arch }) =>
|
|
48
|
+
`ran my coding agent through @failproofai โ ${arch}, ${score}/100 ๐ฏ\n\nbet yours has skeletons too. go find them:\n\nnpx -y failproofai audit`,
|
|
49
|
+
({ score, arch, missing }) =>
|
|
50
|
+
`my coding agent is officially "${arch}" ๐ช\n\n${score}/100${missing > 0 ? ` ยท ${missing} ${pol(missing)} to a clean run` : ` ยท every guardrail live`}.\n\nnpx -y failproofai audit ยท @failproofai`,
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
/** Short, professional, well-said โ for LinkedIn. No emoji, no grade-tier
|
|
54
|
+
* framing. Subtly references the @Failproof AI page. */
|
|
55
|
+
export const LI_TEMPLATES: ((c: ShareCtx) => string)[] = [
|
|
56
|
+
({ score, arch, missing }) =>
|
|
57
|
+
`I ran a failproofai audit on our AI coding agents: ${score}/100, behavioural archetype "${arch}". ${missing > 0 ? `${missing} prescribed ${pol(missing)} would close the gaps.` : `Every prescribed policy is already live.`}\n\nHow your agents behave unsupervised is finally measurable. Run yours: npx -y failproofai audit โ @Failproof AI`,
|
|
58
|
+
({ score, arch, missing }) =>
|
|
59
|
+
`Security posture check on our coding-agent stack: ${score}/100, profile "${arch}". ${missing > 0 ? `${missing} ${pol(missing)} flagged as real attack surface.` : `No open policy gaps.`}\n\nThirty seconds to assess your own: npx -y failproofai audit โ @Failproof AI`,
|
|
60
|
+
({ score, arch }) =>
|
|
61
|
+
`Most teams can't say how their AI agents behave when no one is watching. failproofai profiled ours as "${arch}" โ ${score}/100, mapped to the exact policies that close each gap.\n\nRun yours: npx -y failproofai audit โ @Failproof AI`,
|
|
62
|
+
({ score, arch, missing }) =>
|
|
63
|
+
`Agent security isn't a vibe โ it's measurable. We scored ${score}/100, archetype "${arch}". ${missing > 0 ? `${missing} prescribed ${pol(missing)} left to harden.` : `Full policy coverage.`}\n\nnpx -y failproofai audit โ @Failproof AI`,
|
|
64
|
+
({ score, arch }) =>
|
|
65
|
+
`Ran our coding agents through a failproofai behavioural audit: ${score}/100, "${arch}". It maps every risky pattern to the policy that prevents it, so remediation becomes a checklist.\n\nnpx -y failproofai audit โ @Failproof AI`,
|
|
66
|
+
({ score, arch }) =>
|
|
67
|
+
`What does your AI coding agent actually do when a command fails? Ours scored ${score}/100 as "${arch}" on the failproofai audit.\n\nFind out in 30 seconds: npx -y failproofai audit โ @Failproof AI`,
|
|
68
|
+
({ score, arch, missing }) =>
|
|
69
|
+
`Shipping with AI agents means owning their failure modes. failproofai profiled ours as "${arch}", ${score}/100${missing > 0 ? `, with ${missing} ${pol(missing)} still to close` : `, fully covered`}.\n\nnpx -y failproofai audit โ @Failproof AI`,
|
|
70
|
+
({ score, arch }) =>
|
|
71
|
+
`Observability for AI coding agents, distilled to one number: ${score}/100. Archetype "${arch}", every risk mapped to a preventive policy.\n\nOpen-source: npx -y failproofai audit โ @Failproof AI`,
|
|
72
|
+
({ score, arch }) =>
|
|
73
|
+
`We let failproofai read our agents' own session logs. Result: "${arch}", ${score}/100 โ evidence-backed and mapped to the policies that prevent each pattern.\n\nAssess yours: npx -y failproofai audit โ @Failproof AI`,
|
|
74
|
+
({ score, arch }) =>
|
|
75
|
+
`The first step to securing AI agents is understanding how they behave. failproofai scored ours ${score}/100 ("${arch}") and prescribed every fix.\n\nnpx -y failproofai audit โ @Failproof AI`,
|
|
76
|
+
];
|
|
77
|
+
|
|
78
|
+
/** djb2 hash โ stable per seed so the template choice is deterministic. */
|
|
79
|
+
function hashStr(s: string): number {
|
|
80
|
+
let h = 5381;
|
|
81
|
+
for (let i = 0; i < s.length; i++) h = ((h << 5) + h + s.charCodeAt(i)) | 0;
|
|
82
|
+
return h >>> 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** Deterministically pick + render one template for the given seed, then append
|
|
86
|
+
* the clipboard paste hint so the user knows to paste the copied audit card. */
|
|
87
|
+
export function pickTemplate(
|
|
88
|
+
templates: ((c: ShareCtx) => string)[],
|
|
89
|
+
seed: string,
|
|
90
|
+
ctx: ShareCtx,
|
|
91
|
+
): string {
|
|
92
|
+
const body = templates[hashStr(seed) % templates.length](ctx);
|
|
93
|
+
return `${body}\n\n${PASTE_LINE}`;
|
|
94
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Pixel sigil โ 8ร8 grid for the archetype. Bare implementation: no plate,
|
|
5
|
+
* no crosshairs, no reveal animation. The poster owns whatever framing it
|
|
6
|
+
* wants around the sigil.
|
|
7
|
+
*
|
|
8
|
+
* Cell letters: `.` empty ยท `o` ink ยท `p` pink accent ยท `g` green accent ยท
|
|
9
|
+
* `d` dim.
|
|
10
|
+
*/
|
|
11
|
+
import React from "react";
|
|
12
|
+
import { SIGILS, type ArchetypeKey } from "@/src/audit/archetypes";
|
|
13
|
+
|
|
14
|
+
interface Props {
|
|
15
|
+
archetypeKey: ArchetypeKey;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function Sigil({ archetypeKey }: Props) {
|
|
19
|
+
const grid = SIGILS[archetypeKey] ?? SIGILS.optimist;
|
|
20
|
+
const cells: React.ReactElement[] = [];
|
|
21
|
+
|
|
22
|
+
for (let y = 0; y < 8; y++) {
|
|
23
|
+
const row = grid[y] ?? "........";
|
|
24
|
+
for (let x = 0; x < 8; x++) {
|
|
25
|
+
const c = row[x] ?? ".";
|
|
26
|
+
let cls = "px";
|
|
27
|
+
if (c === "o") cls += " on";
|
|
28
|
+
else if (c === "p") cls += " p";
|
|
29
|
+
else if (c === "g") cls += " g";
|
|
30
|
+
else if (c === "d") cls += " d";
|
|
31
|
+
cells.push(<div key={`${y}-${x}`} className={cls} />);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return <div className="sigil">{cells}</div>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Section 02 โ STRENGTHS. "what it's great at." Calm row list:
|
|
5
|
+
* โ glyph ยท headline + sub ยท right-aligned metric. No card chrome,
|
|
6
|
+
* no hover backgrounds, no checkmark backdrop.
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
import type { Strength } from "@/src/audit/strengths";
|
|
10
|
+
|
|
11
|
+
interface Props {
|
|
12
|
+
strengths: Strength[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function StrengthsSection({ strengths }: Props) {
|
|
16
|
+
if (strengths.length === 0) return null;
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<section className="audit-sec" data-screen-label="02 Strengths">
|
|
20
|
+
<div className="audit-sec-head">
|
|
21
|
+
<span className="audit-sec-eyebrow">
|
|
22
|
+
<span className="ix">02</span>{"// strengths"}
|
|
23
|
+
</span>
|
|
24
|
+
<span className="audit-sec-meta">{strengths.length} standouts</span>
|
|
25
|
+
</div>
|
|
26
|
+
<h2 className="audit-sec-title">what it's great at</h2>
|
|
27
|
+
|
|
28
|
+
<div className="strength-list">
|
|
29
|
+
{strengths.map((s, i) => (
|
|
30
|
+
<div key={i} className="strength-row">
|
|
31
|
+
<span className="strength-check" aria-hidden="true">โ</span>
|
|
32
|
+
<span className="strength-body">
|
|
33
|
+
<span className="strength-headline">{s.headline}</span>
|
|
34
|
+
<span className="strength-detail">{s.detail}</span>
|
|
35
|
+
</span>
|
|
36
|
+
<span className="strength-metric">
|
|
37
|
+
{s.metric}
|
|
38
|
+
{s.unit && <span className="unit">{s.unit}</span>}
|
|
39
|
+
</span>
|
|
40
|
+
</div>
|
|
41
|
+
))}
|
|
42
|
+
</div>
|
|
43
|
+
</section>
|
|
44
|
+
);
|
|
45
|
+
}
|