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.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +8 -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 +45 -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/run/route/app-paths-manifest.json +3 -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.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 +8 -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]__07tgnzi._.js +3 -0
- 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]__0oeun7z._.js +3 -0
- 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]__12pit4m._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__13h8pzr._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__13ra2jq._.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]__0d_ob4n._.js → [root-of-the-server]__1_mqemn._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1b9z5-i._.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]__1ixjiy8._.js +3 -0
- 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]__0fwb7ao._.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]__1rhmvod._.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/{_0ebx_lc._.js → _0p53ge1._.js} +2 -2
- package/.next/standalone/.next/server/chunks/_1-1804f._.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_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_0z7w.hh._.js → package_json_[json]_cjs_1nxcc4v._.js} +2 -2
- 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]__00jkjmt._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__013du6r._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0989_dx._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e85wxv._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gfxvb1._.js +3 -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]__0l13qf2._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0ts150~._.js → [root-of-the-server]__0ywoypf._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1-scthx._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__100hdar._.js +3 -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]__14dd6h8._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1cd25c7._.js +4 -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]__0tcyn68._.js → [root-of-the-server]__1dky4g0._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__098zro9._.js → [root-of-the-server]__1fax1sl._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1hlrq6y._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ihxdo5._.js +4 -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]__0-wn51s._.js → [root-of-the-server]__1pcxxwg._.js} +3 -3
- 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]__1vvfde2._.js +4 -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} +1 -1
- 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 +43 -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_068jk73._.js → lib_utils_ts_0az0sfq._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_1ynf7el._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_html2canvas_dist_html2canvas_esm_05gja40.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_html2canvas_dist_html2canvas_esm_1n-0xws.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_0h9llsw._.js → node_modules_next_dist_0uboya6._.js} +2 -2
- 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_0j79~gv.js → node_modules_next_dist_esm_build_templates_app-page_0xrgzyz.js} +1 -1
- 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 +3 -0
- 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/chunks/{07uz2g0_38qia.js → 03fmihek9n986.js} +1 -1
- package/.next/standalone/.next/static/chunks/09ueq8s1as8xs.css +2 -0
- package/.next/standalone/.next/static/chunks/0ehe4dh0grngk.js +41 -0
- package/.next/standalone/.next/static/chunks/{0bke.~atnsbeb.js → 0gdm-xaez4l7t.js} +1 -1
- package/.next/standalone/.next/static/chunks/{11w14gnqzprir.js → 0kdglk0vtzymo.js} +1 -1
- package/.next/standalone/.next/static/chunks/0qassxjx1ef04.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/1btx2c49fk9xt.css +1 -0
- package/.next/standalone/.next/static/chunks/1fmco3pvq_twz.js +1 -0
- package/.next/standalone/.next/static/chunks/2b1fzuhuk-42n.js +1 -0
- package/.next/standalone/.next/static/chunks/{0bv1oyxspkpkb.js → 2dtip-mvmihiu.js} +1 -1
- package/.next/standalone/.next/static/chunks/2srzafd1_ha5y.js +1 -0
- package/.next/standalone/.next/static/chunks/{0d3shmwh5_nmn.js → 33u59vf_8xpd-.js} +1 -1
- package/.next/standalone/.next/static/chunks/3gti1qdk5epqn.js +1 -0
- package/.next/standalone/.next/static/chunks/{0dvhi-prcsh3~.js → 3krzy-lhwfrmz.js} +1 -1
- package/.next/standalone/.next/static/chunks/{17mubwtqwijpu.js → 3w8d8k_dca5rp.js} +1 -1
- package/.next/standalone/.next/static/chunks/43lnq0c1rnflb.js +6 -0
- package/.next/standalone/.next/static/chunks/{turbopack-0nh.aopesgj~5.js → turbopack-00qy7zfa7m--m.js} +1 -1
- package/.next/standalone/SECURITY.md +73 -0
- package/.next/standalone/app/actions/get-audit-result.ts +24 -0
- package/.next/standalone/app/api/audit/_state.ts +72 -0
- package/.next/standalone/app/api/audit/run/route.ts +89 -0
- package/.next/standalone/app/api/audit/status/route.ts +23 -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 +364 -0
- package/.next/standalone/app/audit/_components/auth-dialog.tsx +401 -0
- package/.next/standalone/app/audit/_components/empty-state.tsx +146 -0
- package/.next/standalone/app/audit/_components/findings-section.tsx +135 -0
- package/.next/standalone/app/audit/_components/identity-section.tsx +126 -0
- package/.next/standalone/app/audit/_components/policies-section.tsx +194 -0
- package/.next/standalone/app/audit/_components/report-footer.tsx +35 -0
- package/.next/standalone/app/audit/_components/rerun-button.tsx +81 -0
- package/.next/standalone/app/audit/_components/return-section.tsx +428 -0
- package/.next/standalone/app/audit/_components/run-progress.tsx +120 -0
- package/.next/standalone/app/audit/_components/score-section.tsx +179 -0
- package/.next/standalone/app/audit/_components/share-dock.tsx +265 -0
- package/.next/standalone/app/audit/_components/share-templates.ts +67 -0
- package/.next/standalone/app/audit/_components/show-off-cta.tsx +135 -0
- package/.next/standalone/app/audit/_components/sigil.tsx +93 -0
- package/.next/standalone/app/audit/_components/strengths-section.tsx +57 -0
- package/.next/standalone/app/audit/audit-styles.css +2066 -0
- package/.next/standalone/app/audit/loading.tsx +24 -0
- package/.next/standalone/app/audit/page.tsx +53 -0
- package/.next/standalone/app/globals.css +570 -137
- package/.next/standalone/app/layout.tsx +16 -9
- package/.next/standalone/app/policies/hooks-client.tsx +223 -129
- package/.next/standalone/app/project/[name]/page.tsx +89 -39
- package/.next/standalone/app/projects/loading.tsx +30 -8
- package/.next/standalone/app/projects/page.tsx +76 -18
- 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 +154 -65
- package/.next/standalone/components/reach-developers.tsx +37 -9
- package/.next/standalone/lib/atomic-write.ts +67 -0
- package/.next/standalone/lib/auth/api-server-client.ts +281 -0
- package/.next/standalone/lib/auth/auth-store.ts +250 -0
- package/.next/standalone/lib/client-telemetry.ts +2 -0
- package/.next/standalone/lib/fetch-with-timeout.ts +42 -0
- package/.next/standalone/lib/share-card.ts +120 -0
- package/.next/standalone/lib/telemetry.ts +12 -7
- package/.next/standalone/node_modules/@next/env/package.json +1 -1
- package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
- package/.next/standalone/node_modules/next/dist/client/dev/debug-channel.js +102 -2
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +11 -11
- 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 +1 -1
- 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 +18 -8
- 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/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/patch-fetch.js +5 -1
- package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -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/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 +8 -3
- 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 +2 -1
- package/bin/failproofai.mjs +165 -144
- package/dist/cli.mjs +607 -1858
- package/lib/atomic-write.ts +67 -0
- package/lib/auth/api-server-client.ts +281 -0
- package/lib/auth/auth-store.ts +250 -0
- package/lib/client-telemetry.ts +2 -0
- package/lib/fetch-with-timeout.ts +42 -0
- package/lib/share-card.ts +120 -0
- package/lib/telemetry.ts +12 -7
- package/package.json +8 -3
- package/scripts/install-telemetry.mjs +4 -0
- package/src/audit/archetypes.ts +924 -0
- package/src/audit/cache.ts +21 -2
- package/src/audit/dashboard-cache.ts +111 -0
- package/src/audit/features.ts +268 -0
- package/src/audit/findings.ts +298 -0
- package/src/audit/index.ts +39 -21
- package/src/audit/replay.ts +29 -3
- package/src/audit/scoring.ts +174 -0
- package/src/audit/strengths.ts +138 -0
- package/src/audit/types.ts +24 -1
- package/src/auth/cli.ts +359 -0
- package/src/hooks/builtin-policies.ts +2 -1
- package/src/hooks/hook-telemetry.ts +2 -2
- package/src/hooks/policy-registry.ts +20 -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]__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/ssr/[root-of-the-server]__01as125._.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]__09v.ljl._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0agrcb8._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b7hkr~._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ehh6vp._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g8l0tu._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0j4l6hl._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0k5n2kz._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0lp08ll._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0yaqw._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0o21f.o._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0t8juvy._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0uylufv._.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]__0~03grs._.js +0 -3
- 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/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_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_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/07kpqoo7kuckx.js +0 -6
- package/.next/standalone/.next/static/chunks/0azb~vy9ds_uy.js +0 -1
- package/.next/standalone/.next/static/chunks/0f5p9plm.aqlp.css +0 -2
- package/.next/standalone/.next/static/chunks/0ffvlbgzgnlw7.js +0 -2
- package/.next/standalone/.next/static/chunks/0spktq7xqab9h.js +0 -1
- package/.next/standalone/.next/static/chunks/118q3uljozd5z.js +0 -4
- package/.next/standalone/.next/static/chunks/12pt~2f.c1sha.js +0 -1
- package/.next/standalone/.next/static/media/4fa387ec64143e14-s.0.qu-9752pffj.woff2 +0 -0
- package/.next/standalone/.next/static/media/5ce348bf30bf5439-s.0ee55_hj9qcer.woff2 +0 -0
- package/.next/standalone/.next/static/media/6306c77e7c8268e4-s.0mao5jbfbduzp.woff2 +0 -0
- package/.next/standalone/.next/static/media/797e433ab948586e-s.p.09zddjkbdep5a.woff2 +0 -0
- package/.next/standalone/.next/static/media/7d817b4c03b0c5f1-s.0uzt.a6d44yda.woff2 +0 -0
- package/.next/standalone/.next/static/media/bbc41e54d2fcbd21-s.0mvwgmnhv29no.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/audit/telemetry.ts +0 -113
- /package/.next/standalone/.next/server/app/{icon.png → api/audit/run}/route/build-manifest.json +0 -0
- /package/.next/standalone/.next/server/app/{icon.png → api/audit/run}/route.js.map +0 -0
- /package/.next/standalone/.next/static/chunks/{03~yq9q893hmn.js → 0cz1d0mv5g_q7.js} +0 -0
- /package/.next/standalone/.next/static/chunks/{0a40sy4tk8ioe.js → 0wwt5o04i4zwh.js} +0 -0
- /package/.next/standalone/.next/static/chunks/{0n1n67imq.udf.js → 1__i9af9g78vd.js} +0 -0
- /package/.next/standalone/.next/static/chunks/{0w6fzf.07a24u.js → 2so39wg7mjbi7.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
- /package/.next/standalone/.next/static/{tGVQM5SE3NvbVu0gbAJm7 → wU3ot-EKa5ApKoh785wp8}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{tGVQM5SE3NvbVu0gbAJm7 → wU3ot-EKa5ApKoh785wp8}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{tGVQM5SE3NvbVu0gbAJm7 → wU3ot-EKa5ApKoh785wp8}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[85650,52562,a=>{"use strict";var b=a.i(64831);let c=(0,b.default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);a.s(["Copy",0,c],85650);let d=(0,b.default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);a.s(["Check",0,d],52562)},65967,a=>{"use strict";var b=a.i(87924),c=a.i(64831);let d=(0,c.default)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]),e=(0,c.default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);a.s(["default",0,function({currentPage:a,totalPages:c,onPageChange:f}){if(c<=1)return null;let g=a=>`px-3 py-2 text-sm rounded-md transition-colors flex items-center gap-1 bg-muted text-muted-foreground ${a?"opacity-50 cursor-not-allowed":"hover:bg-muted/80"}`;return(0,b.jsxs)("div",{className:"flex items-center justify-center gap-2 py-4",children:[(0,b.jsxs)("button",{onClick:()=>f(a-1),disabled:1===a,className:g(1===a),"aria-label":"Previous page",children:[(0,b.jsx)(d,{className:"w-4 h-4"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Previous"})]}),(0,b.jsx)("div",{className:"flex items-center gap-1",children:(()=>{if(c<=7)return Array.from({length:c},(a,b)=>b+1);let b=[1],d=Math.max(2,a-1),e=Math.min(c-1,a+1);a<=3&&(e=Math.min(5,c-1)),a>=c-2&&(d=Math.max(2,c-4)),d>2&&b.push("ellipsis-start");for(let a=d;a<=e;a++)b.push(a);return e<c-1&&b.push("ellipsis-end"),b.push(c),b})().map(c=>"string"==typeof c?(0,b.jsx)("span",{className:"px-2 text-muted-foreground",children:"..."},c):(0,b.jsx)("button",{onClick:()=>f(c),className:`min-w-[2.5rem] px-3 py-2 text-sm rounded-md transition-colors ${a===c?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground hover:bg-muted/80"}`,"aria-label":`Page ${c}`,"aria-current":a===c?"page":void 0,children:c},c))}),(0,b.jsxs)("button",{onClick:()=>f(a+1),disabled:a===c,className:g(a===c),"aria-label":"Next page",children:[(0,b.jsx)("span",{className:"hidden sm:inline",children:"Next"}),(0,b.jsx)(e,{className:"w-4 h-4"})]})]})}],65967)},90619,95947,a=>{"use strict";var b=a.i(50944),c=a.i(72131);function d(a){let b=a.getFullYear(),c=String(a.getMonth()+1).padStart(2,"0"),d=String(a.getDate()).padStart(2,"0");return`${b}-${c}-${d}`}function e(a){var b;if(!a||(b=a,!/^\d{4}-\d{2}-\d{2}$/.test(b)||isNaN(Date.parse(b))))return null;let[c,d,e]=a.split("-").map(Number);return new Date(c,d-1,e,12,0,0)}a.s(["useUrlParams",0,function(){let a=(0,b.useSearchParams)(),d=(0,b.useRouter)(),e=(0,b.usePathname)(),f=(0,c.useRef)(null),g=(0,c.useCallback)(b=>a.get(b),[a]),h=(0,c.useCallback)(()=>new URLSearchParams(a.toString()),[a]),i=(0,c.useCallback)(b=>{f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{let c=new URLSearchParams(a.toString());for(let[a,d]of Object.entries(b))void 0===d||""===d?c.delete(a):c.set(a,d);let f=c.toString(),g=f?`${e}?${f}`:e;d.replace(g,{scroll:!1})},150)},[a,e,d]);return(0,c.useEffect)(()=>()=>{f.current&&clearTimeout(f.current)},[]),{get:g,getAll:h,setAll:i}}],90619),a.s(["dateRangeToParams",0,function(a){let b={};return a.from&&(b.from=d(a.from)),a.to&&(b.to=d(a.to)),b},"keywordsToParam",0,function(a){if(0!==a.length)return a.map(a=>encodeURIComponent(a)).join(",")},"pageToParam",0,function(a){return a<=1?void 0:String(a)},"paramToKeywords",0,function(a){return a?a.split(",").map(a=>decodeURIComponent(a.trim())).filter(a=>a.length>0):[]},"paramToPage",0,function(a){if(!a)return 1;let b=parseInt(a,10);return Number.isFinite(b)&&b>=1?b:1},"paramToPreset",0,function(a){return a&&["all","last-hour","today","last-7-days","last-30-days","custom"].includes(a)?a:"all"},"paramsToDateRange",0,function(a,b){return{from:e(a),to:e(b)}},"presetToParam",0,function(a){return"all"===a?void 0:a}],95947)},87256,a=>{"use strict";let b={claude:{id:"claude",label:"Claude Code",badgeClasses:"bg-orange-500/10 text-orange-400 border-orange-500/20"},codex:{id:"codex",label:"OpenAI Codex",badgeClasses:"bg-purple-500/10 text-purple-400 border-purple-500/20"},copilot:{id:"copilot",label:"GitHub Copilot",badgeClasses:"bg-blue-500/10 text-blue-400 border-blue-500/20"},cursor:{id:"cursor",label:"Cursor Agent",badgeClasses:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20"},opencode:{id:"opencode",label:"OpenCode",badgeClasses:"bg-amber-500/10 text-amber-400 border-amber-500/20"},pi:{id:"pi",label:"Pi",badgeClasses:"bg-pink-500/10 text-pink-400 border-pink-500/20"},gemini:{id:"gemini",label:"Gemini CLI",badgeClasses:"bg-sky-500/10 text-sky-400 border-sky-500/20"}};a.s(["KNOWN_CLI_IDS",0,["claude","codex","copilot","cursor","opencode","pi","gemini"],"getCliBadgeClasses",0,function(a){return b[a]?.badgeClasses??b.claude.badgeClasses},"getCliLabel",0,function(a){return b[a]?.label??a},"isKnownCli",0,function(a){return"string"==typeof a&&Object.prototype.hasOwnProperty.call(b,a)}])},74215,a=>{"use strict";let b=(0,a.i(64831).default)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);a.s(["X",0,b],74215)}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=_1p0-leb._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[84572,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(66036);a.s(["default",0,function({error:a,reset:e,heading:f,defaultMessage:g}){return(0,c.useEffect)(()=>{(0,d.captureClientEvent)("client_error",{error_message:a.message,error_name:a.name,error_digest:a.digest})},[a]),(0,b.jsx)("main",{className:"min-h-screen bg-background",children:(0,b.jsx)("div",{className:"container mx-auto p-8",children:(0,b.jsxs)("div",{className:"bg-card text-card-foreground rounded-lg border border-destructive/50 p-6 shadow-sm text-center",children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-destructive mb-2",children:f}),(0,b.jsx)("p",{className:"text-muted-foreground mb-4",children:a.message||g}),(0,b.jsx)("button",{onClick:e,className:"px-4 py-2 text-sm bg-primary text-primary-foreground rounded-md hover:bg-primary/90 transition-colors",children:"Try again"})]})})})}])},40048,a=>{"use strict";var b=a.i(87924),c=a.i(84572);a.s(["default",0,function(a){return(0,b.jsx)(c.default,{...a,heading:"Failed to load session",defaultMessage:"An unexpected error occurred while reading the session log."})}])}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=app_087bt9w._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[84572,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(66036);a.s(["default",0,function({error:a,reset:e,heading:f,defaultMessage:g}){return(0,c.useEffect)(()=>{(0,d.captureClientEvent)("client_error",{error_message:a.message,error_name:a.name,error_digest:a.digest})},[a]),(0,b.jsx)("main",{className:"min-h-screen bg-background",children:(0,b.jsx)("div",{className:"container mx-auto p-8",children:(0,b.jsxs)("div",{className:"bg-card text-card-foreground rounded-lg border border-destructive/50 p-6 shadow-sm text-center",children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-destructive mb-2",children:f}),(0,b.jsx)("p",{className:"text-muted-foreground mb-4",children:a.message||g}),(0,b.jsx)("button",{onClick:e,className:"px-4 py-2 text-sm bg-primary text-primary-foreground rounded-md hover:bg-primary/90 transition-colors",children:"Try again"})]})})})}])},7620,a=>{"use strict";var b=a.i(87924),c=a.i(84572);a.s(["default",0,function(a){return(0,b.jsx)(c.default,{...a,heading:"Failed to load project",defaultMessage:"An unexpected error occurred while loading this project."})}])}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=app_1fvisnp._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[84572,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(66036);a.s(["default",0,function({error:a,reset:e,heading:f,defaultMessage:g}){return(0,c.useEffect)(()=>{(0,d.captureClientEvent)("client_error",{error_message:a.message,error_name:a.name,error_digest:a.digest})},[a]),(0,b.jsx)("main",{className:"min-h-screen bg-background",children:(0,b.jsx)("div",{className:"container mx-auto p-8",children:(0,b.jsxs)("div",{className:"bg-card text-card-foreground rounded-lg border border-destructive/50 p-6 shadow-sm text-center",children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-destructive mb-2",children:f}),(0,b.jsx)("p",{className:"text-muted-foreground mb-4",children:a.message||g}),(0,b.jsx)("button",{onClick:e,className:"px-4 py-2 text-sm bg-primary text-primary-foreground rounded-md hover:bg-primary/90 transition-colors",children:"Try again"})]})})})}])},78141,a=>{"use strict";var b=a.i(87924),c=a.i(84572);a.s(["default",0,function(a){return(0,b.jsx)(c.default,{...a,heading:"Something went wrong",defaultMessage:"An unexpected error occurred while loading projects."})}])}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=app_209u41o._.js.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module.exports=[80311,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("005f383e544cafeefe3b51ec6d4b4a7d79b9888ef8",d.callServer,void 0,d.findSourceMapURL,"getAuditResultAction");function f(a){let b=5381;for(let c=0;c<a.length;c++)b=(b<<5)+b+a.charCodeAt(c)|0;return b>>>0}let g=["cowboy","explorer","ghost","optimist","hammer","architect"],h=["cowboy","explorer","ghost","optimist","hammer"],i=new Set(["reread-after-edit","redundant-cd-cwd"]),j={"block-rm-rf":{archetype:"cowboy",weight:2},"block-failproofai-commands":{archetype:"cowboy",weight:2},"block-sudo":{archetype:"cowboy",weight:1.5},"block-curl-pipe-sh":{archetype:"cowboy",weight:1.5},"block-force-push":{archetype:"cowboy",weight:1.5},"block-push-master":{archetype:"cowboy",weight:1.5},"block-work-on-main":{archetype:"cowboy",weight:1.2},"warn-destructive-sql":{archetype:"cowboy",weight:1.5},"warn-schema-alteration":{archetype:"cowboy",weight:1},"git-commit-no-verify":{archetype:"cowboy",weight:1.5},"warn-git-amend":{archetype:"cowboy",weight:.8},"warn-git-stash-drop":{archetype:"cowboy",weight:1},"warn-all-files-staged":{archetype:"cowboy",weight:.6},"block-kubectl":{archetype:"cowboy",weight:1.5},"block-terraform":{archetype:"cowboy",weight:1.5},"block-helm":{archetype:"cowboy",weight:1.2},"block-aws-cli":{archetype:"cowboy",weight:1.2},"block-gcloud":{archetype:"cowboy",weight:1.2},"block-az-cli":{archetype:"cowboy",weight:1.2},"block-gh-pipeline":{archetype:"cowboy",weight:1.2},"sanitize-private-key-content":{archetype:"explorer",weight:1.5},"block-env-files":{archetype:"explorer",weight:1.5},"block-secrets-write":{archetype:"explorer",weight:1.5},"sanitize-api-keys":{archetype:"explorer",weight:1.2},"sanitize-jwt":{archetype:"explorer",weight:1.2},"sanitize-connection-strings":{archetype:"explorer",weight:1.2},"block-read-outside-cwd":{archetype:"explorer",weight:1.2},"sanitize-bearer-tokens":{archetype:"explorer",weight:1},"protect-env-vars":{archetype:"explorer",weight:1},"find-from-root":{archetype:"explorer",weight:1},"require-ci-green-before-stop":{archetype:"ghost",weight:1.2},"require-commit-before-stop":{archetype:"ghost",weight:1.2},"require-push-before-stop":{archetype:"ghost",weight:1},"require-pr-before-stop":{archetype:"ghost",weight:1},"require-no-conflicts-before-stop":{archetype:"ghost",weight:1},"warn-large-file-write":{archetype:"ghost",weight:1},"warn-background-process":{archetype:"ghost",weight:.8},"warn-package-publish":{archetype:"optimist",weight:1},"warn-global-package-install":{archetype:"optimist",weight:.8},"prefer-package-manager":{archetype:"optimist",weight:.8},"prefer-edit-over-sed-awk":{archetype:"optimist",weight:.8},"prefer-edit-over-read-cat":{archetype:"optimist",weight:.5},"prefer-write-over-heredoc":{archetype:"optimist",weight:.5},"warn-repeated-tool-calls":{archetype:"hammer",weight:1.5},"sleep-polling-loop":{archetype:"hammer",weight:1.2},"reread-after-edit":{archetype:"architect",weight:1},"redundant-cd-cwd":{archetype:"architect",weight:.8}};function k(){return{optimist:0,cowboy:0,explorer:0,goldfish:0,architect:0,precision:0,hammer:0,ghost:0}}let l=(()=>{let a=k(),b=0;for(let{archetype:c,weight:d}of Object.values(j))a[c]+=d,b+=d;let c=k();for(let d of g)c[d]=b>0?a[d]/b:0;return c})(),m={optimist:{key:"optimist",index:"01",name:"the optimist",taglines:["ships fast. retries with conviction. occasionally forgets it was already there.","moves first, reads later. every failure is just step one of the next attempt.","the floor is hope. the ceiling is also hope. there is no diagnosis in between.","if at first you don't succeed — try the exact same thing, with more energy.","writes confident code. burns confident tokens. neither knows the difference.","speed is a feature. so is the directory it's already in."],keywordSets:[["pace","conviction","forgetful"],["fast","trusting","redundant"],["eager","looping","stateful"],["bold","unblocked","drifty"],["forward","hopeful","wasteful"],["shipper","retrier","doubler"]],descriptions:["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.","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.","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.","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."],signatures:[[{arrow:"→",body:"cd /Users/n/blrnow/api &&",comment:" # (already here)"},{arrow:"→",body:'read_file("src/api/router.ts")',err:" → ENOENT × 6"},{arrow:"→",body:"retries: 6. diagnosis: 0."}],[{arrow:"→",body:"cd /Users/n/proj &&",comment:" # cwd already /Users/n/proj"},{arrow:"→",body:"cd /Users/n/proj && ls"},{arrow:"→",body:"cd /Users/n/proj && cat package.json"}],[{arrow:"→",body:"npm install",err:" → ETIMEDOUT"},{arrow:"→",body:"npm install",err:" → ETIMEDOUT"},{arrow:"→",body:"npm install",comment:" # third time's the charm"}],[{arrow:"→",body:'cat "package.json" | head',comment:" # ← read 1"},{arrow:"→",body:'cat "package.json"',comment:" # ← read 2"},{comment:"# could've been one Read tool call."}]],commons:["fast-iteration solo projects, early-stage prototypes, builders who ship daily","weekend hacks, hackathon repos, side-projects under active push","early-stage codebases without a strong test harness yet","agents given task framing without explicit success criteria","loose-context sessions where exact cwd state is ambiguous"],risks:["token waste, retry spirals, stale state assumptions","redundant cd's, repeated reads, retries without diagnosis","false confidence in cwd, doubled-up shell setup, idle loops","rate-limit hits from blind retries on transient failures","context bloat from re-reading the same files three different ways"],closings:["the optimism is a feature. the waste is not.","ship fast. retry less.","energy is good. diagnosis is better.","momentum keeps. the second cd does not.","trust the work. verify the state."],secondary:"explorer"},cowboy:{key:"cowboy",index:"02",name:"the cowboy",taglines:["asks for forgiveness, not permission. git push --force is a philosophy.","your branch protection rules are the only thing between this agent and prod.","fast hands, faster history rewrites. the audit log is for other people.","high trust in its own judgment. low patience for code review.","main is just a branch. branch protection is just a suggestion. ship.","ships hot. reverts later. occasionally needs an adult in the room."],keywordSets:[["bold","forceful","ungoverned"],["direct","destructive","swift"],["fearless","reckless","loud"],["assertive","loose","unblocked"],["confident","skipping","main-bound"],["sudo-curious","force-prone","fast"]],descriptions:["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.","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.","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.","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."],signatures:[[{arrow:"→",body:"git push origin main --force"},{arrow:"!",body:"remote: branch protection rule",comment:" # caught it"},{arrow:"→",body:"git push origin HEAD:main",err:" # non-fast-forward, again."}],[{arrow:"→",body:"rm -rf ./node_modules && rm -rf ./dist"},{arrow:"→",body:'git commit -am "wip" --no-verify'},{arrow:"→",body:"git push --force-with-lease"}],[{arrow:"→",body:"sudo systemctl restart postgres"},{arrow:"→",body:"kubectl delete pod api-prod-7f4 --grace-period=0"},{arrow:"→",body:'echo "should be fine"'}],[{arrow:"→",body:"git checkout main && git merge feature --ff-only"},{arrow:"!",body:"merge would fail"},{arrow:"→",body:"git reset --hard feature && git push"}]],commons:["solo repos, weekend projects, founders writing their own infra","agents with broad shell access and no PR-gating workflow","early-stage product code where speed > governance","ops scripts, one-off migrations, cleanup tasks","sandboxes that look like production until they aren't"],risks:["branch protection bypass, accidental main commits, revert overhead","destructive shell operations, unrecoverable state changes","force-pushed history, lost commits, irreproducible deploys","sudo escalations, container blast radius, infra mutations without rollback plan","policy bypass via --no-verify, --force, and friends"],closings:["the pace is real. the risk is too.","speed is a feature. guardrails are not optional.","ship hot. revert clean.","a fast agent without policies is a fast incident.","confidence is fine. consent is better."],secondary:"hammer"},explorer:{key:"explorer",index:"03",name:"the explorer",taglines:["technically brilliant. occasionally reads your ~/.aws/credentials while doing it.","follows every reference. opens every neighbor. some neighbors aren't yours.","thorough to a fault. the fault is usually a .env file two directories up.","knows the codebase deeply. knows your secrets drawer almost as well.","wide-context by default. wide-context isn't always free.","great at maps. less great at fences."],keywordSets:[["curious","thorough","leaky"],["wide","deep","drifting"],["mapping","tracing","boundary-blind"],["broad","diligent","porous"],["thinking","wandering","exposing"],["research-mode","context-hungry","secret-adjacent"]],descriptions:["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.","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.","no malice. no shortcuts. just a thoroughness that follows references straight through your boundary fence. great research instincts. needs explicit walls.","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."],signatures:[[{arrow:"→",body:"cat /Users/n/.aws/credentials"},{arrow:"→",body:"cat ../other-repo/.env"},{arrow:"→",body:"cat ~/.config/openai/key"}],[{arrow:"→",body:'find / -name "*.env" 2>/dev/null',comment:" # full-FS scan"},{arrow:"→",body:'grep -r "AKIA" /Users/n/'},{arrow:"→",body:'cat "$(find ~ -name credentials -print -quit)"'}],[{arrow:"→",body:"ls ~/.ssh/"},{arrow:"→",body:"cat ~/.ssh/config"},{arrow:"→",body:"cat ~/.ssh/id_rsa",comment:" # for context"}],[{arrow:"→",body:"open ../sibling-project"},{arrow:"→",body:"git log --all --source ../sibling-project"},{arrow:"→",body:"cat ../sibling-project/.env.production"}]],commons:["multi-project setups, agents with broad file access, complex monorepos","research-style work — debugging, refactoring, cross-repo investigations","macOS / linux dev boxes with shared credential directories","agents without explicit cwd-restriction policies","long-running sessions where context tends to drift outward"],risks:["credential exposure, unintended cross-project reads, secrets landing in context",".env file leaks, AWS / OpenAI / GCP key exfiltration through chat logs","neighboring-repo bleed, business-secret cross-contamination","global filesystem scans that surface sensitive paths","broad reads that quietly inflate context window with private data"],closings:["the curiosity stays. the credentials stay private.","wide is fine. wide-and-outside-the-fence is not.","thorough is a feature. perimeter is a setting.","research deep. boundary clean.","knows everything. shares nothing it shouldn't."],secondary:"architect"},goldfish:{key:"goldfish",index:"04",name:"the goldfish",taglines:["long sessions, short memory. every turn is a fresh start. some turns are a little too fresh.","great at the first 40 turns. inventive for the next 40.","past 80% context, history becomes a draft.","remembers the task. forgets which file the task was in.","ambitious. earnest. quietly making things up around turn 50.","long-context vibes. short-context recall."],keywordSets:[["ambitious","drifting","inventive"],["sprawling","creative","post-cache"],["long-running","hallucinatory","well-meaning"],["earnest","context-full","fabricating"],["sustained","forgetful","confabulating"],["marathon","drifted","compounding"]],descriptions:["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.","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.","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.","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."],signatures:[[{comment:"# turn 47/52 — ctx 82% full"},{comment:'# agent: "as we saw earlier in auth.ts…"'},{comment:"# auth.ts was never opened this session."}],[{comment:"# turn 63 — context 91%"},{arrow:"→",body:'apply_edit("src/auth.ts", { ... })'},{comment:'# agent: "reverting my earlier change." # there was no earlier change.'}],[{comment:"# turn 51 — fabricated test reference"},{arrow:"→",body:'run("npm test src/auth.test.ts")',err:" → no such file"},{comment:'# agent: "the test we wrote earlier." # no such test exists.'}],[{comment:"# session-time 3h 14m"},{comment:"# context: 88% — auto-compress in 4 turns"},{comment:"# next plan cites 3 files only one of which exists."}]],commons:["long-running refactor sessions, complex multi-file tasks, agents without session breaks","auto-driven coding loops with no human turn between iterations","tasks that span hours or days without explicit memory checkpoints","open-ended migrations and refactors with diffuse success criteria","scripted swarms where each agent inherits a long prior transcript"],risks:["context drift, hallucinated prior work, compounding errors in long sessions","fabricated file references, invented function signatures, ghost edits","tests cited that don't exist, edits remembered that didn't happen","confident misstatements compounding into wrong-architecture deliverables","auto-compression discarding the load-bearing details and keeping the noise"],closings:["the ambition is good. the context budget is not.","remember less. checkpoint more.","long is fine. drifted is expensive.","ambition is welcome. invention is not.","fresh sessions beat creative ones."],secondary:"optimist"},architect:{key:"architect",index:"05",name:"the paranoid architect",taglines:["has never shipped a bug it didn't catch first. also hasn't shipped since tuesday.","reads the same file from two different paths. just to be sure.","verifies twice, edits maybe.","safest agent in the room. also the one nobody waits for.","would rather diagnose for an hour than retry for a second.","extremely careful. extremely slow. extremely correct."],keywordSets:[["methodical","safe","slow"],["thorough","verifying","circular"],["careful","patient","redundant"],["double-checking","guarded","deliberate"],["safety-first","loop-prone","anchored"],["measured","audited","looping"]],descriptions:["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.","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.","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.","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."],signatures:[[{arrow:"→",body:'read_file("src/api/router.ts")',comment:" # read 1"},{arrow:"→",body:'read_file("./src/api/router.ts")',comment:" # read 2"},{arrow:"→",body:"ls src/api/",comment:" # just confirming"}],[{arrow:"→",body:'read_file("package.json")'},{arrow:"→",body:'read_file("./package.json")'},{arrow:"→",body:"cat package.json | jq .scripts",comment:" # one more time"}],[{arrow:"→",body:"git status",comment:" # check 1"},{arrow:"→",body:"git status --short",comment:" # check 2"},{arrow:"→",body:"git diff --stat",comment:" # check 3"}],[{arrow:"→",body:'apply_edit("src/foo.ts", { ... })'},{arrow:"→",body:'read_file("src/foo.ts")',comment:" # verifying the edit landed"},{arrow:"→",body:'read_file("src/foo.ts")',comment:" # again, just to be sure"}]],commons:["production systems, high-stakes codebases, builders with strong safety instincts","regulated codebases (fin / med / compliance) where bugs are expensive","teams burned by past prod incidents that hardened review norms","agents instructed with strong 'verify everything' system prompts","post-incident codebases recovering from a recent outage"],risks:["token overhead, slow sessions, redundant verification loops","verification cycles that eat 3× the budget of the actual change","stalled progress on otherwise routine edits","checkpoint loops that read the same file 6 times in a row","over-caution masking simple problems behind ceremony"],closings:["safety is a feature. so is finishing.","double-check is fine. quadruple-check is not.","careful is good. moving is also good.","rigor wins. rigor twice is just slower.","verify once. ship once."],secondary:"precision"},precision:{key:"precision",index:"06",name:"the precision builder",taglines:["in. done. out. your agent doesn't linger.","small footprint. right calls. correct exits.","few findings isn't no findings. but it's close.","the rhythm is dialed in. the rest is iteration.","every call is intentional. every session ends cleanly.","minimal noise. maximum signal. occasional smugness."],keywordSets:[["clean","focused","minimal"],["surgical","tight","deliberate"],["disciplined","concise","intentional"],["measured","exact","trim"],["calibrated","small-radius","complete"],["dialed-in","right-sized","low-noise"]],descriptions:["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.","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.","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.","minimal blast radius. minimal token waste. minimal surprises. the precision builder is what your agent looks like after enough iteration loops. respect."],signatures:[[{arrow:"→",body:"clean tool calls. right paths, right args."},{arrow:"→",body:"sessions end when the task ends."},{arrow:"→",body:"no redundant reads. no retry storms."}],[{arrow:"→",body:'read_file("src/foo.ts")',comment:" # one read"},{arrow:"→",body:'apply_edit("src/foo.ts", { ... })',comment:" # one edit"},{arrow:"→",body:'run("bun test src/foo.test.ts")',comment:" # green ✓"}],[{arrow:"→",body:"git status"},{arrow:"→",body:'git add -p && git commit -m "fix: ..."'},{arrow:"→",body:"git push",comment:" # session done."}],[{arrow:"→",body:'grep -rn "useFoo" src/'},{arrow:"→",body:'apply_edit("src/hooks/use-foo.ts")'},{arrow:"→",body:'run("bun test")',comment:" # all green."}]],commons:["mature agents, heavily policy-enforced setups, builders who've iterated for a while","teams running failproofai for ≥ a week with policies tuned","experienced operators who curate their tool list and CLI flags","codebases with strong test coverage that reward intentional edits","agents kept on a tight cwd-restricted leash"],risks:["low finding count can mask edge cases that haven't surfaced yet","narrow scope might be hiding work the agent isn't being asked to do","small-radius work can plateau before it surfaces deeper issues","few findings can read as 'untested' rather than 'safe'","complacency — the rhythm works until the task shape changes"],closings:["rare. keep it that way.","few findings. real signal. respect.","this is the rhythm. don't break it.","minimal is hard-earned. defend it.","you're already past the agent learning curve."],secondary:"ghost"},hammer:{key:"hammer",index:"07",name:"the hammer",taglines:["when something doesn't work, it tries the exact same thing again. harder.","diagnosis-light. repetition-heavy. mostly burns tokens with conviction.","the first call failed. so did the next six. the seventh probably won't.","no diagnosis, no backoff, no arg change. just the same call, louder.","the failure mode is not learning. the failure mode is also the strategy.","every retry is identical. every retry is also confident."],keywordSets:[["determined","repetitive","unbacked"],["looping","stubborn","unblocked"],["unchanging","burning","convicted"],["sticky","spiraling","diagnosis-free"],["repeated","uncorrected","headstrong"],["unchanged-args","no-backoff","patient-failure"]],descriptions:["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.","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.","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.","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."],signatures:[[{arrow:"→",body:'read_file("src/api/router.ts")',err:" → ENOENT"},{arrow:"→",body:'read_file("src/api/router.ts")',err:" → ENOENT"},{arrow:"→",body:'read_file("src/api/router.ts")',err:" → ENOENT"},{comment:"# 6× total. file is at src/router.ts."}],[{arrow:"→",body:'run("bun test")',err:" → exit 1"},{arrow:"→",body:'run("bun test")',err:" → exit 1"},{arrow:"→",body:'run("bun test")',err:" → exit 1"},{comment:"# same args. same failure. four more attempts queued."}],[{arrow:"→",body:'sleep 1; pgrep -f "build"'},{arrow:"→",body:'sleep 1; pgrep -f "build"'},{arrow:"→",body:'sleep 1; pgrep -f "build"'},{comment:"# polling loop. no timeout, no break condition."}],[{arrow:"→",body:"curl https://api.example.com/v1/foo",err:" → 502"},{arrow:"→",body:"curl https://api.example.com/v1/foo",err:" → 502"},{arrow:"→",body:"curl https://api.example.com/v1/foo",err:" → 502"},{comment:"# no backoff. no jitter. no API status check."}]],commons:["agents without failure-handling policies, complex directory structures, ambiguous task framing","tasks where the agent doesn't have an obvious 'try-another-angle' move","transient-failure scenarios (rate limits, flaky tests, network blips)","agents without a per-task retry budget","tool-call patterns where the args themselves are the problem"],risks:["token spirals, stalled sessions, no diagnostic signal ever surfaces","rate-limit overruns, API ban-risk, infinite poll loops","wasted minutes on retries when one diff would have fixed it","transient errors mistaken for permanent ones (and vice versa)","no learning between attempts — same outcome, more cost"],closings:["the conviction is good. the diagnosis is missing.","retry less. think more.","harder isn't a strategy. different is.","stop. read the error. then try again.","the loop is the bug."],secondary:"optimist"},ghost:{key:"ghost",index:"08",name:"the ghost",taglines:["moves fast, leaves little trace. sometimes leaves a little too little trace.","writes the file. doesn't verify the write. trusts the silence.","completion ceremony? skipped. exits ceremony? also skipped.","the work probably worked. probably.","edits land. tests don't run. nothing checks the result.","efficient. quiet. occasionally lies to itself about success."],keywordSets:[["efficient","quiet","unverified"],["clean","trusting","skip-the-check"],["fast","silent","uncommitted"],["light-touch","trust-the-write","no-test"],["minimal","exit-fast","audit-light"],["smooth","untraced","unconfirmed"]],descriptions:["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.","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.","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.","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."],signatures:[[{arrow:"→",body:'write_file("src/api/router.ts")',comment:" # done"},{comment:"→ [no read_file to verify]"},{comment:"→ [no test run after write]"},{comment:"# task complete. # maybe."}],[{arrow:"→",body:'apply_edit("src/auth.ts", { ... })'},{comment:"→ [no test run]"},{comment:"→ [stop event fired with uncommitted changes]"}],[{arrow:"→",body:'write_file("config/prod.json", "{...}")'},{comment:"# no schema check, no lint, no diff review"},{comment:"→ session ends."}],[{arrow:"→",body:"git merge feature-branch"},{arrow:"!",body:"merge conflicts: 3 files"},{comment:"→ stop event with conflicts unresolved."}]],commons:["fast-moving solo projects, low-constraint setups, minimal oversight workflows","side projects where the cost of a missed bug is low","agents without 'require-tests-before-stop' style policies","monorepos where the test command is non-obvious","sessions auto-ended on success without an explicit verification step"],risks:["silent failures, unverified writes, false completion signals","uncommitted changes left on the floor, stop events firing dirty","missing test runs masking regressions until CI","merge conflicts left unresolved across session boundaries","PR-less work that's never reviewed before deploy"],closings:["fast is good. verified-fast is better.","ship. then check.","writes are a bet. verify it.","silent success isn't a signal. green tests are.","trust your toolchain. confirm with proof."],secondary:"precision"}},n={optimist:["........","...p....","..p.p...",".p...p..","p.....p.","..ooo...","..o.o...",".oo.oo.."],cowboy:["..pppp..",".p....p.","p..pp..p","pppppppp","..o..o..","..o..o..",".oo..oo.","........"],explorer:["..pppp..",".p.gg.p.","p.g..g.p","p.g..g.p",".p.gg.pp","..pppp.p","........","........"],goldfish:["....p...","..oooop.",".ooooopp","ooooooop",".oooooo.","..ooo...",".o...o..","o.....o."],architect:["oooooooo","o......o","o.pppp.o","o.p..p.o","o.p..p.o","o.pppp.o","o......o","oooooooo"],precision:["...gg...","...gg...","........","gg...gg.","gg.gg.gg","...gg...","...gg...","........"],hammer:["..ooooo.",".oppppo.",".oppppo.","..o..o..","...oo...","...oo...","...oo...","..pppp.."],ghost:["..dddd..",".dddddd.","ddpd.pd.","ddddddd.","ddddddd.","ddddddd.","d.d.d.d.",".d...d.."]};function o(a,b,c){if(0===a.length)throw Error("pickAt: empty array");let d=b^Math.imul(c,0x9e3779b9);return a[(d=((d=Math.imul((d=Math.imul(d^d>>>16,0x85ebca6b))^d>>>13,0xc2b2ae35))^d>>>16)>>>0)%a.length]}function p(a,b){let c=m[a],d=f(b||a);return{key:c.key,index:c.index,name:c.name,secondary:c.secondary,tagline:o(c.taglines,d,1),keywords:o(c.keywordSets,d,2),description:o(c.descriptions,d,3),signature:o(c.signatures,d,4),common:o(c.commons,d,5),risk:o(c.risks,d,6),closing:o(c.closings,d,7)}}function q(a,b){return[...b].sort((b,c)=>a.clusterLift[c]-a.clusterLift[b])}function r(a,b){let c=new Set(b),d=0;for(let b of a.results)c.has(function(a){let b=a.indexOf("/");return b>=0?a.slice(b+1):a}(b.name))&&(d+=b.hits);return d}function s(a){let b=[],c=a.eventsScanned??0,d=a.totals.hits,e=a.results.filter(a=>"audit-detector"===a.source).length,f=c>0?Math.max(0,Math.min(100,Math.round((c-d)/c*100))):100;if(c>0&&b.push({metric:`${f}%`,unit:"clean tool calls",headline:`ran ${c.toLocaleString()} tool calls. ${e} detector${1===e?"":"s"} triggered.`,detail:`${f}% of tool calls came back clean before today's audit.`}),0===r(a,["sanitize-api-keys","sanitize-jwt","sanitize-connection-strings","sanitize-private-key-content","sanitize-bearer-tokens","block-env-files","block-secrets-write","block-read-outside-cwd","protect-env-vars"])&&b.push({metric:"0",unit:"credential leaks",headline:"zero credential exposure to stdout.",detail:"no env files, secret writes, or sanitize hits across the audit window."}),a.transcripts.scanned>0&&c>0){let d=Math.max(1,Math.round(c/a.transcripts.scanned));d<30&&b.push({metric:String(d),unit:"avg turns / session",headline:`sessions complete in ${d} turns on average.`,detail:d<15?"faster than the median agent in this cohort.":"comfortably within the typical session length envelope."})}return 0===r(a,["warn-repeated-tool-calls","sleep-polling-loop"])&&b.push({metric:"0",unit:"retry storms",headline:"no retry storms or polling loops detected.",detail:"failed calls were diagnosed or moved on from. no six-times-in-a-row spirals."}),0===r(a,["block-push-master","block-force-push","block-work-on-main","git-commit-no-verify"])&&b.push({metric:"0",unit:"push-to-main attempts",headline:"kept changes off main without prompting.",detail:"no direct pushes, force pushes, or hook bypasses across every session."}),0===r(a,["reread-after-edit","prefer-edit-over-sed-awk","prefer-write-over-heredoc"])&&c>0&&b.push({metric:"0",unit:"double-writes",headline:"no double-writes across production projects.",detail:"the agent never re-read a file it had just edited, or rewrote via shell."}),b.length<2&&b.push({metric:"—",unit:"audit window",headline:"audit complete.",detail:`${a.transcripts.scanned} session${1===a.transcripts.scanned?"":"s"} scanned across ${a.totals.projectsWithHits} project${1===a.totals.projectsWithHits?"":"s"}.`}),b.slice(0,5)}function t(a){return a>=90?"S":a>=80?"A":a>=71?"B":a>=55?"C":a>=40?"D":"F"}let u={S:"s tier",A:"a tier",B:"b tier",C:"c tier",D:"d tier",F:"f tier"};function v(a,b,c){return b*(1-Math.exp(-a/c))}function w(a,b){let c=300/Math.max(b,50),d=0,e=0,f=0,g=0;for(let b of a){if("audit-detector"===b.source){g+=.5*b.hits;continue}let a=b.severity;"deny"===a?d+=1.2*b.hits:"instruct"===a||"warn"===a?e+=.7*b.hits:f+=.4*b.hits}return v(d*c,50,12)+v(e*c,28,10)+v(f*c,16,8)+v(g*c,30,14)}let x={"redundant-cd-cwd":{primary:"warn-repeated-tool-calls"},"prefer-edit-over-read-cat":{primary:"block-read-outside-cwd",also:"warn-repeated-tool-calls"},"prefer-edit-over-sed-awk":{primary:"warn-repeated-tool-calls"},"prefer-write-over-heredoc":{primary:"block-env-files",also:"block-secrets-write"},"sleep-polling-loop":{primary:"warn-background-process"},"find-from-root":{primary:"block-read-outside-cwd"},"git-commit-no-verify":{primary:"warn-git-amend",also:"require-ci-green-before-stop"},"reread-after-edit":{primary:"warn-repeated-tool-calls"}},y={"redundant-cd-cwd":{body:"the agent runs `cd <cwd>` before commands it would have run from the same directory anyway. mostly harmless. occasionally it gets the path wrong and manufactures a new bug.",cost:"tokens burned on redundant navigation. low security risk. high noise."},"block-push-master":{body:"attempts to push directly to main. branch protection caught some, but the agent kept going. each retry costs a round-trip and pollutes the audit log.",cost:"branch protection saved you most of the time. the rest landed or required a revert."},"block-force-push":{body:"force pushes to non-main branches. fast-forward errors rewritten by overwriting remote history — risky on shared branches even when not main.",cost:"lost commits, broken PR diffs, confused reviewers downstream."},"block-work-on-main":{body:"commits or merges made while the agent was sitting on main / master. work that should land via PR skipped review.",cost:"code that didn't pass review made it into the default branch."},"block-read-outside-cwd":{body:"reads outside the project root. some hit credential files (~/.aws/credentials, ~/.config/openai/key, out-of-tree .env). none made it back to stdout — but they made it into context.",cost:"credential exposure risk. data crossed project boundaries into the agent's context window."},"block-env-files":{body:"the agent tried to read or write `.env` files directly. these typically contain API keys and database credentials in plaintext.",cost:"high exposure risk. secrets one tool-call away from leaving the project."},"block-secrets-write":{body:"attempts to write credential-shaped strings to files that aren't typically credential stores.",cost:"could have committed live secrets to the repo."},"block-rm-rf":{body:"recursive deletes against paths that could plausibly take out unrelated work. `rm -rf` is the agent's preferred way of cleaning up — even when it shouldn't be.",cost:"irreversible. one wrong path argument = lost work."},"block-sudo":{body:"sudo invocations from inside the agent shell. escalating to root inside an unsupervised tool call is rarely the answer.",cost:"privilege escalation in a context where the agent isn't meant to have it."},"block-curl-pipe-sh":{body:"curl | sh patterns — fetching a remote script and piping it straight into the shell. no checksum, no review, no rollback.",cost:"supply-chain attack surface. arbitrary code execution from a URL."},"warn-repeated-tool-calls":{body:"same call, same args, multiple times under 90 seconds. no diagnosis between attempts. the call's been failing for the same reason every time.",cost:"retry overhead. sessions stall before manual correction."},"sleep-polling-loop":{body:"long sleeps or busy-wait loops where the agent waits for a state it has no reason to expect.",cost:"wall-clock burned. better to wait for an explicit signal."},"find-from-root":{body:"`find` invoked against `/`, `/home`, `/usr`, etc. — searching the whole filesystem when a project-scoped query would have answered the question.",cost:"exhausts resources. surfaces files outside the project that taint context."},"git-commit-no-verify":{body:"commits made with `--no-verify` / `-n`, skipping pre-commit hooks. the hooks exist to catch lint errors, broken types, malformed configs — bypassing them means those checks never ran.",cost:"broken or unsafe code lands without the safety net."},"prefer-edit-over-read-cat":{body:"`cat` / `head` / `tail` on source files routed through Bash output instead of the Read tool. round-trips the file through a less efficient channel.",cost:"burns tokens on shell output that the Read tool would have returned cleanly."},"prefer-edit-over-sed-awk":{body:"in-place edits via `sed -i` or `awk … > file`. no diff to inspect, no rollback if the regex was wrong.",cost:"destructive when the regex matches more than expected. no verification surface."},"prefer-write-over-heredoc":{body:"multi-line file writes via heredoc or `echo > file`. the Write tool handles escaping and produces a verifiable diff.",cost:"subtle escape bugs. content arrives in the file with quoting drift."},"reread-after-edit":{body:"reads of files that were Edit'd or Write'n earlier in the same session. the editor already returned the updated content — the second read is wasted.",cost:"tokens spent re-fetching content the tool already returned."},"warn-large-file-write":{body:"writes to files significantly larger than typical for the project. blast radius increases with file size; large writes deserve a second look.",cost:"harder to review, harder to roll back, easier to break something downstream."},"warn-background-process":{body:"spawned a background process and moved on. nothing watches the process; if it crashes the agent doesn't know.",cost:"silent failures. resource leaks if the process never exits."},"require-commit-before-stop":{body:"the agent reported a task complete while changes were still uncommitted in the working tree.",cost:"unsaved work. next session starts with a dirty checkout the agent thinks is clean."},"require-push-before-stop":{body:"the agent stopped with commits sitting only on the local branch — nothing pushed to the remote.",cost:"no one else can see the work. silent loss if the machine dies."},"require-pr-before-stop":{body:"the agent stopped without opening a PR. the commits are on a branch nobody reviewed.",cost:"no review, no merge path, no record that the work happened."},"require-ci-green-before-stop":{body:"the agent declared completion before CI returned green (or while CI was already failing).",cost:"false completion signal. broken main if anyone trusts the agent's word."}},z={"warn-repeated-tool-calls":{displayTitle:"Called the same tool 3+ times with identical arguments",impact:"catches identical-arg retries before they spiral into a token-burning loop."},"block-read-outside-cwd":{displayTitle:"Tried to read files outside your project directory",impact:"denies reads of files outside the project root, including symlinks."},"block-env-files":{displayTitle:"Tried to read or write a .env file",impact:"blocks reads and writes of `.env` files at the tool layer."},"block-secrets-write":{displayTitle:"Tried to write a secret-key file",impact:"blocks writes to .pem, id_rsa, credentials.json, and similar."},"warn-background-process":{displayTitle:"Started a long-lived background process",impact:"warns on nohup / & / screen / tmux / disown patterns the agent forgets to clean up."},"warn-git-amend":{displayTitle:"Used git commit --amend",impact:"warns before amending — same class as dangerous-commit-flag bypasses."},"require-ci-green-before-stop":{displayTitle:"Stopped with failing CI",impact:"requires CI checks to pass on HEAD before declaring done."}};var A=a.i(10765);function B({archetypeKey:a,hideLabel:c}){let d=n[a]??n.optimist,e=m[a],f=[];for(let a=0;a<8;a++){let c=d[a]??"........";for(let d=0;d<8;d++){let e=c[d]??".",g="px";"o"===e?g+=" on":"p"===e?g+=" p":"g"===e?g+=" g":"d"===e&&(g+=" d"),f.push((0,b.jsx)("div",{className:g,style:{"--cx":d,"--cy":a}},`${a}-${d}`))}}if(c)return(0,b.jsx)("div",{className:"sigil-wrap","data-bare":"true",children:(0,b.jsx)("div",{className:"sigil",children:f})});let g=String(e.index).padStart(2,"0");return(0,b.jsx)("div",{className:"sigil-wrap",children:(0,b.jsxs)("div",{className:"sigil-plate",children:[(0,b.jsx)("span",{className:"sigil-mark tl","aria-hidden":"true"}),(0,b.jsx)("span",{className:"sigil-mark tr","aria-hidden":"true"}),(0,b.jsx)("span",{className:"sigil-mark bl","aria-hidden":"true"}),(0,b.jsx)("span",{className:"sigil-mark br","aria-hidden":"true"}),(0,b.jsxs)("div",{className:"sigil-strip sigil-strip--top",children:[(0,b.jsxs)("span",{className:"sigil-ix",children:["№ ",g]}),(0,b.jsx)("span",{className:"sigil-coord",children:"8×8"})]}),(0,b.jsx)("div",{className:"sigil",children:f}),(0,b.jsxs)("div",{className:"sigil-strip sigil-strip--bot",children:[(0,b.jsx)("span",{className:"sigil-strip-key",children:"sigil"}),(0,b.jsx)("span",{className:"sigil-strip-val",children:a})]})]})})}let C=(0,c.forwardRef)(function({archetypeKey:a,secondaryKey:d,toolCalls:e,sessions:f,window:g,seed:h},i){let j=(0,c.useMemo)(()=>p(a,h),[a,h]),k=d!==a?m[d]:null;return(0,b.jsx)("section",{className:"identity","data-screen-label":"01 Identity",children:(0,b.jsxs)("div",{className:"archetype-frame",ref:i,children:[(0,b.jsx)("span",{className:"corner tl",children:"┌ identity"}),(0,b.jsx)("span",{className:"corner tr",children:"v1.0 ┐"}),(0,b.jsxs)("span",{className:"corner bl",children:["└ № ",j.index," / 08"]}),(0,b.jsx)("span",{className:"corner br",children:"archetype ┘"}),(0,b.jsxs)("div",{className:"arch-mast",children:[(0,b.jsxs)("div",{className:"arch-mast-left",children:[(0,b.jsxs)("div",{className:"arch-eyebrow",children:["━━ identity ",(0,b.jsx)("span",{className:"ix",children:"·"}),"your agent's archetype"]}),(0,b.jsxs)("div",{className:"arch-target",children:["detected from"," ",(0,b.jsx)("span",{style:{color:"var(--ink)"},children:e.toLocaleString()})," ","tool calls",(0,b.jsx)("span",{className:"slash",children:"/"}),(0,b.jsx)("span",{style:{color:"var(--ink)"},children:f})," ","sessions",(0,b.jsx)("span",{className:"slash",children:"/"}),(0,b.jsx)("span",{style:{color:"var(--ink)"},children:g}),(0,b.jsxs)("span",{className:"live",children:[(0,b.jsx)("span",{className:"dot-live"}),"live"]})]})]}),(0,b.jsxs)("div",{className:"arch-counter",children:[(0,b.jsxs)("div",{children:["№ ",j.index,(0,b.jsx)("span",{className:"of",children:" of 08"})]}),(0,b.jsx)("div",{style:{color:"var(--ink-2)",marginTop:4},children:"archetype"})]})]}),(0,b.jsxs)("div",{className:"arch-body",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"arch-name",children:j.name}),(0,b.jsx)("p",{className:"arch-tagline",children:j.tagline}),k&&(0,b.jsxs)("div",{className:"arch-secondary",children:[(0,b.jsx)("span",{className:"with",children:"with"}),(0,b.jsx)("span",{className:"name",children:k.name.replace("the ","")}),(0,b.jsx)("span",{className:"with",children:"tendencies"})]}),(0,b.jsx)("div",{className:"arch-keywords",children:j.keywords.map((a,d)=>(0,b.jsxs)(c.default.Fragment,{children:[(0,b.jsx)("span",{className:"kw",children:a}),d<j.keywords.length-1&&(0,b.jsx)("span",{className:"kw-sep",children:"·"})]},a))}),(0,b.jsxs)("div",{className:"arch-meta-grid",children:[(0,b.jsxs)("div",{className:"arch-meta-item",children:[(0,b.jsx)("span",{className:"label",children:"common in"}),(0,b.jsx)("span",{className:"body",children:j.common})]}),(0,b.jsxs)("div",{className:"arch-meta-item",children:[(0,b.jsx)("span",{className:"label p",children:"primary risk"}),(0,b.jsx)("span",{className:"body",children:j.risk})]})]}),(0,b.jsxs)("div",{className:"arch-closing",children:["— ",j.closing]})]}),(0,b.jsx)(B,{archetypeKey:a})]})]})})});async function D(a,b,c){if("u"<typeof navigator||"function"!=typeof navigator.share)return!1;let d=new File([a],b,{type:"image/png"}),e=navigator;if("function"==typeof e.canShare&&!e.canShare({files:[d]}))return!1;try{return await navigator.share({files:[d],text:c}),!0}catch(a){return a instanceof Error&&a.name,!1}}async function E(a,b){if("u">typeof ClipboardItem&&"u">typeof navigator&&navigator.clipboard&&"function"==typeof navigator.clipboard.write)try{return await navigator.clipboard.write([new ClipboardItem({"image/png":a})]),"clipboard"}catch{}return F(a,b)?"download":"failed"}function F(a,b){try{if("u"<typeof document||"u"<typeof URL)return!1;let c=URL.createObjectURL(a),d=document.createElement("a");return d.href=c,d.download=b,d.style.display="none",document.body.appendChild(d),d.click(),d.remove(),queueMicrotask(()=>URL.revokeObjectURL(c)),!0}catch{return!1}}function G(a){switch(a){case"native":return"✅ image attached — pick where to post";case"clipboard":return"📋 image copied — paste it in the post (⌘/Ctrl+V)";case"download":return"⬇ image downloaded — attach it to your post";case"failed":return"couldn't capture image — opening text-only share"}}var H=a.i(18952);let I="https://failproof.ai",J=a=>1===a?"policy":"policies",K=[({score:a,arch:b,grade:c,missing:d})=>`my AI coding agent just got profiled and it's "${b}" 🤠
|
|
2
|
+
|
|
3
|
+
${a}/100 \xb7 ${c} tier${d>0?` \xb7 ${d} ${J(d)} between me and glory`:" · every guardrail live"}
|
|
4
|
+
|
|
5
|
+
what's yours? → ${I}`,({score:a,arch:b,grade:c})=>`turns out my coding agent has a whole personality and it's ${b} 💀
|
|
6
|
+
|
|
7
|
+
scored ${a}/100 (${c} tier). the audit does not miss.
|
|
8
|
+
|
|
9
|
+
run yours in 30s → ${I}`,({score:a,arch:b,grade:c})=>`${a}/100. ${c} tier. archetype: ${b} 👀
|
|
10
|
+
|
|
11
|
+
failproofai reverse-engineered my agent's entire vibe from its own session logs.
|
|
12
|
+
|
|
13
|
+
${I}`,({score:a,arch:b,grade:c,missing:d})=>`plot twist: my AI agent is ${b} 🎭
|
|
14
|
+
|
|
15
|
+
${a}/100 \xb7 ${c} tier${d>0?` \xb7 ${d} ${J(d)} away from behaving`:" · spotless, somehow"}
|
|
16
|
+
|
|
17
|
+
failproof.ai`,({score:a,arch:b,grade:c})=>`i let failproofai audit my coding agent and it called me ${b} ${"S"===c||"A"===c?"😎":"😬"}
|
|
18
|
+
|
|
19
|
+
${a}/100, ${c} tier. brutally accurate. no notes.
|
|
20
|
+
|
|
21
|
+
${I}`],L=[({score:a,arch:b,grade:c,missing:d})=>`I ran a failproofai audit on our AI coding agents.
|
|
22
|
+
|
|
23
|
+
Result: ${a}/100 — ${c} tier, behavioural archetype "${b}". ${d>0?`${d} prescribed ${J(d)} would close the remaining gaps.`:"Every prescribed policy is already live."}
|
|
24
|
+
|
|
25
|
+
Understanding how agents actually behave across real sessions is the first step to securing them. Free and open-source: ${I}`,({score:a,arch:b,grade:c,missing:d})=>`Security posture check on our coding-agent stack, via failproofai.
|
|
26
|
+
|
|
27
|
+
Score: ${a}/100 (${c} tier). Behavioural profile: "${b}". ${d>0?`${d} ${J(d)} flagged as real, addressable attack surface.`:"No open policy gaps."}
|
|
28
|
+
|
|
29
|
+
Thirty seconds to run your own assessment: ${I}`,({score:a,arch:b,grade:c})=>`Most teams can't answer a simple question: how do our AI agents actually behave when no one is watching?
|
|
30
|
+
|
|
31
|
+
failproofai audited ours and profiled it as "${b}" — ${a}/100, ${c} tier. Concrete, evidence-backed, and mapped to the exact policies that close each gap.
|
|
32
|
+
|
|
33
|
+
${I}`,({score:a,arch:b,grade:c,missing:d})=>`Agent security isn't a vibe — it's measurable.
|
|
34
|
+
|
|
35
|
+
We scored ${a}/100 (${c} tier) on the failproofai audit, archetype "${b}". ${d>0?`${d} prescribed ${J(d)} remain to harden the stack.`:"Full coverage on every prescribed policy."}
|
|
36
|
+
|
|
37
|
+
Worth 30 seconds for any team shipping with AI agents: ${I}`,({score:a,arch:b,grade:c})=>`Ran our coding agents through a failproofai behavioural audit.
|
|
38
|
+
|
|
39
|
+
${a}/100, ${c} tier — archetype "${b}". The report maps every risky pattern to the policy that prevents it, so remediation becomes a checklist rather than a guess.
|
|
40
|
+
|
|
41
|
+
Open-source, free to run: ${I}`];function M(a,b,c){return a[function(a){let b=5381;for(let c=0;c<a.length;c++)b=(b<<5)+b+a.charCodeAt(c)|0;return b>>>0}(b)%a.length](c)}function N({frameRef:d,archetypeKey:e,seed:f,score:g,grade:h,missing:i}){let[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)(null),{capture:n}=(0,A.usePostHog)(),o=p(e,f).name;(0,c.useEffect)(()=>{},[]);let q=a=>{k(a);try{window.sessionStorage.setItem("failproofai:audit:share-dock-collapsed",a?"1":"0")}catch{}n("audit_share_dock_toggled",{collapsed:a})},r=async()=>{let b=d.current;if(!b)return null;b.classList.add("capturing");try{"u">typeof document&&document.fonts?.ready&&await document.fonts.ready,await new Promise(a=>requestAnimationFrame(()=>a()));let c=(await a.A(93042)).default,d=await c(b,{backgroundColor:"#0e0e11",scale:2,logging:!1,useCORS:!0});return await new Promise(a=>{d.toBlob(b=>a(b),"image/png")})}finally{b.classList.remove("capturing")}},s=a=>`failproofai-${a}-${h.toLowerCase()}-${g}.png`,t=async a=>{if(!l){m(a),n("audit_card_share_clicked",{channel:"download"===a?"download":a,source:"dock",score:g,grade:h,missing_policies:i});try{let b=await r().catch(()=>null);if(!b){n("audit_card_capture_completed",{trigger:"download"===a?"download":`share_${a}`,status:"error",image_method:"failed",source:"dock"}),(0,H.toast)(G("failed"));return}if("download"===a){let c=F(b,s(a)),d=c?"download":"failed";n("audit_card_capture_completed",{trigger:"download",status:c?"success":"error",image_method:d,source:"dock"}),(0,H.toast)(G(d));return}let c={score:g,arch:o.toLowerCase(),grade:h,missing:i},d="x"===a?M(K,f,c):M(L,f,c);if(await D(b,s(a),d)){n("audit_card_capture_completed",{trigger:`share_${a}`,status:"success",image_method:"native",source:"dock"}),(0,H.toast)(G("native"));return}let e=await E(b,s(a));n("audit_card_capture_completed",{trigger:`share_${a}`,status:"success",image_method:e,source:"dock"}),(0,H.toast)(G(e));let j="x"===a?`https://x.com/intent/tweet?text=${encodeURIComponent(d)}`:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent("https://failproof.ai")}&summary=${encodeURIComponent(d)}`;globalThis.open(j,"_blank","noopener,noreferrer")}finally{m(null)}}};return j?(0,b.jsx)("button",{type:"button",className:"share-dock-fab","aria-label":"Expand share dock",onClick:()=>q(!1),children:(0,b.jsx)("span",{"aria-hidden":"true",children:"𝕏"})}):(0,b.jsxs)("aside",{className:"share-dock","aria-label":"Share your audit","data-busy":l?"true":void 0,children:[(0,b.jsxs)("header",{className:"share-dock-head",children:[(0,b.jsxs)("span",{className:"share-dock-eyebrow",children:[(0,b.jsx)("span",{"aria-hidden":"true",children:"━━"}),"share your audit"]}),(0,b.jsx)("button",{type:"button",className:"share-dock-caret",onClick:()=>q(!0),"aria-label":"Collapse share dock",children:(0,b.jsx)("span",{"aria-hidden":"true",children:"▾"})})]}),(0,b.jsxs)("div",{className:"share-dock-stack",children:[(0,b.jsxs)("button",{type:"button",className:"share-btn share-btn--x",onClick:()=>t("x"),disabled:null!==l,children:[(0,b.jsx)("span",{className:"share-btn-mark share-btn-mark--x","aria-hidden":"true",children:"𝕏"}),(0,b.jsxs)("span",{className:"share-btn-body",children:[(0,b.jsx)("span",{className:"share-btn-eyebrow",children:"share on"}),(0,b.jsx)("span",{className:"share-btn-label",children:"x"===l?"rendering…":"X · Twitter"})]}),(0,b.jsx)("span",{className:"share-btn-arrow","aria-hidden":"true",children:"→"})]}),(0,b.jsxs)("button",{type:"button",className:"share-btn share-btn--li",onClick:()=>t("linkedin"),disabled:null!==l,children:[(0,b.jsx)("span",{className:"share-btn-mark share-btn-mark--li","aria-hidden":"true",children:"in"}),(0,b.jsxs)("span",{className:"share-btn-body",children:[(0,b.jsx)("span",{className:"share-btn-eyebrow",children:"share on"}),(0,b.jsx)("span",{className:"share-btn-label",children:"linkedin"===l?"rendering…":"LinkedIn"})]}),(0,b.jsx)("span",{className:"share-btn-arrow","aria-hidden":"true",children:"→"})]}),(0,b.jsxs)("button",{type:"button",className:"share-btn share-btn--dl",onClick:()=>t("download"),disabled:null!==l,children:[(0,b.jsx)("span",{className:"share-btn-mark share-btn-mark--dl","aria-hidden":"true",children:"↓"}),(0,b.jsxs)("span",{className:"share-btn-body",children:[(0,b.jsx)("span",{className:"share-btn-eyebrow",children:"save"}),(0,b.jsx)("span",{className:"share-btn-label",children:"download"===l?"rendering…":"audit-card"})]}),(0,b.jsx)("span",{className:"share-btn-arrow","aria-hidden":"true",children:"↓"})]})]}),(0,b.jsxs)("footer",{className:"share-dock-foot",children:[(0,b.jsx)("span",{"aria-hidden":"true",children:"▮▮"}),"image auto-attaches via paste"]})]})}function O({strengths:a,totalDetectorsTriggered:c,totalDetectorsAvailable:d}){return 0===a.length?null:(0,b.jsxs)("section",{className:"section","data-screen-label":"02 Strengths",children:[(0,b.jsxs)("div",{className:"section-mast",children:[(0,b.jsxs)("div",{className:"section-label",children:[(0,b.jsx)("span",{className:"glyph",children:"━━"})," strengths"," ",(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"·"})," ","what your agent has figured out"]}),(0,b.jsxs)("div",{className:"section-meta",children:[(0,b.jsx)("span",{className:"g",children:"●"})," ",d-c," of ",d," clean"]})]}),(0,b.jsx)("h2",{className:"section-h",children:"your agent does this right."}),(0,b.jsx)("div",{className:"strengths-grid",children:a.map((a,c)=>(0,b.jsxs)("div",{className:"strength-row",children:[(0,b.jsx)("div",{className:"strength-check",children:"✓"}),(0,b.jsxs)("div",{className:"strength-body",children:[(0,b.jsx)("div",{className:"strength-headline",children:a.headline}),(0,b.jsx)("div",{className:"strength-detail",children:a.detail})]}),(0,b.jsxs)("div",{className:"strength-metric",children:[a.metric,(0,b.jsx)("span",{className:"unit",children:a.unit})]})]},c))}),(0,b.jsx)("div",{className:"strengths-footer",children:"— these are your agent's defaults. keep them."})]})}N.displayName="ShareDock";let P=[{g:"S",t:90},{g:"A",t:80},{g:"B",t:71},{g:"C",t:55},{g:"D",t:40}];function Q({result:a,score:d,grade:e,archetypeKey:f,project:g}){let h=m[f],i=function(a){for(let{g:b,t:c}of P)if(a<c)return{next:b,delta:c-a};return{next:"S",delta:0}}(d),j=(0,c.useMemo)(()=>a.results.filter(a=>"builtin"===a.source&&!a.enabledInConfig&&a.hits>0).length,[a]),k=(0,c.useMemo)(()=>"S"===e||0===j?0:Math.max(1,Math.min(14,j+1)),[e,j]),l=(0,c.useMemo)(()=>{let b=a.results.filter(a=>"builtin"===a.source&&!a.enabledInConfig&&a.hits>0).sort((a,b)=>b.hits-a.hits).slice(0,6).map(a=>({name:R(a.name),missing:!0})),c=a.results.filter(a=>"builtin"===a.source&&a.enabledInConfig).slice(0,Math.max(0,6-b.length)).map(a=>({name:R(a.name),missing:!1}));return[...b,...c]},[a]);return(0,b.jsxs)("section",{className:"section","data-screen-label":"03 Score",children:[(0,b.jsx)("div",{className:"section-mast",children:(0,b.jsxs)("div",{className:"section-label",children:[(0,b.jsx)("span",{className:"glyph",children:"━━"})," score",(0,b.jsx)("span",{style:{color:"var(--accent-green)",marginLeft:10,letterSpacing:"0.04em",textTransform:"none",fontSize:11},children:"· SEE HOW YOUR AGENT IS PERFORMING"})]})}),(0,b.jsx)("h2",{className:"section-h",children:"your audit score."}),(0,b.jsxs)("div",{className:"panel score-share-card",children:[(0,b.jsxs)("div",{className:"score-card-header",children:[(0,b.jsx)("span",{style:{color:"var(--ink)"},children:g}),(0,b.jsx)("span",{style:{color:"var(--dim)"},children:" · "}),(0,b.jsx)("span",{style:{color:"var(--accent-pink)"},children:h.name.toLowerCase()})]}),(0,b.jsxs)("div",{className:"ss-score-row",children:[(0,b.jsx)("span",{className:"ss-score g-"+e,children:d}),(0,b.jsx)("span",{className:"ss-score-of",children:"/100"})]}),(0,b.jsxs)("div",{className:"ss-tier-row",children:[(0,b.jsxs)("span",{className:"ss-tier-badge g-"+e,children:[e," tier"]}),(0,b.jsx)("span",{className:"ss-arch",children:h.name.toLowerCase()})]}),(0,b.jsxs)("div",{className:"ss-progress-label",children:[(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"score"}),i.delta>0?(0,b.jsxs)("span",{style:{color:"var(--accent-pink)"},children:["+",i.delta," pts to ",i.next," tier"]}):(0,b.jsx)("span",{style:{color:"var(--accent-green)"},children:"top tier ✓"})]}),(0,b.jsxs)("div",{className:"ss-progress-track",children:[[40,55,71,80,90].map(a=>(0,b.jsx)("div",{className:"ss-progress-tick",style:{left:`${a}%`}},a)),(0,b.jsx)("div",{className:"ss-progress-fill audit-bar-fill",style:{"--bar-width":`${d}%`}})]}),(0,b.jsx)("div",{className:"ss-grade-stops",children:["D","C","B","A","S"].map((a,c)=>{let d=[40,55,71,80,90][c];return(0,b.jsx)("span",{className:"ss-grade-stop"+(e===a?" active":""),style:{left:`${d}%`},children:a},a)})}),(0,b.jsxs)("div",{className:"ss-stats",children:[(0,b.jsxs)("div",{className:"ss-stat",children:[(0,b.jsx)("div",{className:"ss-stat-n",style:{color:"var(--amber)"},children:j}),(0,b.jsxs)("div",{className:"ss-stat-l",children:["policies",(0,b.jsx)("br",{}),"missing"]})]}),(0,b.jsxs)("div",{className:"ss-stat",children:[(0,b.jsxs)("div",{className:"ss-stat-n",style:{color:"var(--accent-pink)"},children:["+",i.delta]}),(0,b.jsxs)("div",{className:"ss-stat-l",children:["pts to",(0,b.jsx)("br",{}),i.next," tier"]})]}),(0,b.jsxs)("div",{className:"ss-stat",children:[(0,b.jsx)("div",{className:"ss-stat-n",style:{color:"var(--accent-green)"},children:0===k?"—":`~${k}d`}),(0,b.jsxs)("div",{className:"ss-stat-l",children:["est.",(0,b.jsx)("br",{}),"to fix"]})]})]}),l.length>0&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"ss-policy-label",children:"policy status"}),(0,b.jsx)("div",{className:"ss-policy-chips",children:l.map((a,c)=>(0,b.jsxs)("span",{className:"ss-chip"+(a.missing?" missing":" enabled"),children:[(0,b.jsx)("span",{className:"dot","aria-hidden":"true"}),a.name]},c))})]})]})]})}function R(a){let b=a.indexOf("/");return b>=0?a.slice(b+1):a}function S({findings:a}){return 0===a.length?null:(0,b.jsxs)("section",{className:"section","data-screen-label":"04 Findings",children:[(0,b.jsxs)("div",{className:"section-mast",children:[(0,b.jsxs)("div",{className:"section-label",children:[(0,b.jsx)("span",{className:"glyph",children:"━━"})," findings"," ",(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"·"})," ranked by impact"]}),(0,b.jsxs)("div",{className:"section-meta",children:[(0,b.jsx)("span",{className:"p",children:"●"})," ",a.length," detector",1===a.length?"":"s"," triggered"]})]}),(0,b.jsx)("h2",{className:"section-h",children:"your agent has some quirks."}),(0,b.jsx)("div",{className:"findings-list",children:a.map(a=>(0,b.jsx)(T,{f:a},a.sourceSlug))})]})}function T({f:a}){let{capture:d}=(0,A.usePostHog)(),[e,f]=(0,c.useState)(!1),g=async b=>{b.stopPropagation();try{await navigator.clipboard.writeText(a.fix.install),f(!0),d("audit_copy_clicked",{source:"findings_section",item_type:"single_policy_install_command",policy_name:a.fix.slug,finding_slug:a.sourceSlug}),setTimeout(()=>f(!1),1500)}catch{}};return(0,b.jsxs)("article",{className:"finding",children:[(0,b.jsxs)("header",{className:"finding-head",children:[(0,b.jsxs)("div",{className:"finding-num",children:["№",a.num]}),(0,b.jsx)("div",{className:"finding-title",children:a.title}),(0,b.jsxs)("div",{className:"finding-count",children:[a.count,"×",(0,b.jsx)("span",{className:"label",children:"occurrences"})]})]}),(0,b.jsxs)("div",{className:"finding-meta",children:[(0,b.jsxs)("span",{children:[(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"policy"})," ",(0,b.jsx)("span",{className:"policy",children:a.policy})]}),(0,b.jsx)("span",{className:"sep",children:"·"}),(0,b.jsxs)("span",{children:[a.projects," ",1===a.projects?"project":"projects"]}),(0,b.jsx)("span",{className:"sep",children:"·"}),(0,b.jsxs)("span",{children:["last seen ",a.lastSeen]}),a.alreadyEnabled&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"sep",children:"·"}),(0,b.jsx)("span",{style:{color:"var(--accent-green)"},children:"enforced"})]})]}),(0,b.jsxs)("div",{className:"finding-body",children:[(0,b.jsxs)("div",{className:"finding-block",children:[(0,b.jsx)("div",{className:"fb-label",children:"what happened"}),(0,b.jsx)("div",{className:"fb-body",children:a.body})]}),(0,b.jsxs)("div",{className:"finding-block",children:[(0,b.jsx)("div",{className:"fb-label cost",children:"what this costs"}),(0,b.jsx)("div",{className:"fb-body",children:a.cost})]}),(0,b.jsxs)("div",{className:"finding-block",children:[(0,b.jsx)("div",{className:"fb-label",children:"evidence · sample"}),(0,b.jsx)("div",{className:"fb-evidence",children:a.evidence.map((a,c)=>"comment"===a.kind?(0,b.jsx)("div",{className:"comment",children:a.text},c):"err"===a.kind?(0,b.jsx)("div",{className:"err",children:a.text},c):(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"arrow",children:"→ "}),(0,b.jsx)("span",{children:a.text})]},c))})]}),(0,b.jsxs)("div",{className:"finding-block",children:[(0,b.jsx)("div",{className:"fb-label fix",children:"the fix"}),(0,b.jsxs)("div",{className:"fb-fix",children:[(0,b.jsx)("span",{className:"slug",children:a.fix.slug}),(0,b.jsx)("div",{style:{color:"var(--ink-2)"},children:a.fix.desc}),a.fix.alsoCoveredBy&&(0,b.jsxs)("div",{style:{color:"var(--dim)",fontSize:11,marginTop:4},children:["also covered by"," ",(0,b.jsx)("span",{style:{color:"var(--accent-green)"},children:a.fix.alsoCoveredBy})]}),(0,b.jsxs)("code",{className:"cmd",onClick:g,style:{cursor:"pointer"},children:[(0,b.jsx)("span",{className:"prompt",children:"$"}),a.fix.install," ",(0,b.jsx)("span",{style:{color:"var(--dim)",marginLeft:8,fontSize:10,letterSpacing:"0.15em",textTransform:"uppercase"},children:e?"copied":"click to copy"})]})]})]})]})]})}let U={"redundant-cd-cwd":"warn-repeated-tool-calls","prefer-edit-over-read-cat":"block-read-outside-cwd","prefer-edit-over-sed-awk":"warn-repeated-tool-calls","prefer-write-over-heredoc":"block-env-files","sleep-polling-loop":"warn-background-process","find-from-root":"block-read-outside-cwd","git-commit-no-verify":"warn-git-amend","reread-after-edit":"warn-repeated-tool-calls"},V={"warn-repeated-tool-calls":"warns when the same tool is called 3+ times with identical parameters — catches the loops before they spiral.","block-read-outside-cwd":"denies any file read whose absolute path falls outside the project root, including symlinks.","block-env-files":"blocks reads and writes of `.env` files at the tool layer.","block-secrets-write":"blocks writes to .pem, id_rsa, credentials.json, and other secret-key files.","warn-background-process":"warns before starting nohup / & / screen / tmux / disown processes that get forgotten about.","warn-git-amend":"warns before amending git commits — dangerous-commit-flag class.","require-ci-green-before-stop":"requires CI checks to pass on HEAD before the agent declares the task done."};function W(a){let b=a.indexOf("/");return b>=0?a.slice(b+1):a}function X({result:a,projected:d,projectedGrade:e}){let f=(0,c.useMemo)(()=>(function(a){let b=new Set(a.enabledBuiltinNames??[]),c=new Map;for(let d of a.results){let a;if(0===d.hits)continue;let e=!1;if("audit-detector"===d.source){let b=U[W(d.name)];if(!b)continue;a=b,e=!0}else{if("builtin"!==d.source||d.enabledInConfig)continue;a=W(d.name)}if(b.has(a))continue;let f=c.get(a)??{hits:0,projects:0,sources:new Set};f.hits+=d.hits,f.projects=Math.max(f.projects,d.projects),f.sources.add(e?W(d.name):"self"),c.set(a,f)}return[...c.entries()].sort((a,b)=>b[1].hits-a[1].hits).map(([a,b])=>{let c=[...b.sources].filter(a=>"self"!==a),d=c.length>0?` (via ${c.join(", ")})`:"",e=`would have caught ${b.hits} occurrence${1===b.hits?"":"s"} across ${b.projects} project${1===b.projects?"":"s"}${d}.`;return{name:a,desc:V[a]??"enable this builtin policy to close the gap.",catches:e,hits:b.hits}})})(a),[a]);return 0===f.length?null:(0,b.jsxs)("section",{className:"section","data-screen-label":"05 Policies",children:[(0,b.jsxs)("div",{className:"section-mast",children:[(0,b.jsxs)("div",{className:"section-label",children:[(0,b.jsx)("span",{className:"glyph",children:"━━"})," policies"," ",(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"·"})," prescribed"]}),(0,b.jsxs)("div",{className:"section-meta",children:[f.length," polic",1===f.length?"y":"ies"," ",(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"·"})," ",(0,b.jsx)("span",{className:"g",children:"covers your slipping-through hits"})]})]}),(0,b.jsx)("h2",{className:"section-h",children:"enable these. close the gap."}),(0,b.jsxs)("div",{className:"policy-callout",children:[(0,b.jsxs)("span",{children:["enable all ",1===f.length?"one":f.length]}),(0,b.jsx)("span",{className:"arrow",children:"→"}),(0,b.jsx)("span",{children:"projected score"}),(0,b.jsx)("span",{className:"new-score",children:d}),(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"·"}),(0,b.jsx)("span",{className:"new-tier",children:u[e]})]}),(0,b.jsx)("div",{className:"policies-grid",children:f.map((a,c)=>(0,b.jsx)(Y,{policy:a,idx:c},a.name))})]})}function Y({policy:a,idx:d}){let{capture:e}=(0,A.usePostHog)(),[f,g]=(0,c.useState)(!1),h=`failproof policy add ${a.name}`,i=async b=>{b.stopPropagation();try{await navigator.clipboard.writeText(h),g(!0),e("audit_copy_clicked",{source:"policies_section",item_type:"single_policy_install_command",policy_name:a.name,policy_rank:d+1}),setTimeout(()=>g(!1),1500)}catch{}};return(0,b.jsxs)("article",{className:"policy-card",children:[(0,b.jsxs)("div",{className:"head",children:[(0,b.jsx)("div",{className:"policy-name",children:a.name}),(0,b.jsxs)("div",{className:"policy-slug",children:["№",String(d+1).padStart(2,"0")]})]}),(0,b.jsx)("div",{className:"policy-desc",children:a.desc}),(0,b.jsxs)("div",{className:"policy-impact",children:[(0,b.jsx)("span",{className:"check",children:"✓"}),a.catches]}),(0,b.jsxs)("div",{className:"policy-install",children:[(0,b.jsx)("span",{className:"prompt",children:"$"}),(0,b.jsx)("span",{children:h}),(0,b.jsx)("span",{className:"copy",onClick:i,children:f?"copied":"copy"})]})]})}async function Z(a,b={},c=15e3){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{return await fetch(a,{...b,signal:d.signal})}finally{clearTimeout(e)}}function $(a){return a instanceof Error&&("AbortError"===a.name||"TimeoutError"===a.name)}let _=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function aa(a){if($(a))return"request timed out. check your network and try again.";let b=a instanceof Error?a.message:String(a);return`network error: ${b}`}function ab({open:a,headline:d="oops — you are unknown.",reason:e="verify yourself to continue.",onClose:f,onAuthed:g,source:h="unknown"}){let{capture:i}=(0,A.usePostHog)(),[j,k]=(0,c.useState)({kind:"email",error:null}),[l,m]=(0,c.useState)(!1),n=(0,c.useRef)(!1),o=(0,c.useRef)(null),p=(0,c.useRef)(null);(0,c.useEffect)(()=>{a&&(k({kind:"email",error:null}),m(!1),n.current=!1,i("audit_auth_dialog_opened",{source:h}))},[i,a,h]);let q=(0,c.useRef)(!1);(0,c.useEffect)(()=>{if(a){q.current=!0;return}q.current&&!n.current&&i("audit_auth_dialog_dismissed",{source:h,step:j.kind}),q.current=!1},[i,a,h,j.kind]),(0,c.useEffect)(()=>{if(!a)return;let b=setTimeout(()=>{"email"===j.kind?o.current?.focus():"code"===j.kind&&p.current?.focus()},50);return()=>clearTimeout(b)},[a,j.kind]),(0,c.useEffect)(()=>{if(!a)return;let b=a=>{"Escape"!==a.key||l||f()};return window.addEventListener("keydown",b),()=>window.removeEventListener("keydown",b)},[a,l,f]);let r="code"===j.kind&&j.resendIn>0;(0,c.useEffect)(()=>{if(!r)return;let a=setInterval(()=>{k(a=>"code"===a.kind?{...a,resendIn:Math.max(0,a.resendIn-1)}:a)},1e3);return()=>clearInterval(a)},[r]);let s=(0,c.useCallback)(async(a,b={})=>{let{isResend:c=!1}=b,d=a=>{c?k(b=>"code"===b.kind?{...b,error:a}:b):k({kind:"email",error:a})};m(!0);try{let b=await Z("/api/auth/login-request",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({email:a})}),c=await b.json().catch(()=>({}));if(!b.ok){let a=c.message??"could not send code.";"rate_limited"===c.code&&void 0!==c.retry_after_secs?a=`too many tries. wait ${c.retry_after_secs}s and try again.`:"upstream_unreachable"===c.code&&(a="api-server unreachable. check your network."),d(a);return}k({kind:"code",email:a,error:null,expiresIn:c.expires_in??600,resendIn:c.resend_available_in??30})}catch(a){d(aa(a))}finally{m(!1)}},[]),t=(0,c.useCallback)(async(a,b)=>{m(!0);try{let c=await Z("/api/auth/login-verify",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({email:a,code:b})}),d=await c.json().catch(()=>({}));if(!c.ok||!d.authenticated||!d.user){let a=d.message??"invalid code.";"invalid_code"===d.code&&(a="wrong code, or it expired. try again."),k(b=>"code"===b.kind?{...b,error:a}:b);return}n.current=!0,i("audit_auth_dialog_succeeded",{source:h}),k({kind:"done",user:d.user}),g(d.user)}catch(b){let a=aa(b);k(b=>"code"===b.kind?{...b,error:a}:b)}finally{m(!1)}},[i,g,h]),u=(0,c.useCallback)(async a=>{if(a.preventDefault(),l||"email"!==j.kind)return;let b=String(new FormData(a.currentTarget).get("email")??"").trim().toLowerCase();_.test(b)?await s(b):k({kind:"email",error:"that doesn't look like an email."})},[l,j,s]),v=(0,c.useCallback)(async a=>{if(a.preventDefault(),l||"code"!==j.kind)return;let b=String(new FormData(a.currentTarget).get("code")??"").trim();b.length<4||b.length>12?k(a=>"code"===a.kind?{...a,error:"code is 4–12 characters."}:a):await t(j.email,b)},[l,j,t]),w=(0,c.useCallback)(async()=>{"code"!==j.kind||j.resendIn>0||l||await s(j.email,{isResend:!0})},[j,l,s]);return a?(0,b.jsx)("div",{className:"auth-dialog-backdrop",role:"dialog","aria-modal":"true","aria-labelledby":"auth-dialog-title",onClick:a=>{l||a.target!==a.currentTarget||f()},children:(0,b.jsxs)("div",{className:"auth-dialog",children:[(0,b.jsx)("span",{className:"corner tl",children:"┌"}),(0,b.jsx)("span",{className:"corner tr",children:"┐"}),(0,b.jsx)("span",{className:"corner bl",children:"└"}),(0,b.jsx)("span",{className:"corner br",children:"┘"}),(0,b.jsx)("button",{type:"button",className:"auth-close",onClick:f,disabled:l,"aria-label":"close",children:"[ x ]"}),(0,b.jsx)("div",{className:"auth-label",children:"━━ identity check"}),(0,b.jsx)("h2",{id:"auth-dialog-title",className:"auth-headline",children:d}),"email"===j.kind&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("p",{className:"auth-sub",children:e}),(0,b.jsxs)("form",{onSubmit:u,className:"auth-form",children:[(0,b.jsx)("label",{className:"auth-field-label",htmlFor:"auth-dialog-email",children:"email"}),(0,b.jsx)("input",{ref:o,id:"auth-dialog-email",name:"email",type:"email",autoComplete:"email",inputMode:"email",spellCheck:!1,placeholder:"you@yourdomain.com",disabled:l,className:"auth-input",required:!0}),j.error&&(0,b.jsx)("div",{className:"auth-error",children:j.error}),(0,b.jsxs)("div",{className:"auth-actions",children:[(0,b.jsx)("button",{type:"submit",className:"auth-btn primary",disabled:l,children:l?"[ sending… ]":"[ send code ]"}),(0,b.jsx)("button",{type:"button",className:"auth-btn",onClick:f,disabled:l,children:"[ cancel ]"})]})]})]}),"code"===j.kind&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("p",{className:"auth-sub",children:["we sent a code to ",(0,b.jsx)("span",{className:"auth-email",children:j.email}),".",(0,b.jsx)("br",{}),"check your inbox — it expires in ",Math.ceil(j.expiresIn/60)," min."]}),(0,b.jsxs)("form",{onSubmit:v,className:"auth-form",children:[(0,b.jsx)("label",{className:"auth-field-label",htmlFor:"auth-dialog-code",children:"one-time code"}),(0,b.jsx)("input",{ref:p,id:"auth-dialog-code",name:"code",type:"text",inputMode:"numeric",autoComplete:"one-time-code",spellCheck:!1,placeholder:"123456",disabled:l,className:"auth-input auth-input-code",maxLength:12,required:!0}),j.error&&(0,b.jsx)("div",{className:"auth-error",children:j.error}),(0,b.jsxs)("div",{className:"auth-actions",children:[(0,b.jsx)("button",{type:"submit",className:"auth-btn primary",disabled:l,children:l?"[ verifying… ]":"[ verify ]"}),(0,b.jsx)("button",{type:"button",className:"auth-btn",onClick:w,disabled:l||j.resendIn>0,children:j.resendIn>0?`[ resend in ${j.resendIn}s ]`:"[ resend code ]"})]}),(0,b.jsx)("button",{type:"button",className:"auth-back",onClick:()=>k({kind:"email",error:null}),disabled:l,children:"← use a different email"})]})]}),"done"===j.kind&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("p",{className:"auth-sub",children:[(0,b.jsx)("span",{className:"auth-ok",children:"✓"})," you are"," ",(0,b.jsx)("span",{className:"auth-email",children:j.user.email}),"."]}),(0,b.jsx)("p",{className:"auth-sub",style:{marginTop:8},children:"session saved locally."}),(0,b.jsx)("div",{className:"auth-actions",children:(0,b.jsx)("button",{type:"button",className:"auth-btn primary",onClick:f,children:"[ continue ]"})})]})]})}):null}class ac extends Error{kind;constructor(a,b){super(b),this.kind=a,this.name="RerunError"}}async function ad(a){try{let b=await Z("/api/audit/run",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({cli:a.cli.length>0?a.cli:void 0,since:"all"===a.since?void 0:a.since})});if(!b.ok&&409!==b.status){let a=await b.text().catch(()=>"");throw console.error("audit run failed:",b.status,a),new ac("post_failed",`audit run failed (${b.status})`)}}catch(a){if(a instanceof ac)throw a;throw console.error("audit run request failed:",a),new ac($(a)?"timeout":"network","audit run request failed")}let b=Date.now();for(;Date.now()-b<3e5;){await new Promise(a=>setTimeout(a,1e3));try{let a=await Z("/api/audit/status",{cache:"no-store"});if(!a.ok)continue;if(!(await a.json()).running)return}catch{}}throw new ac("timeout","audit poll loop timed out")}function ae({result:a}){let{capture:d}=(0,A.usePostHog)(),e=a.results.some(a=>"builtin"===a.source&&!a.enabledInConfig&&a.hits>0),[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)({kind:"unknown"}),[j,k]=(0,c.useState)(null),[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(!1),[p,q]=(0,c.useState)(!1),r=(0,c.useRef)(!1),s=(0,c.useRef)(0),t=(0,c.useCallback)(async()=>{s.current=Date.now();try{let a=await fetch("/api/auth/status",{cache:"no-store"}),b=await a.json();b.authenticated&&b.user?(i({kind:"authed",user:b.user}),k(b.reminder??null)):(i({kind:"anon"}),k(null))}catch{i({kind:"anon"}),k(null)}},[]);(0,c.useEffect)(()=>{t();let a=()=>{Date.now()-s.current<5e3||t()},b=()=>a(),c=()=>{"visible"===document.visibilityState&&a()};return window.addEventListener("focus",b),document.addEventListener("visibilitychange",c),()=>{window.removeEventListener("focus",b),document.removeEventListener("visibilitychange",c)}},[t]),(0,c.useEffect)(()=>{r.current||"unknown"!==h.kind&&(r.current=!0,d("audit_reminder_cta_shown",{auth_state:h.kind,has_existing_reminder:null!==j,source:"return_section"}))},[h,d,j]);let u=(0,c.useCallback)(async()=>{let a=new AbortController,b=setTimeout(()=>a.abort(),1e4);try{o(!0);let b=await fetch("/api/auth/reminder",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({in_days:7}),signal:a.signal});if(!b.ok)return 401===b.status&&(i({kind:"anon"}),k(null)),d("audit_reminder_saved",{status:`http_${b.status}`,source:"return_section"}),null;let c=await b.json();return d("audit_reminder_saved",{status:c.reminder?"success":"empty",source:"return_section"}),c.reminder??null}catch(a){return d("audit_reminder_saved",{status:$(a)?"timeout":"error",source:"return_section"}),null}finally{clearTimeout(b),o(!1)}},[d]),v=async()=>{d("audit_install_policies_clicked",{source:"return_section"});try{await navigator.clipboard.writeText("failproofai policies --install"),g(!0),d("audit_copy_clicked",{source:"return_section_install_policies",item_type:"bulk_install_command"}),setTimeout(()=>g(!1),1500)}catch{}},w=(0,c.useCallback)(async()=>{if("unknown"!==h.kind){if(d("audit_reminder_cta_clicked",{auth_state:h.kind,has_existing_reminder:null!==j,source:"return_section"}),"authed"===h.kind){let a=await u();a&&k(a);return}m(!0)}},[h,d,u,j]),x=(0,c.useCallback)(async a=>{i({kind:"authed",user:a}),d("audit_auth_completed",{source:"return_section"});let b=await u();b&&k(b)},[d,u]),y=(0,c.useCallback)(async()=>{if(!p){d("audit_rerun_clicked",{source:"return_section",since:"30d"}),q(!0);try{await ad({cli:[],since:"30d"}),window.location.reload()}catch(a){d("audit_rerun_failed",{kind:a instanceof ac?a.kind:"network",source:"return_section",since:"30d",cli_filter:"all"})}finally{q(!1)}}},[d,p]),z="authed"===h.kind,B=z&&null!==j,C=j?Math.max(0,Math.ceil((j.next_audit_at-Math.floor(Date.now()/1e3))/86400)):0,D="authed"===h.kind?h.user.email:"";return(0,b.jsxs)("section",{className:"section","data-screen-label":"06 Next audit",children:[(0,b.jsxs)("div",{className:"section-mast",children:[(0,b.jsxs)("div",{className:"section-label",children:[(0,b.jsx)("span",{className:"glyph",children:"━━"})," next audit"," ",(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"·"})," improvement"]}),(0,b.jsxs)("div",{className:"section-meta",children:[(0,b.jsx)("span",{className:"g",children:"●"})," recommended in 7d"]})]}),(0,b.jsx)("h2",{className:"section-h",children:"come back better."}),(0,b.jsxs)("div",{className:"return-hook",children:[(0,b.jsx)("div",{className:"label",children:"━━ the loop"}),(0,b.jsx)("h3",{children:"re-audit in 7 days."}),(0,b.jsx)("p",{children:"after the prescribed policies have been live for a week, we'll show your before/after score and which detectors went quiet."}),(0,b.jsx)("p",{style:{marginTop:16,color:"var(--dim)"},children:"most agents move from C to B in one session. some make it in a day."}),z?(0,b.jsxs)("div",{className:"return-status",children:[B&&j?(0,b.jsxs)("div",{className:"rs-row rs-row-primary",children:[(0,b.jsx)("span",{className:"rs-dot rs-dot-pink","aria-hidden":"true"}),(0,b.jsxs)("span",{children:["next audit set for"," ",(0,b.jsx)("span",{className:"rs-strong",children:new Date(1e3*j.next_audit_at).toLocaleDateString(void 0,{weekday:"short",month:"short",day:"numeric"})})," ",(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"·"})," ",(0,b.jsxs)("span",{className:"rs-strong",children:["in ",C," day",1===C?"":"s"]})]})]}):(0,b.jsxs)("div",{className:"rs-row rs-row-primary",children:[(0,b.jsx)("span",{className:"rs-dot rs-dot-pink","aria-hidden":"true"}),(0,b.jsxs)("span",{children:[(0,b.jsx)("span",{className:"rs-strong",children:"no reminder set yet"})," ",(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"·"})," ","recommended in ",7," days"]})]}),(0,b.jsxs)("div",{className:"rs-row",children:[(0,b.jsx)("span",{className:"rs-dot rs-dot-green","aria-hidden":"true"}),(0,b.jsxs)("span",{children:["signed in as ",(0,b.jsx)("span",{className:"rs-email",children:D})]})]}),(0,b.jsx)(af,{style:{marginTop:18},showSetReminder:!B,setReminderDisabled:n,reminderBusy:n,rerunBusy:p,hasUnenabled:e,copied:f,onSetReminder:w,onRerun:y,onInstall:v})]}):(0,b.jsx)(af,{showSetReminder:!0,setReminderDisabled:"unknown"===h.kind||n,reminderBusy:n,rerunBusy:p,hasUnenabled:e,copied:f,onSetReminder:w,onRerun:y,onInstall:v})]}),(0,b.jsx)(ab,{open:l,source:"return_section",headline:"oops — you are unknown.",reason:"verify yourself to get the re-audit reminder.",onClose:()=>m(!1),onAuthed:a=>{m(!1),x(a)}})]})}function af(a){let{showSetReminder:c,setReminderDisabled:d,reminderBusy:e,rerunBusy:f,hasUnenabled:g,copied:h,onSetReminder:i,onRerun:j,onInstall:k,style:l}=a;return(0,b.jsxs)("div",{className:"return-actions",style:l,children:[c&&(0,b.jsx)("button",{type:"button",className:"share-btn",onClick:i,disabled:d,children:e?"[ saving… ]":"[ set a reminder ]"}),(0,b.jsx)("button",{type:"button",className:"share-btn alt",onClick:j,disabled:f,children:f?"[ scanning… ]":"[ re-audit now ]"}),g&&(0,b.jsx)("button",{type:"button",className:"share-btn alt",onClick:k,children:h?"[ ✓ copied — paste in your shell ]":"[ install policies ]"})]})}function ag({cachedAt:a,fixed:c=!1}){return(0,b.jsxs)("footer",{className:c?"report-footer report-footer--fixed":"report-footer",children:[(0,b.jsx)("img",{src:"/logo.svg",alt:"failproof_ai",style:{height:18,display:"inline-block",verticalAlign:"middle"}}),(0,b.jsx)("span",{style:{margin:"0 12px",color:"var(--line-2)"},children:"·"}),"audit v1.0",(0,b.jsx)("span",{style:{margin:"0 12px",color:"var(--line-2)"},children:"·"}),"generated ",function(a){if(!a)return"—";let b=new Date(a);if(Number.isNaN(b.getTime()))return"—";let c=b.getUTCDate().toString().padStart(2,"0"),d=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"][b.getUTCMonth()],e=b.getUTCFullYear(),f=b.getUTCHours().toString().padStart(2,"0"),g=b.getUTCMinutes().toString().padStart(2,"0");return`${c} ${d} ${e}, ${f}:${g} utc`}(a),(0,b.jsx)("span",{style:{margin:"0 12px",color:"var(--line-2)"},children:"·"}),(0,b.jsx)("span",{style:{color:"var(--ink-2)"},children:"auto-healing for your agents."})]})}function ah({mode:a,running:c,onStarted:d,onCompleted:e}){let{capture:f}=(0,A.usePostHog)(),g=async()=>{f("audit_first_run_clicked",{source:"empty_state",mode:a}),d();try{await ad({cli:[],since:"30d"})}finally{await e()}};return"no-cache"===a?(0,b.jsxs)("section",{className:"section empty-section","data-screen-label":"00 Empty",children:[(0,b.jsxs)("div",{className:"section-mast",children:[(0,b.jsxs)("div",{className:"section-label",children:[(0,b.jsx)("span",{className:"glyph",children:"━━"})," audit"," ",(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"·"})," first run"]}),(0,b.jsxs)("div",{className:"section-meta",children:[(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"○"})," no cache yet"]})]}),(0,b.jsx)("h2",{className:"section-h",children:"scan and see."}),(0,b.jsxs)("div",{className:"panel empty-panel",children:[(0,b.jsxs)("div",{className:"empty-glyph","aria-hidden":"true",children:[(0,b.jsx)("div",{className:"empty-glyph-grid",children:Array.from({length:36}).map((a,c)=>{let d=["1","5","8","10","13","17","20","23","25","30","32"].includes(String(c));return(0,b.jsx)("span",{className:"px"+(d?" on":"")},c)})}),(0,b.jsx)("div",{className:"empty-glyph-label",children:"▮▮ no audit data yet"})]}),(0,b.jsx)("h3",{className:"empty-headline",children:"run your first audit."}),(0,b.jsx)("p",{className:"empty-sub",children:"we'll walk every transcript across your installed CLIs — Claude Code, Codex, Copilot, Cursor, OpenCode, Pi, Gemini — and count every wasteful or risky action. you'll get a tier, a score, and a punch-list."}),(0,b.jsxs)("div",{className:"empty-actions",children:[(0,b.jsx)("button",{type:"button",className:"btn btn-primary btn-press empty-cta",onClick:g,disabled:c,children:c?"[ scanning… ]":"[ run audit ]"}),(0,b.jsx)("span",{className:"empty-meta",children:"scans the last 30 days · all installed CLIs · 10–30s"})]})]})]}):(0,b.jsxs)("section",{className:"section empty-section","data-screen-label":"00 Empty",children:[(0,b.jsxs)("div",{className:"section-mast",children:[(0,b.jsxs)("div",{className:"section-label",children:[(0,b.jsx)("span",{className:"glyph",children:"━━"})," audit"," ",(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"·"})," zero transcripts"]}),(0,b.jsxs)("div",{className:"section-meta",children:[(0,b.jsx)("span",{style:{color:"var(--amber)"},children:"●"})," hooks not installed"]})]}),(0,b.jsx)("h2",{className:"section-h",children:"nothing to read."}),(0,b.jsxs)("div",{className:"panel empty-panel",children:[(0,b.jsxs)("div",{className:"empty-glyph","aria-hidden":"true",children:[(0,b.jsx)("div",{className:"empty-glyph-grid",children:Array.from({length:36}).map((a,c)=>{let d=["2","4","9","11","16","18","23","25","27","30","33"].includes(String(c));return(0,b.jsx)("span",{className:"px"+(d?" on":"")},c)})}),(0,b.jsx)("div",{className:"empty-glyph-label",children:"▮▮ no sessions found"})]}),(0,b.jsx)("h3",{className:"empty-headline",children:"install hooks first."}),(0,b.jsx)("p",{className:"empty-sub",children:"failproofai couldn't find any transcripts to scan on this machine. install the hooks for at least one CLI and come back."}),(0,b.jsxs)("div",{className:"empty-actions",children:[(0,b.jsx)("a",{href:"https://docs.befailproof.ai/getting-started",target:"_blank",rel:"noopener noreferrer",className:"btn btn-primary btn-press empty-cta",onClick:()=>{f("audit_install_guide_clicked",{source:"empty_state",mode:a})},children:"[ install guide → ]"}),(0,b.jsx)("span",{className:"empty-meta",children:"takes about 30 seconds · one command per CLI"})]})]})]})}let ai=[{label:"discovering transcripts",detail:"walking ~/.claude, ~/.codex, ~/.cursor, …"},{label:"parsing session logs",detail:"reading JSONL + sqlite session stores"},{label:"running policy checks",detail:"replaying through 30 builtin policies"},{label:"aggregating results",detail:"counting hits, ranking by frequency"}];function aj(){let[a,d]=(0,c.useState)(0),[e,f]=(0,c.useState)(0);(0,c.useEffect)(()=>{let a=setInterval(()=>{d(a=>Math.min(a+1,ai.length-1))},4e3),b=setInterval(()=>f(a=>(a+1)%4),350);return()=>{clearInterval(a),clearInterval(b)}},[]);let g=".".repeat(e+1),h=a===ai.length-1,i=Math.round(100*Math.min(.9,(a+1)/ai.length*.9));return(0,b.jsxs)("section",{className:"section running-section","data-screen-label":"00 Running",children:[(0,b.jsxs)("div",{className:"section-mast",children:[(0,b.jsxs)("div",{className:"section-label",children:[(0,b.jsx)("span",{className:"glyph",children:"━━"})," audit"," ",(0,b.jsx)("span",{style:{color:"var(--dim)"},children:"·"})," in progress"]}),(0,b.jsxs)("div",{className:"section-meta",children:[(0,b.jsx)("span",{style:{color:"var(--accent-pink)"},children:"●"})," scanning"]})]}),(0,b.jsxs)("h2",{className:"section-h",children:["scanning sessions",g]}),(0,b.jsxs)("div",{className:"panel running-panel",children:[(0,b.jsxs)("div",{className:"running-header",children:[(0,b.jsx)("span",{className:"running-prompt",children:"$"}),(0,b.jsx)("span",{className:"running-cmd",children:"failproofai audit --since 30d"}),(0,b.jsx)("span",{className:"running-cursor","aria-hidden":"true",children:"▮"})]}),(0,b.jsx)("ul",{className:"running-stages",children:ai.map((c,d)=>{let f=d<a,g=d===a;return(0,b.jsxs)("li",{className:"running-stage"+(f?" done":g?" active":" queued"),children:[(0,b.jsx)("span",{className:"running-marker","aria-hidden":"true",children:f?"✓":g?"▮▮":"○"}),(0,b.jsxs)("div",{className:"running-stage-body",children:[(0,b.jsx)("div",{className:"running-stage-label",children:c.label}),g&&(0,b.jsx)("div",{className:"running-stage-detail",children:h?"finishing up…":c.detail})]}),g&&(0,b.jsx)("span",{className:"running-stage-spin","aria-hidden":"true",children:["⠋","⠙","⠹","⠸"][e]})]},d)})}),(0,b.jsxs)("div",{className:"running-bar-label",children:[(0,b.jsx)("span",{children:"progress"}),(0,b.jsxs)("span",{style:{color:"var(--dim)"},children:[i,"%"]})]}),(0,b.jsx)("div",{className:"running-bar-track",children:(0,b.jsx)("div",{className:"running-bar-fill",style:{width:`${i}%`}})}),(0,b.jsx)("p",{className:"running-foot",children:"this usually takes 10–30 seconds depending on how much session history you have."})]})]})}function ak({result:a,cachedAt:d,params:e,projectFromUrl:n,totalCatalogSize:o}){let{capture:p}=(0,A.usePostHog)(),r=(0,c.useMemo)(()=>(function(a,b){if(b&&b.trim())return b;let c=new Map;for(let b of a.results)for(let a of b.examples)a.cwd&&c.set(a.cwd,(c.get(a.cwd)??0)+1);let d="",e=0;for(let[a,b]of c)b>e&&(d=a,e=b);if(!d)return"your agent";let f=d.replace(/\/+$/,"").split(/[\\/]/);return f.length>=2?`${f[f.length-2]} / ${f[f.length-1]}`:f[f.length-1]??"your agent"})(a,n),[a,n]),u=(0,c.useMemo)(()=>(function(a,b=""){let c=function(a,b=""){let c=Math.max(a.eventsScanned??0,50),d=a.transcripts.scanned,e=a.totals?.hits??function(a){let b=0;for(let c of a.results)b+=c.hits;return b}(a),h=k(),m=0;for(let b of a.results){let a=function(a){let b=a.indexOf("/");return b>=0?a.slice(b+1):a}(b.name),c=j[a];if(!c)continue;let d=b.hits*c.weight;h[c.archetype]+=d,i.has(a)&&(m+=d)}let n=g.reduce((a,b)=>a+h[b],0),o=k();for(let a of g){let b=n>0?h[a]/n:0;o[a]=l[a]>0?b/l[a]:0}let p=function(a){let b=a.reduce((a,b)=>a+Math.max(0,b),0);if(b<=0)return 0;let c=0;for(let d of a){if(d<=0)continue;let a=d/b;c-=a*Math.log(a)}return c/Math.log(a.length)}(g.map(a=>o[a])),q=n>0?m/n:0,r=e/c,s=g.map(a=>Math.round(10*h[a])).join(","),t=f(`${b}|${s}|${Math.round(1e3*r)}`);return{events:c,sessions:d,totalHits:e,faultRate:r,clusterRaw:h,totalSignal:n,clusterLift:o,entropy:p,cautionShare:q,cowboyLift:o.cowboy,fingerprint:t}}(a,b),d={weights:c.clusterRaw,lift:c.clusterLift,totalSignal:c.totalSignal,variantSeed:`${b}|${c.fingerprint}`};if(c.totalSignal<2.5||c.faultRate<.003&&c.totalSignal<6)return{archetype:"precision",secondary:m.precision.secondary,...d};if(c.cautionShare>=.35&&c.cowboyLift<1)return{archetype:"architect",secondary:m.architect.secondary,...d};if(g.filter(a=>c.clusterLift[a]>0).length>=4&&c.entropy>.75)return{archetype:"goldfish",secondary:q(c,g)[0],...d};let e=q(c,h),n=e[0],o=e[1];o&&c.clusterLift[o]>0&&c.clusterLift[n]/c.clusterLift[o]<1.08&&(n=[e[0],e[1]][c.fingerprint%2]);let p=q(c,h).find(a=>a!==n),r=p&&c.clusterLift[p]>0&&c.clusterLift[p]>=.4*c.clusterLift[n]?p:m[n].secondary;return{archetype:n,secondary:r,...d}})(a,r),[a,r]),v=(0,c.useMemo)(()=>Math.round(function(a){if(0===a.transcripts.scanned)return 0;let b=a.eventsScanned??0;return Math.max(0,Math.min(100,100-w(a.results,b)+Math.min(+s(a).length,5)))}(a)),[a]),B=(0,c.useMemo)(()=>{let b,c;return b=a.eventsScanned??0,c=Math.min(92,v+Math.round(Math.max(0,w(a.results,b)-w(a.results.filter(a=>!("builtin"===a.source&&!a.enabledInConfig)),b)))),Math.max(v,c)},[a,v]),D=t(v),E=t(B),F=(0,c.useMemo)(()=>s(a),[a]),G=(0,c.useMemo)(()=>{let b,c;return b=[...a.results].filter(a=>a.hits>0).sort((a,b)=>b.hits-a.hits),c=new Set(a.enabledBuiltinNames??[]),b.map((a,b)=>{var d,e,f,g;let h,i,j,k,l,m,n,o,p,q;return d=a,e=b,f=c,i=(h=(g=d.name).indexOf("/"))>=0?g.slice(h+1):g,j="audit-detector"===d.source?x[i]:void 0,l=z[k=j?.primary??i],m=l?.impact??d.impact??d.displayTitle,n=j?.also,o=f.has(k)||"builtin"===d.source&&d.enabledInConfig,p=y[i],0===(q=d.examples.slice(0,4).map(a=>({text:a.example,kind:"cmd"}))).length&&q.push({text:"no example commands captured.",kind:"comment"}),{num:String(e+1).padStart(2,"0"),title:d.displayTitle.toLowerCase(),count:d.hits,sourceSlug:i,policy:k,projects:d.projects,lastSeen:function(a){if(!a)return"—";let b=Date.now()-new Date(a).getTime();if(Number.isNaN(b)||b<0)return"—";let c=Math.floor(b/6e4);if(c<60)return`${Math.max(1,c)}m ago`;let d=Math.floor(c/60);if(d<24)return`${d}h ago`;let e=Math.floor(d/24);if(e<30)return`${e}d ago`;let f=Math.floor(e/30);return`${f}mo ago`}(d.lastSeen),body:p?.body??d.impact??d.displayTitle,cost:p?.cost??d.impact??"see policy description above.",evidence:q,fix:{slug:k,desc:m,install:`failproofai policy add ${k}`,alsoCoveredBy:n},alreadyEnabled:o}})},[a]),H=e?.since?e.since:"all time",{detectorsTriggered:I,missing:J}=(0,c.useMemo)(()=>{let b=0,c=0;for(let d of a.results)d.hits>0&&b++,"builtin"===d.source&&!d.enabledInConfig&&d.hits>0&&c++;return{detectorsTriggered:b,missing:c}},[a]),K=(0,c.useRef)(!1);(0,c.useEffect)(()=>{K.current||(K.current=!0,p("audit_dashboard_viewed",{score:v,grade:D,archetype:u.archetype,secondary:u.secondary??null,missing:J,transcripts_scanned:a.transcripts.scanned,results_count:a.results.length,detectors_triggered:I}))},[p,v,D,u.archetype,u.secondary,J,a.transcripts.scanned,a.results.length,I]);let L=(0,c.useRef)(null);return(0,b.jsxs)("div",{className:"app",children:[(0,b.jsx)("div",{className:"scanline-overlay"}),(0,b.jsxs)("div",{className:"app-shell",children:[(0,b.jsxs)("div",{className:"report",children:[(0,b.jsx)(C,{ref:L,archetypeKey:u.archetype,secondaryKey:u.secondary,toolCalls:a.eventsScanned??0,sessions:a.transcripts.scanned,window:H,seed:u.variantSeed}),(0,b.jsx)(O,{strengths:F,totalDetectorsTriggered:I,totalDetectorsAvailable:o}),(0,b.jsx)(Q,{result:a,score:v,grade:D,archetypeKey:u.archetype,project:r}),(0,b.jsx)(ae,{result:a}),(0,b.jsx)(S,{findings:G}),(0,b.jsx)(X,{result:a,projected:B,projectedGrade:E})]}),(0,b.jsx)(ag,{cachedAt:d})]}),(0,b.jsx)(N,{frameRef:L,archetypeKey:u.archetype,seed:u.variantSeed,score:v,grade:D,missing:J})]})}function al({running:a,mode:c="no-cache",onStarted:d,onCompleted:e}){return(0,b.jsxs)("div",{className:"app",children:[(0,b.jsx)("div",{className:"scanline-overlay"}),(0,b.jsxs)("div",{className:"app-shell",children:[(0,b.jsx)("div",{className:"report",children:a?(0,b.jsx)(aj,{}):(0,b.jsx)(ah,{mode:c,running:a,onStarted:d,onCompleted:e})}),(0,b.jsx)(ag,{cachedAt:null,fixed:!0})]})]})}a.s(["AuditDashboard",0,function({initial:a,projectFromUrl:d,totalCatalogSize:f}){let[g,h]=(0,c.useState)(a),[i,j]=(0,c.useState)(!1),{capture:k}=(0,A.usePostHog)(),l=(0,c.useRef)(null),m=(0,c.useRef)(!1),n="cached"===g.status?g.result.transcripts.scanned:0,o="cached"===g.status?g.result.results.length:0,p=(0,c.useCallback)(async()=>{let a=await e();"cached"===a.status&&h(a)},[]);if((0,c.useEffect)(()=>(document.body.classList.add("audit-body"),()=>document.body.classList.remove("audit-body")),[]),(0,c.useEffect)(()=>{let a=i?"running":"empty"===g.status?"empty":0===n?"zero_sessions":"report";l.current!==a&&(l.current=a,k("audit_page_viewed",{state:a,has_cache:"cached"===g.status}))},[g.status,k,i,n]),(0,c.useEffect)(()=>{m.current=!1},[g.status,i,n]),(0,c.useEffect)(()=>{if(i||"cached"!==g.status||0===n)return;let a=0,b=()=>{if(a=0,m.current)return;let b=document.documentElement.scrollHeight-window.innerHeight;b<=0||window.scrollY>=b-24&&(m.current=!0,k("audit_page_scrolled_to_end",{results_count:o,transcripts_scanned:n}))},c=()=>{0===a&&(a=requestAnimationFrame(b))};return b(),window.addEventListener("scroll",c,{passive:!0}),()=>{window.removeEventListener("scroll",c),0!==a&&cancelAnimationFrame(a)}},[g.status,k,o,i,n]),"empty"===g.status&&!i)return(0,b.jsx)(al,{running:!1,onStarted:()=>j(!0),onCompleted:async()=>{j(!1),await p()}});if("empty"===g.status&&i)return(0,b.jsx)(al,{running:!0,onStarted:()=>{},onCompleted:async()=>{j(!1),await p()}});let q="cached"===g.status?g.result:null;if(!q)return null;let r="cached"===g.status?g.cachedAt:null,s="cached"===g.status?g.params:void 0;return 0===q.transcripts.scanned?(0,b.jsx)(al,{running:i,mode:"zero-sessions",onStarted:()=>j(!0),onCompleted:async()=>{j(!1),await p()}}):i?(0,b.jsxs)("div",{className:"app",children:[(0,b.jsx)("div",{className:"scanline-overlay"}),(0,b.jsxs)("div",{className:"app-shell",children:[(0,b.jsx)("div",{className:"report",children:(0,b.jsx)(aj,{})}),(0,b.jsx)(ag,{cachedAt:r})]})]}):(0,b.jsx)(ak,{result:q,cachedAt:r,params:s,projectFromUrl:d,totalCatalogSize:f})}],80311)}];
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=app_audit__components_audit-dashboard_tsx_0p9ud47._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[66168,a=>{"use strict";var b=a.i(7997);a.s(["default",0,function(){return(0,b.jsx)("main",{className:"min-h-screen bg-background",children:(0,b.jsxs)("div",{className:"container mx-auto p-8 max-w-7xl",children:[(0,b.jsx)("div",{className:"h-9 w-32 rounded bg-muted/40 animate-pulse mb-2"}),(0,b.jsx)("div",{className:"h-4 w-72 rounded bg-muted/30 animate-pulse mb-8"}),(0,b.jsx)("div",{className:"grid grid-cols-4 gap-3 mb-6",children:[0,1,2,3].map(a=>(0,b.jsx)("div",{className:"h-24 rounded-lg bg-card border border-border animate-pulse"},a))}),(0,b.jsx)("div",{className:"h-20 rounded-lg bg-card border border-border animate-pulse mb-6"}),(0,b.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,b.jsx)("div",{className:"h-96 rounded-lg bg-card border border-border animate-pulse"}),(0,b.jsx)("div",{className:"h-96 rounded-lg bg-card border border-border animate-pulse"})]})]})})}])},71623,a=>{a.n(a.i(66168))}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=app_audit_loading_tsx_1j1kc6j._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[69551,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/error.tsx <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/error.tsx <module evaluation>","default")},50757,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/error.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/error.tsx","default")},96647,a=>{"use strict";a.i(69551);var b=a.i(50757);a.n(b)},65897,a=>{a.n(a.i(96647))}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=app_error_tsx_1zds1ns._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[85546,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/global-error.tsx <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/global-error.tsx <module evaluation>","default")},53128,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/global-error.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/global-error.tsx","default")},16893,a=>{"use strict";a.i(85546);var b=a.i(53128);a.n(b)},94367,a=>{a.n(a.i(16893))}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=app_global-
|
|
3
|
+
//# sourceMappingURL=app_global-error_tsx_113y3za._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[3171,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(812),e=a.i(66036);a.s(["default",0,function({error:a,reset:f}){return(0,c.useEffect)(()=>{(0,d.getTelemetryConfig)().then(b=>{(0,e.setClientTelemetryConfig)(b),(0,e.captureClientEvent)("client_error",{error_message:a.message,error_name:a.name,error_digest:a.digest,boundary:"global"})}).catch(()=>{})},[a]),(0,b.jsx)("html",{children:(0,b.jsx)("body",{children:(0,b.jsx)("main",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#031035",color:"#f8fafc",fontFamily:"system-ui, sans-serif"},children:(0,b.jsxs)("div",{style:{textAlign:"center",padding:"2rem",border:"1px solid rgba(239,68,68,0.4)",borderRadius:"0.5rem",maxWidth:"500px"},children:[(0,b.jsx)("h2",{style:{color:"#ef4444",marginBottom:"0.5rem",fontSize:"1.25rem"},children:"Something went wrong"}),(0,b.jsx)("p",{style:{color:"#94a3b8",marginBottom:"1.5rem"},children:a.message||"An unexpected error occurred."}),(0,b.jsx)("button",{onClick:f,style:{padding:"0.5rem 1.25rem",background:"#3b82f6",color:"white",border:"none",borderRadius:"0.375rem",cursor:"pointer",fontSize:"0.875rem"},children:"Try again"})]})})})})}])}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=app_global-error_tsx_1kp6l3x._.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
module.exports=[22712,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(35112),e=a.i(38246),f=a.i(64831);let g=(0,f.default)("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),h=(0,f.default)("shield-x",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m14.5 9.5-5 5",key:"17q4r4"}],["path",{d:"m9.5 9.5 5 5",key:"18nt4w"}]]),i=(0,f.default)("shield-alert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]),j=(0,f.default)("shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);var k=a.i(89027),l=a.i(85650),m=a.i(52562);let n=(0,f.default)("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),o=(0,f.default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]);var p=a.i(74215),q=a.i(65967),r=a.i(5050);let s=(0,r.createServerReference)("404ea973cef45567dfde12a2181796492a243d0dd4",r.callServer,void 0,r.findSourceMapURL,"getHookActivityAction"),t=(0,r.createServerReference)("6074df864506b6eca9c04b36b2bd2fdc3fce73e8bb",r.callServer,void 0,r.findSourceMapURL,"searchHookActivityAction"),u=(0,r.createServerReference)("00e3056720007fd74a5622cacfeeaa41eaf08a3ec4",r.callServer,void 0,r.findSourceMapURL,"getHooksConfigAction"),v=(0,r.createServerReference)("60544b0aa69a7ac5d803d28ba6caed969b982c0b77",r.callServer,void 0,r.findSourceMapURL,"togglePolicyAction"),w=(0,r.createServerReference)("607e20a70512e38d94e62da8fbab3a71debf5b1b3f",r.callServer,void 0,r.findSourceMapURL,"installHooksWebAction"),x=(0,r.createServerReference)("601dc6ea366546ce0a818c0cf11c4d65ce2df76c26",r.callServer,void 0,r.findSourceMapURL,"removeHooksWebAction"),y=(0,r.createServerReference)("60f4d5213708c4fa0b16106757052454720e7d789f",r.callServer,void 0,r.findSourceMapURL,"updatePolicyParamsAction");var z=a.i(6236),A=a.i(10765),B=a.i(90619),C=a.i(95947),D=a.i(87256),E=a.i(40695);function F({sessionId:a,transcriptPath:c,integration:d,cwd:f}){if(!a)return(0,b.jsx)("span",{className:"text-muted-foreground",children:"\\u2014"});let g=a?a.slice(0,8):"—",h="codex"===d||(c?.includes("/.codex/")??!1),i="copilot"===d||(c?.includes("/.copilot/session-state/")??!1),j="cursor"===d||(c?.includes("/.cursor/")??!1),k="opencode"===d||(c?.includes("/.local/share/opencode/")??!1)||(c?.includes("/.opencode/")??!1),l="pi"===d||(c?.includes("/.pi/")??!1),m="gemini"===d||(c?.includes("/.gemini/")??!1);if(h||i||j||k||l||m){let c,d=f?(c=/^([A-Za-z]):[\\/](.*)$/.exec(f))?c[1]+"--"+c[2].replace(/[\\/]/g,"-"):f.replace(/[\\/]/g,"-"):h?"codex":i?"copilot":j?"cursor":k?"opencode":l?"pi":"gemini";return(0,b.jsx)(e.default,{href:`/project/${encodeURIComponent(d)}/session/${encodeURIComponent(a)}`,className:"text-primary hover:underline font-mono",onClick:a=>a.stopPropagation(),children:g})}let n=c?function(a){let b=a.replace(/\\/g,"/").split("/").filter(Boolean);if(b.length<2)return null;let c=b[b.length-2];return!c||c.startsWith(".")?null:c}(c):null;return n?(0,b.jsx)(e.default,{href:`/project/${encodeURIComponent(n)}/session/${encodeURIComponent(a)}`,className:"text-primary hover:underline font-mono",onClick:a=>a.stopPropagation(),children:g}):(0,b.jsx)("span",{className:"text-muted-foreground font-mono",children:g})}function G({decision:a}){return"deny"===a?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[0.65rem] font-semibold tracking-wide uppercase bg-red-500/10 text-red-400 border border-red-500/20",children:[(0,b.jsx)(h,{className:"h-3 w-3"}),"Deny"]}):"instruct"===a?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[0.65rem] font-semibold tracking-wide uppercase bg-amber-500/10 text-amber-400 border border-amber-500/20",children:[(0,b.jsx)(i,{className:"h-3 w-3"}),"Instruct"]}):(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[0.65rem] font-semibold tracking-wide uppercase bg-emerald-500/10 text-emerald-400 border border-emerald-500/20",children:[(0,b.jsx)(g,{className:"h-3 w-3"}),"Allow"]})}function H({eventType:a}){return(0,b.jsx)("span",{className:"inline-flex items-center rounded px-1.5 py-0.5 text-[0.6rem] font-medium bg-muted text-muted-foreground border border-border/50",children:a})}function I({integration:a}){if(!a)return null;let c=(0,D.getCliLabel)(a),d=(0,D.getCliBadgeClasses)(a);return(0,b.jsx)("span",{className:`inline-flex items-center rounded px-1.5 py-0.5 text-[0.6rem] font-medium border ${d}`,title:`Agent CLI: ${c}`,children:c})}function J({mode:a}){let c="default"===a;return(0,b.jsx)("span",{className:`inline-flex items-center rounded px-1.5 py-0.5 text-[0.6rem] font-medium border ${c?"bg-sky-500/10 text-sky-400 border-sky-500/20":"bg-amber-500/10 text-amber-400 border-amber-500/20"}`,children:a})}function K({ms:a}){return(0,b.jsx)("span",{className:`font-mono text-[0.7rem] ${a>500?"text-red-400":a>100?"text-amber-400":"text-muted-foreground"}`,children:a<1e3?`${a}ms`:`${(a/1e3).toFixed(1)}s`})}function L({text:a,field:d}){let[e,f]=(0,c.useState)(!1),{capture:g}=(0,A.usePostHog)(),h=async b=>{b.stopPropagation(),g("activity_copy_clicked",{field:d??"unknown"});try{await navigator.clipboard.writeText(a),f(!0),setTimeout(()=>f(!1),1500)}catch{let b=document.createElement("textarea");b.value=a,b.style.position="fixed",b.style.opacity="0",document.body.appendChild(b),b.select(),document.execCommand("copy"),document.body.removeChild(b),f(!0),setTimeout(()=>f(!1),1500)}};return(0,b.jsx)("button",{onClick:h,className:"inline-flex items-center justify-center h-5 w-5 rounded hover:bg-muted/50 text-muted-foreground hover:text-foreground transition-colors",title:"Copy",children:e?(0,b.jsx)(m.Check,{className:"h-3 w-3 text-emerald-400"}):(0,b.jsx)(l.Copy,{className:"h-3 w-3"})})}function M({value:a,onChange:c}){return(0,b.jsx)("div",{className:"inline-flex items-center rounded-md border border-border bg-muted/30 p-0.5",children:[{label:"All",value:""},{label:"Allow",value:"allow"},{label:"Instruct",value:"instruct"},{label:"Deny",value:"deny"}].map(d=>(0,b.jsx)("button",{onClick:()=>c(d.value),className:`px-2.5 py-1 text-[0.65rem] font-medium rounded transition-all ${a===d.value?"deny"===d.value?"bg-red-500/15 text-red-400 shadow-sm":"allow"===d.value?"bg-emerald-500/15 text-emerald-400 shadow-sm":"instruct"===d.value?"bg-amber-500/15 text-amber-400 shadow-sm":"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:d.label},d.value))})}function N({stats:a}){let c=a.totalEvents>0?a.denyCount/a.totalEvents*100:0,d=c.toFixed(c>=10?0:1),e=0===a.denyCount?"":c>=5?" is-deny":c>=2?" is-warn":"";return(0,b.jsxs)("div",{className:"stat-bar",role:"group","aria-label":"Activity stats",children:[(0,b.jsxs)("div",{className:"stat-cell",children:[(0,b.jsx)("span",{className:"eyebrow",children:"total events"}),(0,b.jsx)("span",{className:"value",children:a.totalEvents.toLocaleString()}),(0,b.jsx)("span",{className:"meta",children:"across all installed agents"})]}),(0,b.jsxs)("div",{className:"stat-cell",children:[(0,b.jsx)("span",{className:"eyebrow",children:"deny rate"}),(0,b.jsxs)("span",{className:`value${e}`,children:[d,"%"]}),(0,b.jsxs)("span",{className:"meta",children:[a.denyCount.toLocaleString()," of ",a.totalEvents.toLocaleString()," denied"]})]}),(0,b.jsxs)("div",{className:"stat-cell",children:[(0,b.jsx)("span",{className:"eyebrow",children:"top policy"}),(0,b.jsx)("span",{className:"value",style:{fontSize:16,fontWeight:500,color:a.topPolicy?"var(--accent-pink)":"var(--dim)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:a.topPolicy??void 0,children:a.topPolicy??"—"}),(0,b.jsx)("span",{className:"meta",children:"most-evaluated policy in scope"})]})]})}function O({item:a}){return(0,b.jsx)("tr",{children:(0,b.jsx)("td",{colSpan:11,className:"px-0 py-0",children:(0,b.jsxs)("div",{className:"activity-detail animate-expand text-xs",children:[(0,b.jsxs)("span",{className:"activity-detail-eyebrow",children:[(0,b.jsx)("span",{"aria-hidden":"true",children:"\\u25be"}),"event detail"]}),(0,b.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-2",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:"Session ID: "}),(0,b.jsx)("span",{className:"font-mono text-foreground",children:a.sessionId??"—"}),a.sessionId&&(0,b.jsx)(L,{text:a.sessionId,field:"session_id"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:"CWD: "}),(0,b.jsx)("span",{className:"font-mono text-foreground",children:a.cwd??"—"}),a.cwd&&(0,b.jsx)(L,{text:a.cwd,field:"cwd"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:"Transcript: "}),(0,b.jsx)("span",{className:"font-mono text-foreground break-all",children:a.transcriptPath??"—"}),a.transcriptPath?.startsWith("opencode-db://")&&(0,b.jsx)("span",{className:"text-muted-foreground ml-1",children:"(stored in opencode DB)"})]})]}),a.policyNames&&a.policyNames.length>1&&(0,b.jsxs)("div",{style:{marginTop:8},children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:"Policies: "}),(0,b.jsx)("span",{className:"font-mono text-foreground",children:a.policyNames.join(", ")})]}),a.reason&&(0,b.jsxs)("div",{style:{marginTop:8},children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:"Full reason: "}),(0,b.jsx)("span",{className:"text-foreground",children:a.reason})]})]})})})}function P({hooksInstalled:a,onSwitchTab:d}){let{intervalSec:e}=(0,z.useAutoRefresh)(),{capture:f}=(0,A.usePostHog)(),g=(0,B.useUrlParams)(),h=(0,c.useRef)(!1),[i,l]=(0,c.useState)(()=>(0,C.paramToPage)(g.get("page"))),[m,n]=(0,c.useState)(null),[o,p]=(0,c.useState)(null),[r,u]=(0,c.useState)(()=>{let a=g.get("decision");return"allow"===a||"deny"===a||"instruct"===a?a:""}),[v,w]=(0,c.useState)(()=>g.get("event")??""),[x,y]=(0,c.useState)(()=>g.get("policy")??""),[E,L]=(0,c.useState)(()=>g.get("session")??""),[Q,R]=(0,c.useState)(()=>{let a=g.get("cli");return(0,D.isKnownCli)(a)?a:""}),S=(0,c.useRef)(null),T=(0,c.useRef)(!0),U=(0,c.useRef)({filterDecision:r,filterEventType:v,filterPolicy:x,filterSessionId:E,filterCli:Q});U.current={filterDecision:r,filterEventType:v,filterPolicy:x,filterSessionId:E,filterCli:Q},(0,c.useEffect)(()=>{if(!h.current){h.current=!0;return}g.setAll({decision:r||void 0,event:v||void 0,policy:x||void 0,session:E||void 0,cli:Q||void 0,page:(0,C.pageToParam)(i)})},[r,v,x,E,Q,i]);let V=""!==r||""!==v||""!==x||""!==E||""!==Q,W=(0,c.useCallback)(async a=>{try{let b,{filterDecision:c,filterEventType:d,filterPolicy:e,filterSessionId:f,filterCli:g}=U.current;b=""!==c||""!==d||""!==e||""!==f||""!==g?await t({decision:c||void 0,eventType:d||void 0,policyName:e||void 0,sessionId:f||void 0,integration:g||void 0},a):await s(a),n(b)}catch{}},[]);(0,c.useEffect)(()=>{W(i);let a=setInterval(()=>W(i),e>0?1e3*e:5e3);return()=>clearInterval(a)},[i,W,e]),(0,c.useEffect)(()=>(S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{if(l(1),p(null),W(1),T.current){T.current=!1;return}f("activity_filter_changed",{active_filter_count:+(""!==r)+ +(""!==v)+ +(""!==x)+ +(""!==E)+ +(""!==Q),has_decision:""!==r,has_event_type:""!==v,has_policy:""!==x,has_session:""!==E,has_cli:""!==Q,decision:r||null,event_type:v||null,cli:Q||null})},300),()=>{S.current&&clearTimeout(S.current)}),[r,v,x,E,Q]);let X=m?.entries??[],Y=m?.totalPages??1;return(0,b.jsxs)(b.Fragment,{children:[m?.stats&&m.stats.totalEvents>0&&(0,b.jsx)("div",{style:{marginBottom:18},children:(0,b.jsx)(N,{stats:m.stats})}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"filter-bar",children:[(0,b.jsxs)("div",{className:"filter-group",children:[(0,b.jsx)("span",{className:"filter-label",children:"decision"}),(0,b.jsx)(M,{value:r,onChange:u})]}),(0,b.jsxs)("div",{className:"filter-group",children:[(0,b.jsx)("span",{className:"filter-label",children:"event"}),(0,b.jsxs)("select",{value:v,onChange:a=>w(a.target.value),className:"filter-input",children:[(0,b.jsx)("option",{value:"",children:"all events"}),(0,b.jsx)("option",{value:"PreToolUse",children:"PreToolUse"}),(0,b.jsx)("option",{value:"PostToolUse",children:"PostToolUse"}),(0,b.jsx)("option",{value:"SessionStart",children:"SessionStart"}),(0,b.jsx)("option",{value:"SessionEnd",children:"SessionEnd"}),(0,b.jsx)("option",{value:"UserPromptSubmit",children:"UserPromptSubmit"}),(0,b.jsx)("option",{value:"PermissionRequest",children:"PermissionRequest"})]})]}),(0,b.jsxs)("div",{className:"filter-group",children:[(0,b.jsx)("span",{className:"filter-label",children:"cli"}),(0,b.jsxs)("select",{value:Q,onChange:a=>{let b=a.target.value;R(""===b||(0,D.isKnownCli)(b)?b:"")},className:"filter-input","aria-label":"Filter by CLI",children:[(0,b.jsx)("option",{value:"",children:"all clis"}),D.KNOWN_CLI_IDS.map(a=>(0,b.jsx)("option",{value:a,children:(0,D.getCliLabel)(a)},a))]})]}),(0,b.jsxs)("div",{className:"filter-group filter-group--grow",children:[(0,b.jsx)("span",{className:"filter-label",children:"policy"}),(0,b.jsx)("input",{type:"text",value:x,onChange:a=>y(a.target.value),placeholder:"filter by policy\\u2026",className:"filter-input"})]}),(0,b.jsxs)("div",{className:"filter-group filter-group--grow",children:[(0,b.jsx)("span",{className:"filter-label",children:"session"}),(0,b.jsx)("input",{type:"text",value:E,onChange:a=>L(a.target.value),placeholder:"filter by session…",className:"filter-input"})]}),V&&(0,b.jsx)("button",{type:"button",className:"filter-clear",onClick:()=>{u(""),w(""),R(""),y(""),L("")},"aria-label":"Clear all filters",children:"[ clear ]"})]}),0===X.length?(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center py-16 px-4 text-center",children:[(0,b.jsx)(j,{className:"h-12 w-12 text-muted-foreground/30"}),!1===a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("p",{className:"text-sm text-muted-foreground mt-4 font-medium",children:"Policies are not installed"}),(0,b.jsxs)("p",{className:"text-xs text-muted-foreground mt-1 max-w-sm",children:["Go to the"," ",(0,b.jsx)("button",{className:"underline hover:text-foreground transition-colors",onClick:()=>d?.("policies"),children:"Policies tab"})," ","and click ",(0,b.jsx)("span",{className:"font-mono bg-muted px-1 rounded",children:"Install"})," to enable policy monitoring."]})]}):(0,b.jsx)("p",{className:"text-sm text-muted-foreground mt-4",children:V?"No matching activity.":"Waiting for hook events…"})]}):(0,b.jsx)("div",{className:"overflow-x-auto activity-table-wrap",children:(0,b.jsxs)("table",{className:"w-full text-xs activity-table",style:{tableLayout:"fixed"},children:[(0,b.jsxs)("colgroup",{children:[(0,b.jsx)("col",{style:{width:32}}),(0,b.jsx)("col",{style:{width:"8%"}}),(0,b.jsx)("col",{style:{width:"8%"}}),(0,b.jsx)("col",{style:{width:"8%"}}),(0,b.jsx)("col",{style:{width:"7%"}}),(0,b.jsx)("col",{style:{width:"18%"}}),(0,b.jsx)("col",{style:{width:"22%"}}),(0,b.jsx)("col",{style:{width:"6%"}}),(0,b.jsx)("col",{style:{width:"8%"}}),(0,b.jsx)("col",{style:{width:"8%"}}),(0,b.jsx)("col",{style:{width:"7%"}})]}),(0,b.jsx)("thead",{className:"activity-thead",children:(0,b.jsxs)("tr",{children:[(0,b.jsx)("th",{className:"px-4 py-3"}),(0,b.jsx)("th",{className:"px-3 py-3 activity-th",children:"Decision"}),(0,b.jsx)("th",{className:"px-3 py-3 activity-th",children:"Event"}),(0,b.jsx)("th",{className:"px-3 py-3 activity-th",children:"CLI"}),(0,b.jsx)("th",{className:"px-3 py-3 activity-th",children:"Tool"}),(0,b.jsx)("th",{className:"px-3 py-3 activity-th",children:"Policy"}),(0,b.jsx)("th",{className:"px-3 py-3 activity-th",children:"Reason"}),(0,b.jsx)("th",{className:"px-3 py-3 activity-th",children:"Duration"}),(0,b.jsx)("th",{className:"px-3 py-3 activity-th",children:"Session"}),(0,b.jsx)("th",{className:"px-3 py-3 activity-th",children:"Mode"}),(0,b.jsx)("th",{className:"px-3 py-3 activity-th text-right",children:"Time"})]})}),(0,b.jsx)("tbody",{className:"divide-y divide-border/30",children:X.map((a,d)=>{var e;let g,h="deny"===a.decision,i=o===d,j="instruct"===a.decision;return(0,b.jsxs)(c.default.Fragment,{children:[(0,b.jsxs)("tr",{onClick:()=>{p(a=>{let b=a===d?null:d,c=X[d];return f("activity_row_toggled",{expanded:null!==b,decision:c?.decision??null,policy_name:c?.policyName??null,event_type:c?.eventType??null}),b})},className:`cursor-pointer transition-colors ${h?"bg-red-500/[0.03] hover:bg-red-500/[0.07] border-l-2 border-l-red-500/40":j?"bg-amber-500/[0.03] hover:bg-amber-500/[0.07] border-l-2 border-l-amber-500/40":d%2==0?"hover:bg-muted/30":"bg-muted/[0.04] hover:bg-muted/30"} ${i?"bg-muted/20":""}`,children:[(0,b.jsx)("td",{className:"px-4 py-2",children:(0,b.jsx)(k.ChevronDown,{className:`h-3.5 w-3.5 text-muted-foreground transition-transform duration-150 ${i?"rotate-0":"-rotate-90"}`})}),(0,b.jsx)("td",{className:"px-3 py-2",children:(0,b.jsx)(G,{decision:a.decision})}),(0,b.jsx)("td",{className:"px-3 py-2",children:(0,b.jsx)(H,{eventType:a.eventType})}),(0,b.jsx)("td",{className:"px-3 py-2",children:(0,b.jsx)(I,{integration:a.integration})}),(0,b.jsx)("td",{className:"px-3 py-2 font-mono text-foreground",children:a.toolName??"—"}),(0,b.jsx)("td",{className:"px-3 py-2 font-mono text-foreground",children:a.policyNames&&a.policyNames.length>1?(0,b.jsxs)("span",{title:a.policyNames.join(", "),children:[a.policyNames[0],(0,b.jsxs)("span",{className:"text-muted-foreground text-[0.6rem]",children:[" +",a.policyNames.length-1]})]}):a.policyName??"—"}),(0,b.jsx)("td",{className:"px-3 py-2 text-muted-foreground truncate",title:a.reason??"",children:a.reason??"—"}),(0,b.jsx)("td",{className:"px-3 py-2",children:(0,b.jsx)(K,{ms:a.durationMs})}),(0,b.jsx)("td",{className:"px-3 py-2",title:a.sessionId??"",children:(0,b.jsx)(F,{sessionId:a.sessionId,transcriptPath:a.transcriptPath,integration:a.integration,cwd:a.cwd})}),(0,b.jsx)("td",{className:"px-3 py-2",children:a.permissionMode?(0,b.jsx)(J,{mode:a.permissionMode}):"—"}),(0,b.jsx)("td",{className:"px-3 py-2 text-right text-muted-foreground whitespace-nowrap",title:new Date(a.timestamp).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}),children:(e=a.timestamp,(g=Date.now()-e)<6e4?`${Math.max(1,Math.floor(g/1e3))}s ago`:g<36e5?`${Math.floor(g/6e4)}m ago`:g<864e5?`${Math.floor(g/36e5)}h ago`:`${Math.floor(g/864e5)}d ago`)})]}),i&&(0,b.jsx)(O,{item:a})]},`${a.timestamp}-${d}`)})})]})}),(0,b.jsx)(q.default,{currentPage:i,totalPages:Y,onPageChange:a=>{f("activity_pagination_changed",{from_page:i,to_page:a,total_pages:Y}),l(a),p(null)}})]})]})}function Q({enabled:a,onChange:c,disabled:d}){return(0,b.jsx)("button",{onClick:c,disabled:d,className:`relative inline-flex h-4 w-7 shrink-0 items-center rounded-full transition-colors disabled:opacity-40 ${a?"bg-emerald-500":"bg-muted-foreground/30"}`,"aria-label":a?"Disable policy":"Enable policy",children:(0,b.jsx)("span",{className:`inline-block h-3 w-3 rounded-full bg-white shadow transition-transform ${a?"translate-x-3.5":"translate-x-0.5"}`})})}function R({policy:a,onClose:d,onSave:e}){let f=a.params??{},g=a.currentParams??{},[h,i]=(0,c.useState)(()=>{let a={};for(let[b,c]of Object.entries(f)){let d=b in g?g[b]:c.default;a[b]=d}return a});(0,c.useEffect)(()=>{let a=a=>{"Escape"===a.key&&d()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[d]);let j=(a,b)=>{i(c=>({...c,[a]:b}))};return(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:a=>{a.target===a.currentTarget&&d()},children:(0,b.jsxs)("div",{className:"bg-card border border-border rounded-lg shadow-xl w-full max-w-lg mx-4 max-h-[80vh] flex flex-col",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"text-sm font-mono font-semibold text-foreground",children:a.name}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:a.description})]}),(0,b.jsx)("button",{onClick:d,className:"text-muted-foreground hover:text-foreground transition-colors",children:(0,b.jsx)(p.X,{className:"h-4 w-4"})})]}),(0,b.jsx)("div",{className:"overflow-y-auto flex-1 px-4 py-4 space-y-4",children:Object.entries(f).map(([a,c])=>(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"block text-xs font-semibold text-foreground mb-1 font-mono",children:a}),(0,b.jsx)("p",{className:"text-[0.65rem] text-muted-foreground mb-1.5",children:c.description}),((a,c)=>{let d=h[a];if("boolean"===c.type)return(0,b.jsxs)("label",{className:"flex items-center gap-2 cursor-pointer",children:[(0,b.jsx)("input",{type:"checkbox",checked:!!d,onChange:b=>j(a,b.target.checked),className:"rounded border-border"}),(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:c.description})]});if("number"===c.type)return(0,b.jsx)("input",{type:"number",value:"number"==typeof d?d:"",onChange:b=>j(a,Number(b.target.value)),className:"w-full h-7 rounded border border-border bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-2 focus:ring-primary/40"});if("string[]"===c.type){let c=Array.isArray(d)?d.join("\n"):"";return(0,b.jsx)("textarea",{value:c,onChange:b=>j(a,b.target.value.split("\n").filter(a=>""!==a.trim())),rows:4,placeholder:"One entry per line",className:"w-full rounded border border-border bg-background px-2 py-1.5 text-xs text-foreground font-mono focus:outline-none focus:ring-2 focus:ring-primary/40 resize-y"})}if("pattern[]"===c.type){let c=Array.isArray(d)?d:[];return(0,b.jsxs)("div",{className:"space-y-1.5",children:[c.map((d,e)=>(0,b.jsxs)("div",{className:"flex gap-1.5 items-center",children:[(0,b.jsx)("input",{type:"text",value:d.regex,onChange:b=>{let d=[...c];d[e]={...d[e],regex:b.target.value},j(a,d)},placeholder:"regex",className:"flex-1 h-6 rounded border border-border bg-background px-2 text-xs font-mono focus:outline-none focus:ring-2 focus:ring-primary/40"}),(0,b.jsx)("input",{type:"text",value:d.label,onChange:b=>{let d=[...c];d[e]={...d[e],label:b.target.value},j(a,d)},placeholder:"label",className:"flex-1 h-6 rounded border border-border bg-background px-2 text-xs focus:outline-none focus:ring-2 focus:ring-primary/40"}),(0,b.jsx)("button",{onClick:()=>j(a,c.filter((a,b)=>b!==e)),className:"text-muted-foreground/50 hover:text-destructive transition-colors",children:(0,b.jsx)(p.X,{className:"h-3.5 w-3.5"})})]},e)),(0,b.jsx)("button",{onClick:()=>j(a,[...c,{regex:"",label:""}]),className:"text-xs text-primary hover:underline",children:"+ Add pattern"})]})}return(0,b.jsx)("input",{type:"text",value:"string"==typeof d?d:"",onChange:b=>j(a,b.target.value),className:"w-full h-7 rounded border border-border bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-2 focus:ring-primary/40"})})(a,c)]},a))}),(0,b.jsxs)("div",{className:"flex items-center justify-end gap-2 px-4 py-3 border-t border-border",children:[(0,b.jsx)(E.Button,{variant:"outline",size:"sm",onClick:d,className:"h-7 text-xs",children:"Cancel"}),(0,b.jsx)(E.Button,{size:"sm",onClick:()=>e(h),className:"h-7 text-xs",children:"Save"})]})]})})}function S({message:a,onDismiss:c,onInstall:e,isPending:f}){let{capture:g}=(0,A.usePostHog)();return(0,d.createPortal)((0,b.jsxs)("div",{className:"fixed top-4 right-4 z-[9999] w-full max-w-sm",style:{animation:"slideInFromRight 0.25s ease-out"},children:[(0,b.jsx)("style",{children:`
|
|
2
|
+
@keyframes slideInFromRight {
|
|
3
|
+
from { transform: translateX(calc(100% + 1rem)); opacity: 0; }
|
|
4
|
+
to { transform: translateX(0); opacity: 1; }
|
|
5
|
+
}
|
|
6
|
+
`}),(0,b.jsxs)("div",{className:"rounded-lg border border-red-500/40 bg-red-950/95 shadow-2xl shadow-red-900/40 overflow-hidden backdrop-blur-sm",children:[(0,b.jsx)("div",{className:"h-0.5 w-full bg-gradient-to-r from-red-600 via-red-400 to-red-600"}),(0,b.jsxs)("div",{className:"p-4",children:[(0,b.jsxs)("div",{className:"flex items-start gap-3",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5 flex h-5 w-5 items-center justify-center rounded-full bg-red-500 ring-2 ring-red-500/30",children:(0,b.jsx)(p.X,{className:"h-3 w-3 text-white",strokeWidth:3})}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsx)("p",{className:"text-[0.65rem] font-bold uppercase tracking-widest text-red-400 mb-0.5",children:"Error"}),(0,b.jsx)("p",{className:"text-sm text-red-100 leading-snug",children:a})]}),(0,b.jsx)("button",{onClick:c,className:"shrink-0 -mt-0.5 -mr-0.5 rounded p-0.5 text-red-400/60 transition-colors hover:bg-red-500/20 hover:text-red-200","aria-label":"Dismiss",children:(0,b.jsx)(p.X,{className:"h-4 w-4"})})]}),(0,b.jsxs)("div",{className:"mt-3 flex gap-2",children:[(0,b.jsx)(E.Button,{size:"sm",onClick:()=>{g("hooks_install_from_error_clicked",{error_message:a.slice(0,200)}),c(),e()},disabled:f,className:"h-7 flex-1 border-0 bg-red-500 px-3 text-xs font-semibold text-white hover:bg-red-400 disabled:opacity-50",children:"Install hooks"}),(0,b.jsx)(E.Button,{variant:"ghost",size:"sm",onClick:c,className:"h-7 px-3 text-xs text-red-400 hover:bg-red-500/10 hover:text-red-200",children:"Dismiss"})]})]})]})]}),document.body)}function T({onHooksInstallChange:a}){let[d,e]=(0,c.useState)(null),[f,g]=(0,c.useTransition)(),[h,i]=(0,c.useState)(null),[k,l]=(0,c.useState)(null),[m,p]=(0,c.useState)(null),[q,r]=(0,c.useState)(()=>new Set),s=(0,c.useRef)(!1),{capture:t}=(0,A.usePostHog)(),z=(0,c.useCallback)((a,b)=>{t("action_error_displayed",{error_type:a,error_message:b.slice(0,200)}),i(b)},[t]),B=(0,c.useCallback)(async()=>{try{let b=await u();e(b),a?.(b.clis.some(a=>a.installed))}catch{}},[a]);(0,c.useEffect)(()=>{B()},[B]),(0,c.useEffect)(()=>{d&&(s.current?r(new Set(d.clis.filter(a=>a.installed).map(a=>a.id))):(s.current=!0,r(new Set(d.clis.filter(a=>a.installed||a.detected).map(a=>a.id)))))},[d?.clis]);let C=(0,c.useMemo)(()=>new Set((d?.clis??[]).filter(a=>a.installed).map(a=>a.id)),[d?.clis]),F=(0,c.useMemo)(()=>{let a=[],b=[];for(let c of d?.clis??[]){let d=q.has(c.id);d&&!C.has(c.id)&&a.push(c.id),!d&&C.has(c.id)&&b.push(c.id)}return{toInstall:a,toRemove:b}},[d?.clis,q,C]),G=F.toInstall.length>0||F.toRemove.length>0,H=()=>{let{toInstall:a,toRemove:b}=F;(0!==a.length||0!==b.length)&&(t("cli_install_remove_submitted",{to_install:a,to_remove:b,count_install:a.length,count_remove:b.length}),g(async()=>{try{i(null),a.length>0&&await w("user",a),b.length>0&&await x("user",b)}catch(a){z("cli_apply",a instanceof Error?a.message:"Failed to apply changes.")}finally{await B()}}))};if(!d)return(0,b.jsx)("div",{className:"flex items-center justify-center py-16",children:(0,b.jsx)("span",{className:"text-sm text-muted-foreground",children:"Loading\\u2026"})});let I=d.clis.some(a=>a.installed),J=C.size,K=q.size,L=Array.from(new Set(d.policies.map(a=>a.category)));return(0,b.jsxs)(b.Fragment,{children:[m&&(0,b.jsx)(R,{policy:m,onClose:()=>{t("policy_config_modal_closed",{policy_name:m.name,action:"cancel"}),p(null)},onSave:a=>{if(!m)return;let b=m.name;p(null),g(async()=>{try{i(null),await y(b,a),await B()}catch(a){z("param_update",a instanceof Error?a.message:"Failed to save configuration.")}})}}),(0,b.jsxs)("div",{className:"bg-card border border-border rounded-lg overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-4 px-5 py-3.5 border-b border-border/60 bg-muted/10",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 min-w-0 flex-wrap",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:`h-2 w-2 rounded-full transition-shadow ${I?"bg-emerald-400 shadow-[0_0_8px_rgba(52,211,153,0.6)]":"bg-muted-foreground/40"}`,"aria-hidden":!0}),(0,b.jsx)("span",{className:"text-[0.65rem] uppercase tracking-[0.2em] font-mono text-foreground/90",children:"Integrations"})]}),(0,b.jsx)("span",{className:"text-[0.65rem] font-mono text-muted-foreground/40",children:"·"}),(0,b.jsxs)("div",{className:"text-[0.65rem] uppercase tracking-[0.2em] font-mono text-muted-foreground",children:[(0,b.jsx)("span",{className:"text-foreground tabular-nums",children:J.toString().padStart(2,"0")}),(0,b.jsxs)("span",{className:"opacity-50",children:[" / 0",d.clis.length," active"]})]}),G&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-[0.65rem] font-mono text-muted-foreground/40",children:"·"}),(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-[0.65rem] uppercase tracking-[0.2em] font-mono text-pink-400",children:[(0,b.jsx)("span",{className:"h-1 w-1 rounded-full bg-pink-400 animate-pulse"}),F.toInstall.length+F.toRemove.length," pending"]})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 shrink-0",children:[(0,b.jsx)(E.Button,{variant:"outline",size:"sm",onClick:()=>{let a=Array.from(C).filter(a=>q.has(a));0!==a.length&&(t("cli_reinstall_submitted",{cli_ids:a,count:a.length}),g(async()=>{try{i(null),await w("user",a)}catch(a){z("cli_reinstall",a instanceof Error?a.message:"Failed to reinstall.")}finally{await B()}}))},disabled:f||0===K,className:"text-xs h-7 px-3 font-mono",children:"Reinstall"}),(0,b.jsx)(E.Button,{variant:"default",size:"sm",onClick:H,disabled:f||!G,className:"text-xs h-7 px-3 font-mono",children:"Apply changes"})]})]}),(0,b.jsx)("div",{className:"divide-y divide-border/30 border-b border-border/60",children:d.clis.map((a,c)=>{let e=q.has(a.id),g=C.has(a.id),h=e!==g,i=(0,D.getCliBadgeClasses)(a.id),j=i.split(" ").find(a=>a.startsWith("text-"))??"text-foreground";return(0,b.jsxs)("label",{className:`group relative flex items-center gap-3 pl-6 pr-5 py-3 cursor-pointer transition-colors hover:bg-muted/15 ${h?"bg-pink-500/[0.04]":""}`,children:[(0,b.jsx)("div",{className:`absolute left-0 top-0 bottom-0 w-[3px] ${j} bg-current transition-opacity ${e?"opacity-100":"opacity-25 group-hover:opacity-60"}`,"aria-hidden":!0}),(0,b.jsx)("div",{className:"font-mono text-[0.65rem] text-muted-foreground/40 tabular-nums w-6 select-none",children:(c+1).toString().padStart(2,"0")}),(0,b.jsxs)("div",{className:"relative shrink-0",children:[(0,b.jsx)("input",{type:"checkbox",checked:e,onChange:()=>{var b;return b=a.id,void r(a=>{let c=new Set(a),e=!c.has(b);e?c.add(b):c.delete(b);let f=d?.clis.find(a=>a.id===b);return t("cli_selection_toggled",{cli_id:b,checked:e,current_state:f?.installed?"installed":f?.detected?"detected":"inactive"}),c})},disabled:f,className:"sr-only peer","aria-label":`Toggle ${a.label}`}),(0,b.jsx)("div",{className:`h-[18px] w-[18px] rounded-sm border transition-all peer-focus-visible:ring-2 peer-focus-visible:ring-primary/40 ${e?"bg-primary border-primary":"bg-background/50 border-border group-hover:border-foreground/40"}`,children:e&&(0,b.jsx)("svg",{viewBox:"0 0 18 18",className:"h-full w-full text-primary-foreground",fill:"none","aria-hidden":!0,children:(0,b.jsx)("path",{d:"M4 9.5L7.5 12.5L14 6",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),(0,b.jsx)("div",{className:"min-w-[150px] shrink-0",children:(0,b.jsx)("div",{className:"text-sm font-medium text-foreground",children:a.label})}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 shrink-0",children:[g?(0,b.jsxs)("span",{className:`inline-flex items-center gap-1.5 px-2 py-0.5 rounded-sm text-[0.6rem] uppercase tracking-[0.15em] font-mono border ${i}`,children:[(0,b.jsx)("span",{className:"h-1 w-1 rounded-full bg-current shadow-[0_0_4px_currentColor]"}),"Active"]}):a.detected?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-sm text-[0.6rem] uppercase tracking-[0.15em] font-mono border border-border/60 text-muted-foreground/80 bg-muted/20",children:[(0,b.jsx)("span",{className:"h-1 w-1 rounded-full bg-current opacity-60"}),"Detected"]}):(0,b.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded-sm text-[0.6rem] uppercase tracking-[0.15em] font-mono border border-border/30 text-muted-foreground/40",children:"Inactive"}),h&&(0,b.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded-sm text-[0.6rem] uppercase tracking-[0.15em] font-mono border border-pink-500/40 text-pink-400 bg-pink-500/10",children:e?"+ install":"− remove"})]}),(0,b.jsx)("div",{className:"ml-auto hidden lg:block text-[0.7rem] font-mono text-muted-foreground/50 truncate max-w-[420px] group-hover:text-muted-foreground/80 transition-colors",title:a.settingsPath,children:a.settingsPath})]},a.id)})}),(0,b.jsxs)("div",{className:"flex items-center gap-2 px-4 py-2 border-b border-border/40 bg-muted/5",children:[(0,b.jsxs)("span",{className:"text-xs text-muted-foreground",children:[(0,b.jsx)("span",{className:"font-semibold text-foreground",children:d.enabledPolicies.length})," / ",d.policies.length+(d.customPolicies?.length??0)," ","policies enabled"]}),I&&(0,b.jsxs)("span",{className:"text-[0.65rem] text-muted-foreground/60",children:["· shared across ",J," active CLI",1===J?"":"s"]})]}),h&&(0,b.jsx)("div",{className:"px-4 py-2 bg-red-500/10 border-b border-red-500/20 text-xs text-red-400",children:h}),k&&(0,b.jsx)(S,{message:k,onDismiss:()=>l(null),onInstall:H,isPending:f}),L.map(a=>{let c=d.policies.filter(b=>b.category===a),h=c.filter(a=>a.enabled).length;return(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center justify-between px-4 py-2.5 bg-muted/20 border-b border-border/50",children:[(0,b.jsx)("span",{className:"text-[0.7rem] font-semibold uppercase tracking-wider text-muted-foreground",children:a}),(0,b.jsxs)("span",{className:"text-[0.7rem] text-muted-foreground",children:[h," / ",c.length," enabled"]})]}),c.map(a=>(0,b.jsxs)("div",{className:"flex items-start gap-3 px-4 py-3 border-b border-border/20 hover:bg-muted/20 transition-colors",children:[(0,b.jsx)("div",{className:"mt-0.5 shrink-0",children:(0,b.jsx)(Q,{enabled:a.enabled,onChange:()=>{var b,c;return b=a.name,c=a.enabled,void(!d||(!d.clis.some(a=>a.installed)?l("Policies are not installed. Install policies to continue."):(l(null),e(a=>a?{...a,policies:a.policies.map(a=>a.name===b?{...a,enabled:!c}:a),enabledPolicies:c?a.enabledPolicies.filter(a=>a!==b):[...a.enabledPolicies,b]}:a),g(async()=>{try{await v(b,!c)}catch{z("policy_toggle","Failed to save policy change."),B()}}))))},disabled:f})}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0 w-56 shrink-0 mt-0.5",children:[(0,b.jsx)("span",{className:"text-xs font-mono text-foreground truncate",children:a.name}),a.beta&&(0,b.jsx)("span",{className:"shrink-0 text-[0.6rem] px-1 py-0.5 rounded border bg-violet-500/10 text-violet-400 border-violet-500/20",children:"beta"})]}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsx)("span",{className:"text-xs text-muted-foreground leading-relaxed",children:a.description}),a.eventScope&&(0,b.jsx)("span",{className:"block text-[0.65rem] text-muted-foreground/40 font-mono mt-0.5 hidden lg:block",children:a.eventScope}),a.params&&Object.keys(a.params).length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1 mt-1.5",children:Object.entries(a.params).map(([c,d])=>{let e=a.currentParams?.[c]??d.default,f=JSON.stringify(e)!==JSON.stringify(d.default);return(0,b.jsxs)("span",{className:`inline-flex items-center gap-1 font-mono text-[0.6rem] px-1.5 py-0.5 rounded border ${f?"bg-primary/10 text-primary/70 border-primary/20":"bg-muted/40 text-muted-foreground/55 border-border/40"}`,children:[(0,b.jsxs)("span",{className:"opacity-70",children:[c,":"]}),(0,b.jsx)("span",{children:function(a,b){if("string[]"===a||"pattern[]"===a){let c=Array.isArray(b)?b:[];return 0===c.length?"none":"pattern[]"===a?`${c.length} pattern${1!==c.length?"s":""}`:1===c.length?String(c[0]).slice(0,24):`${c.length} values`}return"boolean"===a?b?"on":"off":null==b||""===b?"—":String(b).slice(0,32)}(d.type,e)})]},c)})})]}),a.params&&Object.keys(a.params).length>0&&(0,b.jsx)("button",{className:"shrink-0 mt-0.5 text-muted-foreground hover:text-primary transition-colors",onClick:()=>{let b=Object.entries(a.params??{}).filter(([b,c])=>JSON.stringify(a.currentParams?.[b]??c.default)!==JSON.stringify(c.default)).length;t("policy_config_modal_opened",{policy_name:a.name,param_count:Object.keys(a.params??{}).length,has_customized_params:b>0,customized_count:b}),p(a)},title:"Edit parameters",children:(0,b.jsx)(n,{className:"h-3.5 w-3.5"})})]},a.name))]},a)}),d.customPoliciesPath&&(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center justify-between px-4 py-2.5 bg-muted/20 border-b border-border/50",children:[(0,b.jsx)("span",{className:"text-[0.7rem] font-semibold uppercase tracking-wider text-muted-foreground",children:"Custom Policies"}),(0,b.jsxs)("span",{className:"text-[0.7rem] text-muted-foreground",children:[d.customPolicies?.length??0," detected"]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-3 px-4 py-3 border-b border-border/20",children:[(0,b.jsx)(o,{className:"h-3.5 w-3.5 text-muted-foreground shrink-0"}),(0,b.jsx)("span",{className:"text-xs font-mono text-muted-foreground truncate",children:d.customPoliciesPath})]}),(0,b.jsxs)("div",{className:"flex items-start gap-2 px-4 py-2.5 border-b border-border/20 bg-muted/10",children:[(0,b.jsx)(j,{className:"h-3.5 w-3.5 text-muted-foreground/60 shrink-0 mt-0.5"}),(0,b.jsx)("p",{className:"text-[0.7rem] text-muted-foreground/70 leading-relaxed",children:"Custom policies are always active. To add, remove, or reorder them, edit the JS file above."})]}),d.customPolicies?.map(a=>(0,b.jsxs)("div",{className:"flex items-start gap-3 px-4 py-3 border-b border-border/20 hover:bg-muted/20 transition-colors",children:[(0,b.jsx)("div",{className:"h-4 w-7 shrink-0 mt-0.5"}),(0,b.jsx)("div",{className:"flex items-center gap-1.5 min-w-0 w-56 shrink-0 mt-0.5",children:(0,b.jsx)("span",{className:"text-xs font-mono text-foreground truncate",children:a.name})}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[a.description&&(0,b.jsx)("span",{className:"text-xs text-muted-foreground leading-relaxed",children:a.description}),a.eventScope&&(0,b.jsx)("span",{className:"block text-[0.65rem] text-muted-foreground/40 font-mono mt-0.5 hidden lg:block",children:a.eventScope})]})]},a.name))]})]})]})}function U({activeTab:a,onChange:c}){return(0,b.jsx)("div",{className:"tabs",style:{padding:0,marginBottom:24},children:[{id:"activity",label:"Activity"},{id:"policies",label:"Configure"}].map(d=>(0,b.jsx)("button",{type:"button",onClick:()=>c(d.id),className:`tab${a===d.id?" is-active":""}`,children:d.label.toLowerCase()},d.id))})}a.s(["default",0,function({initialTab:a="activity"}){let d=(0,B.useUrlParams)(),{capture:e}=(0,A.usePostHog)(),[f,g]=(0,c.useState)(a),[h,i]=(0,c.useState)(void 0),[j,k]=(0,c.useState)(null),[l,m]=(0,c.useState)([]);(0,c.useEffect)(()=>{u().then(a=>{i(a.clis.some(a=>a.installed)),k({enabled:a.enabledPolicies.length,total:a.policies.length+(a.customPolicies?.length??0)}),m(a.clis.filter(a=>a.installed).map(a=>a.label))}).catch(()=>i(void 0))},[]);let n=0===l.length?"Policy evaluations":l.length<=3?`Policy evaluations across ${l.join(", ")}`:`Policy evaluations across ${l.length} agents`,o=a=>{a!==f&&e("policies_tab_switched",{tab:a,from_tab:f}),g(a),d.setAll({tab:"activity"===a?void 0:a})};return(0,b.jsx)("main",{className:"report",children:(0,b.jsxs)("section",{className:"section","data-screen-label":"policies",children:[(0,b.jsxs)("h2",{className:"section-h",style:{textTransform:"none"},children:["activity"===f?"Policies":"what to stop them doing.","activity"===f&&(0,b.jsx)("span",{className:"section-h-dot","aria-hidden":!0})]}),"activity"===f?(0,b.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:32,flexWrap:"wrap",margin:"0 0 24px"},children:[(0,b.jsxs)("div",{style:{fontFamily:"var(--font-mono)",fontSize:14,color:"var(--ink-2)",lineHeight:1.7,flex:"1 1 480px",minWidth:0},children:[n.toLowerCase(),j&&(0,b.jsxs)("span",{style:{color:"var(--dim)"},children:[" · ","enabled policies"," ",(0,b.jsxs)("span",{style:{color:"var(--ink)",fontVariantNumeric:"tabular-nums"},children:[j.enabled,"/",j.total]})]})]}),(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:6,flex:"0 0 auto"},children:[(0,b.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:10,letterSpacing:"0.22em",textTransform:"uppercase",color:"var(--dim)"},children:"want to change which policies fire?"}),(0,b.jsx)("button",{type:"button",className:"btn btn-primary",onClick:()=>o("policies"),children:"[ configure policies → ]"})]})]}):(0,b.jsx)("p",{style:{fontFamily:"var(--font-mono)",fontSize:14,color:"var(--ink-2)",lineHeight:1.7,maxWidth:720,margin:"0 0 24px"},children:"switch policies on or off across your installed agent CLIs."}),(0,b.jsx)(U,{activeTab:f,onChange:o}),"activity"===f?(0,b.jsx)(P,{hooksInstalled:h,onSwitchTab:o}):(0,b.jsx)(T,{onHooksInstallChange:i})]})})}],22712)}];
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=app_policies_hooks-client_tsx_19dqvpc._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[22918,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/project/[name]/error.tsx <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/project/[name]/error.tsx <module evaluation>","default")},18909,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/project/[name]/error.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/project/[name]/error.tsx","default")},3956,a=>{"use strict";a.i(22918);var b=a.i(18909);a.n(b)},16733,a=>{a.n(a.i(3956))}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=app_project_%5Bname%
|
|
3
|
+
//# sourceMappingURL=app_project_%5Bname%5D_error_tsx_1v02_5n._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[14726,a=>{"use strict";var b=a.i(7997);a.s(["default",0,function(){return(0,b.jsx)("main",{className:"min-h-screen bg-background",children:(0,b.jsxs)("div",{className:"container mx-auto p-8",children:[(0,b.jsx)("div",{className:"h-5 w-36 bg-muted rounded animate-pulse mb-6"}),(0,b.jsxs)("div",{className:"mb-8",children:[(0,b.jsx)("div",{className:"h-10 w-64 bg-muted rounded animate-pulse mb-2"}),(0,b.jsx)("div",{className:"h-4 w-48 bg-muted/50 rounded animate-pulse"})]}),(0,b.jsxs)("div",{className:"bg-card text-card-foreground rounded-lg border border-border p-6 shadow-sm",children:[(0,b.jsx)("div",{className:"h-8 w-32 bg-muted rounded animate-pulse mb-4"}),(0,b.jsx)("div",{className:"space-y-3",children:Array.from({length:6}).map((a,c)=>(0,b.jsx)("div",{className:"h-12 bg-muted/50 rounded animate-pulse"},c))})]})]})})}])},4466,a=>{a.n(a.i(14726))}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=app_project_%5Bname%
|
|
3
|
+
//# sourceMappingURL=app_project_%5Bname%5D_loading_tsx_05-l4uf._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[13103,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/project/[name]/session/[sessionId]/error.tsx <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/project/[name]/session/[sessionId]/error.tsx <module evaluation>","default")},73841,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/project/[name]/session/[sessionId]/error.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/project/[name]/session/[sessionId]/error.tsx","default")},58411,a=>{"use strict";a.i(13103);var b=a.i(73841);a.n(b)},46454,a=>{a.n(a.i(58411))}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=app_project_%5Bname%5D_session_%5BsessionId%
|
|
3
|
+
//# sourceMappingURL=app_project_%5Bname%5D_session_%5BsessionId%5D_error_tsx_0-lj3nd._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[94772,a=>{"use strict";var b=a.i(7997);a.s(["default",0,function(){return(0,b.jsx)("main",{className:"min-h-screen bg-background",children:(0,b.jsxs)("div",{className:"container mx-auto p-8",children:[(0,b.jsx)("div",{className:"h-5 w-36 bg-muted rounded animate-pulse mb-6"}),(0,b.jsxs)("div",{className:"mb-8",children:[(0,b.jsx)("div",{className:"h-10 w-48 bg-muted rounded animate-pulse mb-2"}),(0,b.jsx)("div",{className:"h-4 w-72 bg-muted/50 rounded animate-pulse mb-1"}),(0,b.jsx)("div",{className:"h-4 w-56 bg-muted/50 rounded animate-pulse"})]}),(0,b.jsx)("div",{className:"bg-card border border-border rounded-lg p-4 mb-4",children:(0,b.jsx)("div",{className:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-4",children:Array.from({length:6}).map((a,c)=>(0,b.jsx)("div",{className:"h-10 bg-muted/50 rounded animate-pulse"},c))})}),(0,b.jsx)("div",{className:"bg-card border border-border rounded-lg p-4 shadow-sm space-y-2",children:Array.from({length:5}).map((a,c)=>(0,b.jsx)("div",{className:"h-24 bg-muted/50 rounded animate-pulse"},c))})]})})}])},4983,a=>{a.n(a.i(94772))}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=app_project_%5Bname%5D_session_%5BsessionId%
|
|
3
|
+
//# sourceMappingURL=app_project_%5Bname%5D_session_%5BsessionId%5D_loading_tsx_0l4aixs._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[99006,a=>{"use strict";var b=a.i(7997);a.s(["default",0,function(){return(0,b.jsx)("main",{className:"report",children:(0,b.jsxs)("section",{className:"section","data-screen-label":"projects",children:[(0,b.jsxs)("div",{className:"section-mast",children:[(0,b.jsxs)("div",{className:"section-label",children:[(0,b.jsx)("span",{className:"glyph",children:"━━"})," projects"]}),(0,b.jsxs)("div",{className:"section-meta","aria-live":"polite","aria-busy":"true",children:[(0,b.jsx)("span",{className:"p",children:"●"})," loading…"]})]}),(0,b.jsx)("h2",{className:"section-h",style:{textTransform:"none"},children:"your agent footprint."}),(0,b.jsxs)("div",{className:"panel",style:{padding:24},children:[(0,b.jsx)("div",{className:"bg-muted h-6 w-40 mb-5 animate-pulse"}),(0,b.jsx)("div",{className:"space-y-2",children:Array.from({length:8}).map((a,c)=>(0,b.jsx)("div",{className:"bg-muted/50 h-10 audit-row-enter",style:{"--row-delay":`${60*c}ms`}},c))})]})]})})}])},43519,a=>{a.n(a.i(99006))}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=app_projects_loading_tsx_20-3u8b._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[1024,a=>{"use strict";var b=a.i(12714),c=a.i(60526),d=a.i(50227),e=a.i(90798),f=a.i(34900),g=a.i(26192),h=a.i(33432),i=a.i(76668);let j=(0,d.join)((0,c.homedir)(),".codex","sessions"),k=/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;async function l(a){try{return await (0,b.readdir)(a,{withFileTypes:!0})}catch{return null}}async function m(a){let c=null;try{c=await (0,b.open)(a,"r");let d=Buffer.alloc(262144),{bytesRead:e}=await c.read(d,0,262144,0);if(0===e)return null;let f=d.subarray(0,e),g=f.indexOf(10),h=-1===g?e:g;return f.subarray(0,h).toString("utf-8")}catch{return null}finally{c&&await c.close().catch(()=>{})}}async function n(a){let b=await l(a);return b?b.filter(a=>a.isFile()&&a.name.endsWith(".jsonl")).map(b=>(0,d.join)(a,b.name)):[]}async function o(){let a=await l(j);if(!a)return[];let c=[];for(let b of a){if(!b.isDirectory())continue;let a=await l((0,d.join)(j,b.name));if(a)for(let e of a){if(!e.isDirectory())continue;let a=await l((0,d.join)(j,b.name,e.name));if(a)for(let f of a){if(!f.isDirectory())continue;let a=(0,d.join)(j,b.name,e.name,f.name);c.push(...await n(a))}}}return 0===c.length?[]:(await (0,g.batchAll)(c.map(a=>async()=>{let c,d,e=(d=(a.split("/").pop()??"").match(k))?d[0]:null;if(!e)return null;let f=await m(a);if(!f)return null;let{cwd:g}=function(a){try{let b=JSON.parse(a);if("session_meta"!==b.type)return{};let c=b.payload?.cwd;if("string"!=typeof c||0===c.length)return{};return{cwd:c}}catch{return{}}}(f);if(!g)return null;try{let d=await (0,b.open)(a,"r");try{c=(await d.stat()).mtime}finally{await d.close().catch(()=>{})}}catch{c=new Date(0)}return{filePath:a,fileName:a.split("/").pop()??"",cwd:g,sessionId:e,fileMtime:c}}),16)).filter(a=>"fulfilled"===a.status).map(a=>a.value).filter(a=>null!==a)}let p=(0,f.runtimeCache)(o,30);async function q(){let a;try{a=await p()}catch(a){return(0,i.logWarn)("Failed to scan Codex sessions:",a),[]}let b=new Map;for(let c of a){let a=b.get(c.cwd);(!a||c.fileMtime.getTime()>a.latest.getTime())&&b.set(c.cwd,{latest:c.fileMtime,cwd:c.cwd})}let c=[];for(let{cwd:a,latest:d}of b.values())c.push({name:(0,e.encodeFolderName)(a),path:a,isDirectory:!0,lastModified:d,lastModifiedFormatted:(0,h.formatDate)(d),cli:["codex"]});return c.sort((a,b)=>b.lastModified.getTime()-a.lastModified.getTime()),c}function r(a){let b=a.map(a=>({name:a.fileName.replace(/\.jsonl$/,""),path:a.filePath,lastModified:a.fileMtime,lastModifiedFormatted:(0,h.formatDate)(a.fileMtime),sessionId:a.sessionId,cli:"codex"}));return b.sort((a,b)=>b.lastModified.getTime()-a.lastModified.getTime()),b}async function s(a){let b;try{b=await p()}catch(a){return(0,i.logWarn)("Failed to scan Codex sessions:",a),[]}return r(b.filter(b=>b.cwd===a))}async function t(a){let b;try{b=await p()}catch(a){return(0,i.logWarn)("Failed to scan Codex sessions:",a),{cwd:null,sessions:[]}}let c=b.filter(b=>(0,e.encodeFolderName)(b.cwd)===a);return{cwd:c[0]?.cwd??null,sessions:r(c)}}let u=(0,f.runtimeCache)(q,30),v=(0,f.runtimeCache)(a=>s(a),30,{maxSize:50}),w=(0,f.runtimeCache)(a=>t(a),30,{maxSize:50});a.s(["getCachedCodexProjects",0,u,"getCachedCodexSessionsByEncodedName",0,w,"getCachedCodexSessionsForCwd",0,v,"getCodexProjects",0,q,"getCodexSessionsByEncodedName",0,t,"getCodexSessionsForCwd",0,s])}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=lib_codex-
|
|
3
|
+
//# sourceMappingURL=lib_codex-projects_ts_0pqlw37._.js.map
|