failproofai 0.0.11-beta.8 → 0.0.11-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  3. package/.next/standalone/.next/build-manifest.json +6 -6
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/required-server-files.json +1 -1
  6. package/.next/standalone/.next/routes-manifest.json +6 -0
  7. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +3 -3
  8. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  9. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  10. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  14. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  15. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  16. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  17. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +3 -3
  19. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  20. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  21. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  24. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  25. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  26. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  27. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
  28. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  29. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  30. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  31. package/.next/standalone/.next/server/app/api/audit/invite/route/app-paths-manifest.json +3 -0
  32. package/.next/standalone/.next/server/app/api/audit/invite/route/build-manifest.json +9 -0
  33. package/.next/standalone/.next/server/app/api/audit/invite/route/server-reference-manifest.json +4 -0
  34. package/.next/standalone/.next/server/app/api/audit/invite/route.js +7 -0
  35. package/.next/standalone/.next/server/app/api/audit/invite/route.js.map +5 -0
  36. package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -0
  37. package/.next/standalone/.next/server/app/api/audit/invite/route_client-reference-manifest.js +3 -0
  38. package/.next/standalone/.next/server/app/api/audit/run/route.js +1 -1
  39. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/auth/login-request/route.js +1 -1
  41. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js +2 -2
  43. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/api/auth/logout/route.js +2 -2
  45. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/api/auth/reminder/route.js +2 -2
  47. package/.next/standalone/.next/server/app/api/auth/reminder/route.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/api/auth/status/route.js +2 -2
  49. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/audit/page/build-manifest.json +3 -3
  52. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
  53. package/.next/standalone/.next/server/app/audit/page.js +2 -2
  54. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/index.html +1 -1
  57. package/.next/standalone/.next/server/app/index.rsc +15 -15
  58. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  59. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  60. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  61. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
  62. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  63. package/.next/standalone/.next/server/app/page/build-manifest.json +3 -3
  64. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  65. package/.next/standalone/.next/server/app/page.js +2 -2
  66. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  67. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/policies/page/build-manifest.json +3 -3
  69. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  70. package/.next/standalone/.next/server/app/policies/page.js +2 -2
  71. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +3 -3
  74. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  75. package/.next/standalone/.next/server/app/project/[name]/page.js +3 -3
  76. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +3 -3
  79. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  80. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  81. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +3 -3
  82. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/projects/page/build-manifest.json +3 -3
  85. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  86. package/.next/standalone/.next/server/app/projects/page.js +3 -3
  87. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  90. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1_mqemn._.js +1 -1
  91. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1r1h8v9._.js +3 -0
  92. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1uatkiv._.js +3 -0
  93. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1y6gxxb._.js +3 -0
  94. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_audit_invite_route_actions_0-2n5sy.js +3 -0
  95. package/.next/standalone/.next/server/chunks/node_modules_0-tu4ot._.js +3 -0
  96. package/.next/standalone/.next/server/chunks/node_modules_0ttxbz7._.js +3 -0
  97. package/.next/standalone/.next/server/chunks/node_modules_1bnh1y0._.js +3 -0
  98. package/.next/standalone/.next/server/chunks/node_modules_1epycqa._.js +3 -0
  99. package/.next/standalone/.next/server/chunks/node_modules_1wpdcgo._.js +3 -0
  100. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_01r25oi._.js +1 -1
  101. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p7._.js +1 -1
  102. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
  103. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0808sha._.js +4 -0
  104. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1cd25c7._.js → [root-of-the-server]__0e4-6d8._.js} +3 -3
  105. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1d4gx_t._.js → [root-of-the-server]__0e446gb._.js} +2 -2
  106. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ehe24g._.js +4 -0
  107. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1-scthx._.js → [root-of-the-server]__0f62vu9._.js} +2 -2
  108. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g253ve._.js +4 -0
  109. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0l13qf2._.js → [root-of-the-server]__0k65l27._.js} +2 -2
  110. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vxf0_g._.js +4 -0
  111. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__15i0juc._.js → [root-of-the-server]__0wprfyc._.js} +2 -2
  112. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12mcauo._.js +4 -0
  113. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0989_dx._.js → [root-of-the-server]__1e-x7j4._.js} +2 -2
  114. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1mt35_w._.js +1 -1
  115. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pcxxwg._.js +2 -2
  116. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1uvfwgr._.js +4 -0
  117. package/.next/standalone/.next/server/chunks/ssr/_05whahf._.js +1 -1
  118. package/.next/standalone/.next/server/chunks/ssr/_0il3fl1._.js +3 -0
  119. package/.next/standalone/.next/server/chunks/ssr/_11_p9y8._.js +1 -1
  120. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +21 -21
  121. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
  122. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +2 -2
  123. package/.next/standalone/.next/server/chunks/ssr/node_modules_html-to-image_es_index_0y4a-0q.js +3 -0
  124. package/.next/standalone/.next/server/chunks/ssr/node_modules_html-to-image_es_index_1ao30b1.js +3 -0
  125. package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuzn._.js +1 -1
  126. package/.next/standalone/.next/server/middleware-build-manifest.js +6 -6
  127. package/.next/standalone/.next/server/pages/404.html +1 -1
  128. package/.next/standalone/.next/server/pages/500.html +1 -1
  129. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/server-reference-manifest.json +10 -10
  131. package/.next/standalone/.next/static/chunks/{1nd1e30h8s_mc.js → 07_d165p5h5ys.js} +1 -1
  132. package/.next/standalone/.next/static/chunks/0f7d7hnbh4djs.js +1 -0
  133. package/.next/standalone/.next/static/chunks/0h7auy7hzjyhw.js +1 -0
  134. package/.next/standalone/.next/static/chunks/168k-8z6k7e8z.css +1 -0
  135. package/.next/standalone/.next/static/chunks/{24z-bgbisv379.js → 1kvadxkgnapyj.js} +1 -1
  136. package/.next/standalone/.next/static/chunks/{29gs4efgi3hme.js → 277oc363p56n6.js} +2 -2
  137. package/.next/standalone/.next/static/chunks/28mkxkl_d91-l.js +1 -0
  138. package/.next/standalone/.next/static/chunks/28x7jvo3kxd3u.js +41 -0
  139. package/.next/standalone/.next/static/chunks/29nrs5xs9c4hx.css +2 -0
  140. package/.next/standalone/.next/static/chunks/{2mni177pnjx6u.js → 29tg7deqmq32l.js} +1 -1
  141. package/.next/standalone/.next/static/chunks/{3w8d8k_dca5rp.js → 2h0dkzyy0vocp.js} +1 -1
  142. package/.next/standalone/.next/static/chunks/{0j969hb6nujdf.js → 2z42u62k-8-_q.js} +1 -1
  143. package/.next/standalone/.next/static/chunks/{1m2yj97j7f_km.js → 3nj6g3xu9uy78.js} +1 -1
  144. package/.next/standalone/.next/static/chunks/{0d49wc5zca0u1.js → 3ty6dhcuogout.js} +1 -1
  145. package/.next/standalone/.next/static/chunks/3zkg2s2vzxc3d.js +1 -0
  146. package/.next/standalone/.next/static/chunks/{turbopack-00qy7zfa7m--m.js → turbopack-3lrm4f20fz89b.js} +1 -1
  147. package/.next/standalone/app/api/audit/invite/route.ts +183 -0
  148. package/.next/standalone/app/audit/_components/audit-dashboard.tsx +30 -62
  149. package/.next/standalone/app/audit/_components/audit-poster.tsx +322 -0
  150. package/.next/standalone/app/audit/_components/auth-dialog.tsx +21 -49
  151. package/.next/standalone/app/audit/_components/come-back-better-section.tsx +316 -0
  152. package/.next/standalone/app/audit/_components/how-to-improve-section.tsx +187 -0
  153. package/.next/standalone/app/audit/_components/invite-dialog.tsx +227 -0
  154. package/.next/standalone/app/audit/_components/quirks-section.tsx +75 -0
  155. package/.next/standalone/app/audit/_components/share-templates.ts +23 -22
  156. package/.next/standalone/app/audit/_components/sigil.tsx +9 -66
  157. package/.next/standalone/app/audit/_components/strengths-section.tsx +20 -32
  158. package/.next/standalone/app/audit/audit-styles.css +781 -1784
  159. package/.next/standalone/app/components/sessions-list.tsx +77 -80
  160. package/.next/standalone/app/globals.css +214 -32
  161. package/.next/standalone/app/layout.tsx +1 -10
  162. package/.next/standalone/app/policies/hooks-client.tsx +12 -4
  163. package/.next/standalone/app/project/[name]/page.tsx +23 -79
  164. package/.next/standalone/app/projects/page.tsx +14 -23
  165. package/.next/standalone/assets/audit/poster-styles.css +1 -1
  166. package/.next/standalone/assets/audit/styles.css +11 -11
  167. package/.next/standalone/components/navbar.tsx +2 -37
  168. package/.next/standalone/lib/auth/api-server-client.ts +25 -0
  169. package/.next/standalone/node_modules/@next/env/package.json +2 -2
  170. package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
  171. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  172. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  173. package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
  174. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  175. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  176. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  177. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
  178. package/.next/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
  179. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  180. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  181. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  182. package/.next/standalone/node_modules/next/package.json +15 -15
  183. package/.next/standalone/package.json +15 -12
  184. package/.next/standalone/server.js +1 -1
  185. package/dist/cli.mjs +2 -2
  186. package/lib/auth/api-server-client.ts +25 -0
  187. package/package.json +15 -12
  188. package/src/audit/social-proof.ts +34 -0
  189. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07tgnzi._.js +0 -3
  190. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0oeun7z._.js +0 -3
  191. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12pit4m._.js +0 -3
  192. package/.next/standalone/.next/server/chunks/[root-of-the-server]__13ra2jq._.js +0 -3
  193. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1b9z5-i._.js +0 -3
  194. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ixjiy8._.js +0 -3
  195. package/.next/standalone/.next/server/chunks/_1-1804f._.js +0 -3
  196. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00jkjmt._.js +0 -4
  197. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__013du6r._.js +0 -4
  198. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e85wxv._.js +0 -4
  199. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gfxvb1._.js +0 -3
  200. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1hlrq6y._.js +0 -4
  201. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ihxdo5._.js +0 -4
  202. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1vvfde2._.js +0 -4
  203. package/.next/standalone/.next/server/chunks/ssr/node_modules_html2canvas_dist_html2canvas_esm_1k58rb_.js +0 -3
  204. package/.next/standalone/.next/server/chunks/ssr/node_modules_html2canvas_dist_html2canvas_esm_1n-0xws.js +0 -3
  205. package/.next/standalone/.next/static/chunks/09ueq8s1as8xs.css +0 -2
  206. package/.next/standalone/.next/static/chunks/0qassxjx1ef04.js +0 -1
  207. package/.next/standalone/.next/static/chunks/0qxb5czqxe-vu.js +0 -1
  208. package/.next/standalone/.next/static/chunks/1dh06515j265n.js +0 -41
  209. package/.next/standalone/.next/static/chunks/2so39wg7mjbi7.js +0 -1
  210. package/.next/standalone/.next/static/chunks/3gti1qdk5epqn.js +0 -1
  211. package/.next/standalone/.next/static/chunks/3wycox197ouus.css +0 -1
  212. package/.next/standalone/app/audit/_components/findings-section.tsx +0 -135
  213. package/.next/standalone/app/audit/_components/identity-section.tsx +0 -126
  214. package/.next/standalone/app/audit/_components/policies-section.tsx +0 -194
  215. package/.next/standalone/app/audit/_components/return-section.tsx +0 -416
  216. package/.next/standalone/app/audit/_components/score-section.tsx +0 -179
  217. package/.next/standalone/app/audit/_components/share-dock.tsx +0 -265
  218. package/.next/standalone/app/audit/_components/show-off-cta.tsx +0 -135
  219. /package/.next/standalone/.next/static/{CVv2A0hMd24t0c0x3V-W_ → NYPiJP6Rv_exQdSFVS8HP}/_buildManifest.js +0 -0
  220. /package/.next/standalone/.next/static/{CVv2A0hMd24t0c0x3V-W_ → NYPiJP6Rv_exQdSFVS8HP}/_clientMiddlewareManifest.js +0 -0
  221. /package/.next/standalone/.next/static/{CVv2A0hMd24t0c0x3V-W_ → NYPiJP6Rv_exQdSFVS8HP}/_ssgManifest.js +0 -0
@@ -1,12 +1,4 @@
1
- /** Projects page — lists all Claude Agent SDK project folders.
2
- *
3
- * Wrapped in the audit `.report` + `.section` chrome so the page picks up
4
- * the unified design system: mono fonts, section masthead with the ━━
5
- * glyph + green eyebrow label, and the dashed-frame `.panel` around the
6
- * project list when it's populated. The inner ProjectList component is
7
- * unchanged — every Tailwind utility it uses (bg-card, text-foreground,
8
- * border-border, …) now resolves to the audit palette globally.
9
- */
1
+ /** Projects page — lists all Claude Agent SDK project folders. */
10
2
  import { Suspense } from "react";
11
3
  import { notFound } from "next/navigation";
12
4
  import { getCachedProjectFolders } from "@/lib/projects";
@@ -26,17 +18,17 @@ export default async function ProjectsPage() {
26
18
  return (
27
19
  <main className="report">
28
20
  <section className="section" data-screen-label="projects">
29
- <div className="section-mast">
30
- <div className="section-label">
31
- <span className="glyph">━━</span> projects
32
- </div>
33
- <div className="section-meta">
34
- <span className={count > 0 ? "g" : "p"}>●</span>{" "}
35
- {count} {count === 1 ? "folder" : "folders"}
36
- </div>
37
- </div>
38
- <h2 className="section-h" style={{ textTransform: "none" }}>
39
- your agent footprint.
21
+ <h2
22
+ style={{
23
+ fontFamily: "var(--font-mono)",
24
+ fontSize: 24,
25
+ fontWeight: 600,
26
+ letterSpacing: "-0.01em",
27
+ color: "var(--ink)",
28
+ margin: "0 0 24px",
29
+ }}
30
+ >
31
+ Projects
40
32
  </h2>
41
33
 
42
34
  {count === 0 ? (
@@ -54,7 +46,6 @@ export default async function ProjectsPage() {
54
46
  padding: 12,
55
47
  border: "1px solid var(--line-2)",
56
48
  background: "var(--bg)",
57
- boxShadow: "4px 4px 0 0 var(--accent-pink-shadow)",
58
49
  }}
59
50
  >
60
51
  {Array.from({ length: 36 }).map((_, i) => {
@@ -72,7 +63,7 @@ export default async function ProjectsPage() {
72
63
  </div>
73
64
  </div>
74
65
  <p style={{ color: "var(--ink-2)", marginBottom: 8 }}>
75
- no projects found in the <code style={{ color: "var(--accent-pink)" }}>.claude/projects</code> directory.
66
+ No projects found in the <code>.claude/projects</code> directory.
76
67
  </p>
77
68
  <p
78
69
  style={{
@@ -81,7 +72,7 @@ export default async function ProjectsPage() {
81
72
  letterSpacing: "0.05em",
82
73
  }}
83
74
  >
84
- run an agent in any folder and it will show up here.
75
+ Run an agent in any folder and it will show up here.
85
76
  </p>
86
77
  </div>
87
78
  ) : (
@@ -56,7 +56,7 @@
56
56
  .poster {
57
57
  position: relative;
58
58
  background:
59
- repeating-linear-gradient(0deg, rgba(228,88,125,0.03) 0 1px, transparent 1px 16px),
59
+ repeating-linear-gradient(0deg, rgba(228, 88, 124,0.03) 0 1px, transparent 1px 16px),
60
60
  repeating-linear-gradient(90deg, rgba(102,209,181,0.025) 0 1px, transparent 1px 16px),
61
61
  var(--bg-2);
62
62
  border: 1px solid var(--line-2);
@@ -21,10 +21,10 @@
21
21
  --dim: #5e5c58;
22
22
  --line: #25252b;
23
23
  --line-2: #32323a;
24
- --accent-pink: #e4587d;
25
- --accent-pink-soft: rgba(228, 88, 125, 0.7);
24
+ --accent-pink: #e4587c;
25
+ --accent-pink-soft: rgba(228, 88, 124, 0.7);
26
26
  --accent-pink-shadow: #a83a5a;
27
- --accent-pink-bg: rgba(228, 88, 125, 0.12);
27
+ --accent-pink-bg: rgba(228, 88, 124, 0.12);
28
28
  --accent-green: #66d1b5;
29
29
  --accent-green-shadow: #3e9a82;
30
30
  --accent-green-bg: rgba(102, 209, 181, 0.10);
@@ -52,7 +52,7 @@ html, body, #root {
52
52
  body {
53
53
  background-color: var(--bg);
54
54
  background-image:
55
- radial-gradient(ellipse 1200px 800px at 70% -10%, rgba(228, 88, 125, 0.055) 0%, transparent 60%),
55
+ radial-gradient(ellipse 1200px 800px at 70% -10%, rgba(228, 88, 124, 0.055) 0%, transparent 60%),
56
56
  radial-gradient(ellipse 1000px 700px at 0% 100%, rgba(102, 209, 181, 0.04) 0%, transparent 55%),
57
57
  radial-gradient(ellipse 100% 100% at 50% 50%, transparent 50%, rgba(0,0,0,0.45) 100%),
58
58
  linear-gradient(180deg, #16161a 0%, #0f0f12 100%);
@@ -216,7 +216,7 @@ a { color: inherit; text-decoration: none; }
216
216
  position: relative;
217
217
  border: 1px solid var(--line-2);
218
218
  background:
219
- repeating-linear-gradient(0deg, rgba(228,88,125,0.025) 0 1px, transparent 1px 16px),
219
+ repeating-linear-gradient(0deg, rgba(228, 88, 124,0.025) 0 1px, transparent 1px 16px),
220
220
  repeating-linear-gradient(90deg, rgba(102,209,181,0.025) 0 1px, transparent 1px 16px),
221
221
  var(--bg-2);
222
222
  padding: 56px 56px 48px;
@@ -805,8 +805,8 @@ a { color: inherit; text-decoration: none; }
805
805
  padding: 28px 32px;
806
806
  border: 1px solid var(--line-2);
807
807
  background:
808
- repeating-linear-gradient(0deg, rgba(228,88,125,0.025) 0 1px, transparent 1px 16px),
809
- repeating-linear-gradient(90deg, rgba(228,88,125,0.025) 0 1px, transparent 1px 16px),
808
+ repeating-linear-gradient(0deg, rgba(228, 88, 124,0.025) 0 1px, transparent 1px 16px),
809
+ repeating-linear-gradient(90deg, rgba(228, 88, 124,0.025) 0 1px, transparent 1px 16px),
810
810
  var(--bg-2);
811
811
  color: var(--ink);
812
812
  text-decoration: none;
@@ -816,8 +816,8 @@ a { color: inherit; text-decoration: none; }
816
816
  .showoff-cta:hover {
817
817
  border-color: var(--ink-2);
818
818
  background:
819
- repeating-linear-gradient(0deg, rgba(228,88,125,0.04) 0 1px, transparent 1px 16px),
820
- repeating-linear-gradient(90deg, rgba(228,88,125,0.04) 0 1px, transparent 1px 16px),
819
+ repeating-linear-gradient(0deg, rgba(228, 88, 124,0.04) 0 1px, transparent 1px 16px),
820
+ repeating-linear-gradient(90deg, rgba(228, 88, 124,0.04) 0 1px, transparent 1px 16px),
821
821
  var(--bg-3);
822
822
  }
823
823
  .showoff-cta::before {
@@ -995,8 +995,8 @@ a { color: inherit; text-decoration: none; }
995
995
  .share-card {
996
996
  border: 1px solid var(--accent-pink);
997
997
  background:
998
- repeating-linear-gradient(0deg, rgba(228,88,125,0.02) 0 1px, transparent 1px 16px),
999
- repeating-linear-gradient(90deg, rgba(228,88,125,0.02) 0 1px, transparent 1px 16px),
998
+ repeating-linear-gradient(0deg, rgba(228, 88, 124,0.02) 0 1px, transparent 1px 16px),
999
+ repeating-linear-gradient(90deg, rgba(228, 88, 124,0.02) 0 1px, transparent 1px 16px),
1000
1000
  var(--bg-2);
1001
1001
  padding: 32px;
1002
1002
  position: relative;
@@ -16,9 +16,9 @@ import { RefreshButton } from "@/app/components/refresh-button";
16
16
  import { usePostHog } from "@/contexts/PostHogContext";
17
17
 
18
18
  const NAV_LINKS = [
19
+ { href: "/projects", label: "projects" },
19
20
  { href: "/policies", label: "policies" },
20
21
  { href: "/audit", label: "audit" },
21
- { href: "/projects", label: "projects" },
22
22
  ];
23
23
 
24
24
  const REMOTE_LOGO_URL =
@@ -51,11 +51,7 @@ const useBrandLogo = (): string => {
51
51
 
52
52
  export const Navbar: React.FC<{
53
53
  disabledPages?: string[];
54
- /** Total slipping-through actions from the latest cached audit. When > 0
55
- * a small chip is rendered next to the Audit nav link. Undefined → no
56
- * chip (no cache yet, or audit disabled). */
57
- auditSlippingCount?: number;
58
- }> = ({ disabledPages = [], auditSlippingCount }) => {
54
+ }> = ({ disabledPages = [] }) => {
59
55
  const pathname = usePathname();
60
56
  const { capture } = usePostHog();
61
57
  const logoSrc = useBrandLogo();
@@ -90,10 +86,6 @@ export const Navbar: React.FC<{
90
86
  const active = href === "/projects"
91
87
  ? pathname === "/projects" || pathname.startsWith("/project/")
92
88
  : pathname.startsWith(href);
93
- const showAuditBadge =
94
- href === "/audit"
95
- && typeof auditSlippingCount === "number"
96
- && auditSlippingCount > 0;
97
89
  return (
98
90
  <Link
99
91
  key={href}
@@ -105,37 +97,10 @@ export const Navbar: React.FC<{
105
97
  capture("audit_nav_clicked", {
106
98
  from_path: pathname,
107
99
  is_active_tab: active,
108
- has_badge: showAuditBadge,
109
- slipping_count: typeof auditSlippingCount === "number" ? auditSlippingCount : null,
110
100
  });
111
101
  }}
112
102
  >
113
- <span style={{ color: "var(--dim)", letterSpacing: "-2px", marginRight: 2 }}>━━</span>
114
103
  {label}
115
- {showAuditBadge && (
116
- <span
117
- role="status"
118
- style={{
119
- display: "inline-flex",
120
- alignItems: "center",
121
- justifyContent: "center",
122
- minWidth: "1.4rem",
123
- height: "1rem",
124
- padding: "0 6px",
125
- fontFamily: "var(--font-mono)",
126
- fontSize: 10,
127
- letterSpacing: "0.05em",
128
- background: "var(--amber-bg)",
129
- color: "var(--amber)",
130
- border: "1px solid var(--amber)",
131
- marginLeft: 2,
132
- }}
133
- aria-label={`${auditSlippingCount} action${auditSlippingCount === 1 ? "" : "s"} slipping through your policies`}
134
- title={`${auditSlippingCount} slipping through`}
135
- >
136
- {auditSlippingCount}
137
- </span>
138
- )}
139
104
  </Link>
140
105
  );
141
106
  })}
@@ -239,6 +239,31 @@ export async function cancelReminder(accessToken: string): Promise<void> {
239
239
  throw await parseError(res);
240
240
  }
241
241
 
242
+ export interface InviteSendResult {
243
+ /** Recipients that were dispatched successfully. */
244
+ sent: string[];
245
+ /** Recipients that failed (bad address, bounce, rate-limit, etc.). */
246
+ failed: string[];
247
+ }
248
+
249
+ /**
250
+ * Send invite emails to a batch of friends. The api-server pulls the sender's
251
+ * email from the access-token claims and Cc's them on every outbound message
252
+ * so the recipient sees who invited them.
253
+ *
254
+ * Contract is handed over to the platform team separately.
255
+ */
256
+ export async function sendInvites(
257
+ accessToken: string,
258
+ to: string[],
259
+ ): Promise<InviteSendResult> {
260
+ return postJson<InviteSendResult>(
261
+ "/v0/invite",
262
+ { to },
263
+ { accessToken },
264
+ );
265
+ }
266
+
242
267
  interface JwtClaims {
243
268
  sub: string;
244
269
  email: string;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next/env",
3
- "version": "16.2.7",
3
+ "version": "16.2.9",
4
4
  "keywords": [
5
5
  "react",
6
6
  "next",
@@ -33,4 +33,4 @@
33
33
  "dotenv": "16.3.1",
34
34
  "dotenv-expand": "10.0.0"
35
35
  }
36
- }
36
+ }
@@ -134,7 +134,7 @@ var HmrTarget = /*#__PURE__*/ function(HmrTarget) {
134
134
  HmrTarget["Server"] = "server";
135
135
  return HmrTarget;
136
136
  }({});
137
- const nextVersion = "16.2.7";
137
+ const nextVersion = "16.2.9";
138
138
  const ArchName = (0, _os.arch)();
139
139
  const PlatformName = (0, _os.platform)();
140
140
  function infoLog(...args) {