@jlongo78/agent-spaces 0.9.6 → 0.9.8

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 (917) hide show
  1. package/.next/standalone/.claude/settings.local.json +68 -0
  2. package/.next/standalone/.claude/spaces-env.json +1 -0
  3. package/.next/standalone/.next/BUILD_ID +1 -1
  4. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  5. package/.next/standalone/.next/build-manifest.json +2 -2
  6. package/.next/standalone/.next/prerender-manifest.json +3 -3
  7. package/.next/standalone/.next/required-server-files.json +19 -19
  8. package/.next/standalone/.next/routes-manifest.json +6 -0
  9. package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(desktop)/admin/users/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  26. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  27. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  28. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  29. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  30. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  31. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  32. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  34. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  35. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  36. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  37. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  38. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  40. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  41. package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
  42. package/.next/standalone/.next/server/app/admin/analytics.rsc +2 -2
  43. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +1 -1
  44. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
  45. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  46. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  47. package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +2 -2
  48. package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
  49. package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
  50. package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +2 -2
  51. package/.next/standalone/.next/server/app/admin/users.html +1 -1
  52. package/.next/standalone/.next/server/app/admin/users.rsc +2 -2
  53. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
  55. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +2 -2
  58. package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
  59. package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
  60. package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +2 -2
  61. package/.next/standalone/.next/server/app/analytics.html +1 -1
  62. package/.next/standalone/.next/server/app/analytics.rsc +2 -2
  63. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +1 -1
  64. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
  65. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  66. package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +2 -2
  67. package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
  68. package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
  69. package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  70. package/.next/standalone/.next/server/app/api/analytics/overview/route.js +1 -1
  71. package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js +1 -1
  73. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/api/benchmark/run/route.js +1 -1
  75. package/.next/standalone/.next/server/app/api/benchmark/run/route.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js +1 -1
  77. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js +1 -1
  79. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/api/benchmark/status/route.js +1 -1
  81. package/.next/standalone/.next/server/app/api/benchmark/status/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/bulk/route.js +1 -1
  83. package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/config/route.js +1 -1
  85. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/cortex/context/route.js +1 -1
  87. package/.next/standalone/.next/server/app/api/cortex/context/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js +1 -1
  89. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js +1 -1
  91. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js.nft.json +1 -1
  92. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js +1 -1
  93. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js +1 -1
  95. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js.nft.json +1 -1
  96. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/api/cortex/export/route.js +1 -1
  99. package/.next/standalone/.next/server/app/api/cortex/export/route.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js +1 -1
  103. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js +1 -1
  105. package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js +1 -1
  107. package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js +1 -1
  109. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js +1 -1
  111. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js +1 -1
  113. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js +1 -1
  115. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/cortex/import/route.js +1 -1
  117. package/.next/standalone/.next/server/app/api/cortex/import/route.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js +1 -1
  119. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js +1 -1
  121. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js +1 -1
  123. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js +1 -1
  125. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js +1 -1
  127. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js +1 -1
  129. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js +1 -1
  131. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js +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 +1 -1
  135. package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js +1 -1
  137. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js +1 -1
  139. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js +1 -1
  141. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/cortex/search/route.js +1 -1
  143. package/.next/standalone/.next/server/app/api/cortex/search/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/cortex/settings/route.js +1 -1
  145. package/.next/standalone/.next/server/app/api/cortex/settings/route.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/app/api/cortex/status/route.js +1 -1
  147. package/.next/standalone/.next/server/app/api/cortex/status/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js +1 -1
  149. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/cortex/usage/route.js +1 -1
  151. package/.next/standalone/.next/server/app/api/cortex/usage/route.js.nft.json +1 -1
  152. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js +1 -1
  153. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/events/route.js +1 -1
  155. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/files/route.js +1 -1
  157. package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/api/folders/route.js +1 -1
  159. package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/network/handshake/route.js +1 -1
  161. package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js +1 -1
  163. package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/app/api/network/panes/route.js +1 -1
  165. package/.next/standalone/.next/server/app/api/network/panes/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/network/projects/route.js +1 -1
  167. package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/app/api/network/search/route.js +1 -1
  169. package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
  170. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js +1 -1
  171. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js +1 -1
  173. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
  174. package/.next/standalone/.next/server/app/api/network/sessions/route.js +1 -1
  175. package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js +1 -1
  177. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/network/workspaces/route.js +1 -1
  179. package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
  180. package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js +1 -1
  181. package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js.nft.json +1 -1
  182. package/.next/standalone/.next/server/app/api/panes/[id]/route.js +1 -1
  183. package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/app/api/panes/route.js +1 -1
  185. package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
  186. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  187. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  188. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js +1 -1
  189. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js +1 -1
  191. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js.nft.json +1 -1
  192. package/.next/standalone/.next/server/app/api/search/route.js +2 -2
  193. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  194. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js +1 -1
  195. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
  196. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js +1 -1
  197. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
  198. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js +1 -1
  199. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  200. package/.next/standalone/.next/server/app/api/sessions/route.js +2 -2
  201. package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/app/api/sync/route.js +1 -1
  203. package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
  204. package/.next/standalone/.next/server/app/api/tags/route.js +1 -1
  205. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
  206. package/.next/standalone/.next/server/app/api/tier/route.js +1 -1
  207. package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/whisper/config/route.js +1 -1
  209. package/.next/standalone/.next/server/app/api/whisper/config/route.js.nft.json +1 -1
  210. package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/api/wizard/chart/route/app-paths-manifest.json +3 -0
  212. package/.next/standalone/.next/server/app/api/wizard/chart/route/build-manifest.json +11 -0
  213. package/.next/standalone/.next/server/app/api/wizard/chart/route/server-reference-manifest.json +4 -0
  214. package/.next/standalone/.next/server/app/api/wizard/chart/route.js +7 -0
  215. package/.next/standalone/.next/server/app/api/wizard/chart/route.js.map +5 -0
  216. package/.next/standalone/.next/server/app/api/wizard/chart/route.js.nft.json +1 -0
  217. package/.next/standalone/.next/server/app/api/wizard/chart/route_client-reference-manifest.js +2 -0
  218. package/.next/standalone/.next/server/app/api/wizard/chat/route.js +1 -1
  219. package/.next/standalone/.next/server/app/api/wizard/chat/route.js.nft.json +1 -1
  220. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js +1 -1
  221. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
  222. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js +1 -1
  223. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
  224. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js +1 -1
  225. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
  226. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js +1 -1
  227. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
  228. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js +1 -1
  229. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
  230. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js +1 -1
  231. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
  232. package/.next/standalone/.next/server/app/api/workspaces/route.js +2 -2
  233. package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  234. package/.next/standalone/.next/server/app/cortex.html +1 -1
  235. package/.next/standalone/.next/server/app/cortex.rsc +3 -3
  236. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +2 -2
  237. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex.segment.rsc +1 -1
  238. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  239. package/.next/standalone/.next/server/app/cortex.segments/_full.segment.rsc +3 -3
  240. package/.next/standalone/.next/server/app/cortex.segments/_head.segment.rsc +1 -1
  241. package/.next/standalone/.next/server/app/cortex.segments/_index.segment.rsc +2 -2
  242. package/.next/standalone/.next/server/app/cortex.segments/_tree.segment.rsc +2 -2
  243. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  244. package/.next/standalone/.next/server/app/login.html +1 -1
  245. package/.next/standalone/.next/server/app/login.rsc +2 -2
  246. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
  247. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  248. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
  249. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  250. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  251. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  252. package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
  253. package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/m/projects.html +1 -1
  255. package/.next/standalone/.next/server/app/m/projects.rsc +2 -2
  256. package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
  257. package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
  258. package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
  259. package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +2 -2
  260. package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
  261. package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
  262. package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +1 -1
  263. package/.next/standalone/.next/server/app/m/sessions/[id]/page.js.nft.json +1 -1
  264. package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
  265. package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/m/sessions.html +1 -1
  267. package/.next/standalone/.next/server/app/m/sessions.rsc +2 -2
  268. package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
  269. package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
  270. package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
  271. package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +2 -2
  272. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
  273. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
  274. package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +1 -1
  275. package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
  276. package/.next/standalone/.next/server/app/m/settings.html +1 -1
  277. package/.next/standalone/.next/server/app/m/settings.rsc +2 -2
  278. package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
  279. package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
  280. package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
  281. package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +2 -2
  282. package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
  283. package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
  284. package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +1 -1
  285. package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
  286. package/.next/standalone/.next/server/app/m/terminal.html +1 -1
  287. package/.next/standalone/.next/server/app/m/terminal.rsc +3 -3
  288. package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +3 -3
  289. package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
  290. package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
  291. package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +2 -2
  292. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +2 -2
  293. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
  294. package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +1 -1
  295. package/.next/standalone/.next/server/app/m.html +1 -1
  296. package/.next/standalone/.next/server/app/m.rsc +2 -2
  297. package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
  298. package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
  299. package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
  300. package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +2 -2
  301. package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
  302. package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
  303. package/.next/standalone/.next/server/app/network.html +1 -1
  304. package/.next/standalone/.next/server/app/network.rsc +2 -2
  305. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
  306. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
  307. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  308. package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +2 -2
  309. package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
  310. package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
  311. package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +2 -2
  312. package/.next/standalone/.next/server/app/projects.html +1 -1
  313. package/.next/standalone/.next/server/app/projects.rsc +2 -2
  314. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
  315. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
  316. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  317. package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  318. package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  319. package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  320. package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  321. package/.next/standalone/.next/server/app/sessions.html +1 -1
  322. package/.next/standalone/.next/server/app/sessions.rsc +2 -2
  323. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
  324. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
  325. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  326. package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +2 -2
  327. package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  328. package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
  329. package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
  330. package/.next/standalone/.next/server/app/settings.html +1 -1
  331. package/.next/standalone/.next/server/app/settings.rsc +2 -2
  332. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
  333. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
  334. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  335. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  336. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  337. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  338. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  339. package/.next/standalone/.next/server/app/terminal.html +1 -1
  340. package/.next/standalone/.next/server/app/terminal.rsc +3 -3
  341. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +2 -2
  342. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
  343. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  344. package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +3 -3
  345. package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
  346. package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
  347. package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +2 -2
  348. package/.next/standalone/.next/server/app/vr/page/react-loadable-manifest.json +1 -1
  349. package/.next/standalone/.next/server/app/vr/page_client-reference-manifest.js +1 -1
  350. package/.next/standalone/.next/server/app/vr.html +1 -1
  351. package/.next/standalone/.next/server/app/vr.rsc +3 -3
  352. package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +3 -3
  353. package/.next/standalone/.next/server/app/vr.segments/_head.segment.rsc +1 -1
  354. package/.next/standalone/.next/server/app/vr.segments/_index.segment.rsc +2 -2
  355. package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +2 -2
  356. package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +2 -2
  357. package/.next/standalone/.next/server/app/vr.segments/vr.segment.rsc +1 -1
  358. package/.next/standalone/.next/server/app/workspaces.html +1 -1
  359. package/.next/standalone/.next/server/app/workspaces.rsc +2 -2
  360. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
  361. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
  362. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  363. package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +2 -2
  364. package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
  365. package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
  366. package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
  367. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  368. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00e90fc6._.js +98 -0
  369. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01ab8675._.js +98 -0
  370. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03974f05._.js +98 -0
  371. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__bb331da9._.js → [root-of-the-server]__046c9b91._.js} +3 -3
  372. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04ae6bf0._.js +98 -0
  373. package/.next/standalone/.next/server/chunks/[root-of-the-server]__056fa416._.js +1 -1
  374. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ac4ea3f._.js +3 -0
  375. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b8e64cb._.js +98 -0
  376. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__d95165f0._.js → [root-of-the-server]__0facd39e._.js} +3 -3
  377. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10bc76a3._.js +3 -0
  378. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__9d68157b._.js → [root-of-the-server]__115f3934._.js} +3 -3
  379. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11f155f1._.js +3 -0
  380. package/.next/standalone/.next/server/chunks/[root-of-the-server]__160e7c73._.js +22 -33
  381. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__91e23c96._.js → [root-of-the-server]__17a3b966._.js} +3 -3
  382. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__277d9445._.js → [root-of-the-server]__17d3a2b2._.js} +3 -3
  383. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a86c055._.js +98 -0
  384. package/.next/standalone/.next/server/chunks/[root-of-the-server]__20b5e9c4._.js +3 -0
  385. package/.next/standalone/.next/server/chunks/[root-of-the-server]__28d6fbd8._.js +98 -0
  386. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__04f04898._.js → [root-of-the-server]__2a3f866b._.js} +2 -2
  387. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__a95bb38b._.js → [root-of-the-server]__316617e7._.js} +2 -2
  388. package/.next/standalone/.next/server/chunks/[root-of-the-server]__32ad8f71._.js +98 -0
  389. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__6fe5e6c8._.js → [root-of-the-server]__35457394._.js} +2 -2
  390. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1f054c65._.js → [root-of-the-server]__35de78e6._.js} +3 -3
  391. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3685ffcb._.js +98 -0
  392. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__614458b7._.js → [root-of-the-server]__38954988._.js} +3 -3
  393. package/.next/standalone/.next/server/chunks/[root-of-the-server]__426ad936._.js +106 -0
  394. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4985c034._.js +98 -0
  395. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c6ce9ed._.js +98 -0
  396. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5cebe58a._.js +98 -0
  397. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d5e4789._.js +98 -0
  398. package/.next/standalone/.next/server/chunks/[root-of-the-server]__65676930._.js +3 -0
  399. package/.next/standalone/.next/server/chunks/[root-of-the-server]__67cab326._.js +58 -0
  400. package/.next/standalone/.next/server/chunks/[root-of-the-server]__698c6f01._.js +98 -0
  401. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6c64af29._.js +131 -0
  402. package/.next/standalone/.next/server/chunks/[root-of-the-server]__73aed9f5._.js +98 -0
  403. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__ac84b704._.js → [root-of-the-server]__79b6a9bb._.js} +3 -3
  404. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e56abacf._.js → [root-of-the-server]__7db704c6._.js} +4 -4
  405. package/.next/standalone/.next/server/chunks/[root-of-the-server]__812ca02b._.js +98 -0
  406. package/.next/standalone/.next/server/chunks/[root-of-the-server]__821f50fa._.js +98 -0
  407. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8716b86e._.js +98 -0
  408. package/.next/standalone/.next/server/chunks/[root-of-the-server]__884ef754._.js +98 -0
  409. package/.next/standalone/.next/server/chunks/[root-of-the-server]__88cdbd68._.js +98 -0
  410. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89d9aba9._.js +98 -0
  411. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8d536cb5._.js +98 -0
  412. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8df8c5d1._.js +98 -0
  413. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2d7a454e._.js → [root-of-the-server]__8f2ccc41._.js} +3 -3
  414. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2a2c5fc5._.js → [root-of-the-server]__95c9d682._.js} +4 -4
  415. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e5d7774._.js +98 -0
  416. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__cc6e2885._.js → [root-of-the-server]__9edcff87._.js} +2 -2
  417. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a049dfc2._.js +98 -0
  418. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a5b4bb9a._.js +98 -0
  419. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__929ea03a._.js → [root-of-the-server]__a83262a1._.js} +2 -2
  420. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9cd1240._.js +98 -0
  421. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9d7f822._.js +98 -0
  422. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad08c221._.js +98 -0
  423. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad585f2f._.js +98 -0
  424. package/.next/standalone/.next/server/chunks/[root-of-the-server]__afcb8f7d._.js +98 -0
  425. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bc250d43._.js +98 -0
  426. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bce2a6e7._.js +98 -0
  427. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c011bf91._.js +98 -0
  428. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0ac2895._.js +3 -0
  429. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c130a00c._.js +1 -1
  430. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c37d6380._.js +3 -0
  431. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cae392eb._.js +98 -0
  432. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cc2616bb._.js +3 -3
  433. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d501fa9b._.js +98 -0
  434. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d59c6c15._.js +98 -0
  435. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d5c1db32._.js +98 -0
  436. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d5d92527._.js +1 -1
  437. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dba60c86._.js +98 -0
  438. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2384f98e._.js → [root-of-the-server]__de14b9ae._.js} +3 -3
  439. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e10643d1._.js +98 -0
  440. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__00fdfbda._.js → [root-of-the-server]__e2a996e5._.js} +2 -2
  441. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__4d903941._.js → [root-of-the-server]__e3477417._.js} +3 -3
  442. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__32dc5513._.js → [root-of-the-server]__e4db362e._.js} +2 -2
  443. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__49e42a3a._.js → [root-of-the-server]__e4e70b86._.js} +3 -3
  444. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__ac39ecc7._.js → [root-of-the-server]__e54925af._.js} +3 -3
  445. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e8edc5b0._.js +98 -0
  446. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__eafd040b._.js → [root-of-the-server]__eab4d83b._.js} +2 -2
  447. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ead29015._.js +1 -1
  448. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__194955d4._.js → [root-of-the-server]__f056fd83._.js} +3 -3
  449. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f0e99572._.js +98 -0
  450. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fe1e16d0._.js +98 -0
  451. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ff9cd277._.js +98 -0
  452. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ffaea2ce._.js +98 -0
  453. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_wizard_chart_route_actions_888e2ec1.js +3 -0
  454. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__2cffc362._.js +3 -0
  455. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__f1050870._.js → [root-of-the-server]__47c97637._.js} +2 -2
  456. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
  457. package/.next/standalone/.next/server/chunks/ssr/_17b946fd._.js +3 -0
  458. package/.next/standalone/.next/server/chunks/ssr/_2a1d79e7._.js +1 -1
  459. package/.next/standalone/.next/server/chunks/ssr/_5c3c4cfa._.js +7 -5
  460. package/.next/standalone/.next/server/chunks/ssr/_ba432382._.js +7 -5
  461. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_cortex_page_tsx_0f33d8b3._.js +1 -1
  462. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_terminal_page_tsx_de5e8d85._.js +4 -4
  463. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__90eeddae._.js +1 -1
  464. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  465. package/.next/standalone/.next/server/pages/404.html +1 -1
  466. package/.next/standalone/.next/server/pages/500.html +2 -2
  467. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  468. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  469. package/.next/standalone/.next/static/chunks/0852575eb90c1e8d.js +85 -0
  470. package/.next/standalone/.next/static/chunks/{74d0ac0b1d0a1b79.js → 10b00b4f66102dcf.js} +1 -1
  471. package/.next/standalone/.next/static/chunks/{16eb77953dee9ea3.js → 19c71a8376c23c58.js} +1 -1
  472. package/.next/standalone/.next/static/chunks/2b769d1597e4fc1c.css +3 -0
  473. package/.next/standalone/.next/static/chunks/{3e91fc608659c524.js → 350271fe79509caf.js} +1 -1
  474. package/.next/standalone/.next/static/chunks/{70423c7afd8abf5f.js → 597847c22200c212.js} +1 -1
  475. package/.next/standalone/.next/static/chunks/{fb0abd1933b2b2e1.js → 7f6a14f1849fa94d.js} +1 -1
  476. package/.next/standalone/.next/static/chunks/{7ecd9bbb0ce4d68a.js → b7c8fe9b7275a84f.js} +1 -1
  477. package/.next/standalone/.next/static/chunks/{6245135a7afb8c7b.js → c9b10fc55516d142.js} +8 -6
  478. package/.next/standalone/.next/static/chunks/d0065f48eab94944.js +1 -0
  479. package/.next/standalone/.next/static/chunks/{180c1b9ff31b979f.js → f7b34c807badf95d.js} +8 -6
  480. package/.next/standalone/.spaces/cortex-context.md +50 -144
  481. package/.next/standalone/LICENSE +661 -661
  482. package/.next/standalone/NOTICE +5 -5
  483. package/.next/standalone/README.md +131 -131
  484. package/.next/standalone/bin/cortex-hook.js +79 -79
  485. package/.next/standalone/bin/cortex-hook.sh +62 -62
  486. package/.next/standalone/bin/cortex-learn-hook.js +138 -138
  487. package/.next/standalone/bin/cortex-mcp.js +60 -60
  488. package/.next/standalone/bin/cortex-pi-extension.ts +170 -170
  489. package/.next/standalone/bin/fix-standalone-externals.js +79 -79
  490. package/.next/standalone/bin/lib/auto-setup.js +110 -110
  491. package/.next/standalone/bin/mdns-service.js +171 -171
  492. package/.next/standalone/bin/postinstall.js +35 -35
  493. package/.next/standalone/bin/setup-admin.js +195 -195
  494. package/.next/standalone/bin/spaces-dev.js +247 -247
  495. package/.next/standalone/bin/spaces-install.js +660 -660
  496. package/.next/standalone/bin/spaces-postinstall.js +50 -50
  497. package/.next/standalone/bin/spaces-reset-totp.js +50 -50
  498. package/.next/standalone/bin/spaces-service.js +1046 -1046
  499. package/.next/standalone/bin/spaces-setup.js +253 -253
  500. package/.next/standalone/bin/spaces.js +808 -805
  501. package/.next/standalone/bin/ssh-auth-keys.sh +68 -68
  502. package/.next/standalone/bin/terminal-server.js +2819 -2781
  503. package/.next/standalone/cortex-hook-debug.log +57 -23
  504. package/.next/standalone/docker-compose.yml +28 -28
  505. package/.next/standalone/docs/architecture.md +387 -387
  506. package/.next/standalone/docs/cortex-integration-reference.md +268 -268
  507. package/.next/standalone/docs/cortex.md +293 -293
  508. package/.next/standalone/docs/getting-started.md +96 -96
  509. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-design.md +133 -133
  510. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-plan.md +959 -959
  511. package/.next/standalone/docs/plans/2026-03-02-security-audit.md +229 -229
  512. package/.next/standalone/docs/plans/2026-03-07-service-command-design.md +146 -146
  513. package/.next/standalone/docs/plans/2026-03-07-service-command-plan.md +254 -254
  514. package/.next/standalone/docs/server-install.md +564 -564
  515. package/.next/standalone/docs/social-card.html +150 -150
  516. package/.next/standalone/docs/superpowers/plans/2026-03-12-spaces-cortex.md +5270 -5270
  517. package/.next/standalone/docs/superpowers/plans/2026-03-13-cortex-wiring.md +1387 -1387
  518. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-entity-graph.md +1923 -1923
  519. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-knowledge-evolution.md +1113 -1113
  520. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-boundary-engine.md +853 -853
  521. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-context-engine.md +1274 -1274
  522. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-signal-ingestion.md +933 -933
  523. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-lobes.md +1080 -1080
  524. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-gravity-system.md +768 -768
  525. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-ui.md +1108 -1108
  526. package/.next/standalone/docs/superpowers/plans/2026-03-18-cortex-ui-integration.md +1846 -1846
  527. package/.next/standalone/docs/superpowers/plans/2026-03-19-vr-phase1-shell.md +1639 -1639
  528. package/.next/standalone/docs/superpowers/plans/2026-03-27-dockview-pane-layout.md +98 -98
  529. package/.next/standalone/docs/superpowers/specs/2026-03-11-universe-view-design.md +320 -320
  530. package/.next/standalone/docs/superpowers/specs/2026-03-12-spaces-brain-design.md +720 -720
  531. package/.next/standalone/docs/superpowers/specs/2026-03-13-cortex-wiring-design.md +268 -268
  532. package/.next/standalone/docs/superpowers/specs/2026-03-14-cortex-v2-design.md +623 -623
  533. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-lobes-design.md +263 -263
  534. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-v2-ui-design.md +240 -240
  535. package/.next/standalone/docs/superpowers/specs/2026-03-16-pane-ux-design.md +77 -77
  536. package/.next/standalone/docs/superpowers/specs/2026-03-18-cortex-ui-integration-design.md +341 -341
  537. package/.next/standalone/docs/superpowers/specs/2026-03-19-vr-phase1-shell-design.md +288 -288
  538. package/.next/standalone/docs/superpowers/specs/2026-03-27-pane-diff-review-and-project-wizard-design.md +322 -322
  539. package/.next/standalone/docs/tiers.md +104 -104
  540. package/.next/standalone/eslint.config.mjs +18 -18
  541. package/.next/standalone/next.config.ts +20 -20
  542. package/.next/standalone/nginx.conf +53 -53
  543. package/.next/standalone/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64.node +0 -0
  544. package/.next/standalone/node_modules/@img/{sharp-linux-x64 → sharp-win32-x64}/package.json +39 -46
  545. package/.next/standalone/package-lock.json +14985 -14986
  546. package/.next/standalone/package.json +111 -111
  547. package/.next/standalone/postcss.config.mjs +7 -7
  548. package/.next/standalone/scripts/rebuild.cmd +65 -65
  549. package/.next/standalone/scripts/rebuild.sh +59 -59
  550. package/.next/standalone/server.js +1 -1
  551. package/.next/standalone/src/app/(desktop)/admin/analytics/page.tsx +266 -266
  552. package/.next/standalone/src/app/(desktop)/admin/users/page.tsx +399 -399
  553. package/.next/standalone/src/app/(desktop)/analytics/page.tsx +166 -166
  554. package/.next/standalone/src/app/(desktop)/cortex/page.tsx +81 -81
  555. package/.next/standalone/src/app/(desktop)/dashboard-client.tsx +56 -56
  556. package/.next/standalone/src/app/(desktop)/layout.tsx +18 -18
  557. package/.next/standalone/src/app/(desktop)/network/page.tsx +137 -137
  558. package/.next/standalone/src/app/(desktop)/page.tsx +17 -17
  559. package/.next/standalone/src/app/(desktop)/projects/page.tsx +68 -68
  560. package/.next/standalone/src/app/(desktop)/sessions/[id]/page.tsx +519 -519
  561. package/.next/standalone/src/app/(desktop)/sessions/page.tsx +145 -145
  562. package/.next/standalone/src/app/(desktop)/settings/page.tsx +446 -446
  563. package/.next/standalone/src/app/(desktop)/terminal/layout.tsx +7 -7
  564. package/.next/standalone/src/app/(desktop)/terminal/page.tsx +1330 -1291
  565. package/.next/standalone/src/app/(desktop)/terminal/pane/[id]/page.tsx +211 -211
  566. package/.next/standalone/src/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page.tsx +252 -252
  567. package/.next/standalone/src/app/(desktop)/workspaces/page.tsx +12 -12
  568. package/.next/standalone/src/app/api/admin/analytics/route.ts +10 -10
  569. package/.next/standalone/src/app/api/admin/users/[id]/route.ts +20 -20
  570. package/.next/standalone/src/app/api/admin/users/route.ts +15 -15
  571. package/.next/standalone/src/app/api/analytics/overview/route.ts +80 -80
  572. package/.next/standalone/src/app/api/auth/login/route.ts +10 -10
  573. package/.next/standalone/src/app/api/auth/logout/route.ts +9 -9
  574. package/.next/standalone/src/app/api/auth/me/route.ts +22 -22
  575. package/.next/standalone/src/app/api/auth/totp/setup/route.ts +10 -10
  576. package/.next/standalone/src/app/api/auth/totp/status/route.ts +10 -10
  577. package/.next/standalone/src/app/api/auth/totp/verify/route.ts +10 -10
  578. package/.next/standalone/src/app/api/benchmark/lobes/route.ts +16 -16
  579. package/.next/standalone/src/app/api/benchmark/run/route.ts +113 -92
  580. package/.next/standalone/src/app/api/benchmark/runs/[id]/route.ts +26 -26
  581. package/.next/standalone/src/app/api/benchmark/runs/route.ts +16 -16
  582. package/.next/standalone/src/app/api/benchmark/status/route.ts +35 -35
  583. package/.next/standalone/src/app/api/bulk/route.ts +34 -34
  584. package/.next/standalone/src/app/api/chat/route.ts +85 -85
  585. package/.next/standalone/src/app/api/config/route.ts +30 -30
  586. package/.next/standalone/src/app/api/cortex/context/route.ts +78 -78
  587. package/.next/standalone/src/app/api/cortex/curation/assess/route.ts +27 -27
  588. package/.next/standalone/src/app/api/cortex/curation/publish/route.ts +23 -23
  589. package/.next/standalone/src/app/api/cortex/curation/refine/route.ts +23 -23
  590. package/.next/standalone/src/app/api/cortex/curation/review/route.ts +29 -29
  591. package/.next/standalone/src/app/api/cortex/curation/seed/route.ts +23 -23
  592. package/.next/standalone/src/app/api/cortex/export/route.ts +40 -40
  593. package/.next/standalone/src/app/api/cortex/federation/pending/route.ts +20 -20
  594. package/.next/standalone/src/app/api/cortex/federation/resolve/route.ts +43 -43
  595. package/.next/standalone/src/app/api/cortex/federation/search/route.ts +35 -35
  596. package/.next/standalone/src/app/api/cortex/federation/teach/route.ts +76 -76
  597. package/.next/standalone/src/app/api/cortex/graph/edges/route.ts +112 -112
  598. package/.next/standalone/src/app/api/cortex/graph/entities/[id]/route.ts +73 -73
  599. package/.next/standalone/src/app/api/cortex/graph/entities/route.ts +75 -75
  600. package/.next/standalone/src/app/api/cortex/graph/populate/route.ts +203 -203
  601. package/.next/standalone/src/app/api/cortex/import/route.ts +75 -75
  602. package/.next/standalone/src/app/api/cortex/import/status/route.ts +15 -15
  603. package/.next/standalone/src/app/api/cortex/ingest/bootstrap/route.ts +39 -39
  604. package/.next/standalone/src/app/api/cortex/ingest/status/route.ts +15 -15
  605. package/.next/standalone/src/app/api/cortex/knowledge/[id]/route.ts +91 -91
  606. package/.next/standalone/src/app/api/cortex/knowledge/route.ts +97 -97
  607. package/.next/standalone/src/app/api/cortex/lobes/[id]/route.ts +67 -67
  608. package/.next/standalone/src/app/api/cortex/lobes/route.ts +22 -22
  609. package/.next/standalone/src/app/api/cortex/lobes/share/route.ts +80 -80
  610. package/.next/standalone/src/app/api/cortex/marketplace/browse/route.ts +43 -43
  611. package/.next/standalone/src/app/api/cortex/marketplace/preview/route.ts +46 -46
  612. package/.next/standalone/src/app/api/cortex/mcp/call/route.ts +11 -11
  613. package/.next/standalone/src/app/api/cortex/mcp/tools/route.ts +8 -8
  614. package/.next/standalone/src/app/api/cortex/search/route.ts +57 -45
  615. package/.next/standalone/src/app/api/cortex/settings/route.ts +35 -35
  616. package/.next/standalone/src/app/api/cortex/status/route.ts +169 -169
  617. package/.next/standalone/src/app/api/cortex/timeline/route.ts +42 -42
  618. package/.next/standalone/src/app/api/cortex/usage/route.ts +31 -31
  619. package/.next/standalone/src/app/api/cortex/workspace/[id]/context/route.ts +41 -41
  620. package/.next/standalone/src/app/api/events/route.ts +40 -40
  621. package/.next/standalone/src/app/api/files/route.ts +187 -187
  622. package/.next/standalone/src/app/api/folders/route.ts +107 -97
  623. package/.next/standalone/src/app/api/network/connect-callback/route.ts +11 -11
  624. package/.next/standalone/src/app/api/network/connect-request/[id]/route.ts +11 -11
  625. package/.next/standalone/src/app/api/network/connect-request/route.ts +17 -17
  626. package/.next/standalone/src/app/api/network/discovered/route.ts +9 -9
  627. package/.next/standalone/src/app/api/network/handshake/route.ts +25 -25
  628. package/.next/standalone/src/app/api/network/health/route.ts +10 -10
  629. package/.next/standalone/src/app/api/network/identity/route.ts +15 -15
  630. package/.next/standalone/src/app/api/network/keys/[id]/route.ts +10 -10
  631. package/.next/standalone/src/app/api/network/keys/route.ts +15 -15
  632. package/.next/standalone/src/app/api/network/nodes/[id]/route.ts +15 -15
  633. package/.next/standalone/src/app/api/network/nodes/check/route.ts +9 -9
  634. package/.next/standalone/src/app/api/network/nodes/route.ts +15 -15
  635. package/.next/standalone/src/app/api/network/panes/[id]/route.ts +78 -62
  636. package/.next/standalone/src/app/api/network/panes/route.ts +61 -50
  637. package/.next/standalone/src/app/api/network/projects/route.ts +32 -25
  638. package/.next/standalone/src/app/api/network/proxy/[nodeId]/[...path]/route.ts +25 -25
  639. package/.next/standalone/src/app/api/network/search/route.ts +45 -38
  640. package/.next/standalone/src/app/api/network/sessions/[id]/messages/route.ts +43 -36
  641. package/.next/standalone/src/app/api/network/sessions/[id]/route.ts +41 -34
  642. package/.next/standalone/src/app/api/network/sessions/route.ts +50 -43
  643. package/.next/standalone/src/app/api/network/terminal/token/route.ts +10 -10
  644. package/.next/standalone/src/app/api/network/workspaces/[id]/route.ts +80 -71
  645. package/.next/standalone/src/app/api/network/workspaces/route.ts +87 -85
  646. package/.next/standalone/src/app/api/panes/[id]/diff/route.ts +121 -121
  647. package/.next/standalone/src/app/api/panes/[id]/route.ts +60 -60
  648. package/.next/standalone/src/app/api/panes/route.ts +39 -39
  649. package/.next/standalone/src/app/api/projects/route.ts +13 -13
  650. package/.next/standalone/src/app/api/proxy/models/[modelId]/[...path]/route.ts +80 -80
  651. package/.next/standalone/src/app/api/proxy/models/[modelId]/status/route.ts +33 -33
  652. package/.next/standalone/src/app/api/search/route.ts +47 -47
  653. package/.next/standalone/src/app/api/sessions/[id]/chat/route.ts +120 -120
  654. package/.next/standalone/src/app/api/sessions/[id]/messages/route.ts +34 -34
  655. package/.next/standalone/src/app/api/sessions/[id]/route.ts +73 -73
  656. package/.next/standalone/src/app/api/sessions/route.ts +64 -64
  657. package/.next/standalone/src/app/api/sync/route.ts +24 -24
  658. package/.next/standalone/src/app/api/tags/route.ts +35 -35
  659. package/.next/standalone/src/app/api/tier/route.ts +16 -16
  660. package/.next/standalone/src/app/api/updates/route.ts +65 -65
  661. package/.next/standalone/src/app/api/whisper/config/route.ts +50 -42
  662. package/.next/standalone/src/app/api/whisper/route.ts +91 -91
  663. package/.next/standalone/src/app/api/wizard/chart/route.ts +129 -0
  664. package/.next/standalone/src/app/api/wizard/chat/route.ts +113 -113
  665. package/.next/standalone/src/app/api/workspaces/[id]/context/[key]/route.ts +39 -39
  666. package/.next/standalone/src/app/api/workspaces/[id]/context/route.ts +28 -28
  667. package/.next/standalone/src/app/api/workspaces/[id]/messages/[msgId]/route.ts +17 -17
  668. package/.next/standalone/src/app/api/workspaces/[id]/messages/route.ts +39 -39
  669. package/.next/standalone/src/app/api/workspaces/[id]/route.ts +47 -47
  670. package/.next/standalone/src/app/api/workspaces/[id]/sessions/route.ts +62 -62
  671. package/.next/standalone/src/app/api/workspaces/route.ts +79 -79
  672. package/.next/standalone/src/app/globals.css +88 -88
  673. package/.next/standalone/src/app/layout.tsx +33 -33
  674. package/.next/standalone/src/app/login/layout.tsx +7 -7
  675. package/.next/standalone/src/app/login/page.tsx +315 -315
  676. package/.next/standalone/src/app/m/layout.tsx +16 -16
  677. package/.next/standalone/src/app/m/page.tsx +118 -118
  678. package/.next/standalone/src/app/m/projects/page.tsx +64 -64
  679. package/.next/standalone/src/app/m/sessions/[id]/page.tsx +168 -168
  680. package/.next/standalone/src/app/m/sessions/page.tsx +177 -177
  681. package/.next/standalone/src/app/m/settings/page.tsx +230 -230
  682. package/.next/standalone/src/app/m/terminal/page.tsx +413 -413
  683. package/.next/standalone/src/app/vr/page.tsx +21 -21
  684. package/.next/standalone/src/app/vr/vr-app.tsx +163 -163
  685. package/.next/standalone/src/app/vr/vr-controls.tsx +139 -139
  686. package/.next/standalone/src/app/vr/vr-door.tsx +82 -82
  687. package/.next/standalone/src/app/vr/vr-environment.tsx +71 -71
  688. package/.next/standalone/src/app/vr/vr-gaze.tsx +89 -89
  689. package/.next/standalone/src/app/vr/vr-layout.ts +49 -49
  690. package/.next/standalone/src/app/vr/vr-lobby.tsx +97 -97
  691. package/.next/standalone/src/app/vr/vr-pane.tsx +195 -195
  692. package/.next/standalone/src/app/vr/vr-room.tsx +79 -79
  693. package/.next/standalone/src/app/vr/vr-terminal.tsx +303 -303
  694. package/.next/standalone/src/components/auth/totp-gate.tsx +183 -183
  695. package/.next/standalone/src/components/bus/activity-panel.tsx +261 -261
  696. package/.next/standalone/src/components/common/color-picker.tsx +35 -35
  697. package/.next/standalone/src/components/common/dev-directory-picker.tsx +339 -339
  698. package/.next/standalone/src/components/common/folder-picker.tsx +200 -200
  699. package/.next/standalone/src/components/common/tag-picker.tsx +190 -190
  700. package/.next/standalone/src/components/common/workspace-picker.tsx +113 -113
  701. package/.next/standalone/src/components/cortex/benchmark-tab.tsx +894 -880
  702. package/.next/standalone/src/components/cortex/constants.ts +29 -29
  703. package/.next/standalone/src/components/cortex/cortex-dashboard.tsx +304 -304
  704. package/.next/standalone/src/components/cortex/cortex-indicator.tsx +44 -44
  705. package/.next/standalone/src/components/cortex/cortex-panel.tsx +140 -140
  706. package/.next/standalone/src/components/cortex/cortex-settings.tsx +280 -280
  707. package/.next/standalone/src/components/cortex/curation-tab.tsx +810 -810
  708. package/.next/standalone/src/components/cortex/entity-detail.tsx +101 -101
  709. package/.next/standalone/src/components/cortex/entity-graph.tsx +382 -382
  710. package/.next/standalone/src/components/cortex/import-dialog.tsx +212 -212
  711. package/.next/standalone/src/components/cortex/injection-badge.tsx +72 -72
  712. package/.next/standalone/src/components/cortex/knowledge-card.tsx +109 -109
  713. package/.next/standalone/src/components/cortex/knowledge-tab.tsx +158 -158
  714. package/.next/standalone/src/components/cortex/lobe-settings.tsx +215 -215
  715. package/.next/standalone/src/components/cortex/marketplace-card.tsx +126 -126
  716. package/.next/standalone/src/components/cortex/marketplace-tab.tsx +113 -113
  717. package/.next/standalone/src/components/dashboard/activity-chart.tsx +41 -41
  718. package/.next/standalone/src/components/dashboard/model-usage-chart.tsx +61 -61
  719. package/.next/standalone/src/components/dashboard/recent-sessions.tsx +68 -68
  720. package/.next/standalone/src/components/dashboard/stats-cards.tsx +36 -36
  721. package/.next/standalone/src/components/files/file-explorer.tsx +703 -703
  722. package/.next/standalone/src/components/layout/providers.tsx +38 -38
  723. package/.next/standalone/src/components/layout/sidebar.tsx +170 -170
  724. package/.next/standalone/src/components/layout/tier-provider.tsx +53 -53
  725. package/.next/standalone/src/components/layout/update-banner.tsx +92 -92
  726. package/.next/standalone/src/components/mobile/bottom-nav.tsx +46 -46
  727. package/.next/standalone/src/components/mobile/immersive-voice-button.tsx +123 -123
  728. package/.next/standalone/src/components/mobile/mobile-chat-input.tsx +244 -244
  729. package/.next/standalone/src/components/mobile/mobile-header.tsx +44 -44
  730. package/.next/standalone/src/components/mobile/mobile-session-card.tsx +56 -56
  731. package/.next/standalone/src/components/mobile/mobile-terminal-input.tsx +74 -74
  732. package/.next/standalone/src/components/mobile/mobile-terminal-pane.tsx +302 -302
  733. package/.next/standalone/src/components/mobile/mobile-terminal-toolbar.tsx +76 -76
  734. package/.next/standalone/src/components/mobile/pull-to-refresh.tsx +82 -82
  735. package/.next/standalone/src/components/mobile/voice-input.tsx +53 -53
  736. package/.next/standalone/src/components/network/api-key-list.tsx +190 -190
  737. package/.next/standalone/src/components/network/connection-requests.tsx +94 -94
  738. package/.next/standalone/src/components/network/node-add-dialog.tsx +131 -131
  739. package/.next/standalone/src/components/network/node-badge.tsx +26 -26
  740. package/.next/standalone/src/components/network/node-list.tsx +207 -207
  741. package/.next/standalone/src/components/network/node-selector.tsx +49 -49
  742. package/.next/standalone/src/components/sessions/session-filters.tsx +116 -116
  743. package/.next/standalone/src/components/sessions/session-list.tsx +485 -485
  744. package/.next/standalone/src/components/terminal/pane-diff-panel.tsx +179 -179
  745. package/.next/standalone/src/components/terminal/terminal-pane.tsx +1530 -1464
  746. package/.next/standalone/src/components/viewer/chat-input.tsx +275 -275
  747. package/.next/standalone/src/components/viewer/message-renderer.tsx +551 -551
  748. package/.next/standalone/src/components/wizard/chart-wizard.tsx +405 -0
  749. package/.next/standalone/src/components/wizard/project-wizard.tsx +153 -153
  750. package/.next/standalone/src/components/wizard/wizard-chat.tsx +99 -99
  751. package/.next/standalone/src/components/wizard/wizard-plan-summary.tsx +103 -103
  752. package/.next/standalone/src/components/wizard/wizard-review.tsx +225 -225
  753. package/.next/standalone/src/components/workspace/universe-cluster.tsx +131 -131
  754. package/.next/standalone/src/components/workspace/universe-orb.tsx +128 -128
  755. package/.next/standalone/src/components/workspace/universe-types.ts +22 -22
  756. package/.next/standalone/src/components/workspace/universe-utils.ts +11 -11
  757. package/.next/standalone/src/components/workspace/universe-view.tsx +397 -397
  758. package/.next/standalone/src/components/workspace/workspace-chooser.tsx +634 -634
  759. package/.next/standalone/src/hooks/use-benchmark.ts +72 -71
  760. package/.next/standalone/src/hooks/use-bus.ts +147 -147
  761. package/.next/standalone/src/hooks/use-idle-detection.ts +79 -79
  762. package/.next/standalone/src/hooks/use-network.ts +229 -229
  763. package/.next/standalone/src/hooks/use-sessions.ts +437 -437
  764. package/.next/standalone/src/hooks/use-speech-recognition.ts +114 -113
  765. package/.next/standalone/src/hooks/use-sse.ts +35 -35
  766. package/.next/standalone/src/hooks/use-tier.ts +39 -39
  767. package/.next/standalone/src/lib/agents.ts +97 -97
  768. package/.next/standalone/src/lib/aider/parser.ts +111 -111
  769. package/.next/standalone/src/lib/api.ts +19 -19
  770. package/.next/standalone/src/lib/auth.ts +47 -47
  771. package/.next/standalone/src/lib/claude/parser.ts +212 -212
  772. package/.next/standalone/src/lib/claude/stats.ts +204 -204
  773. package/.next/standalone/src/lib/codex/parser.test.ts +111 -111
  774. package/.next/standalone/src/lib/codex/parser.ts +287 -287
  775. package/.next/standalone/src/lib/config.ts +132 -132
  776. package/.next/standalone/src/lib/cortex/benchmark.ts +83 -67
  777. package/.next/standalone/src/lib/cortex/config.ts +42 -42
  778. package/.next/standalone/src/lib/cortex/debug.ts +10 -10
  779. package/.next/standalone/src/lib/cortex/distillation/usage-store.ts +18 -18
  780. package/.next/standalone/src/lib/cortex/graph/resolver.ts +10 -10
  781. package/.next/standalone/src/lib/cortex/graph/types.ts +22 -22
  782. package/.next/standalone/src/lib/cortex/index.ts +109 -56
  783. package/.next/standalone/src/lib/cortex/ingestion/bootstrap.ts +14 -14
  784. package/.next/standalone/src/lib/cortex/knowledge/compat.ts +14 -14
  785. package/.next/standalone/src/lib/cortex/knowledge/contradiction.ts +10 -10
  786. package/.next/standalone/src/lib/cortex/knowledge/types.ts +67 -67
  787. package/.next/standalone/src/lib/cortex/lobes/config.ts +16 -16
  788. package/.next/standalone/src/lib/cortex/lobes/resolver.ts +8 -8
  789. package/.next/standalone/src/lib/cortex/lobes/shares.ts +14 -14
  790. package/.next/standalone/src/lib/cortex/mcp/server.ts +12 -12
  791. package/.next/standalone/src/lib/cortex/portability/exporter.ts +6 -6
  792. package/.next/standalone/src/lib/cortex/portability/importer.ts +10 -10
  793. package/.next/standalone/src/lib/cortex/retrieval/context-engine.ts +10 -10
  794. package/.next/standalone/src/lib/cortex/types.ts +39 -39
  795. package/.next/standalone/src/lib/cost-calculator.ts +48 -48
  796. package/.next/standalone/src/lib/db/init.ts +71 -71
  797. package/.next/standalone/src/lib/db/queries.ts +740 -827
  798. package/.next/standalone/src/lib/db/schema.ts +206 -206
  799. package/.next/standalone/src/lib/events/sse.ts +36 -36
  800. package/.next/standalone/src/lib/forge/parser.ts +52 -52
  801. package/.next/standalone/src/lib/gemini/parser.ts +258 -258
  802. package/.next/standalone/src/lib/license.ts +56 -56
  803. package/.next/standalone/src/lib/pro.ts +31 -31
  804. package/.next/standalone/src/lib/shell-user.ts +101 -0
  805. package/.next/standalone/src/lib/sync/indexer.ts +504 -504
  806. package/.next/standalone/src/lib/sync/watcher.ts +64 -64
  807. package/.next/standalone/src/lib/teams.ts +31 -31
  808. package/.next/standalone/src/lib/telemetry.ts +75 -75
  809. package/.next/standalone/src/lib/terminal/server.ts +188 -188
  810. package/.next/standalone/src/lib/tier.ts +38 -38
  811. package/.next/standalone/src/lib/utils.ts +72 -72
  812. package/.next/standalone/src/lib/vms/manager.ts +121 -121
  813. package/.next/standalone/src/middleware.ts +133 -133
  814. package/.next/standalone/src/types/claude.ts +208 -208
  815. package/.next/standalone/src/types/network.ts +61 -61
  816. package/.next/standalone/tests/setup.ts +8 -8
  817. package/.next/standalone/tsconfig.json +34 -34
  818. package/.next/standalone/vitest.config.ts +24 -24
  819. package/LICENSE +661 -661
  820. package/README.md +131 -131
  821. package/bin/cortex-hook.js +79 -79
  822. package/bin/cortex-hook.sh +62 -62
  823. package/bin/cortex-learn-hook.js +138 -138
  824. package/bin/cortex-mcp.js +60 -60
  825. package/bin/cortex-pi-extension.ts +170 -170
  826. package/bin/fix-standalone-externals.js +79 -79
  827. package/bin/lib/auto-setup.js +110 -110
  828. package/bin/mdns-service.js +171 -171
  829. package/bin/postinstall.js +35 -35
  830. package/bin/setup-admin.js +195 -195
  831. package/bin/spaces-dev.js +247 -247
  832. package/bin/spaces-install.js +660 -660
  833. package/bin/spaces-postinstall.js +50 -50
  834. package/bin/spaces-reset-totp.js +50 -50
  835. package/bin/spaces-service.js +1046 -1046
  836. package/bin/spaces-setup.js +253 -253
  837. package/bin/spaces.js +808 -805
  838. package/bin/ssh-auth-keys.sh +68 -68
  839. package/bin/terminal-server.js +2819 -2781
  840. package/package.json +111 -111
  841. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0903a426._.js +0 -98
  842. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09e8ccc9._.js +0 -98
  843. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11c684b1._.js +0 -98
  844. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1572d4ef._.js +0 -98
  845. package/.next/standalone/.next/server/chunks/[root-of-the-server]__186cd0bb._.js +0 -3
  846. package/.next/standalone/.next/server/chunks/[root-of-the-server]__212760e6._.js +0 -98
  847. package/.next/standalone/.next/server/chunks/[root-of-the-server]__228595ec._.js +0 -98
  848. package/.next/standalone/.next/server/chunks/[root-of-the-server]__283c890f._.js +0 -3
  849. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2f300a68._.js +0 -98
  850. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2f452778._.js +0 -98
  851. package/.next/standalone/.next/server/chunks/[root-of-the-server]__35f8e77e._.js +0 -98
  852. package/.next/standalone/.next/server/chunks/[root-of-the-server]__379fc2e9._.js +0 -98
  853. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3b40d79f._.js +0 -98
  854. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3d3dca2b._.js +0 -98
  855. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4d5b78d2._.js +0 -98
  856. package/.next/standalone/.next/server/chunks/[root-of-the-server]__54163e52._.js +0 -98
  857. package/.next/standalone/.next/server/chunks/[root-of-the-server]__563c0817._.js +0 -3
  858. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5812f90a._.js +0 -98
  859. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c5e87f5._.js +0 -98
  860. package/.next/standalone/.next/server/chunks/[root-of-the-server]__60d15b16._.js +0 -98
  861. package/.next/standalone/.next/server/chunks/[root-of-the-server]__69d315e5._.js +0 -3
  862. package/.next/standalone/.next/server/chunks/[root-of-the-server]__71f29038._.js +0 -98
  863. package/.next/standalone/.next/server/chunks/[root-of-the-server]__74084e07._.js +0 -3
  864. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7921aa80._.js +0 -98
  865. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7e077dd8._.js +0 -98
  866. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7ebc4280._.js +0 -131
  867. package/.next/standalone/.next/server/chunks/[root-of-the-server]__857c60bb._.js +0 -98
  868. package/.next/standalone/.next/server/chunks/[root-of-the-server]__874fe565._.js +0 -98
  869. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8e2171f7._.js +0 -98
  870. package/.next/standalone/.next/server/chunks/[root-of-the-server]__95659b2d._.js +0 -98
  871. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9679b91e._.js +0 -98
  872. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a90729a1._.js +0 -98
  873. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad4346fa._.js +0 -98
  874. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b0862d69._.js +0 -98
  875. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b43306ee._.js +0 -98
  876. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b689ff5e._.js +0 -106
  877. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba87daaa._.js +0 -98
  878. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0461005._.js +0 -98
  879. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c1deb5f3._.js +0 -98
  880. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c8a62f42._.js +0 -98
  881. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cabaac2b._.js +0 -98
  882. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cb027619._.js +0 -98
  883. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf608218._.js +0 -98
  884. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cfc1290d._.js +0 -98
  885. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d0109b9b._.js +0 -98
  886. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d0125483._.js +0 -3
  887. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d048ee6b._.js +0 -98
  888. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d12644e7._.js +0 -98
  889. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3cc946c._.js +0 -98
  890. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e6fd27f8._.js +0 -98
  891. package/.next/standalone/.next/server/chunks/[root-of-the-server]__efb8251e._.js +0 -98
  892. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f44c6882._.js +0 -98
  893. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f85283de._.js +0 -98
  894. package/.next/standalone/.next/server/chunks/[root-of-the-server]__feceb3e4._.js +0 -98
  895. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__843070a6._.js +0 -3
  896. package/.next/standalone/.next/server/chunks/ssr/_e84a0c06._.js +0 -3
  897. package/.next/standalone/.next/static/chunks/470cade58d4eceeb.css +0 -3
  898. package/.next/standalone/.next/static/chunks/9d4164833c2c1fd6.js +0 -85
  899. package/.next/standalone/.next/static/chunks/f091f4bf8d80fd07.js +0 -1
  900. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/README.md +0 -46
  901. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  902. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +0 -1
  903. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  904. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +0 -42
  905. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +0 -46
  906. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  907. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +0 -1
  908. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  909. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +0 -42
  910. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +0 -30
  911. package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  912. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  913. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +0 -46
  914. /package/.next/standalone/.next/static/{5S4TviTCiNiTjf6KjXjBo → u1pHON3drz1mBi7owkbBP}/_buildManifest.js +0 -0
  915. /package/.next/standalone/.next/static/{5S4TviTCiNiTjf6KjXjBo → u1pHON3drz1mBi7owkbBP}/_clientMiddlewareManifest.json +0 -0
  916. /package/.next/standalone/.next/static/{5S4TviTCiNiTjf6KjXjBo → u1pHON3drz1mBi7owkbBP}/_ssgManifest.js +0 -0
  917. /package/.next/standalone/node_modules/@img/{sharp-libvips-linux-x64 → sharp-win32-x64}/versions.json +0 -0
@@ -1,551 +1,551 @@
1
- 'use client';
2
-
3
- import { useState, useCallback } from 'react';
4
- import ReactMarkdown from 'react-markdown';
5
- import remarkGfm from 'remark-gfm';
6
- import {
7
- User, Bot, ChevronDown, ChevronRight, Terminal, FileCode,
8
- Copy, Check, Eye, EyeOff, Brain, Wrench, AlertTriangle,
9
- FileText, Search, Globe, Pencil, FolderOpen, Code2, Maximize2, Minimize2,
10
- } from 'lucide-react';
11
- import type { ParsedMessage, ContentBlock } from '@/types/claude';
12
- import { cn } from '@/lib/utils';
13
-
14
- interface MessageRendererProps {
15
- message: ParsedMessage;
16
- isLast?: boolean;
17
- }
18
-
19
- export function MessageRenderer({ message, isLast }: MessageRendererProps) {
20
- if (message.type === 'user') {
21
- return <UserMessageView message={message} />;
22
- }
23
- if (message.type === 'assistant') {
24
- return <AssistantMessageView message={message} isLast={isLast} />;
25
- }
26
- if (message.type === 'system') {
27
- return <SystemMessageView message={message} />;
28
- }
29
- return null;
30
- }
31
-
32
- // ─── Copy Button ─────────────────────────────────────────────
33
-
34
- function CopyButton({ text, className }: { text: string; className?: string }) {
35
- const [copied, setCopied] = useState(false);
36
-
37
- const handleCopy = useCallback(() => {
38
- navigator.clipboard.writeText(text).then(() => {
39
- setCopied(true);
40
- setTimeout(() => setCopied(false), 2000);
41
- });
42
- }, [text]);
43
-
44
- return (
45
- <button
46
- onClick={handleCopy}
47
- className={cn(
48
- 'p-1 rounded hover:bg-zinc-200 dark:hover:bg-zinc-700 transition-colors',
49
- className
50
- )}
51
- title="Copy to clipboard"
52
- >
53
- {copied ? (
54
- <Check className="w-3.5 h-3.5 text-green-500" />
55
- ) : (
56
- <Copy className="w-3.5 h-3.5 text-muted-foreground" />
57
- )}
58
- </button>
59
- );
60
- }
61
-
62
- // ─── User Message ────────────────────────────────────────────
63
-
64
- function UserMessageView({ message }: { message: any }) {
65
- const content = message.message?.content;
66
- const text = typeof content === 'string' ? content : '';
67
- const cwd = message.cwd || '';
68
- const branch = message.gitBranch || '';
69
-
70
- return (
71
- <div className="group relative">
72
- <div className="flex gap-3">
73
- <div className="w-8 h-8 rounded-full bg-blue-500/10 border border-blue-500/20 flex items-center justify-center flex-shrink-0 mt-0.5">
74
- <User className="w-4 h-4 text-blue-500" />
75
- </div>
76
- <div className="flex-1 min-w-0">
77
- <div className="flex items-center gap-2 mb-1">
78
- <span className="text-xs font-semibold text-blue-600 dark:text-blue-400">You</span>
79
- {cwd && (
80
- <span className="text-[10px] text-muted-foreground font-mono truncate max-w-[300px]" title={cwd}>
81
- {cwd.split(/[/\\]/).slice(-2).join('/')}
82
- </span>
83
- )}
84
- {branch && branch !== 'HEAD' && (
85
- <span className="text-[10px] px-1.5 py-0.5 bg-zinc-100 dark:bg-zinc-800 rounded font-mono">
86
- {branch}
87
- </span>
88
- )}
89
- <CopyButton text={text} className="opacity-0 group-hover:opacity-100" />
90
- </div>
91
- <div className="text-sm prose dark:prose-invert max-w-none prose-sm">
92
- <ReactMarkdown remarkPlugins={[remarkGfm]}>{text}</ReactMarkdown>
93
- </div>
94
- </div>
95
- </div>
96
- </div>
97
- );
98
- }
99
-
100
- // ─── Assistant Message ───────────────────────────────────────
101
-
102
- function AssistantMessageView({ message, isLast }: { message: any; isLast?: boolean }) {
103
- const content = message.message?.content;
104
- const model = message.message?.model || '';
105
- const usage = message.message?.usage;
106
- const cost = message.costUSD;
107
- const duration = message.durationMs;
108
- const blocks: ContentBlock[] = Array.isArray(content) ? content : [];
109
- const [showMeta, setShowMeta] = useState(false);
110
-
111
- // Extract all text for copy
112
- const allText = blocks
113
- .filter((b) => b.type === 'text' && b.text)
114
- .map((b) => b.text!)
115
- .join('\n\n');
116
-
117
- return (
118
- <div className="group relative">
119
- <div className="flex gap-3">
120
- <div className="w-8 h-8 rounded-full bg-indigo-500/10 border border-indigo-500/20 flex items-center justify-center flex-shrink-0 mt-0.5">
121
- <Bot className="w-4 h-4 text-indigo-500" />
122
- </div>
123
- <div className="flex-1 min-w-0 space-y-2">
124
- <div className="flex items-center gap-2 flex-wrap">
125
- <span className="text-xs font-semibold text-indigo-600 dark:text-indigo-400">Claude</span>
126
- {model && (
127
- <span className="text-[10px] px-1.5 py-0.5 bg-indigo-50 dark:bg-indigo-950/50 text-indigo-600 dark:text-indigo-300 rounded font-medium">
128
- {formatModel(model)}
129
- </span>
130
- )}
131
- {cost != null && cost > 0 && (
132
- <span className="text-[10px] text-muted-foreground">${cost.toFixed(4)}</span>
133
- )}
134
- {duration != null && duration > 0 && (
135
- <span className="text-[10px] text-muted-foreground">{(duration / 1000).toFixed(1)}s</span>
136
- )}
137
- {allText && <CopyButton text={allText} className="opacity-0 group-hover:opacity-100" />}
138
- {usage && (
139
- <button
140
- onClick={() => setShowMeta(!showMeta)}
141
- className="text-[10px] text-muted-foreground hover:text-foreground opacity-0 group-hover:opacity-100"
142
- >
143
- tokens
144
- </button>
145
- )}
146
- </div>
147
-
148
- {showMeta && usage && (
149
- <div className="text-[10px] text-muted-foreground bg-zinc-50 dark:bg-zinc-900 rounded p-2 font-mono grid grid-cols-2 gap-x-4 gap-y-1">
150
- <span>Input: {(usage.input_tokens || 0).toLocaleString()}</span>
151
- <span>Output: {(usage.output_tokens || 0).toLocaleString()}</span>
152
- {usage.cache_read_input_tokens > 0 && <span>Cache read: {usage.cache_read_input_tokens.toLocaleString()}</span>}
153
- {usage.cache_creation_input_tokens > 0 && <span>Cache write: {usage.cache_creation_input_tokens.toLocaleString()}</span>}
154
- </div>
155
- )}
156
-
157
- {blocks.map((block, i) => (
158
- <ContentBlockRenderer key={i} block={block} />
159
- ))}
160
- </div>
161
- </div>
162
- </div>
163
- );
164
- }
165
-
166
- // ─── System Message ──────────────────────────────────────────
167
-
168
- function SystemMessageView({ message }: { message: any }) {
169
- const content = message.message?.content;
170
- const text = typeof content === 'string' ? content : '';
171
- const [expanded, setExpanded] = useState(false);
172
-
173
- return (
174
- <div className="mx-8 px-4 py-2 bg-zinc-50 dark:bg-zinc-900/50 border border-zinc-200 dark:border-zinc-800 rounded-md">
175
- <button
176
- onClick={() => setExpanded(!expanded)}
177
- className="flex items-center gap-2 text-xs text-muted-foreground w-full"
178
- >
179
- {expanded ? <ChevronDown className="w-3 h-3" /> : <ChevronRight className="w-3 h-3" />}
180
- <span className="font-medium">System</span>
181
- {!expanded && <span className="truncate opacity-50 ml-1">{text.slice(0, 100)}</span>}
182
- </button>
183
- {expanded && (
184
- <div className="mt-2 text-xs text-muted-foreground whitespace-pre-wrap max-h-60 overflow-y-auto border-t border-zinc-200 dark:border-zinc-800 pt-2">
185
- {text}
186
- </div>
187
- )}
188
- </div>
189
- );
190
- }
191
-
192
- // ─── Content Block Router ────────────────────────────────────
193
-
194
- function ContentBlockRenderer({ block }: { block: ContentBlock }) {
195
- if (block.type === 'text' && block.text) {
196
- return <TextBlock text={block.text} />;
197
- }
198
- if (block.type === 'thinking' && block.thinking) {
199
- return <ThinkingBlock thinking={block.thinking} />;
200
- }
201
- if (block.type === 'tool_use') {
202
- return <ToolUseBlock block={block} />;
203
- }
204
- if (block.type === 'tool_result') {
205
- return <ToolResultBlock block={block} />;
206
- }
207
- return null;
208
- }
209
-
210
- // ─── Text Block ──────────────────────────────────────────────
211
-
212
- function TextBlock({ text }: { text: string }) {
213
- return (
214
- <div className="text-sm prose dark:prose-invert max-w-none prose-sm prose-p:leading-relaxed prose-pre:bg-zinc-950 prose-pre:text-zinc-100 prose-pre:border prose-pre:border-zinc-800 prose-code:text-indigo-600 dark:prose-code:text-indigo-400 prose-code:before:content-none prose-code:after:content-none">
215
- <ReactMarkdown
216
- remarkPlugins={[remarkGfm]}
217
- components={{
218
- pre: ({ children, ...props }) => (
219
- <div className="relative group/code">
220
- <pre {...props} className="!mt-2 !mb-2 rounded-lg overflow-x-auto">
221
- {children}
222
- </pre>
223
- </div>
224
- ),
225
- code: ({ className, children, ...props }) => {
226
- const isInline = !className;
227
- if (isInline) {
228
- return (
229
- <code className="px-1.5 py-0.5 bg-zinc-100 dark:bg-zinc-800 rounded text-[13px]" {...props}>
230
- {children}
231
- </code>
232
- );
233
- }
234
- const codeText = String(children).replace(/\n$/, '');
235
- const lang = className?.replace('language-', '') || '';
236
- return (
237
- <div className="relative">
238
- <div className="absolute top-0 right-0 flex items-center gap-1 p-1">
239
- {lang && <span className="text-[10px] text-zinc-500 px-1">{lang}</span>}
240
- <CopyButton text={codeText} />
241
- </div>
242
- <code className={className} {...props}>
243
- {children}
244
- </code>
245
- </div>
246
- );
247
- },
248
- table: ({ children, ...props }) => (
249
- <div className="overflow-x-auto my-2 border border-zinc-200 dark:border-zinc-800 rounded-lg">
250
- <table className="!my-0" {...props}>{children}</table>
251
- </div>
252
- ),
253
- }}
254
- >
255
- {text}
256
- </ReactMarkdown>
257
- </div>
258
- );
259
- }
260
-
261
- // ─── Thinking Block ──────────────────────────────────────────
262
-
263
- function ThinkingBlock({ thinking }: { thinking: string }) {
264
- const [expanded, setExpanded] = useState(false);
265
- const lines = thinking.split('\n').length;
266
- const chars = thinking.length;
267
-
268
- return (
269
- <div className="border border-purple-200 dark:border-purple-900/50 rounded-lg overflow-hidden">
270
- <div className="flex items-center bg-purple-50 dark:bg-purple-950/20">
271
- <button
272
- onClick={() => setExpanded(!expanded)}
273
- className="flex-1 px-3 py-2 flex items-center gap-2 text-xs hover:bg-purple-100 dark:hover:bg-purple-950/40 transition-colors"
274
- >
275
- {expanded ? <ChevronDown className="w-3 h-3 text-purple-500" /> : <ChevronRight className="w-3 h-3 text-purple-500" />}
276
- <Brain className="w-3.5 h-3.5 text-purple-500" />
277
- <span className="font-medium text-purple-700 dark:text-purple-300">Thinking</span>
278
- <span className="text-purple-500/60 ml-1">{lines} lines, {chars > 1000 ? `${(chars / 1000).toFixed(1)}K` : chars} chars</span>
279
- {!expanded && (
280
- <span className="truncate text-purple-500/40 ml-2 flex-1 text-left">{thinking.slice(0, 120)}</span>
281
- )}
282
- </button>
283
- <div className="pr-2">
284
- <CopyButton text={thinking} />
285
- </div>
286
- </div>
287
- {expanded && (
288
- <div className="p-4 text-xs text-purple-900/70 dark:text-purple-200/70 whitespace-pre-wrap max-h-[500px] overflow-y-auto bg-purple-50/50 dark:bg-purple-950/10 font-mono leading-relaxed">
289
- {thinking}
290
- </div>
291
- )}
292
- </div>
293
- );
294
- }
295
-
296
- // ─── Tool Use Block ──────────────────────────────────────────
297
-
298
- function ToolUseBlock({ block }: { block: ContentBlock }) {
299
- const [expanded, setExpanded] = useState(false);
300
- const toolName = block.name || 'Unknown Tool';
301
- const input = block.input;
302
-
303
- const { icon: Icon, color, bg, label } = getToolStyle(toolName);
304
- const preview = input ? getToolPreview(toolName, input) : '';
305
-
306
- return (
307
- <div className={cn('border rounded-lg overflow-hidden', `border-${color}-200 dark:border-${color}-900/50`)}>
308
- <button
309
- onClick={() => setExpanded(!expanded)}
310
- className={cn(
311
- 'w-full px-3 py-2 flex items-center gap-2 text-xs transition-colors',
312
- bg
313
- )}
314
- >
315
- {expanded ? <ChevronDown className="w-3 h-3" /> : <ChevronRight className="w-3 h-3" />}
316
- <Icon className={cn('w-3.5 h-3.5', `text-${color}-600 dark:text-${color}-400`)} />
317
- <span className={cn('font-medium', `text-${color}-700 dark:text-${color}-300`)}>{label}</span>
318
- {preview && !expanded && (
319
- <span className="truncate text-muted-foreground ml-1 flex-1 text-left font-mono">{preview}</span>
320
- )}
321
- </button>
322
-
323
- {expanded && input && (
324
- <div className="border-t border-zinc-200 dark:border-zinc-800">
325
- <ToolInputRenderer toolName={toolName} input={input} />
326
- </div>
327
- )}
328
- </div>
329
- );
330
- }
331
-
332
- function ToolInputRenderer({ toolName, input }: { toolName: string; input: Record<string, unknown> }) {
333
- const name = toolName.toLowerCase();
334
-
335
- // Bash / command - show the command prominently
336
- if (name === 'bash' || name.includes('command')) {
337
- const command = String(input.command || '');
338
- const description = String(input.description || '');
339
- return (
340
- <div>
341
- {description && (
342
- <div className="px-3 py-1.5 text-xs text-muted-foreground border-b border-zinc-200 dark:border-zinc-800 bg-zinc-50 dark:bg-zinc-900/50">
343
- {description}
344
- </div>
345
- )}
346
- <div className="relative">
347
- <pre className="p-3 bg-zinc-950 text-green-400 text-xs font-mono overflow-x-auto whitespace-pre-wrap">
348
- <span className="text-zinc-500 select-none">$ </span>{command}
349
- </pre>
350
- <CopyButton text={command} className="absolute top-1 right-1" />
351
- </div>
352
- </div>
353
- );
354
- }
355
-
356
- // Write / Edit / Read - show file path and content
357
- if (name === 'write' || name === 'edit' || name === 'read' || name === 'multiedit') {
358
- const filePath = String(input.file_path || input.path || '');
359
- const content = input.content ? String(input.content) : null;
360
- const oldStr = input.old_string ? String(input.old_string) : null;
361
- const newStr = input.new_string ? String(input.new_string) : null;
362
-
363
- return (
364
- <div>
365
- {filePath && (
366
- <div className="px-3 py-1.5 text-xs font-mono text-muted-foreground border-b border-zinc-200 dark:border-zinc-800 bg-zinc-50 dark:bg-zinc-900/50 flex items-center gap-2">
367
- <FileText className="w-3 h-3" />
368
- {filePath}
369
- <CopyButton text={filePath} />
370
- </div>
371
- )}
372
- {content && (
373
- <div className="relative">
374
- <pre className="p-3 bg-zinc-950 text-zinc-100 text-xs font-mono overflow-x-auto max-h-[400px] overflow-y-auto whitespace-pre-wrap">{content.slice(0, 5000)}{content.length > 5000 ? `\n\n... (${content.length.toLocaleString()} chars total)` : ''}</pre>
375
- <CopyButton text={content} className="absolute top-1 right-1" />
376
- </div>
377
- )}
378
- {oldStr && newStr && (
379
- <div className="text-xs font-mono">
380
- <div className="px-3 py-2 bg-red-950/30 text-red-300 border-b border-zinc-800 overflow-x-auto whitespace-pre-wrap max-h-[200px] overflow-y-auto">
381
- <span className="text-red-500/60 select-none">- </span>{oldStr}
382
- </div>
383
- <div className="px-3 py-2 bg-green-950/30 text-green-300 overflow-x-auto whitespace-pre-wrap max-h-[200px] overflow-y-auto">
384
- <span className="text-green-500/60 select-none">+ </span>{newStr}
385
- </div>
386
- </div>
387
- )}
388
- {!content && !oldStr && (
389
- <pre className="p-3 bg-zinc-950 text-zinc-300 text-xs font-mono overflow-x-auto max-h-[300px] overflow-y-auto">{JSON.stringify(input, null, 2)}</pre>
390
- )}
391
- </div>
392
- );
393
- }
394
-
395
- // Glob / Grep / Search
396
- if (name === 'glob' || name === 'grep' || name.includes('search')) {
397
- const pattern = String(input.pattern || input.query || '');
398
- const path = String(input.path || '');
399
- return (
400
- <div className="px-3 py-2 bg-zinc-950 text-zinc-100 text-xs font-mono">
401
- {pattern && <div><span className="text-zinc-500">pattern: </span><span className="text-amber-400">{pattern}</span></div>}
402
- {path && <div><span className="text-zinc-500">path: </span>{path}</div>}
403
- {Object.entries(input).filter(([k]) => !['pattern', 'query', 'path'].includes(k)).map(([k, v]) => (
404
- <div key={k}><span className="text-zinc-500">{k}: </span>{String(v)}</div>
405
- ))}
406
- </div>
407
- );
408
- }
409
-
410
- // Task (subagent spawn)
411
- if (name === 'task') {
412
- const prompt = String(input.prompt || '');
413
- const agentType = String(input.subagent_type || '');
414
- const desc = String(input.description || '');
415
- return (
416
- <div>
417
- <div className="px-3 py-1.5 text-xs border-b border-zinc-200 dark:border-zinc-800 bg-zinc-50 dark:bg-zinc-900/50 flex items-center gap-2">
418
- {agentType && <span className="px-1.5 py-0.5 bg-indigo-100 dark:bg-indigo-950 text-indigo-600 dark:text-indigo-300 rounded font-medium">{agentType}</span>}
419
- {desc && <span className="text-muted-foreground">{desc}</span>}
420
- </div>
421
- <pre className="p-3 bg-zinc-950 text-zinc-100 text-xs font-mono overflow-x-auto max-h-[300px] overflow-y-auto whitespace-pre-wrap">{prompt}</pre>
422
- </div>
423
- );
424
- }
425
-
426
- // Default: JSON view
427
- return (
428
- <div className="relative">
429
- <pre className="p-3 bg-zinc-950 text-zinc-300 text-xs font-mono overflow-x-auto max-h-[400px] overflow-y-auto whitespace-pre-wrap">{JSON.stringify(input, null, 2)}</pre>
430
- <CopyButton text={JSON.stringify(input, null, 2)} className="absolute top-1 right-1" />
431
- </div>
432
- );
433
- }
434
-
435
- // ─── Tool Result Block ───────────────────────────────────────
436
-
437
- function ToolResultBlock({ block }: { block: ContentBlock }) {
438
- const [expanded, setExpanded] = useState(false);
439
- const content = typeof block.content === 'string'
440
- ? block.content
441
- : Array.isArray(block.content)
442
- ? block.content.map((c: any) => c.text || '').join('\n')
443
- : '';
444
-
445
- if (!content) return null;
446
-
447
- const isError = block.is_error;
448
- const isLong = content.length > 200;
449
- const lines = content.split('\n').length;
450
-
451
- return (
452
- <div className={cn(
453
- 'border rounded-lg overflow-hidden',
454
- isError
455
- ? 'border-red-200 dark:border-red-900/50'
456
- : 'border-zinc-200 dark:border-zinc-800'
457
- )}>
458
- <div className={cn(
459
- 'flex items-center',
460
- isError
461
- ? 'bg-red-50 dark:bg-red-950/20'
462
- : 'bg-zinc-50 dark:bg-zinc-900/50'
463
- )}>
464
- <button
465
- onClick={() => setExpanded(!expanded)}
466
- className={cn(
467
- 'flex-1 px-3 py-2 flex items-center gap-2 text-xs transition-colors',
468
- isError
469
- ? 'hover:bg-red-100 dark:hover:bg-red-950/40'
470
- : 'hover:bg-zinc-100 dark:hover:bg-zinc-800/50'
471
- )}
472
- >
473
- {expanded ? <ChevronDown className="w-3 h-3" /> : <ChevronRight className="w-3 h-3" />}
474
- {isError ? (
475
- <AlertTriangle className="w-3.5 h-3.5 text-red-500" />
476
- ) : (
477
- <Check className="w-3.5 h-3.5 text-green-500" />
478
- )}
479
- <span className={cn('font-medium', isError ? 'text-red-600 dark:text-red-400' : 'text-zinc-600 dark:text-zinc-400')}>
480
- {isError ? 'Error' : 'Output'}
481
- </span>
482
- <span className="text-muted-foreground/50">{lines} lines</span>
483
- {!expanded && (
484
- <span className="truncate text-muted-foreground/50 ml-1 flex-1 text-left font-mono">{content.slice(0, 80)}</span>
485
- )}
486
- </button>
487
- <div className="pr-2">
488
- <CopyButton text={content} />
489
- </div>
490
- </div>
491
- {expanded && (
492
- <div className={cn(
493
- 'p-3 text-xs font-mono whitespace-pre-wrap overflow-y-auto',
494
- isLong ? 'max-h-[500px]' : '',
495
- isError
496
- ? 'bg-red-950/10 text-red-200'
497
- : 'bg-zinc-950 text-zinc-300'
498
- )}>
499
- {content}
500
- </div>
501
- )}
502
- </div>
503
- );
504
- }
505
-
506
- // ─── Tool Style Lookup ───────────────────────────────────────
507
-
508
- function getToolStyle(toolName: string): { icon: any; color: string; bg: string; label: string } {
509
- const name = toolName.toLowerCase();
510
-
511
- if (name === 'bash' || name.includes('command'))
512
- return { icon: Terminal, color: 'amber', bg: 'bg-amber-50 dark:bg-amber-950/20 hover:bg-amber-100 dark:hover:bg-amber-950/40', label: 'Bash' };
513
- if (name === 'write')
514
- return { icon: Pencil, color: 'blue', bg: 'bg-blue-50 dark:bg-blue-950/20 hover:bg-blue-100 dark:hover:bg-blue-950/40', label: 'Write' };
515
- if (name === 'edit' || name === 'multiedit')
516
- return { icon: Pencil, color: 'emerald', bg: 'bg-emerald-50 dark:bg-emerald-950/20 hover:bg-emerald-100 dark:hover:bg-emerald-950/40', label: name === 'multiedit' ? 'MultiEdit' : 'Edit' };
517
- if (name === 'read')
518
- return { icon: Eye, color: 'sky', bg: 'bg-sky-50 dark:bg-sky-950/20 hover:bg-sky-100 dark:hover:bg-sky-950/40', label: 'Read' };
519
- if (name === 'glob')
520
- return { icon: FolderOpen, color: 'violet', bg: 'bg-violet-50 dark:bg-violet-950/20 hover:bg-violet-100 dark:hover:bg-violet-950/40', label: 'Glob' };
521
- if (name === 'grep')
522
- return { icon: Search, color: 'orange', bg: 'bg-orange-50 dark:bg-orange-950/20 hover:bg-orange-100 dark:hover:bg-orange-950/40', label: 'Grep' };
523
- if (name === 'task')
524
- return { icon: Bot, color: 'indigo', bg: 'bg-indigo-50 dark:bg-indigo-950/20 hover:bg-indigo-100 dark:hover:bg-indigo-950/40', label: 'Task (Sub-agent)' };
525
- if (name.includes('web') || name.includes('fetch'))
526
- return { icon: Globe, color: 'cyan', bg: 'bg-cyan-50 dark:bg-cyan-950/20 hover:bg-cyan-100 dark:hover:bg-cyan-950/40', label: toolName };
527
- if (name.includes('notebook'))
528
- return { icon: Code2, color: 'pink', bg: 'bg-pink-50 dark:bg-pink-950/20 hover:bg-pink-100 dark:hover:bg-pink-950/40', label: 'NotebookEdit' };
529
-
530
- return { icon: Wrench, color: 'zinc', bg: 'bg-zinc-50 dark:bg-zinc-900/50 hover:bg-zinc-100 dark:hover:bg-zinc-800/50', label: toolName };
531
- }
532
-
533
- function getToolPreview(toolName: string, input: Record<string, unknown>): string {
534
- if (input.command) return `$ ${String(input.command).slice(0, 80)}`;
535
- if (input.file_path) return String(input.file_path);
536
- if (input.pattern) return `"${input.pattern}"`;
537
- if (input.query) return `"${input.query}"`;
538
- if (input.url) return String(input.url).slice(0, 60);
539
- if (input.prompt) return String(input.prompt).slice(0, 60);
540
- if (input.subagent_type) return `[${input.subagent_type}]`;
541
- return '';
542
- }
543
-
544
- function formatModel(model: string): string {
545
- if (model.includes('opus-4-6')) return 'Opus 4.6';
546
- if (model.includes('opus-4-5')) return 'Opus 4.5';
547
- if (model.includes('sonnet-4-5')) return 'Sonnet 4.5';
548
- if (model.includes('sonnet-4-6')) return 'Sonnet 4.6';
549
- if (model.includes('haiku-4-5')) return 'Haiku 4.5';
550
- return model.split('-').slice(1, 3).join(' ');
551
- }
1
+ 'use client';
2
+
3
+ import { useState, useCallback } from 'react';
4
+ import ReactMarkdown from 'react-markdown';
5
+ import remarkGfm from 'remark-gfm';
6
+ import {
7
+ User, Bot, ChevronDown, ChevronRight, Terminal, FileCode,
8
+ Copy, Check, Eye, EyeOff, Brain, Wrench, AlertTriangle,
9
+ FileText, Search, Globe, Pencil, FolderOpen, Code2, Maximize2, Minimize2,
10
+ } from 'lucide-react';
11
+ import type { ParsedMessage, ContentBlock } from '@/types/claude';
12
+ import { cn } from '@/lib/utils';
13
+
14
+ interface MessageRendererProps {
15
+ message: ParsedMessage;
16
+ isLast?: boolean;
17
+ }
18
+
19
+ export function MessageRenderer({ message, isLast }: MessageRendererProps) {
20
+ if (message.type === 'user') {
21
+ return <UserMessageView message={message} />;
22
+ }
23
+ if (message.type === 'assistant') {
24
+ return <AssistantMessageView message={message} isLast={isLast} />;
25
+ }
26
+ if (message.type === 'system') {
27
+ return <SystemMessageView message={message} />;
28
+ }
29
+ return null;
30
+ }
31
+
32
+ // ─── Copy Button ─────────────────────────────────────────────
33
+
34
+ function CopyButton({ text, className }: { text: string; className?: string }) {
35
+ const [copied, setCopied] = useState(false);
36
+
37
+ const handleCopy = useCallback(() => {
38
+ navigator.clipboard.writeText(text).then(() => {
39
+ setCopied(true);
40
+ setTimeout(() => setCopied(false), 2000);
41
+ });
42
+ }, [text]);
43
+
44
+ return (
45
+ <button
46
+ onClick={handleCopy}
47
+ className={cn(
48
+ 'p-1 rounded hover:bg-zinc-200 dark:hover:bg-zinc-700 transition-colors',
49
+ className
50
+ )}
51
+ title="Copy to clipboard"
52
+ >
53
+ {copied ? (
54
+ <Check className="w-3.5 h-3.5 text-green-500" />
55
+ ) : (
56
+ <Copy className="w-3.5 h-3.5 text-muted-foreground" />
57
+ )}
58
+ </button>
59
+ );
60
+ }
61
+
62
+ // ─── User Message ────────────────────────────────────────────
63
+
64
+ function UserMessageView({ message }: { message: any }) {
65
+ const content = message.message?.content;
66
+ const text = typeof content === 'string' ? content : '';
67
+ const cwd = message.cwd || '';
68
+ const branch = message.gitBranch || '';
69
+
70
+ return (
71
+ <div className="group relative">
72
+ <div className="flex gap-3">
73
+ <div className="w-8 h-8 rounded-full bg-blue-500/10 border border-blue-500/20 flex items-center justify-center flex-shrink-0 mt-0.5">
74
+ <User className="w-4 h-4 text-blue-500" />
75
+ </div>
76
+ <div className="flex-1 min-w-0">
77
+ <div className="flex items-center gap-2 mb-1">
78
+ <span className="text-xs font-semibold text-blue-600 dark:text-blue-400">You</span>
79
+ {cwd && (
80
+ <span className="text-[10px] text-muted-foreground font-mono truncate max-w-[300px]" title={cwd}>
81
+ {cwd.split(/[/\\]/).slice(-2).join('/')}
82
+ </span>
83
+ )}
84
+ {branch && branch !== 'HEAD' && (
85
+ <span className="text-[10px] px-1.5 py-0.5 bg-zinc-100 dark:bg-zinc-800 rounded font-mono">
86
+ {branch}
87
+ </span>
88
+ )}
89
+ <CopyButton text={text} className="opacity-0 group-hover:opacity-100" />
90
+ </div>
91
+ <div className="text-sm prose dark:prose-invert max-w-none prose-sm">
92
+ <ReactMarkdown remarkPlugins={[remarkGfm]}>{text}</ReactMarkdown>
93
+ </div>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ );
98
+ }
99
+
100
+ // ─── Assistant Message ───────────────────────────────────────
101
+
102
+ function AssistantMessageView({ message, isLast }: { message: any; isLast?: boolean }) {
103
+ const content = message.message?.content;
104
+ const model = message.message?.model || '';
105
+ const usage = message.message?.usage;
106
+ const cost = message.costUSD;
107
+ const duration = message.durationMs;
108
+ const blocks: ContentBlock[] = Array.isArray(content) ? content : [];
109
+ const [showMeta, setShowMeta] = useState(false);
110
+
111
+ // Extract all text for copy
112
+ const allText = blocks
113
+ .filter((b) => b.type === 'text' && b.text)
114
+ .map((b) => b.text!)
115
+ .join('\n\n');
116
+
117
+ return (
118
+ <div className="group relative">
119
+ <div className="flex gap-3">
120
+ <div className="w-8 h-8 rounded-full bg-indigo-500/10 border border-indigo-500/20 flex items-center justify-center flex-shrink-0 mt-0.5">
121
+ <Bot className="w-4 h-4 text-indigo-500" />
122
+ </div>
123
+ <div className="flex-1 min-w-0 space-y-2">
124
+ <div className="flex items-center gap-2 flex-wrap">
125
+ <span className="text-xs font-semibold text-indigo-600 dark:text-indigo-400">Claude</span>
126
+ {model && (
127
+ <span className="text-[10px] px-1.5 py-0.5 bg-indigo-50 dark:bg-indigo-950/50 text-indigo-600 dark:text-indigo-300 rounded font-medium">
128
+ {formatModel(model)}
129
+ </span>
130
+ )}
131
+ {cost != null && cost > 0 && (
132
+ <span className="text-[10px] text-muted-foreground">${cost.toFixed(4)}</span>
133
+ )}
134
+ {duration != null && duration > 0 && (
135
+ <span className="text-[10px] text-muted-foreground">{(duration / 1000).toFixed(1)}s</span>
136
+ )}
137
+ {allText && <CopyButton text={allText} className="opacity-0 group-hover:opacity-100" />}
138
+ {usage && (
139
+ <button
140
+ onClick={() => setShowMeta(!showMeta)}
141
+ className="text-[10px] text-muted-foreground hover:text-foreground opacity-0 group-hover:opacity-100"
142
+ >
143
+ tokens
144
+ </button>
145
+ )}
146
+ </div>
147
+
148
+ {showMeta && usage && (
149
+ <div className="text-[10px] text-muted-foreground bg-zinc-50 dark:bg-zinc-900 rounded p-2 font-mono grid grid-cols-2 gap-x-4 gap-y-1">
150
+ <span>Input: {(usage.input_tokens || 0).toLocaleString()}</span>
151
+ <span>Output: {(usage.output_tokens || 0).toLocaleString()}</span>
152
+ {usage.cache_read_input_tokens > 0 && <span>Cache read: {usage.cache_read_input_tokens.toLocaleString()}</span>}
153
+ {usage.cache_creation_input_tokens > 0 && <span>Cache write: {usage.cache_creation_input_tokens.toLocaleString()}</span>}
154
+ </div>
155
+ )}
156
+
157
+ {blocks.map((block, i) => (
158
+ <ContentBlockRenderer key={i} block={block} />
159
+ ))}
160
+ </div>
161
+ </div>
162
+ </div>
163
+ );
164
+ }
165
+
166
+ // ─── System Message ──────────────────────────────────────────
167
+
168
+ function SystemMessageView({ message }: { message: any }) {
169
+ const content = message.message?.content;
170
+ const text = typeof content === 'string' ? content : '';
171
+ const [expanded, setExpanded] = useState(false);
172
+
173
+ return (
174
+ <div className="mx-8 px-4 py-2 bg-zinc-50 dark:bg-zinc-900/50 border border-zinc-200 dark:border-zinc-800 rounded-md">
175
+ <button
176
+ onClick={() => setExpanded(!expanded)}
177
+ className="flex items-center gap-2 text-xs text-muted-foreground w-full"
178
+ >
179
+ {expanded ? <ChevronDown className="w-3 h-3" /> : <ChevronRight className="w-3 h-3" />}
180
+ <span className="font-medium">System</span>
181
+ {!expanded && <span className="truncate opacity-50 ml-1">{text.slice(0, 100)}</span>}
182
+ </button>
183
+ {expanded && (
184
+ <div className="mt-2 text-xs text-muted-foreground whitespace-pre-wrap max-h-60 overflow-y-auto border-t border-zinc-200 dark:border-zinc-800 pt-2">
185
+ {text}
186
+ </div>
187
+ )}
188
+ </div>
189
+ );
190
+ }
191
+
192
+ // ─── Content Block Router ────────────────────────────────────
193
+
194
+ function ContentBlockRenderer({ block }: { block: ContentBlock }) {
195
+ if (block.type === 'text' && block.text) {
196
+ return <TextBlock text={block.text} />;
197
+ }
198
+ if (block.type === 'thinking' && block.thinking) {
199
+ return <ThinkingBlock thinking={block.thinking} />;
200
+ }
201
+ if (block.type === 'tool_use') {
202
+ return <ToolUseBlock block={block} />;
203
+ }
204
+ if (block.type === 'tool_result') {
205
+ return <ToolResultBlock block={block} />;
206
+ }
207
+ return null;
208
+ }
209
+
210
+ // ─── Text Block ──────────────────────────────────────────────
211
+
212
+ function TextBlock({ text }: { text: string }) {
213
+ return (
214
+ <div className="text-sm prose dark:prose-invert max-w-none prose-sm prose-p:leading-relaxed prose-pre:bg-zinc-950 prose-pre:text-zinc-100 prose-pre:border prose-pre:border-zinc-800 prose-code:text-indigo-600 dark:prose-code:text-indigo-400 prose-code:before:content-none prose-code:after:content-none">
215
+ <ReactMarkdown
216
+ remarkPlugins={[remarkGfm]}
217
+ components={{
218
+ pre: ({ children, ...props }) => (
219
+ <div className="relative group/code">
220
+ <pre {...props} className="!mt-2 !mb-2 rounded-lg overflow-x-auto">
221
+ {children}
222
+ </pre>
223
+ </div>
224
+ ),
225
+ code: ({ className, children, ...props }) => {
226
+ const isInline = !className;
227
+ if (isInline) {
228
+ return (
229
+ <code className="px-1.5 py-0.5 bg-zinc-100 dark:bg-zinc-800 rounded text-[13px]" {...props}>
230
+ {children}
231
+ </code>
232
+ );
233
+ }
234
+ const codeText = String(children).replace(/\n$/, '');
235
+ const lang = className?.replace('language-', '') || '';
236
+ return (
237
+ <div className="relative">
238
+ <div className="absolute top-0 right-0 flex items-center gap-1 p-1">
239
+ {lang && <span className="text-[10px] text-zinc-500 px-1">{lang}</span>}
240
+ <CopyButton text={codeText} />
241
+ </div>
242
+ <code className={className} {...props}>
243
+ {children}
244
+ </code>
245
+ </div>
246
+ );
247
+ },
248
+ table: ({ children, ...props }) => (
249
+ <div className="overflow-x-auto my-2 border border-zinc-200 dark:border-zinc-800 rounded-lg">
250
+ <table className="!my-0" {...props}>{children}</table>
251
+ </div>
252
+ ),
253
+ }}
254
+ >
255
+ {text}
256
+ </ReactMarkdown>
257
+ </div>
258
+ );
259
+ }
260
+
261
+ // ─── Thinking Block ──────────────────────────────────────────
262
+
263
+ function ThinkingBlock({ thinking }: { thinking: string }) {
264
+ const [expanded, setExpanded] = useState(false);
265
+ const lines = thinking.split('\n').length;
266
+ const chars = thinking.length;
267
+
268
+ return (
269
+ <div className="border border-purple-200 dark:border-purple-900/50 rounded-lg overflow-hidden">
270
+ <div className="flex items-center bg-purple-50 dark:bg-purple-950/20">
271
+ <button
272
+ onClick={() => setExpanded(!expanded)}
273
+ className="flex-1 px-3 py-2 flex items-center gap-2 text-xs hover:bg-purple-100 dark:hover:bg-purple-950/40 transition-colors"
274
+ >
275
+ {expanded ? <ChevronDown className="w-3 h-3 text-purple-500" /> : <ChevronRight className="w-3 h-3 text-purple-500" />}
276
+ <Brain className="w-3.5 h-3.5 text-purple-500" />
277
+ <span className="font-medium text-purple-700 dark:text-purple-300">Thinking</span>
278
+ <span className="text-purple-500/60 ml-1">{lines} lines, {chars > 1000 ? `${(chars / 1000).toFixed(1)}K` : chars} chars</span>
279
+ {!expanded && (
280
+ <span className="truncate text-purple-500/40 ml-2 flex-1 text-left">{thinking.slice(0, 120)}</span>
281
+ )}
282
+ </button>
283
+ <div className="pr-2">
284
+ <CopyButton text={thinking} />
285
+ </div>
286
+ </div>
287
+ {expanded && (
288
+ <div className="p-4 text-xs text-purple-900/70 dark:text-purple-200/70 whitespace-pre-wrap max-h-[500px] overflow-y-auto bg-purple-50/50 dark:bg-purple-950/10 font-mono leading-relaxed">
289
+ {thinking}
290
+ </div>
291
+ )}
292
+ </div>
293
+ );
294
+ }
295
+
296
+ // ─── Tool Use Block ──────────────────────────────────────────
297
+
298
+ function ToolUseBlock({ block }: { block: ContentBlock }) {
299
+ const [expanded, setExpanded] = useState(false);
300
+ const toolName = block.name || 'Unknown Tool';
301
+ const input = block.input;
302
+
303
+ const { icon: Icon, color, bg, label } = getToolStyle(toolName);
304
+ const preview = input ? getToolPreview(toolName, input) : '';
305
+
306
+ return (
307
+ <div className={cn('border rounded-lg overflow-hidden', `border-${color}-200 dark:border-${color}-900/50`)}>
308
+ <button
309
+ onClick={() => setExpanded(!expanded)}
310
+ className={cn(
311
+ 'w-full px-3 py-2 flex items-center gap-2 text-xs transition-colors',
312
+ bg
313
+ )}
314
+ >
315
+ {expanded ? <ChevronDown className="w-3 h-3" /> : <ChevronRight className="w-3 h-3" />}
316
+ <Icon className={cn('w-3.5 h-3.5', `text-${color}-600 dark:text-${color}-400`)} />
317
+ <span className={cn('font-medium', `text-${color}-700 dark:text-${color}-300`)}>{label}</span>
318
+ {preview && !expanded && (
319
+ <span className="truncate text-muted-foreground ml-1 flex-1 text-left font-mono">{preview}</span>
320
+ )}
321
+ </button>
322
+
323
+ {expanded && input && (
324
+ <div className="border-t border-zinc-200 dark:border-zinc-800">
325
+ <ToolInputRenderer toolName={toolName} input={input} />
326
+ </div>
327
+ )}
328
+ </div>
329
+ );
330
+ }
331
+
332
+ function ToolInputRenderer({ toolName, input }: { toolName: string; input: Record<string, unknown> }) {
333
+ const name = toolName.toLowerCase();
334
+
335
+ // Bash / command - show the command prominently
336
+ if (name === 'bash' || name.includes('command')) {
337
+ const command = String(input.command || '');
338
+ const description = String(input.description || '');
339
+ return (
340
+ <div>
341
+ {description && (
342
+ <div className="px-3 py-1.5 text-xs text-muted-foreground border-b border-zinc-200 dark:border-zinc-800 bg-zinc-50 dark:bg-zinc-900/50">
343
+ {description}
344
+ </div>
345
+ )}
346
+ <div className="relative">
347
+ <pre className="p-3 bg-zinc-950 text-green-400 text-xs font-mono overflow-x-auto whitespace-pre-wrap">
348
+ <span className="text-zinc-500 select-none">$ </span>{command}
349
+ </pre>
350
+ <CopyButton text={command} className="absolute top-1 right-1" />
351
+ </div>
352
+ </div>
353
+ );
354
+ }
355
+
356
+ // Write / Edit / Read - show file path and content
357
+ if (name === 'write' || name === 'edit' || name === 'read' || name === 'multiedit') {
358
+ const filePath = String(input.file_path || input.path || '');
359
+ const content = input.content ? String(input.content) : null;
360
+ const oldStr = input.old_string ? String(input.old_string) : null;
361
+ const newStr = input.new_string ? String(input.new_string) : null;
362
+
363
+ return (
364
+ <div>
365
+ {filePath && (
366
+ <div className="px-3 py-1.5 text-xs font-mono text-muted-foreground border-b border-zinc-200 dark:border-zinc-800 bg-zinc-50 dark:bg-zinc-900/50 flex items-center gap-2">
367
+ <FileText className="w-3 h-3" />
368
+ {filePath}
369
+ <CopyButton text={filePath} />
370
+ </div>
371
+ )}
372
+ {content && (
373
+ <div className="relative">
374
+ <pre className="p-3 bg-zinc-950 text-zinc-100 text-xs font-mono overflow-x-auto max-h-[400px] overflow-y-auto whitespace-pre-wrap">{content.slice(0, 5000)}{content.length > 5000 ? `\n\n... (${content.length.toLocaleString()} chars total)` : ''}</pre>
375
+ <CopyButton text={content} className="absolute top-1 right-1" />
376
+ </div>
377
+ )}
378
+ {oldStr && newStr && (
379
+ <div className="text-xs font-mono">
380
+ <div className="px-3 py-2 bg-red-950/30 text-red-300 border-b border-zinc-800 overflow-x-auto whitespace-pre-wrap max-h-[200px] overflow-y-auto">
381
+ <span className="text-red-500/60 select-none">- </span>{oldStr}
382
+ </div>
383
+ <div className="px-3 py-2 bg-green-950/30 text-green-300 overflow-x-auto whitespace-pre-wrap max-h-[200px] overflow-y-auto">
384
+ <span className="text-green-500/60 select-none">+ </span>{newStr}
385
+ </div>
386
+ </div>
387
+ )}
388
+ {!content && !oldStr && (
389
+ <pre className="p-3 bg-zinc-950 text-zinc-300 text-xs font-mono overflow-x-auto max-h-[300px] overflow-y-auto">{JSON.stringify(input, null, 2)}</pre>
390
+ )}
391
+ </div>
392
+ );
393
+ }
394
+
395
+ // Glob / Grep / Search
396
+ if (name === 'glob' || name === 'grep' || name.includes('search')) {
397
+ const pattern = String(input.pattern || input.query || '');
398
+ const path = String(input.path || '');
399
+ return (
400
+ <div className="px-3 py-2 bg-zinc-950 text-zinc-100 text-xs font-mono">
401
+ {pattern && <div><span className="text-zinc-500">pattern: </span><span className="text-amber-400">{pattern}</span></div>}
402
+ {path && <div><span className="text-zinc-500">path: </span>{path}</div>}
403
+ {Object.entries(input).filter(([k]) => !['pattern', 'query', 'path'].includes(k)).map(([k, v]) => (
404
+ <div key={k}><span className="text-zinc-500">{k}: </span>{String(v)}</div>
405
+ ))}
406
+ </div>
407
+ );
408
+ }
409
+
410
+ // Task (subagent spawn)
411
+ if (name === 'task') {
412
+ const prompt = String(input.prompt || '');
413
+ const agentType = String(input.subagent_type || '');
414
+ const desc = String(input.description || '');
415
+ return (
416
+ <div>
417
+ <div className="px-3 py-1.5 text-xs border-b border-zinc-200 dark:border-zinc-800 bg-zinc-50 dark:bg-zinc-900/50 flex items-center gap-2">
418
+ {agentType && <span className="px-1.5 py-0.5 bg-indigo-100 dark:bg-indigo-950 text-indigo-600 dark:text-indigo-300 rounded font-medium">{agentType}</span>}
419
+ {desc && <span className="text-muted-foreground">{desc}</span>}
420
+ </div>
421
+ <pre className="p-3 bg-zinc-950 text-zinc-100 text-xs font-mono overflow-x-auto max-h-[300px] overflow-y-auto whitespace-pre-wrap">{prompt}</pre>
422
+ </div>
423
+ );
424
+ }
425
+
426
+ // Default: JSON view
427
+ return (
428
+ <div className="relative">
429
+ <pre className="p-3 bg-zinc-950 text-zinc-300 text-xs font-mono overflow-x-auto max-h-[400px] overflow-y-auto whitespace-pre-wrap">{JSON.stringify(input, null, 2)}</pre>
430
+ <CopyButton text={JSON.stringify(input, null, 2)} className="absolute top-1 right-1" />
431
+ </div>
432
+ );
433
+ }
434
+
435
+ // ─── Tool Result Block ───────────────────────────────────────
436
+
437
+ function ToolResultBlock({ block }: { block: ContentBlock }) {
438
+ const [expanded, setExpanded] = useState(false);
439
+ const content = typeof block.content === 'string'
440
+ ? block.content
441
+ : Array.isArray(block.content)
442
+ ? block.content.map((c: any) => c.text || '').join('\n')
443
+ : '';
444
+
445
+ if (!content) return null;
446
+
447
+ const isError = block.is_error;
448
+ const isLong = content.length > 200;
449
+ const lines = content.split('\n').length;
450
+
451
+ return (
452
+ <div className={cn(
453
+ 'border rounded-lg overflow-hidden',
454
+ isError
455
+ ? 'border-red-200 dark:border-red-900/50'
456
+ : 'border-zinc-200 dark:border-zinc-800'
457
+ )}>
458
+ <div className={cn(
459
+ 'flex items-center',
460
+ isError
461
+ ? 'bg-red-50 dark:bg-red-950/20'
462
+ : 'bg-zinc-50 dark:bg-zinc-900/50'
463
+ )}>
464
+ <button
465
+ onClick={() => setExpanded(!expanded)}
466
+ className={cn(
467
+ 'flex-1 px-3 py-2 flex items-center gap-2 text-xs transition-colors',
468
+ isError
469
+ ? 'hover:bg-red-100 dark:hover:bg-red-950/40'
470
+ : 'hover:bg-zinc-100 dark:hover:bg-zinc-800/50'
471
+ )}
472
+ >
473
+ {expanded ? <ChevronDown className="w-3 h-3" /> : <ChevronRight className="w-3 h-3" />}
474
+ {isError ? (
475
+ <AlertTriangle className="w-3.5 h-3.5 text-red-500" />
476
+ ) : (
477
+ <Check className="w-3.5 h-3.5 text-green-500" />
478
+ )}
479
+ <span className={cn('font-medium', isError ? 'text-red-600 dark:text-red-400' : 'text-zinc-600 dark:text-zinc-400')}>
480
+ {isError ? 'Error' : 'Output'}
481
+ </span>
482
+ <span className="text-muted-foreground/50">{lines} lines</span>
483
+ {!expanded && (
484
+ <span className="truncate text-muted-foreground/50 ml-1 flex-1 text-left font-mono">{content.slice(0, 80)}</span>
485
+ )}
486
+ </button>
487
+ <div className="pr-2">
488
+ <CopyButton text={content} />
489
+ </div>
490
+ </div>
491
+ {expanded && (
492
+ <div className={cn(
493
+ 'p-3 text-xs font-mono whitespace-pre-wrap overflow-y-auto',
494
+ isLong ? 'max-h-[500px]' : '',
495
+ isError
496
+ ? 'bg-red-950/10 text-red-200'
497
+ : 'bg-zinc-950 text-zinc-300'
498
+ )}>
499
+ {content}
500
+ </div>
501
+ )}
502
+ </div>
503
+ );
504
+ }
505
+
506
+ // ─── Tool Style Lookup ───────────────────────────────────────
507
+
508
+ function getToolStyle(toolName: string): { icon: any; color: string; bg: string; label: string } {
509
+ const name = toolName.toLowerCase();
510
+
511
+ if (name === 'bash' || name.includes('command'))
512
+ return { icon: Terminal, color: 'amber', bg: 'bg-amber-50 dark:bg-amber-950/20 hover:bg-amber-100 dark:hover:bg-amber-950/40', label: 'Bash' };
513
+ if (name === 'write')
514
+ return { icon: Pencil, color: 'blue', bg: 'bg-blue-50 dark:bg-blue-950/20 hover:bg-blue-100 dark:hover:bg-blue-950/40', label: 'Write' };
515
+ if (name === 'edit' || name === 'multiedit')
516
+ return { icon: Pencil, color: 'emerald', bg: 'bg-emerald-50 dark:bg-emerald-950/20 hover:bg-emerald-100 dark:hover:bg-emerald-950/40', label: name === 'multiedit' ? 'MultiEdit' : 'Edit' };
517
+ if (name === 'read')
518
+ return { icon: Eye, color: 'sky', bg: 'bg-sky-50 dark:bg-sky-950/20 hover:bg-sky-100 dark:hover:bg-sky-950/40', label: 'Read' };
519
+ if (name === 'glob')
520
+ return { icon: FolderOpen, color: 'violet', bg: 'bg-violet-50 dark:bg-violet-950/20 hover:bg-violet-100 dark:hover:bg-violet-950/40', label: 'Glob' };
521
+ if (name === 'grep')
522
+ return { icon: Search, color: 'orange', bg: 'bg-orange-50 dark:bg-orange-950/20 hover:bg-orange-100 dark:hover:bg-orange-950/40', label: 'Grep' };
523
+ if (name === 'task')
524
+ return { icon: Bot, color: 'indigo', bg: 'bg-indigo-50 dark:bg-indigo-950/20 hover:bg-indigo-100 dark:hover:bg-indigo-950/40', label: 'Task (Sub-agent)' };
525
+ if (name.includes('web') || name.includes('fetch'))
526
+ return { icon: Globe, color: 'cyan', bg: 'bg-cyan-50 dark:bg-cyan-950/20 hover:bg-cyan-100 dark:hover:bg-cyan-950/40', label: toolName };
527
+ if (name.includes('notebook'))
528
+ return { icon: Code2, color: 'pink', bg: 'bg-pink-50 dark:bg-pink-950/20 hover:bg-pink-100 dark:hover:bg-pink-950/40', label: 'NotebookEdit' };
529
+
530
+ return { icon: Wrench, color: 'zinc', bg: 'bg-zinc-50 dark:bg-zinc-900/50 hover:bg-zinc-100 dark:hover:bg-zinc-800/50', label: toolName };
531
+ }
532
+
533
+ function getToolPreview(toolName: string, input: Record<string, unknown>): string {
534
+ if (input.command) return `$ ${String(input.command).slice(0, 80)}`;
535
+ if (input.file_path) return String(input.file_path);
536
+ if (input.pattern) return `"${input.pattern}"`;
537
+ if (input.query) return `"${input.query}"`;
538
+ if (input.url) return String(input.url).slice(0, 60);
539
+ if (input.prompt) return String(input.prompt).slice(0, 60);
540
+ if (input.subagent_type) return `[${input.subagent_type}]`;
541
+ return '';
542
+ }
543
+
544
+ function formatModel(model: string): string {
545
+ if (model.includes('opus-4-6')) return 'Opus 4.6';
546
+ if (model.includes('opus-4-5')) return 'Opus 4.5';
547
+ if (model.includes('sonnet-4-5')) return 'Sonnet 4.5';
548
+ if (model.includes('sonnet-4-6')) return 'Sonnet 4.6';
549
+ if (model.includes('haiku-4-5')) return 'Haiku 4.5';
550
+ return model.split('-').slice(1, 3).join(' ');
551
+ }