@jlongo78/agent-spaces 0.7.7 → 0.8.0

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 (797) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +6 -0
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/required-server-files.json +19 -19
  6. package/.next/standalone/.next/routes-manifest.json +38 -0
  7. package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(desktop)/admin/users/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(desktop)/cortex/page/react-loadable-manifest.json +1 -1
  11. package/.next/standalone/.next/server/app/(desktop)/cortex/page.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/(desktop)/cortex/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(desktop)/network/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/(desktop)/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(desktop)/projects/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(desktop)/sessions/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(desktop)/settings/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/(desktop)/terminal/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/(desktop)/terminal/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  28. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  29. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  30. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  31. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  32. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  33. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  36. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  37. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  38. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  40. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  41. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  42. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  43. package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
  44. package/.next/standalone/.next/server/app/admin/analytics.rsc +6 -7
  45. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +2 -2
  46. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
  47. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  48. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  49. package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +6 -7
  50. package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
  51. package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
  52. package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +2 -2
  53. package/.next/standalone/.next/server/app/admin/users.html +1 -1
  54. package/.next/standalone/.next/server/app/admin/users.rsc +2 -2
  55. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  58. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  59. package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +2 -2
  60. package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
  61. package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
  62. package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +2 -2
  63. package/.next/standalone/.next/server/app/analytics.html +1 -1
  64. package/.next/standalone/.next/server/app/analytics.rsc +3 -3
  65. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +2 -2
  66. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
  67. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  68. package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +3 -3
  69. package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
  70. package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
  71. package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  72. package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/benchmark/lobes/route/app-paths-manifest.json +3 -0
  74. package/.next/standalone/.next/server/app/api/benchmark/lobes/route/build-manifest.json +11 -0
  75. package/.next/standalone/.next/server/app/api/benchmark/lobes/route/server-reference-manifest.json +4 -0
  76. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js +7 -0
  77. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.map +5 -0
  78. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.nft.json +1 -0
  79. package/.next/standalone/.next/server/app/api/benchmark/lobes/route_client-reference-manifest.js +2 -0
  80. package/.next/standalone/.next/server/app/api/benchmark/run/route/app-paths-manifest.json +3 -0
  81. package/.next/standalone/.next/server/app/api/benchmark/run/route/build-manifest.json +11 -0
  82. package/.next/standalone/.next/server/app/api/benchmark/run/route/server-reference-manifest.json +4 -0
  83. package/.next/standalone/.next/server/app/api/benchmark/run/route.js +7 -0
  84. package/.next/standalone/.next/server/app/api/benchmark/run/route.js.map +5 -0
  85. package/.next/standalone/.next/server/app/api/benchmark/run/route.js.nft.json +1 -0
  86. package/.next/standalone/.next/server/app/api/benchmark/run/route_client-reference-manifest.js +2 -0
  87. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route/app-paths-manifest.json +3 -0
  88. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route/build-manifest.json +11 -0
  89. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route/server-reference-manifest.json +4 -0
  90. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js +7 -0
  91. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.map +5 -0
  92. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.nft.json +1 -0
  93. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route_client-reference-manifest.js +2 -0
  94. package/.next/standalone/.next/server/app/api/benchmark/runs/route/app-paths-manifest.json +3 -0
  95. package/.next/standalone/.next/server/app/api/benchmark/runs/route/build-manifest.json +11 -0
  96. package/.next/standalone/.next/server/app/api/benchmark/runs/route/server-reference-manifest.json +4 -0
  97. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js +7 -0
  98. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.map +5 -0
  99. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.nft.json +1 -0
  100. package/.next/standalone/.next/server/app/api/benchmark/runs/route_client-reference-manifest.js +2 -0
  101. package/.next/standalone/.next/server/app/api/benchmark/status/route/app-paths-manifest.json +3 -0
  102. package/.next/standalone/.next/server/app/api/benchmark/status/route/build-manifest.json +11 -0
  103. package/.next/standalone/.next/server/app/api/benchmark/status/route/server-reference-manifest.json +4 -0
  104. package/.next/standalone/.next/server/app/api/benchmark/status/route.js +7 -0
  105. package/.next/standalone/.next/server/app/api/benchmark/status/route.js.map +5 -0
  106. package/.next/standalone/.next/server/app/api/benchmark/status/route.js.nft.json +1 -0
  107. package/.next/standalone/.next/server/app/api/benchmark/status/route_client-reference-manifest.js +2 -0
  108. package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/api/cortex/context/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/cortex/export/route.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js.nft.json +1 -1
  123. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js.nft.json +1 -1
  125. package/.next/standalone/.next/server/app/api/cortex/import/route.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js.nft.json +1 -1
  127. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js.nft.json +1 -1
  129. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js.nft.json +1 -1
  131. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js.nft.json +1 -1
  133. package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js.nft.json +1 -1
  134. package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js.nft.json +1 -1
  137. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/cortex/search/route.js.nft.json +1 -1
  139. package/.next/standalone/.next/server/app/api/cortex/settings/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/cortex/status/route.js.nft.json +1 -1
  141. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/cortex/usage/route.js.nft.json +1 -1
  143. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  145. package/.next/standalone/.next/server/app/api/files/route.js +1 -1
  146. package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  147. package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
  149. package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
  152. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
  155. package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
  161. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
  165. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/api/whisper/route/app-paths-manifest.json +3 -0
  168. package/.next/standalone/.next/server/app/api/whisper/route/build-manifest.json +11 -0
  169. package/.next/standalone/.next/server/app/api/whisper/route/server-reference-manifest.json +4 -0
  170. package/.next/standalone/.next/server/app/api/whisper/route.js +7 -0
  171. package/.next/standalone/.next/server/app/api/whisper/route.js.map +5 -0
  172. package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -0
  173. package/.next/standalone/.next/server/app/api/whisper/route_client-reference-manifest.js +2 -0
  174. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
  177. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
  179. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
  180. package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/cortex.html +1 -1
  182. package/.next/standalone/.next/server/app/cortex.rsc +3 -3
  183. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +2 -2
  184. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex.segment.rsc +1 -1
  185. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  186. package/.next/standalone/.next/server/app/cortex.segments/_full.segment.rsc +3 -3
  187. package/.next/standalone/.next/server/app/cortex.segments/_head.segment.rsc +1 -1
  188. package/.next/standalone/.next/server/app/cortex.segments/_index.segment.rsc +2 -2
  189. package/.next/standalone/.next/server/app/cortex.segments/_tree.segment.rsc +2 -2
  190. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/login.html +1 -1
  192. package/.next/standalone/.next/server/app/login.rsc +2 -2
  193. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
  194. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  195. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
  196. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  197. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  198. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  199. package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/m/projects.html +1 -1
  202. package/.next/standalone/.next/server/app/m/projects.rsc +2 -2
  203. package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
  204. package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
  205. package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
  206. package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +2 -2
  207. package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
  208. package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
  209. package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +1 -1
  210. package/.next/standalone/.next/server/app/m/sessions/[id]/page.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/app/m/sessions.html +1 -1
  214. package/.next/standalone/.next/server/app/m/sessions.rsc +2 -2
  215. package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
  216. package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
  217. package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
  218. package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +2 -2
  219. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
  220. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
  221. package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +1 -1
  222. package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
  223. package/.next/standalone/.next/server/app/m/settings.html +1 -1
  224. package/.next/standalone/.next/server/app/m/settings.rsc +2 -2
  225. package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
  226. package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
  227. package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
  228. package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +2 -2
  229. package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
  230. package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
  231. package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +1 -1
  232. package/.next/standalone/.next/server/app/m/terminal/page.js.nft.json +1 -1
  233. package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
  234. package/.next/standalone/.next/server/app/m/terminal.html +1 -1
  235. package/.next/standalone/.next/server/app/m/terminal.rsc +3 -3
  236. package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +3 -3
  237. package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
  238. package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
  239. package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +2 -2
  240. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +2 -2
  241. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
  242. package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +1 -1
  243. package/.next/standalone/.next/server/app/m.html +1 -1
  244. package/.next/standalone/.next/server/app/m.rsc +2 -2
  245. package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
  246. package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
  247. package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
  248. package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +2 -2
  249. package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
  250. package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
  251. package/.next/standalone/.next/server/app/network.html +1 -1
  252. package/.next/standalone/.next/server/app/network.rsc +2 -2
  253. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
  254. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
  255. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  256. package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +2 -2
  257. package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
  258. package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
  259. package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +2 -2
  260. package/.next/standalone/.next/server/app/projects.html +1 -1
  261. package/.next/standalone/.next/server/app/projects.rsc +2 -2
  262. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
  263. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
  264. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  265. package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  266. package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  267. package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  268. package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  269. package/.next/standalone/.next/server/app/sessions.html +1 -1
  270. package/.next/standalone/.next/server/app/sessions.rsc +2 -2
  271. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
  272. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
  273. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  274. package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +2 -2
  275. package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  276. package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
  277. package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
  278. package/.next/standalone/.next/server/app/settings.html +1 -1
  279. package/.next/standalone/.next/server/app/settings.rsc +2 -2
  280. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
  281. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
  282. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  283. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  284. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  285. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  286. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  287. package/.next/standalone/.next/server/app/terminal.html +1 -1
  288. package/.next/standalone/.next/server/app/terminal.rsc +3 -3
  289. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +2 -2
  290. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
  291. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  292. package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +3 -3
  293. package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
  294. package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
  295. package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +2 -2
  296. package/.next/standalone/.next/server/app/vr/page/react-loadable-manifest.json +1 -1
  297. package/.next/standalone/.next/server/app/vr/page_client-reference-manifest.js +1 -1
  298. package/.next/standalone/.next/server/app/vr.html +1 -1
  299. package/.next/standalone/.next/server/app/vr.rsc +3 -3
  300. package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +3 -3
  301. package/.next/standalone/.next/server/app/vr.segments/_head.segment.rsc +1 -1
  302. package/.next/standalone/.next/server/app/vr.segments/_index.segment.rsc +2 -2
  303. package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +2 -2
  304. package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +2 -2
  305. package/.next/standalone/.next/server/app/vr.segments/vr.segment.rsc +1 -1
  306. package/.next/standalone/.next/server/app/workspaces.html +1 -1
  307. package/.next/standalone/.next/server/app/workspaces.rsc +2 -2
  308. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
  309. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
  310. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  311. package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +2 -2
  312. package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
  313. package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
  314. package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
  315. package/.next/standalone/.next/server/app-paths-manifest.json +6 -0
  316. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0041efe4._.js +2 -2
  317. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00bf0ace._.js +2 -2
  318. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0a837dd9._.js +98 -0
  319. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e71d908._.js +3 -3
  320. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e9142f3._.js +2 -2
  321. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10e47926._.js +1 -1
  322. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1665dc78._.js +2 -2
  323. package/.next/standalone/.next/server/chunks/[root-of-the-server]__175cbabf._.js +2 -2
  324. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1adae357._.js +2 -2
  325. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1d359752._.js +2 -2
  326. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1e8fabeb._.js +2 -2
  327. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f8deca0._.js +8 -8
  328. package/.next/standalone/.next/server/chunks/[root-of-the-server]__253fdda1._.js +2 -2
  329. package/.next/standalone/.next/server/chunks/[root-of-the-server]__28e6434f._.js +2 -2
  330. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2a386564._.js +3 -3
  331. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2c20fb38._.js +2 -2
  332. package/.next/standalone/.next/server/chunks/[root-of-the-server]__309132cd._.js +1 -1
  333. package/.next/standalone/.next/server/chunks/[root-of-the-server]__33fec964._.js +3 -3
  334. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3786d8ae._.js +1 -1
  335. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3ae92407._.js +2 -2
  336. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3beda9fe._.js +2 -2
  337. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4619e9bd._.js +1 -1
  338. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4a051043._.js +1 -1
  339. package/.next/standalone/.next/server/chunks/[root-of-the-server]__508002e4._.js +2 -2
  340. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5086c373._.js +2 -2
  341. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5913e097._.js +2 -2
  342. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5b5f68d2._.js +2 -2
  343. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c1f2459._.js +2 -2
  344. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5ec8c977._.js +2 -2
  345. package/.next/standalone/.next/server/chunks/[root-of-the-server]__63cebc6c._.js +2 -2
  346. package/.next/standalone/.next/server/chunks/[root-of-the-server]__64d30d4d._.js +2 -2
  347. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6c54fc2e._.js +2 -2
  348. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6dc1fb7e._.js +1 -1
  349. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6e568102._.js +2 -2
  350. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6faa04c0._.js +2 -2
  351. package/.next/standalone/.next/server/chunks/[root-of-the-server]__74a34dc3._.js +2 -2
  352. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7819e4cf._.js +98 -0
  353. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7e7250a4._.js +2 -2
  354. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8309e0a4._.js +2 -2
  355. package/.next/standalone/.next/server/chunks/[root-of-the-server]__86cc0e2b._.js +6 -6
  356. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89c2565a._.js +2 -2
  357. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8d178ad9._.js +2 -2
  358. package/.next/standalone/.next/server/chunks/[root-of-the-server]__93ee06f3._.js +2 -2
  359. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e1f0137._.js +98 -0
  360. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e4c154a._.js +2 -2
  361. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9d2e1d3._.js +2 -2
  362. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ae53d343._.js +2 -2
  363. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b3a04cef._.js +2 -2
  364. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b4270b77._.js +1 -1
  365. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b6b6ce60._.js +3 -3
  366. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0757773._.js +98 -0
  367. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c24cfa91._.js +3 -0
  368. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__eb8acb65._.js → [root-of-the-server]__c7c47529._.js} +2 -2
  369. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c88b63f7._.js +2 -2
  370. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cba5f007._.js +1 -1
  371. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cbf4ceb0._.js +2 -2
  372. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cefdba2f._.js +2 -2
  373. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf9e82bb._.js +2 -2
  374. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d2897392._.js +2 -2
  375. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d3b2d856._.js +2 -2
  376. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d73273ca._.js +2 -2
  377. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d8417eb6._.js +2 -2
  378. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dc2a55de._.js +2 -2
  379. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e0d4690b._.js +2 -2
  380. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3ea8547._.js +98 -0
  381. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e678dd53._.js +1 -1
  382. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e9223f55._.js +2 -2
  383. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ea630076._.js +2 -2
  384. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f26ca49d._.js +1 -1
  385. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f33e1101._.js +1 -1
  386. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f515f865._.js +2 -2
  387. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fceb5d60._.js +2 -2
  388. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fed41403._.js +2 -2
  389. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ff2e98c2._.js +2 -2
  390. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_lobes_route_actions_ea7beadb.js +3 -0
  391. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_run_route_actions_9ed0ba41.js +3 -0
  392. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_runs_[id]_route_actions_39f90307.js +3 -0
  393. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_runs_route_actions_37cf958b.js +3 -0
  394. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_status_route_actions_009e2cba.js +3 -0
  395. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_whisper_route_actions_be9a633d.js +3 -0
  396. package/.next/standalone/.next/server/chunks/ssr/{_c1cfdd09._.js → [root-of-the-server]__16621ac5._.js} +2 -2
  397. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
  398. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__9c81bd86._.js +3 -0
  399. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e3bf6054._.js +5 -0
  400. package/.next/standalone/.next/server/chunks/ssr/{_81abf587._.js → _31ada310._.js} +2 -2
  401. package/.next/standalone/.next/server/chunks/ssr/_648a8a2d._.js +3 -0
  402. package/.next/standalone/.next/server/chunks/ssr/_999dae61._.js +3 -0
  403. package/.next/standalone/.next/server/chunks/ssr/_c48c91e5._.js +3 -0
  404. package/.next/standalone/.next/server/chunks/ssr/_f8959434._.js +3 -0
  405. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_cortex_page_tsx_0f33d8b3._.js +1 -1
  406. package/.next/standalone/.next/server/chunks/ssr/src_components_terminal_terminal-pane_tsx_803c5e2c._.js +9 -0
  407. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__32a0045c._.js +1 -1
  408. package/.next/standalone/.next/server/edge/chunks/_d73df637._.js +1 -1
  409. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  410. package/.next/standalone/.next/server/pages/404.html +1 -1
  411. package/.next/standalone/.next/server/pages/500.html +2 -2
  412. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  413. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  414. package/.next/standalone/.next/static/chunks/157826a3253f8ccf.js +7 -0
  415. package/.next/standalone/.next/static/chunks/{69606d281c39f9b2.js → 2f9f09924ff9d447.js} +1 -1
  416. package/.next/standalone/.next/static/chunks/{84fe8d44deeeb74f.js → 4ced66ef12d91b38.js} +35 -12
  417. package/.next/standalone/.next/static/chunks/57d04d161b8a01b3.js +7 -0
  418. package/.next/standalone/.next/static/chunks/709c4608e5b935e8.js +1 -0
  419. package/.next/standalone/.next/static/chunks/{9cfa0291d55d8d2a.js → 7b14d4e609b55b9b.js} +1 -1
  420. package/.next/standalone/.next/static/chunks/7be37f4a56b8f575.js +1 -0
  421. package/.next/standalone/.next/static/chunks/8021d5a2269ff113.js +1 -0
  422. package/.next/standalone/.next/static/chunks/a3fd93a9dde3cacc.js +1 -0
  423. package/.next/standalone/.next/static/chunks/{412140a02893327a.js → afee31c7399daf2a.js} +1 -1
  424. package/.next/standalone/.next/static/chunks/b92fdbf858aeb0b3.js +1 -0
  425. package/.next/standalone/.next/static/chunks/c17274c2f95d4ba2.js +5 -0
  426. package/.next/standalone/.next/static/chunks/e82f4414650587cf.js +7 -0
  427. package/.next/standalone/.next/static/chunks/f6464729e7aa0da0.css +3 -0
  428. package/.next/standalone/LICENSE +661 -0
  429. package/.next/standalone/NOTICE +5 -0
  430. package/.next/standalone/README.md +131 -0
  431. package/.next/standalone/bin/cortex-hook.sh +62 -62
  432. package/.next/standalone/bin/cortex-mcp.js +60 -60
  433. package/.next/standalone/bin/fix-standalone-externals.js +79 -0
  434. package/.next/standalone/bin/lib/auto-setup.js +110 -0
  435. package/.next/standalone/bin/mdns-service.js +171 -0
  436. package/.next/standalone/bin/postinstall.js +35 -0
  437. package/.next/standalone/bin/setup-admin.js +195 -0
  438. package/.next/standalone/bin/spaces-dev.js +247 -0
  439. package/.next/standalone/bin/spaces-install.js +638 -0
  440. package/.next/standalone/bin/spaces-reset-totp.js +50 -0
  441. package/.next/standalone/bin/spaces-service.js +1020 -0
  442. package/.next/standalone/bin/spaces-setup.js +253 -0
  443. package/.next/standalone/bin/spaces.js +788 -0
  444. package/.next/standalone/bin/ssh-auth-keys.sh +68 -0
  445. package/.next/standalone/bin/terminal-server.js +1807 -0
  446. package/.next/standalone/docker-compose.yml +28 -0
  447. package/.next/standalone/docs/architecture.md +387 -0
  448. package/.next/standalone/docs/cortex.md +293 -0
  449. package/.next/standalone/docs/getting-started.md +96 -0
  450. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-design.md +133 -0
  451. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-plan.md +959 -0
  452. package/.next/standalone/docs/plans/2026-03-07-service-command-design.md +146 -0
  453. package/.next/standalone/docs/plans/2026-03-07-service-command-plan.md +254 -0
  454. package/.next/standalone/docs/server-install.md +564 -0
  455. package/.next/standalone/docs/social-card.html +150 -0
  456. package/.next/standalone/docs/superpowers/plans/2026-03-12-spaces-cortex.md +5270 -0
  457. package/.next/standalone/docs/superpowers/plans/2026-03-13-cortex-wiring.md +1387 -1387
  458. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-entity-graph.md +1923 -1923
  459. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-knowledge-evolution.md +1113 -1113
  460. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-boundary-engine.md +853 -853
  461. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-context-engine.md +1274 -1274
  462. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-signal-ingestion.md +933 -933
  463. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-lobes.md +1080 -1080
  464. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-gravity-system.md +768 -768
  465. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-ui.md +1108 -1108
  466. package/.next/standalone/docs/superpowers/plans/2026-03-18-cortex-ui-integration.md +1846 -1846
  467. package/.next/standalone/docs/superpowers/plans/2026-03-19-vr-phase1-shell.md +1639 -0
  468. package/.next/standalone/docs/superpowers/specs/2026-03-11-universe-view-design.md +320 -0
  469. package/.next/standalone/docs/superpowers/specs/2026-03-12-spaces-brain-design.md +720 -0
  470. package/.next/standalone/docs/superpowers/specs/2026-03-13-cortex-wiring-design.md +268 -268
  471. package/.next/standalone/docs/superpowers/specs/2026-03-14-cortex-v2-design.md +623 -623
  472. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-lobes-design.md +263 -263
  473. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-v2-ui-design.md +240 -240
  474. package/.next/standalone/docs/superpowers/specs/2026-03-16-pane-ux-design.md +77 -0
  475. package/.next/standalone/docs/superpowers/specs/2026-03-18-cortex-ui-integration-design.md +341 -341
  476. package/.next/standalone/docs/superpowers/specs/2026-03-19-vr-phase1-shell-design.md +288 -0
  477. package/.next/standalone/docs/tiers.md +104 -0
  478. package/.next/standalone/eslint.config.mjs +18 -0
  479. package/.next/standalone/next.config.ts +20 -0
  480. package/.next/standalone/nginx.conf +53 -0
  481. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/README.md +46 -0
  482. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  483. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +1 -0
  484. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  485. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +42 -0
  486. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +46 -0
  487. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  488. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
  489. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  490. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
  491. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
  492. package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  493. package/.next/standalone/node_modules/@img/{sharp-win32-x64 → sharp-linux-x64}/package.json +46 -39
  494. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  495. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
  496. package/.next/standalone/package-lock.json +14154 -0
  497. package/.next/standalone/package.json +104 -104
  498. package/.next/standalone/postcss.config.mjs +7 -0
  499. package/.next/standalone/scripts/rebuild.cmd +65 -0
  500. package/.next/standalone/scripts/rebuild.sh +59 -0
  501. package/.next/standalone/server.js +1 -1
  502. package/.next/standalone/src/app/(desktop)/admin/analytics/page.tsx +266 -0
  503. package/.next/standalone/src/app/(desktop)/admin/users/page.tsx +399 -0
  504. package/.next/standalone/src/app/(desktop)/analytics/page.tsx +166 -0
  505. package/.next/standalone/src/app/(desktop)/cortex/page.tsx +81 -78
  506. package/.next/standalone/src/app/(desktop)/dashboard-client.tsx +56 -0
  507. package/.next/standalone/src/app/(desktop)/layout.tsx +18 -0
  508. package/.next/standalone/src/app/(desktop)/network/page.tsx +137 -0
  509. package/.next/standalone/src/app/(desktop)/page.tsx +17 -0
  510. package/.next/standalone/src/app/(desktop)/projects/page.tsx +68 -0
  511. package/.next/standalone/src/app/(desktop)/sessions/[id]/page.tsx +519 -0
  512. package/.next/standalone/src/app/(desktop)/sessions/page.tsx +145 -0
  513. package/.next/standalone/src/app/(desktop)/settings/page.tsx +446 -0
  514. package/.next/standalone/src/app/(desktop)/terminal/layout.tsx +7 -0
  515. package/.next/standalone/src/app/(desktop)/terminal/page.tsx +1151 -0
  516. package/.next/standalone/src/app/(desktop)/terminal/pane/[id]/page.tsx +211 -0
  517. package/.next/standalone/src/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page.tsx +192 -0
  518. package/.next/standalone/src/app/(desktop)/workspaces/page.tsx +12 -0
  519. package/.next/standalone/src/app/api/admin/analytics/route.ts +10 -0
  520. package/.next/standalone/src/app/api/admin/users/[id]/route.ts +20 -0
  521. package/.next/standalone/src/app/api/admin/users/route.ts +15 -0
  522. package/.next/standalone/src/app/api/analytics/overview/route.ts +80 -0
  523. package/.next/standalone/src/app/api/auth/login/route.ts +10 -0
  524. package/.next/standalone/src/app/api/auth/logout/route.ts +9 -0
  525. package/.next/standalone/src/app/api/auth/me/route.ts +22 -0
  526. package/.next/standalone/src/app/api/auth/totp/setup/route.ts +10 -0
  527. package/.next/standalone/src/app/api/auth/totp/status/route.ts +10 -0
  528. package/.next/standalone/src/app/api/auth/totp/verify/route.ts +10 -0
  529. package/.next/standalone/src/app/api/benchmark/lobes/route.ts +16 -0
  530. package/.next/standalone/src/app/api/benchmark/run/route.ts +92 -0
  531. package/.next/standalone/src/app/api/benchmark/runs/[id]/route.ts +26 -0
  532. package/.next/standalone/src/app/api/benchmark/runs/route.ts +16 -0
  533. package/.next/standalone/src/app/api/benchmark/status/route.ts +35 -0
  534. package/.next/standalone/src/app/api/bulk/route.ts +34 -0
  535. package/.next/standalone/src/app/api/chat/route.ts +85 -0
  536. package/.next/standalone/src/app/api/config/route.ts +30 -0
  537. package/.next/standalone/src/app/api/cortex/context/route.ts +78 -78
  538. package/.next/standalone/src/app/api/cortex/curation/assess/route.ts +27 -27
  539. package/.next/standalone/src/app/api/cortex/curation/publish/route.ts +23 -23
  540. package/.next/standalone/src/app/api/cortex/curation/refine/route.ts +23 -23
  541. package/.next/standalone/src/app/api/cortex/curation/review/route.ts +29 -29
  542. package/.next/standalone/src/app/api/cortex/curation/seed/route.ts +23 -23
  543. package/.next/standalone/src/app/api/cortex/export/route.ts +40 -40
  544. package/.next/standalone/src/app/api/cortex/federation/pending/route.ts +20 -20
  545. package/.next/standalone/src/app/api/cortex/federation/resolve/route.ts +43 -43
  546. package/.next/standalone/src/app/api/cortex/federation/search/route.ts +35 -35
  547. package/.next/standalone/src/app/api/cortex/federation/teach/route.ts +76 -76
  548. package/.next/standalone/src/app/api/cortex/graph/edges/route.ts +112 -112
  549. package/.next/standalone/src/app/api/cortex/graph/entities/[id]/route.ts +73 -73
  550. package/.next/standalone/src/app/api/cortex/graph/entities/route.ts +75 -75
  551. package/.next/standalone/src/app/api/cortex/graph/populate/route.ts +203 -203
  552. package/.next/standalone/src/app/api/cortex/import/route.ts +75 -75
  553. package/.next/standalone/src/app/api/cortex/import/status/route.ts +15 -15
  554. package/.next/standalone/src/app/api/cortex/ingest/bootstrap/route.ts +29 -29
  555. package/.next/standalone/src/app/api/cortex/ingest/status/route.ts +15 -15
  556. package/.next/standalone/src/app/api/cortex/knowledge/[id]/route.ts +91 -91
  557. package/.next/standalone/src/app/api/cortex/knowledge/route.ts +93 -93
  558. package/.next/standalone/src/app/api/cortex/lobes/[id]/route.ts +67 -67
  559. package/.next/standalone/src/app/api/cortex/lobes/route.ts +22 -22
  560. package/.next/standalone/src/app/api/cortex/lobes/share/route.ts +80 -80
  561. package/.next/standalone/src/app/api/cortex/marketplace/browse/route.ts +43 -43
  562. package/.next/standalone/src/app/api/cortex/marketplace/preview/route.ts +46 -46
  563. package/.next/standalone/src/app/api/cortex/mcp/call/route.ts +11 -11
  564. package/.next/standalone/src/app/api/cortex/mcp/tools/route.ts +6 -6
  565. package/.next/standalone/src/app/api/cortex/search/route.ts +43 -43
  566. package/.next/standalone/src/app/api/cortex/settings/route.ts +33 -33
  567. package/.next/standalone/src/app/api/cortex/status/route.ts +169 -169
  568. package/.next/standalone/src/app/api/cortex/timeline/route.ts +42 -42
  569. package/.next/standalone/src/app/api/cortex/usage/route.ts +31 -31
  570. package/.next/standalone/src/app/api/cortex/workspace/[id]/context/route.ts +41 -41
  571. package/.next/standalone/src/app/api/events/route.ts +40 -0
  572. package/.next/standalone/src/app/api/files/route.ts +187 -0
  573. package/.next/standalone/src/app/api/folders/route.ts +97 -0
  574. package/.next/standalone/src/app/api/network/connect-callback/route.ts +11 -0
  575. package/.next/standalone/src/app/api/network/connect-request/[id]/route.ts +11 -0
  576. package/.next/standalone/src/app/api/network/connect-request/route.ts +17 -0
  577. package/.next/standalone/src/app/api/network/discovered/route.ts +9 -0
  578. package/.next/standalone/src/app/api/network/handshake/route.ts +25 -0
  579. package/.next/standalone/src/app/api/network/health/route.ts +10 -0
  580. package/.next/standalone/src/app/api/network/identity/route.ts +15 -0
  581. package/.next/standalone/src/app/api/network/keys/[id]/route.ts +10 -0
  582. package/.next/standalone/src/app/api/network/keys/route.ts +15 -0
  583. package/.next/standalone/src/app/api/network/nodes/[id]/route.ts +15 -0
  584. package/.next/standalone/src/app/api/network/nodes/check/route.ts +9 -0
  585. package/.next/standalone/src/app/api/network/nodes/route.ts +15 -0
  586. package/.next/standalone/src/app/api/network/projects/route.ts +25 -0
  587. package/.next/standalone/src/app/api/network/proxy/[nodeId]/[...path]/route.ts +15 -0
  588. package/.next/standalone/src/app/api/network/search/route.ts +38 -0
  589. package/.next/standalone/src/app/api/network/sessions/[id]/messages/route.ts +36 -0
  590. package/.next/standalone/src/app/api/network/sessions/[id]/route.ts +34 -0
  591. package/.next/standalone/src/app/api/network/sessions/route.ts +43 -0
  592. package/.next/standalone/src/app/api/network/terminal/token/route.ts +10 -0
  593. package/.next/standalone/src/app/api/network/workspaces/[id]/route.ts +34 -0
  594. package/.next/standalone/src/app/api/network/workspaces/route.ts +61 -0
  595. package/.next/standalone/src/app/api/panes/[id]/route.ts +60 -0
  596. package/.next/standalone/src/app/api/panes/route.ts +39 -0
  597. package/.next/standalone/src/app/api/projects/route.ts +13 -0
  598. package/.next/standalone/src/app/api/search/route.ts +47 -0
  599. package/.next/standalone/src/app/api/sessions/[id]/chat/route.ts +120 -0
  600. package/.next/standalone/src/app/api/sessions/[id]/messages/route.ts +28 -0
  601. package/.next/standalone/src/app/api/sessions/[id]/route.ts +73 -0
  602. package/.next/standalone/src/app/api/sessions/route.ts +64 -0
  603. package/.next/standalone/src/app/api/sync/route.ts +24 -0
  604. package/.next/standalone/src/app/api/tags/route.ts +35 -0
  605. package/.next/standalone/src/app/api/tier/route.ts +16 -0
  606. package/.next/standalone/src/app/api/updates/route.ts +53 -0
  607. package/.next/standalone/src/app/api/whisper/route.ts +90 -0
  608. package/.next/standalone/src/app/api/workspaces/[id]/context/[key]/route.ts +39 -0
  609. package/.next/standalone/src/app/api/workspaces/[id]/context/route.ts +28 -0
  610. package/.next/standalone/src/app/api/workspaces/[id]/messages/[msgId]/route.ts +17 -0
  611. package/.next/standalone/src/app/api/workspaces/[id]/messages/route.ts +39 -0
  612. package/.next/standalone/src/app/api/workspaces/[id]/route.ts +47 -0
  613. package/.next/standalone/src/app/api/workspaces/[id]/sessions/route.ts +62 -0
  614. package/.next/standalone/src/app/api/workspaces/route.ts +79 -0
  615. package/.next/standalone/src/app/globals.css +85 -0
  616. package/.next/standalone/src/app/icon.png +0 -0
  617. package/.next/standalone/src/app/layout.tsx +33 -0
  618. package/.next/standalone/src/app/login/layout.tsx +7 -0
  619. package/.next/standalone/src/app/login/page.tsx +315 -0
  620. package/.next/standalone/src/app/m/layout.tsx +16 -0
  621. package/.next/standalone/src/app/m/page.tsx +118 -0
  622. package/.next/standalone/src/app/m/projects/page.tsx +64 -0
  623. package/.next/standalone/src/app/m/sessions/[id]/page.tsx +168 -0
  624. package/.next/standalone/src/app/m/sessions/page.tsx +177 -0
  625. package/.next/standalone/src/app/m/settings/page.tsx +230 -0
  626. package/.next/standalone/src/app/m/terminal/page.tsx +413 -0
  627. package/.next/standalone/src/app/vr/page.tsx +21 -0
  628. package/.next/standalone/src/app/vr/vr-app.tsx +163 -0
  629. package/.next/standalone/src/app/vr/vr-controls.tsx +139 -0
  630. package/.next/standalone/src/app/vr/vr-door.tsx +82 -0
  631. package/.next/standalone/src/app/vr/vr-environment.tsx +71 -0
  632. package/.next/standalone/src/app/vr/vr-gaze.tsx +89 -0
  633. package/.next/standalone/src/app/vr/vr-layout.ts +49 -0
  634. package/.next/standalone/src/app/vr/vr-lobby.tsx +97 -0
  635. package/.next/standalone/src/app/vr/vr-pane.tsx +195 -0
  636. package/.next/standalone/src/app/vr/vr-room.tsx +79 -0
  637. package/.next/standalone/src/app/vr/vr-terminal.tsx +303 -0
  638. package/.next/standalone/src/components/auth/totp-gate.tsx +183 -0
  639. package/.next/standalone/src/components/bus/activity-panel.tsx +261 -0
  640. package/.next/standalone/src/components/common/color-picker.tsx +35 -0
  641. package/.next/standalone/src/components/common/dev-directory-picker.tsx +339 -0
  642. package/.next/standalone/src/components/common/folder-picker.tsx +200 -0
  643. package/.next/standalone/src/components/common/tag-picker.tsx +190 -0
  644. package/.next/standalone/src/components/common/workspace-picker.tsx +113 -0
  645. package/.next/standalone/src/components/cortex/benchmark-tab.tsx +880 -0
  646. package/.next/standalone/src/components/cortex/constants.ts +29 -29
  647. package/.next/standalone/src/components/cortex/cortex-dashboard.tsx +304 -304
  648. package/.next/standalone/src/components/cortex/cortex-indicator.tsx +44 -44
  649. package/.next/standalone/src/components/cortex/cortex-panel.tsx +140 -140
  650. package/.next/standalone/src/components/cortex/cortex-settings.tsx +221 -221
  651. package/.next/standalone/src/components/cortex/curation-tab.tsx +810 -810
  652. package/.next/standalone/src/components/cortex/entity-detail.tsx +101 -101
  653. package/.next/standalone/src/components/cortex/entity-graph.tsx +382 -382
  654. package/.next/standalone/src/components/cortex/import-dialog.tsx +212 -212
  655. package/.next/standalone/src/components/cortex/injection-badge.tsx +72 -72
  656. package/.next/standalone/src/components/cortex/knowledge-card.tsx +109 -109
  657. package/.next/standalone/src/components/cortex/knowledge-tab.tsx +158 -158
  658. package/.next/standalone/src/components/cortex/lobe-settings.tsx +215 -215
  659. package/.next/standalone/src/components/cortex/marketplace-card.tsx +126 -126
  660. package/.next/standalone/src/components/cortex/marketplace-tab.tsx +113 -113
  661. package/.next/standalone/src/components/dashboard/activity-chart.tsx +41 -0
  662. package/.next/standalone/src/components/dashboard/model-usage-chart.tsx +61 -0
  663. package/.next/standalone/src/components/dashboard/recent-sessions.tsx +68 -0
  664. package/.next/standalone/src/components/dashboard/stats-cards.tsx +36 -0
  665. package/.next/standalone/src/components/files/file-explorer.tsx +703 -0
  666. package/.next/standalone/src/components/layout/providers.tsx +38 -0
  667. package/.next/standalone/src/components/layout/sidebar.tsx +170 -0
  668. package/.next/standalone/src/components/layout/tier-provider.tsx +53 -0
  669. package/.next/standalone/src/components/layout/update-banner.tsx +92 -0
  670. package/.next/standalone/src/components/mobile/bottom-nav.tsx +46 -0
  671. package/.next/standalone/src/components/mobile/mobile-chat-input.tsx +244 -0
  672. package/.next/standalone/src/components/mobile/mobile-header.tsx +44 -0
  673. package/.next/standalone/src/components/mobile/mobile-session-card.tsx +56 -0
  674. package/.next/standalone/src/components/mobile/mobile-terminal-input.tsx +71 -0
  675. package/.next/standalone/src/components/mobile/mobile-terminal-pane.tsx +300 -0
  676. package/.next/standalone/src/components/mobile/mobile-terminal-toolbar.tsx +53 -0
  677. package/.next/standalone/src/components/mobile/pull-to-refresh.tsx +82 -0
  678. package/.next/standalone/src/components/mobile/voice-input.tsx +53 -0
  679. package/.next/standalone/src/components/network/api-key-list.tsx +190 -0
  680. package/.next/standalone/src/components/network/connection-requests.tsx +94 -0
  681. package/.next/standalone/src/components/network/node-add-dialog.tsx +131 -0
  682. package/.next/standalone/src/components/network/node-badge.tsx +26 -0
  683. package/.next/standalone/src/components/network/node-list.tsx +207 -0
  684. package/.next/standalone/src/components/network/node-selector.tsx +49 -0
  685. package/.next/standalone/src/components/sessions/session-filters.tsx +116 -0
  686. package/.next/standalone/src/components/sessions/session-list.tsx +485 -0
  687. package/.next/standalone/src/components/terminal/terminal-pane.tsx +874 -0
  688. package/.next/standalone/src/components/viewer/chat-input.tsx +275 -0
  689. package/.next/standalone/src/components/viewer/message-renderer.tsx +551 -0
  690. package/.next/standalone/src/components/workspace/universe-cluster.tsx +131 -0
  691. package/.next/standalone/src/components/workspace/universe-orb.tsx +128 -0
  692. package/.next/standalone/src/components/workspace/universe-types.ts +22 -0
  693. package/.next/standalone/src/components/workspace/universe-utils.ts +11 -0
  694. package/.next/standalone/src/components/workspace/universe-view.tsx +397 -0
  695. package/.next/standalone/src/components/workspace/workspace-chooser.tsx +616 -0
  696. package/.next/standalone/src/hooks/use-benchmark.ts +71 -0
  697. package/.next/standalone/src/hooks/use-bus.ts +147 -0
  698. package/.next/standalone/src/hooks/use-idle-detection.ts +79 -0
  699. package/.next/standalone/src/hooks/use-network.ts +229 -0
  700. package/.next/standalone/src/hooks/use-sessions.ts +437 -0
  701. package/.next/standalone/src/hooks/use-speech-recognition.ts +113 -0
  702. package/.next/standalone/src/hooks/use-sse.ts +35 -0
  703. package/.next/standalone/src/hooks/use-tier.ts +39 -0
  704. package/.next/standalone/src/lib/agents.ts +70 -0
  705. package/.next/standalone/src/lib/aider/parser.ts +111 -0
  706. package/.next/standalone/src/lib/api.ts +19 -0
  707. package/.next/standalone/src/lib/auth.ts +47 -0
  708. package/.next/standalone/src/lib/claude/parser.ts +212 -0
  709. package/.next/standalone/src/lib/claude/stats.ts +204 -0
  710. package/.next/standalone/src/lib/codex/parser.ts +265 -0
  711. package/.next/standalone/src/lib/config.ts +115 -0
  712. package/.next/standalone/src/lib/cortex/benchmark.ts +67 -0
  713. package/.next/standalone/src/lib/cortex/config.ts +40 -40
  714. package/.next/standalone/src/lib/cortex/debug.ts +10 -10
  715. package/.next/standalone/src/lib/cortex/distillation/usage-store.ts +18 -18
  716. package/.next/standalone/src/lib/cortex/graph/resolver.ts +10 -10
  717. package/.next/standalone/src/lib/cortex/graph/types.ts +22 -22
  718. package/.next/standalone/src/lib/cortex/index.ts +56 -56
  719. package/.next/standalone/src/lib/cortex/ingestion/bootstrap.ts +14 -14
  720. package/.next/standalone/src/lib/cortex/knowledge/compat.ts +14 -14
  721. package/.next/standalone/src/lib/cortex/knowledge/contradiction.ts +10 -10
  722. package/.next/standalone/src/lib/cortex/knowledge/types.ts +67 -67
  723. package/.next/standalone/src/lib/cortex/lobes/config.ts +16 -16
  724. package/.next/standalone/src/lib/cortex/lobes/resolver.ts +8 -8
  725. package/.next/standalone/src/lib/cortex/lobes/shares.ts +14 -14
  726. package/.next/standalone/src/lib/cortex/mcp/server.ts +8 -8
  727. package/.next/standalone/src/lib/cortex/portability/exporter.ts +6 -6
  728. package/.next/standalone/src/lib/cortex/portability/importer.ts +10 -10
  729. package/.next/standalone/src/lib/cortex/retrieval/context-engine.ts +10 -10
  730. package/.next/standalone/src/lib/cortex/types.ts +39 -39
  731. package/.next/standalone/src/lib/cost-calculator.ts +48 -0
  732. package/.next/standalone/src/lib/db/init.ts +71 -0
  733. package/.next/standalone/src/lib/db/queries.ts +718 -0
  734. package/.next/standalone/src/lib/db/schema.ts +202 -0
  735. package/.next/standalone/src/lib/events/sse.ts +36 -0
  736. package/.next/standalone/src/lib/gemini/parser.ts +216 -0
  737. package/.next/standalone/src/lib/license.ts +56 -0
  738. package/.next/standalone/src/lib/pro.ts +31 -0
  739. package/.next/standalone/src/lib/sync/indexer.ts +429 -0
  740. package/.next/standalone/src/lib/sync/watcher.ts +64 -0
  741. package/.next/standalone/src/lib/teams.ts +31 -0
  742. package/.next/standalone/src/lib/telemetry.ts +75 -0
  743. package/.next/standalone/src/lib/terminal/server.ts +128 -0
  744. package/.next/standalone/src/lib/tier.ts +38 -0
  745. package/.next/standalone/src/lib/utils.ts +72 -0
  746. package/.next/standalone/src/middleware.ts +133 -0
  747. package/.next/standalone/src/types/claude.ts +208 -0
  748. package/.next/standalone/src/types/network.ts +61 -0
  749. package/.next/standalone/tests/setup.ts +8 -0
  750. package/.next/standalone/tsconfig.json +34 -34
  751. package/.next/standalone/vitest.config.ts +24 -0
  752. package/LICENSE +661 -661
  753. package/README.md +131 -131
  754. package/bin/cortex-hook.sh +62 -62
  755. package/bin/cortex-mcp.js +60 -60
  756. package/bin/fix-standalone-externals.js +79 -79
  757. package/bin/lib/auto-setup.js +110 -110
  758. package/bin/mdns-service.js +171 -171
  759. package/bin/postinstall.js +35 -35
  760. package/bin/setup-admin.js +195 -195
  761. package/bin/spaces-dev.js +247 -208
  762. package/bin/spaces-install.js +638 -599
  763. package/bin/spaces-reset-totp.js +50 -50
  764. package/bin/spaces-service.js +1020 -1020
  765. package/bin/spaces-setup.js +253 -253
  766. package/bin/spaces.js +788 -776
  767. package/bin/ssh-auth-keys.sh +68 -68
  768. package/bin/terminal-server.js +1807 -1683
  769. package/package.json +104 -104
  770. package/.next/standalone/.claude/settings.local.json +0 -55
  771. package/.next/standalone/.claude/spaces-env.json +0 -1
  772. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e921fdfc._.js +0 -5
  773. package/.next/standalone/.next/server/chunks/ssr/_2230ad2d._.js +0 -3
  774. package/.next/standalone/.next/server/chunks/ssr/_5cf334fd._.js +0 -3
  775. package/.next/standalone/.next/server/chunks/ssr/_db0abd0a._.js +0 -3
  776. package/.next/standalone/.next/server/chunks/ssr/_db2fec84._.js +0 -3
  777. package/.next/standalone/.next/server/chunks/ssr/_f4e57187._.js +0 -3
  778. package/.next/standalone/.next/server/chunks/ssr/src_40fa36ce._.js +0 -7
  779. package/.next/standalone/.next/static/chunks/003e7aa1adfe577d.js +0 -1
  780. package/.next/standalone/.next/static/chunks/158b52b84e647ac1.js +0 -5
  781. package/.next/standalone/.next/static/chunks/232d8aae4fefab70.js +0 -1
  782. package/.next/standalone/.next/static/chunks/5325351ef49cb65f.js +0 -1
  783. package/.next/standalone/.next/static/chunks/559735e598ca3cbb.js +0 -1
  784. package/.next/standalone/.next/static/chunks/5d5d7b0095dd52ae.js +0 -1
  785. package/.next/standalone/.next/static/chunks/898f380eba90427a.js +0 -1
  786. package/.next/standalone/.next/static/chunks/95339e55722bb4ca.js +0 -5
  787. package/.next/standalone/.next/static/chunks/9cd594813c539df9.js +0 -1
  788. package/.next/standalone/.next/static/chunks/c1a95aebf6725f64.css +0 -3
  789. package/.next/standalone/.next/static/chunks/c515eb77d9410aa0.js +0 -5
  790. package/.next/standalone/.next/static/chunks/d9ae203a7f123546.js +0 -5
  791. package/.next/standalone/.next/static/chunks/f9f2628207848ac2.js +0 -1
  792. package/.next/standalone/.spaces/cortex-context.md +0 -70
  793. package/.next/standalone/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64.node +0 -0
  794. /package/.next/standalone/.next/static/{BEY-sql3lQLouidpurSQf → PcpzUspSK8QDdwzAJz8br}/_buildManifest.js +0 -0
  795. /package/.next/standalone/.next/static/{BEY-sql3lQLouidpurSQf → PcpzUspSK8QDdwzAJz8br}/_clientMiddlewareManifest.json +0 -0
  796. /package/.next/standalone/.next/static/{BEY-sql3lQLouidpurSQf → PcpzUspSK8QDdwzAJz8br}/_ssgManifest.js +0 -0
  797. /package/.next/standalone/node_modules/@img/{sharp-win32-x64 → sharp-libvips-linux-x64}/versions.json +0 -0
@@ -0,0 +1,880 @@
1
+ 'use client';
2
+
3
+ import { useState, useEffect, useRef } from 'react';
4
+ import {
5
+ BarChart,
6
+ Bar,
7
+ XAxis,
8
+ YAxis,
9
+ Tooltip,
10
+ ResponsiveContainer,
11
+ Cell,
12
+ } from 'recharts';
13
+ import { FlaskConical, ChevronDown, ChevronRight, Play, Loader2 } from 'lucide-react';
14
+ import {
15
+ useBenchmarkRuns,
16
+ useBenchmarkRun,
17
+ useBenchmarkLobes,
18
+ useBenchmarkStatus,
19
+ useStartBenchmark,
20
+ } from '@/hooks/use-benchmark';
21
+
22
+ interface BenchmarkRun {
23
+ id: string;
24
+ timestamp: string;
25
+ model: string;
26
+ preset: string;
27
+ task_count: number;
28
+ config: string;
29
+ }
30
+
31
+ interface BenchmarkRunSummary {
32
+ runId: string;
33
+ timestamp: string;
34
+ model: string;
35
+ preset: string;
36
+ taskCount: number;
37
+ avgTokenDelta: number;
38
+ avgTokenDeltaPercent: number;
39
+ avgQualityWithout: number;
40
+ avgQualityWith: number;
41
+ avgQualityImprovement: number;
42
+ avgRetrievalRelevance: number;
43
+ avgRetrievalLatencyMs: number;
44
+ }
45
+
46
+ interface CategoryBreakdown {
47
+ category: string;
48
+ taskCount: number;
49
+ avgTokenDeltaPercent: number;
50
+ avgQualityWithout: number;
51
+ avgQualityWith: number;
52
+ avgRetrievalRelevance: number;
53
+ hitRate: number;
54
+ }
55
+
56
+ interface BenchmarkTaskResult {
57
+ id: string;
58
+ run_id: string;
59
+ task_id: string;
60
+ category: string;
61
+ difficulty: string;
62
+ status: string;
63
+ tokens_without_input: number | null;
64
+ tokens_without_output: number | null;
65
+ tokens_with_input: number | null;
66
+ tokens_with_output: number | null;
67
+ tokens_delta: number | null;
68
+ tokens_delta_percent: number | null;
69
+ injection_tokens: number | null;
70
+ quality_without: number | null;
71
+ quality_with: number | null;
72
+ quality_improvement: number | null;
73
+ judge_confidence: number | null;
74
+ retrieval_count: number | null;
75
+ retrieval_avg_relevance: number | null;
76
+ retrieval_latency_ms: number | null;
77
+ duration_without_ms: number | null;
78
+ duration_with_ms: number | null;
79
+ }
80
+
81
+ interface BenchmarkLobeScore {
82
+ id: string;
83
+ run_id: string;
84
+ lobe_id: string;
85
+ lobe_name: string;
86
+ overall_score: number | null;
87
+ token_savings: number | null;
88
+ quality_improvement: number | null;
89
+ coverage_score: number | null;
90
+ category_strengths: string | null;
91
+ badge_tier: string | null;
92
+ marketplace_ready: number | null;
93
+ }
94
+
95
+ function StatCard({
96
+ label,
97
+ value,
98
+ sub,
99
+ color,
100
+ }: {
101
+ label: string;
102
+ value: string;
103
+ sub?: string;
104
+ color?: string;
105
+ }) {
106
+ return (
107
+ <div className="bg-white/[0.02] border border-white/[0.06] rounded-lg p-3">
108
+ <div className="text-[10px] text-gray-500 uppercase tracking-wider mb-1">{label}</div>
109
+ <div className={`text-lg font-semibold tabular-nums ${color || 'text-white'}`}>{value}</div>
110
+ {sub && <div className="text-[10px] text-gray-600 mt-0.5">{sub}</div>}
111
+ </div>
112
+ );
113
+ }
114
+
115
+ const CHART_TOOLTIP_STYLE = {
116
+ background: '#0f0f11',
117
+ border: '1px solid rgba(255,255,255,0.08)',
118
+ borderRadius: '0.5rem',
119
+ fontSize: '11px',
120
+ color: '#d1d5db',
121
+ };
122
+
123
+ function deltaColor(pct: number): string {
124
+ if (pct < -10) return '#22c55e';
125
+ if (pct < 0) return '#86efac';
126
+ if (pct < 5) return '#f59e0b';
127
+ return '#ef4444';
128
+ }
129
+
130
+ function TaskRow({ result }: { result: BenchmarkTaskResult }) {
131
+ const [open, setOpen] = useState(false);
132
+ return (
133
+ <div className="border border-white/[0.05] rounded-lg overflow-hidden">
134
+ <button
135
+ onClick={() => setOpen(v => !v)}
136
+ className="w-full flex items-center gap-3 px-3 py-2 text-left hover:bg-white/[0.02] transition-colors"
137
+ >
138
+ <span className="text-gray-500">
139
+ {open ? <ChevronDown className="w-3.5 h-3.5" /> : <ChevronRight className="w-3.5 h-3.5" />}
140
+ </span>
141
+ <span className="text-xs text-gray-300 font-mono flex-1 truncate" title={result.task_id}>
142
+ {result.task_id}
143
+ </span>
144
+ <span className="text-[10px] text-gray-600 w-20">{result.category}</span>
145
+ <span className="text-[10px] text-gray-600 w-12">{result.difficulty}</span>
146
+ <span
147
+ className="text-[10px] tabular-nums w-16 text-right"
148
+ style={{ color: deltaColor(result.tokens_delta_percent ?? 0) }}
149
+ >
150
+ {result.tokens_delta_percent != null
151
+ ? `${result.tokens_delta_percent > 0 ? '+' : ''}${result.tokens_delta_percent.toFixed(1)}%`
152
+ : '—'}
153
+ </span>
154
+ <span className="text-[10px] text-gray-400 tabular-nums w-20 text-right">
155
+ {result.quality_with != null ? result.quality_with.toFixed(2) : '—'}
156
+ {' / '}
157
+ {result.quality_without != null ? result.quality_without.toFixed(2) : '—'}
158
+ </span>
159
+ </button>
160
+ {open && (
161
+ <div className="px-8 pb-3 pt-1 grid grid-cols-2 md:grid-cols-4 gap-3 bg-white/[0.01] border-t border-white/[0.05]">
162
+ <div>
163
+ <div className="text-[9px] text-gray-600 uppercase mb-0.5">Tokens without</div>
164
+ <div className="text-xs text-gray-300 tabular-nums">
165
+ {result.tokens_without_input ?? '—'} in / {result.tokens_without_output ?? '—'} out
166
+ </div>
167
+ </div>
168
+ <div>
169
+ <div className="text-[9px] text-gray-600 uppercase mb-0.5">Tokens with</div>
170
+ <div className="text-xs text-gray-300 tabular-nums">
171
+ {result.tokens_with_input ?? '—'} in / {result.tokens_with_output ?? '—'} out
172
+ </div>
173
+ </div>
174
+ <div>
175
+ <div className="text-[9px] text-gray-600 uppercase mb-0.5">Injection</div>
176
+ <div className="text-xs text-gray-300 tabular-nums">{result.injection_tokens ?? '—'} tokens</div>
177
+ </div>
178
+ <div>
179
+ <div className="text-[9px] text-gray-600 uppercase mb-0.5">Retrieval</div>
180
+ <div className="text-xs text-gray-300 tabular-nums">
181
+ {result.retrieval_count ?? 0} hits
182
+ {result.retrieval_avg_relevance != null
183
+ ? ` · ${result.retrieval_avg_relevance.toFixed(3)} rel`
184
+ : ''}
185
+ {result.retrieval_latency_ms != null
186
+ ? ` · ${result.retrieval_latency_ms.toFixed(0)}ms`
187
+ : ''}
188
+ </div>
189
+ </div>
190
+ <div>
191
+ <div className="text-[9px] text-gray-600 uppercase mb-0.5">Quality improvement</div>
192
+ <div
193
+ className="text-xs tabular-nums"
194
+ style={{
195
+ color:
196
+ (result.quality_improvement ?? 0) > 0
197
+ ? '#22c55e'
198
+ : (result.quality_improvement ?? 0) < 0
199
+ ? '#ef4444'
200
+ : '#6b7280',
201
+ }}
202
+ >
203
+ {result.quality_improvement != null
204
+ ? `${result.quality_improvement > 0 ? '+' : ''}${result.quality_improvement.toFixed(3)}`
205
+ : '—'}
206
+ </div>
207
+ </div>
208
+ <div>
209
+ <div className="text-[9px] text-gray-600 uppercase mb-0.5">Judge confidence</div>
210
+ <div className="text-xs text-gray-300 tabular-nums">
211
+ {result.judge_confidence != null ? result.judge_confidence.toFixed(2) : '—'}
212
+ </div>
213
+ </div>
214
+ <div>
215
+ <div className="text-[9px] text-gray-600 uppercase mb-0.5">Duration without</div>
216
+ <div className="text-xs text-gray-300 tabular-nums">
217
+ {result.duration_without_ms != null ? `${result.duration_without_ms.toFixed(0)}ms` : '—'}
218
+ </div>
219
+ </div>
220
+ <div>
221
+ <div className="text-[9px] text-gray-600 uppercase mb-0.5">Duration with</div>
222
+ <div className="text-xs text-gray-300 tabular-nums">
223
+ {result.duration_with_ms != null ? `${result.duration_with_ms.toFixed(0)}ms` : '—'}
224
+ </div>
225
+ </div>
226
+ </div>
227
+ )}
228
+ </div>
229
+ );
230
+ }
231
+
232
+ function BadgePill({ tier }: { tier: string | null }) {
233
+ if (!tier) return null;
234
+ const colors: Record<string, string> = {
235
+ gold: 'bg-yellow-500/20 text-yellow-300 border-yellow-500/30',
236
+ silver: 'bg-gray-400/20 text-gray-300 border-gray-400/30',
237
+ bronze: 'bg-orange-500/20 text-orange-300 border-orange-500/30',
238
+ };
239
+ const cls = colors[tier.toLowerCase()] || 'bg-purple-500/20 text-purple-300 border-purple-500/30';
240
+ return (
241
+ <span className={`text-[9px] px-1.5 py-0.5 rounded border font-medium uppercase ${cls}`}>
242
+ {tier}
243
+ </span>
244
+ );
245
+ }
246
+
247
+ const BENCHMARK_CATEGORIES = [
248
+ 'codebase-qa',
249
+ 'bug-fixing',
250
+ 'code-generation',
251
+ 'refactoring',
252
+ 'style-convention',
253
+ 'decision-recall',
254
+ 'cross-session',
255
+ 'error-recovery',
256
+ 'domain-knowledge',
257
+ 'multi-layer',
258
+ 'performance-optimization',
259
+ 'api-integration',
260
+ 'security-access',
261
+ 'meta-self',
262
+ 'lobe-specific',
263
+ ];
264
+
265
+ const PRESET_META: Record<string, { label: string; desc: string; tasks: string; time: string }> = {
266
+ quick: {
267
+ label: 'Quick Test',
268
+ desc: 'Single task per category',
269
+ tasks: '~15 tasks',
270
+ time: '~3 min',
271
+ },
272
+ standard: {
273
+ label: 'Standard',
274
+ desc: '5 tasks per category',
275
+ tasks: '~75 tasks',
276
+ time: '~20 min',
277
+ },
278
+ full: {
279
+ label: 'Comprehensive',
280
+ desc: 'All tasks',
281
+ tasks: '~156 tasks',
282
+ time: '~1 hour',
283
+ },
284
+ };
285
+
286
+ function ProgressBar({ current, total }: { current: number; total: number }) {
287
+ const pct = total > 0 ? Math.round((current / total) * 100) : 0;
288
+ return (
289
+ <div className="w-full">
290
+ <div className="flex items-center justify-between mb-1">
291
+ <span className="text-[10px] text-gray-500 tabular-nums">
292
+ {current} / {total > 0 ? total : '?'} tasks
293
+ </span>
294
+ <span className="text-[10px] text-gray-500 tabular-nums">{pct}%</span>
295
+ </div>
296
+ <div className="h-1.5 bg-white/[0.06] rounded-full overflow-hidden">
297
+ <div
298
+ className="h-full bg-purple-500 rounded-full transition-all duration-500"
299
+ style={{ width: `${pct}%` }}
300
+ />
301
+ </div>
302
+ </div>
303
+ );
304
+ }
305
+
306
+ function RunLauncher({ onRunComplete }: { onRunComplete: () => void }) {
307
+ const { data: status } = useBenchmarkStatus();
308
+ const startBenchmark = useStartBenchmark();
309
+
310
+ const [selectedCategories, setSelectedCategories] = useState<string[]>([]);
311
+ const [customModel, setCustomModel] = useState('claude-haiku-4-5');
312
+ const [noJudge, setNoJudge] = useState(false);
313
+ const [showCustom, setShowCustom] = useState(false);
314
+
315
+ const isRunning = status?.running === true;
316
+
317
+ // When a run transitions from running -> finished, trigger refresh of runs list
318
+ const prevRunningRef = useRef<boolean | undefined>(undefined);
319
+ useEffect(() => {
320
+ if (prevRunningRef.current === true && !isRunning && status?.exitCode != null) {
321
+ onRunComplete();
322
+ }
323
+ prevRunningRef.current = isRunning;
324
+ }, [isRunning, status?.exitCode, onRunComplete]);
325
+
326
+ function handlePreset(preset: string) {
327
+ startBenchmark.mutate({ preset });
328
+ }
329
+
330
+ function handleCustomRun() {
331
+ startBenchmark.mutate({
332
+ preset: 'custom',
333
+ categories: selectedCategories.length > 0 ? selectedCategories.join(',') : undefined,
334
+ noJudge,
335
+ model: customModel,
336
+ });
337
+ }
338
+
339
+ function toggleCategory(cat: string) {
340
+ setSelectedCategories(prev =>
341
+ prev.includes(cat) ? prev.filter(c => c !== cat) : [...prev, cat],
342
+ );
343
+ }
344
+
345
+ const lastLines = status?.output
346
+ ? status.output
347
+ .split('\n')
348
+ .filter((l: string) => l.trim().length > 0)
349
+ .slice(-6)
350
+ : [];
351
+
352
+ if (isRunning) {
353
+ return (
354
+ <div className="bg-white/[0.02] border border-white/[0.06] rounded-lg p-4 space-y-3">
355
+ <div className="flex items-center justify-between">
356
+ <div className="flex items-center gap-2">
357
+ <Loader2 className="w-3.5 h-3.5 text-purple-400 animate-spin" />
358
+ <span className="text-xs font-medium text-gray-300">
359
+ Benchmark running — {status?.preset}
360
+ {status?.categories && status.categories !== 'all' ? ` (${status.categories})` : ''}
361
+ </span>
362
+ </div>
363
+ <span className="text-[10px] text-gray-600 font-mono">
364
+ {status?.model}
365
+ </span>
366
+ </div>
367
+
368
+ <ProgressBar
369
+ current={status?.progress?.current ?? 0}
370
+ total={status?.progress?.total ?? 0}
371
+ />
372
+
373
+ {lastLines.length > 0 && (
374
+ <div className="bg-black/30 rounded-md p-3 font-mono text-[10px] text-gray-500 space-y-0.5 max-h-28 overflow-y-auto">
375
+ {lastLines.map((line: string, i: number) => (
376
+ <div key={i} className="leading-relaxed">{line}</div>
377
+ ))}
378
+ </div>
379
+ )}
380
+ </div>
381
+ );
382
+ }
383
+
384
+ // Not running — show launcher
385
+ const startError = (startBenchmark.data as any)?.error;
386
+
387
+ return (
388
+ <div className="bg-white/[0.02] border border-white/[0.06] rounded-lg overflow-hidden">
389
+ <div className="px-4 py-3 border-b border-white/[0.05]">
390
+ <h3 className="text-xs font-medium text-gray-400">Run Benchmark</h3>
391
+ </div>
392
+
393
+ <div className="p-4 space-y-2">
394
+ {/* Preset buttons */}
395
+ {Object.entries(PRESET_META).map(([preset, meta]) => (
396
+ <div
397
+ key={preset}
398
+ className="flex items-center justify-between px-3 py-2.5 rounded-lg border border-white/[0.05] hover:border-white/[0.10] hover:bg-white/[0.02] transition-colors"
399
+ >
400
+ <div className="min-w-0">
401
+ <div className="flex items-center gap-2">
402
+ <span className="text-xs font-medium text-gray-300">{meta.label}</span>
403
+ <span className="text-[10px] text-gray-600">{meta.desc}</span>
404
+ </div>
405
+ <div className="text-[10px] text-gray-600 mt-0.5 tabular-nums">
406
+ {meta.tasks} &middot; {meta.time}
407
+ </div>
408
+ </div>
409
+ <button
410
+ onClick={() => handlePreset(preset)}
411
+ disabled={startBenchmark.isPending}
412
+ className="ml-4 flex items-center gap-1.5 px-3 py-1 text-[11px] font-medium rounded-md bg-purple-600/20 text-purple-300 border border-purple-500/20 hover:bg-purple-600/30 hover:border-purple-500/40 disabled:opacity-50 disabled:cursor-not-allowed transition-colors shrink-0"
413
+ >
414
+ <Play className="w-2.5 h-2.5" />
415
+ Run
416
+ </button>
417
+ </div>
418
+ ))}
419
+
420
+ {/* Custom section toggle */}
421
+ <div className="pt-1">
422
+ <button
423
+ onClick={() => setShowCustom(v => !v)}
424
+ className="flex items-center gap-1.5 text-[11px] text-gray-500 hover:text-gray-400 transition-colors"
425
+ >
426
+ {showCustom ? <ChevronDown className="w-3 h-3" /> : <ChevronRight className="w-3 h-3" />}
427
+ Custom
428
+ </button>
429
+
430
+ {showCustom && (
431
+ <div className="mt-3 space-y-3 pl-1">
432
+ {/* Category checkboxes */}
433
+ <div>
434
+ <div className="text-[10px] text-gray-600 uppercase tracking-wider mb-2">Categories</div>
435
+ <div className="flex flex-wrap gap-1.5">
436
+ {BENCHMARK_CATEGORIES.map(cat => {
437
+ const active = selectedCategories.includes(cat);
438
+ return (
439
+ <button
440
+ key={cat}
441
+ onClick={() => toggleCategory(cat)}
442
+ className={`px-2 py-0.5 text-[10px] rounded border transition-colors ${
443
+ active
444
+ ? 'bg-purple-500/20 text-purple-300 border-purple-500/30'
445
+ : 'bg-white/[0.03] text-gray-500 border-white/[0.06] hover:text-gray-400 hover:border-white/[0.10]'
446
+ }`}
447
+ >
448
+ {cat}
449
+ </button>
450
+ );
451
+ })}
452
+ </div>
453
+ {selectedCategories.length === 0 && (
454
+ <div className="text-[10px] text-gray-600 mt-1">None selected = all categories</div>
455
+ )}
456
+ </div>
457
+
458
+ {/* Model + noJudge row */}
459
+ <div className="flex items-center gap-4">
460
+ <div>
461
+ <div className="text-[10px] text-gray-600 uppercase tracking-wider mb-1">Model</div>
462
+ <select
463
+ value={customModel}
464
+ onChange={e => setCustomModel(e.target.value)}
465
+ className="px-2.5 py-1 text-xs bg-white/5 border border-white/10 rounded-md text-gray-300 focus:outline-none focus:border-purple-500/50"
466
+ >
467
+ <option value="claude-haiku-4-5">claude-haiku-4-5</option>
468
+ <option value="claude-sonnet-4-5">claude-sonnet-4-5</option>
469
+ <option value="claude-opus-4-5">claude-opus-4-5</option>
470
+ </select>
471
+ </div>
472
+
473
+ <div className="flex items-center gap-2 mt-4">
474
+ <input
475
+ id="no-judge"
476
+ type="checkbox"
477
+ checked={noJudge}
478
+ onChange={e => setNoJudge(e.target.checked)}
479
+ className="w-3.5 h-3.5 rounded accent-purple-500"
480
+ />
481
+ <label htmlFor="no-judge" className="text-[11px] text-gray-400 cursor-pointer">
482
+ Skip judge
483
+ </label>
484
+ </div>
485
+ </div>
486
+
487
+ {/* Run custom */}
488
+ <button
489
+ onClick={handleCustomRun}
490
+ disabled={startBenchmark.isPending}
491
+ className="flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md bg-purple-600/20 text-purple-300 border border-purple-500/20 hover:bg-purple-600/30 hover:border-purple-500/40 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
492
+ >
493
+ <Play className="w-3 h-3" />
494
+ Run Custom
495
+ </button>
496
+ </div>
497
+ )}
498
+ </div>
499
+
500
+ {startError && (
501
+ <div className="text-[11px] text-red-400 bg-red-500/10 border border-red-500/20 rounded-md px-3 py-2">
502
+ {startError}
503
+ </div>
504
+ )}
505
+
506
+ {status && !isRunning && status.exitCode != null && (
507
+ <div className="text-[11px] text-gray-500 bg-white/[0.02] border border-white/[0.05] rounded-md px-3 py-2">
508
+ Last run finished — exit code {status.exitCode}
509
+ {status.exitCode === 0 ? ' (success)' : ' (error)'}
510
+ </div>
511
+ )}
512
+ </div>
513
+ </div>
514
+ );
515
+ }
516
+
517
+ export function BenchmarkTab() {
518
+ const { data: runsData, isLoading: runsLoading, refetch: refetchRuns } = useBenchmarkRuns();
519
+ const runs: BenchmarkRun[] = runsData?.runs ?? [];
520
+ const [selectedRunId, setSelectedRunId] = useState<string | null>(null);
521
+
522
+ // Default to latest run once loaded
523
+ const effectiveRunId = selectedRunId ?? runs[0]?.id ?? null;
524
+
525
+ const { data: runDetail, isLoading: detailLoading } = useBenchmarkRun(effectiveRunId);
526
+ const { data: lobesData } = useBenchmarkLobes();
527
+
528
+ const summary: BenchmarkRunSummary | null = runDetail?.summary ?? null;
529
+ const categories: CategoryBreakdown[] = runDetail?.categories ?? [];
530
+ const results: BenchmarkTaskResult[] = runDetail?.results ?? [];
531
+ const lobes: BenchmarkLobeScore[] = lobesData?.lobes ?? [];
532
+
533
+ const noData = !runsLoading && runs.length === 0;
534
+
535
+ if (runsLoading) {
536
+ return (
537
+ <div className="p-6 max-w-5xl space-y-6">
538
+ <RunLauncher onRunComplete={() => refetchRuns()} />
539
+ <div className="text-sm text-gray-500">Loading benchmark data...</div>
540
+ </div>
541
+ );
542
+ }
543
+
544
+ if (noData) {
545
+ return (
546
+ <div className="p-6 max-w-5xl space-y-6">
547
+ <RunLauncher onRunComplete={() => refetchRuns()} />
548
+ <div className="flex flex-col items-center justify-center gap-4 py-16 text-gray-600">
549
+ <FlaskConical className="w-10 h-10" />
550
+ <p className="text-sm text-center max-w-xs">
551
+ No benchmark data yet. Use the launcher above or run{' '}
552
+ <span className="text-gray-500 font-mono text-xs">npm run benchmark</span>
553
+ {' '}to generate results.
554
+ </p>
555
+ </div>
556
+ </div>
557
+ );
558
+ }
559
+
560
+ const tokenDeltaChartData = categories.map(c => ({
561
+ name: c.category,
562
+ delta: parseFloat(c.avgTokenDeltaPercent.toFixed(1)),
563
+ }));
564
+
565
+ const qualityChartData = categories.map(c => ({
566
+ name: c.category,
567
+ without: parseFloat(c.avgQualityWithout.toFixed(3)),
568
+ with: parseFloat(c.avgQualityWith.toFixed(3)),
569
+ }));
570
+
571
+ const hitRateChartData = [...categories]
572
+ .sort((a, b) => b.hitRate - a.hitRate)
573
+ .map(c => ({
574
+ name: c.category,
575
+ hitRate: parseFloat((c.hitRate * 100).toFixed(1)),
576
+ }));
577
+
578
+ return (
579
+ <div className="p-6 max-w-5xl space-y-6">
580
+ {/* Run launcher */}
581
+ <RunLauncher onRunComplete={() => refetchRuns()} />
582
+
583
+ {/* Run selector */}
584
+ <div className="flex items-center gap-3">
585
+ <label className="text-[11px] text-gray-500 shrink-0">Run</label>
586
+ <select
587
+ value={effectiveRunId ?? ''}
588
+ onChange={e => setSelectedRunId(e.target.value || null)}
589
+ className="px-3 py-1.5 text-xs bg-white/5 border border-white/10 rounded-lg text-gray-300 focus:outline-none focus:border-purple-500/50"
590
+ >
591
+ {runs.map((r: BenchmarkRun) => (
592
+ <option key={r.id} value={r.id}>
593
+ {new Date(r.timestamp).toLocaleString()} — {r.model} ({r.preset}, {r.task_count} tasks)
594
+ </option>
595
+ ))}
596
+ </select>
597
+ </div>
598
+
599
+ {/* Overview stat cards */}
600
+ {summary && (
601
+ <div className="grid grid-cols-2 md:grid-cols-5 gap-3">
602
+ <StatCard
603
+ label="Avg Token Delta"
604
+ value={
605
+ summary.avgTokenDeltaPercent != null
606
+ ? `${summary.avgTokenDeltaPercent > 0 ? '+' : ''}${summary.avgTokenDeltaPercent.toFixed(1)}%`
607
+ : '—'
608
+ }
609
+ sub="vs baseline"
610
+ color={
611
+ summary.avgTokenDeltaPercent < 0
612
+ ? 'text-green-400'
613
+ : summary.avgTokenDeltaPercent < 5
614
+ ? 'text-amber-400'
615
+ : 'text-red-400'
616
+ }
617
+ />
618
+ <StatCard
619
+ label="Quality (with)"
620
+ value={summary.avgQualityWith.toFixed(2)}
621
+ sub="avg LLM judge score"
622
+ color="text-purple-400"
623
+ />
624
+ <StatCard
625
+ label="Quality (without)"
626
+ value={summary.avgQualityWithout.toFixed(2)}
627
+ sub="baseline"
628
+ />
629
+ <StatCard
630
+ label="Tasks"
631
+ value={summary.taskCount.toString()}
632
+ sub={`${categories.length} categories`}
633
+ />
634
+ <StatCard
635
+ label="Avg Retrieval"
636
+ value={
637
+ summary.avgRetrievalLatencyMs
638
+ ? `${summary.avgRetrievalLatencyMs.toFixed(0)}ms`
639
+ : '—'
640
+ }
641
+ sub={
642
+ summary.avgRetrievalRelevance
643
+ ? `${summary.avgRetrievalRelevance.toFixed(3)} relevance`
644
+ : 'relevance'
645
+ }
646
+ />
647
+ </div>
648
+ )}
649
+
650
+ {detailLoading && (
651
+ <div className="text-sm text-gray-500">Loading run details...</div>
652
+ )}
653
+
654
+ {/* Category breakdown table */}
655
+ {categories.length > 0 && (
656
+ <div className="bg-white/[0.02] border border-white/[0.06] rounded-lg overflow-hidden">
657
+ <div className="px-4 py-3 border-b border-white/[0.05]">
658
+ <h3 className="text-xs font-medium text-gray-400">Category Breakdown</h3>
659
+ </div>
660
+ <div className="overflow-x-auto">
661
+ <table className="w-full text-xs">
662
+ <thead>
663
+ <tr className="border-b border-white/[0.05]">
664
+ <th className="px-4 py-2 text-left text-[10px] text-gray-500 uppercase tracking-wider">Category</th>
665
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Tasks</th>
666
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Token Delta</th>
667
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Quality w/o</th>
668
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Quality with</th>
669
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Hit Rate</th>
670
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Relevance</th>
671
+ </tr>
672
+ </thead>
673
+ <tbody>
674
+ {categories.map((cat, i) => (
675
+ <tr
676
+ key={cat.category}
677
+ className={`border-b border-white/[0.03] ${i % 2 === 0 ? '' : 'bg-white/[0.01]'}`}
678
+ >
679
+ <td className="px-4 py-2 text-gray-300">{cat.category}</td>
680
+ <td className="px-4 py-2 text-right text-gray-400 tabular-nums">{cat.taskCount}</td>
681
+ <td
682
+ className="px-4 py-2 text-right tabular-nums font-medium"
683
+ style={{ color: deltaColor(cat.avgTokenDeltaPercent) }}
684
+ >
685
+ {cat.avgTokenDeltaPercent > 0 ? '+' : ''}
686
+ {cat.avgTokenDeltaPercent.toFixed(1)}%
687
+ </td>
688
+ <td className="px-4 py-2 text-right text-gray-400 tabular-nums">
689
+ {cat.avgQualityWithout.toFixed(2)}
690
+ </td>
691
+ <td className="px-4 py-2 text-right text-gray-300 tabular-nums font-medium">
692
+ {cat.avgQualityWith.toFixed(2)}
693
+ </td>
694
+ <td className="px-4 py-2 text-right text-gray-400 tabular-nums">
695
+ {(cat.hitRate * 100).toFixed(0)}%
696
+ </td>
697
+ <td className="px-4 py-2 text-right text-gray-400 tabular-nums">
698
+ {cat.avgRetrievalRelevance.toFixed(3)}
699
+ </td>
700
+ </tr>
701
+ ))}
702
+ </tbody>
703
+ </table>
704
+ </div>
705
+ </div>
706
+ )}
707
+
708
+ {/* Charts row */}
709
+ {categories.length > 0 && (
710
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
711
+ {/* Token delta by category */}
712
+ <div className="bg-white/[0.02] border border-white/[0.06] rounded-lg p-4">
713
+ <h3 className="text-xs font-medium text-gray-400 mb-3">Token Delta % by Category</h3>
714
+ <ResponsiveContainer width="100%" height={160}>
715
+ <BarChart data={tokenDeltaChartData} margin={{ top: 4, right: 4, bottom: 4, left: 0 }}>
716
+ <XAxis dataKey="name" tick={{ fontSize: 10, fill: '#6b7280' }} />
717
+ <YAxis tick={{ fontSize: 10, fill: '#6b7280' }} />
718
+ <Tooltip
719
+ contentStyle={CHART_TOOLTIP_STYLE}
720
+ formatter={(v: any) => [`${v > 0 ? '+' : ''}${v}%`, 'Token delta']}
721
+ />
722
+ <Bar dataKey="delta" radius={[2, 2, 0, 0]}>
723
+ {tokenDeltaChartData.map((entry, i) => (
724
+ <Cell key={i} fill={deltaColor(entry.delta)} />
725
+ ))}
726
+ </Bar>
727
+ </BarChart>
728
+ </ResponsiveContainer>
729
+ </div>
730
+
731
+ {/* Quality comparison */}
732
+ <div className="bg-white/[0.02] border border-white/[0.06] rounded-lg p-4">
733
+ <h3 className="text-xs font-medium text-gray-400 mb-3">Quality Score by Category</h3>
734
+ <div className="flex items-center gap-4 mb-2">
735
+ <span className="flex items-center gap-1 text-[10px] text-gray-500">
736
+ <span className="w-2 h-2 rounded-sm inline-block" style={{ background: '#6b7280' }} />
737
+ Without
738
+ </span>
739
+ <span className="flex items-center gap-1 text-[10px] text-gray-500">
740
+ <span className="w-2 h-2 rounded-sm inline-block" style={{ background: '#7c3aed' }} />
741
+ With Cortex
742
+ </span>
743
+ </div>
744
+ <ResponsiveContainer width="100%" height={160}>
745
+ <BarChart data={qualityChartData} margin={{ top: 4, right: 4, bottom: 4, left: 0 }}>
746
+ <XAxis dataKey="name" tick={{ fontSize: 10, fill: '#6b7280' }} />
747
+ <YAxis domain={[0, 1]} tick={{ fontSize: 10, fill: '#6b7280' }} />
748
+ <Tooltip contentStyle={CHART_TOOLTIP_STYLE} />
749
+ <Bar dataKey="without" fill="#4b5563" radius={[2, 2, 0, 0]} />
750
+ <Bar dataKey="with" fill="#7c3aed" radius={[2, 2, 0, 0]} />
751
+ </BarChart>
752
+ </ResponsiveContainer>
753
+ </div>
754
+
755
+ {/* Hit rate */}
756
+ <div className="bg-white/[0.02] border border-white/[0.06] rounded-lg p-4 md:col-span-2">
757
+ <h3 className="text-xs font-medium text-gray-400 mb-3">Knowledge Retrieval Hit Rate %</h3>
758
+ <ResponsiveContainer width="100%" height={120}>
759
+ <BarChart
760
+ data={hitRateChartData}
761
+ layout="vertical"
762
+ margin={{ top: 4, right: 4, bottom: 4, left: 60 }}
763
+ >
764
+ <XAxis type="number" domain={[0, 100]} tick={{ fontSize: 10, fill: '#6b7280' }} />
765
+ <YAxis
766
+ type="category"
767
+ dataKey="name"
768
+ tick={{ fontSize: 10, fill: '#6b7280' }}
769
+ width={56}
770
+ />
771
+ <Tooltip
772
+ contentStyle={CHART_TOOLTIP_STYLE}
773
+ formatter={(v: any) => [`${v}%`, 'Hit rate']}
774
+ />
775
+ <Bar dataKey="hitRate" fill="#06b6d4" radius={[0, 2, 2, 0]} />
776
+ </BarChart>
777
+ </ResponsiveContainer>
778
+ </div>
779
+ </div>
780
+ )}
781
+
782
+ {/* Lobe scores */}
783
+ {lobes.length > 0 && (
784
+ <div className="bg-white/[0.02] border border-white/[0.06] rounded-lg overflow-hidden">
785
+ <div className="px-4 py-3 border-b border-white/[0.05]">
786
+ <h3 className="text-xs font-medium text-gray-400">Lobe Scores</h3>
787
+ </div>
788
+ <div className="overflow-x-auto">
789
+ <table className="w-full text-xs">
790
+ <thead>
791
+ <tr className="border-b border-white/[0.05]">
792
+ <th className="px-4 py-2 text-left text-[10px] text-gray-500 uppercase tracking-wider">Lobe</th>
793
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Overall</th>
794
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Token Savings</th>
795
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Quality +</th>
796
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Coverage</th>
797
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Badge</th>
798
+ <th className="px-4 py-2 text-right text-[10px] text-gray-500 uppercase tracking-wider">Marketplace</th>
799
+ </tr>
800
+ </thead>
801
+ <tbody>
802
+ {lobes.map((lobe, i) => (
803
+ <tr
804
+ key={lobe.id}
805
+ className={`border-b border-white/[0.03] ${i % 2 === 0 ? '' : 'bg-white/[0.01]'}`}
806
+ >
807
+ <td className="px-4 py-2">
808
+ <div className="text-gray-300">{lobe.lobe_name}</div>
809
+ <div className="text-[9px] text-gray-600 font-mono">{lobe.lobe_id}</div>
810
+ </td>
811
+ <td className="px-4 py-2 text-right text-purple-400 tabular-nums font-medium">
812
+ {lobe.overall_score != null ? lobe.overall_score.toFixed(2) : '—'}
813
+ </td>
814
+ <td
815
+ className="px-4 py-2 text-right tabular-nums"
816
+ style={{ color: (lobe.token_savings ?? 0) > 0 ? '#22c55e' : '#6b7280' }}
817
+ >
818
+ {lobe.token_savings != null
819
+ ? `${lobe.token_savings > 0 ? '+' : ''}${lobe.token_savings.toFixed(1)}%`
820
+ : '—'}
821
+ </td>
822
+ <td
823
+ className="px-4 py-2 text-right tabular-nums"
824
+ style={{ color: (lobe.quality_improvement ?? 0) > 0 ? '#22c55e' : '#6b7280' }}
825
+ >
826
+ {lobe.quality_improvement != null
827
+ ? `${lobe.quality_improvement > 0 ? '+' : ''}${lobe.quality_improvement.toFixed(3)}`
828
+ : '—'}
829
+ </td>
830
+ <td className="px-4 py-2 text-right text-gray-400 tabular-nums">
831
+ {lobe.coverage_score != null ? lobe.coverage_score.toFixed(2) : '—'}
832
+ </td>
833
+ <td className="px-4 py-2 text-right">
834
+ <BadgePill tier={lobe.badge_tier} />
835
+ </td>
836
+ <td className="px-4 py-2 text-right">
837
+ {lobe.marketplace_ready ? (
838
+ <span className="text-[9px] px-1.5 py-0.5 rounded border bg-green-500/10 text-green-400 border-green-500/20">
839
+ Ready
840
+ </span>
841
+ ) : (
842
+ <span className="text-[9px] text-gray-600">—</span>
843
+ )}
844
+ </td>
845
+ </tr>
846
+ ))}
847
+ </tbody>
848
+ </table>
849
+ </div>
850
+ </div>
851
+ )}
852
+
853
+ {/* Task results */}
854
+ {results.length > 0 && (
855
+ <div className="bg-white/[0.02] border border-white/[0.06] rounded-lg overflow-hidden">
856
+ <div className="px-4 py-3 border-b border-white/[0.05] flex items-center justify-between">
857
+ <h3 className="text-xs font-medium text-gray-400">Task Results</h3>
858
+ <span className="text-[10px] text-gray-600">{results.length} tasks</span>
859
+ </div>
860
+ <div className="px-4 py-2">
861
+ {/* Column headers */}
862
+ <div className="flex items-center gap-3 px-3 py-1 mb-1">
863
+ <span className="w-3.5" />
864
+ <span className="text-[9px] text-gray-600 uppercase tracking-wider flex-1">Task ID</span>
865
+ <span className="text-[9px] text-gray-600 uppercase tracking-wider w-20">Category</span>
866
+ <span className="text-[9px] text-gray-600 uppercase tracking-wider w-12">Diff</span>
867
+ <span className="text-[9px] text-gray-600 uppercase tracking-wider w-16 text-right">Token %</span>
868
+ <span className="text-[9px] text-gray-600 uppercase tracking-wider w-20 text-right">Quality w/w</span>
869
+ </div>
870
+ <div className="space-y-1">
871
+ {results.map(r => (
872
+ <TaskRow key={r.id} result={r} />
873
+ ))}
874
+ </div>
875
+ </div>
876
+ </div>
877
+ )}
878
+ </div>
879
+ );
880
+ }