@jlongo78/agent-spaces 0.9.7 → 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 (548) hide show
  1. package/.next/standalone/.claude/settings.local.json +17 -4
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  4. package/.next/standalone/.next/build-manifest.json +2 -2
  5. package/.next/standalone/.next/routes-manifest.json +6 -0
  6. package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(desktop)/admin/users/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(desktop)/cortex/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(desktop)/network/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(desktop)/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(desktop)/projects/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(desktop)/sessions/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(desktop)/settings/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/(desktop)/terminal/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/(desktop)/terminal/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  23. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  24. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  25. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  26. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  27. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  28. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  29. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  31. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  32. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  33. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  35. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  36. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  37. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  38. package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
  39. package/.next/standalone/.next/server/app/admin/analytics.rsc +2 -2
  40. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +1 -1
  41. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
  42. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  43. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  44. package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +2 -2
  45. package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
  46. package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
  47. package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +2 -2
  48. package/.next/standalone/.next/server/app/admin/users.html +1 -1
  49. package/.next/standalone/.next/server/app/admin/users.rsc +2 -2
  50. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
  51. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
  52. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  53. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +2 -2
  55. package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
  57. package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +2 -2
  58. package/.next/standalone/.next/server/app/analytics.html +1 -1
  59. package/.next/standalone/.next/server/app/analytics.rsc +2 -2
  60. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +1 -1
  61. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
  62. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  63. package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +2 -2
  64. package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
  65. package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
  66. package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  67. package/.next/standalone/.next/server/app/api/analytics/overview/route.js +1 -1
  68. package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js +1 -1
  70. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/api/benchmark/run/route.js +1 -1
  72. package/.next/standalone/.next/server/app/api/benchmark/run/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js +1 -1
  74. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js +1 -1
  76. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/api/benchmark/status/route.js +1 -1
  78. package/.next/standalone/.next/server/app/api/benchmark/status/route.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/api/bulk/route.js +1 -1
  80. package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/api/config/route.js +1 -1
  82. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/api/cortex/context/route.js +1 -1
  84. package/.next/standalone/.next/server/app/api/cortex/context/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js +1 -1
  86. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js +1 -1
  88. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js.nft.json +1 -1
  89. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js +1 -1
  90. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js +1 -1
  92. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js +1 -1
  94. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js.nft.json +1 -1
  95. package/.next/standalone/.next/server/app/api/cortex/export/route.js +1 -1
  96. package/.next/standalone/.next/server/app/api/cortex/export/route.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js +1 -1
  98. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js +1 -1
  100. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js.nft.json +1 -1
  101. package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js +1 -1
  102. package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js +1 -1
  104. package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js +1 -1
  106. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js +1 -1
  108. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js +1 -1
  110. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js +1 -1
  112. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/api/cortex/import/route.js +1 -1
  114. package/.next/standalone/.next/server/app/api/cortex/import/route.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js +1 -1
  116. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js +1 -1
  118. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js +1 -1
  120. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js +1 -1
  122. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js.nft.json +1 -1
  123. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js +1 -1
  124. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js.nft.json +1 -1
  125. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js +1 -1
  126. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js.nft.json +1 -1
  127. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js +1 -1
  128. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js.nft.json +1 -1
  129. package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js +1 -1
  130. package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js.nft.json +1 -1
  131. package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js +1 -1
  132. package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js.nft.json +1 -1
  133. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js +1 -1
  134. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js +1 -1
  136. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js.nft.json +1 -1
  137. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js +1 -1
  138. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js.nft.json +1 -1
  139. package/.next/standalone/.next/server/app/api/cortex/search/route.js +1 -1
  140. package/.next/standalone/.next/server/app/api/cortex/search/route.js.nft.json +1 -1
  141. package/.next/standalone/.next/server/app/api/cortex/settings/route.js +1 -1
  142. package/.next/standalone/.next/server/app/api/cortex/settings/route.js.nft.json +1 -1
  143. package/.next/standalone/.next/server/app/api/cortex/status/route.js +1 -1
  144. package/.next/standalone/.next/server/app/api/cortex/status/route.js.nft.json +1 -1
  145. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js +1 -1
  146. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js.nft.json +1 -1
  147. package/.next/standalone/.next/server/app/api/cortex/usage/route.js +1 -1
  148. package/.next/standalone/.next/server/app/api/cortex/usage/route.js.nft.json +1 -1
  149. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js +1 -1
  150. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/api/events/route.js +1 -1
  152. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/files/route.js +1 -1
  154. package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  155. package/.next/standalone/.next/server/app/api/folders/route.js +1 -1
  156. package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/network/handshake/route.js +1 -1
  158. package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js +1 -1
  160. package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js.nft.json +1 -1
  161. package/.next/standalone/.next/server/app/api/network/panes/route.js +1 -1
  162. package/.next/standalone/.next/server/app/api/network/panes/route.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/api/network/projects/route.js +1 -1
  164. package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
  165. package/.next/standalone/.next/server/app/api/network/search/route.js +1 -1
  166. package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js +1 -1
  168. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
  169. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js +1 -1
  170. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
  171. package/.next/standalone/.next/server/app/api/network/sessions/route.js +1 -1
  172. package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
  173. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js +1 -1
  174. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/api/network/workspaces/route.js +1 -1
  176. package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
  177. package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js +1 -1
  178. package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js.nft.json +1 -1
  179. package/.next/standalone/.next/server/app/api/panes/[id]/route.js +1 -1
  180. package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/api/panes/route.js +1 -1
  182. package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
  183. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  184. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  185. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js +1 -1
  186. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js.nft.json +1 -1
  187. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js +1 -1
  188. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js.nft.json +1 -1
  189. package/.next/standalone/.next/server/app/api/search/route.js +2 -2
  190. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  191. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js +1 -1
  192. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
  193. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js +1 -1
  194. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
  195. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js +1 -1
  196. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  197. package/.next/standalone/.next/server/app/api/sessions/route.js +2 -2
  198. package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
  199. package/.next/standalone/.next/server/app/api/sync/route.js +1 -1
  200. package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
  201. package/.next/standalone/.next/server/app/api/tags/route.js +1 -1
  202. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
  203. package/.next/standalone/.next/server/app/api/tier/route.js +1 -1
  204. package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
  205. package/.next/standalone/.next/server/app/api/whisper/config/route.js +1 -1
  206. package/.next/standalone/.next/server/app/api/whisper/config/route.js.nft.json +1 -1
  207. package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/wizard/chart/route/app-paths-manifest.json +3 -0
  209. package/.next/standalone/.next/server/app/api/wizard/chart/route/build-manifest.json +11 -0
  210. package/.next/standalone/.next/server/app/api/wizard/chart/route/server-reference-manifest.json +4 -0
  211. package/.next/standalone/.next/server/app/api/wizard/chart/route.js +7 -0
  212. package/.next/standalone/.next/server/app/api/wizard/chart/route.js.map +5 -0
  213. package/.next/standalone/.next/server/app/api/wizard/chart/route.js.nft.json +1 -0
  214. package/.next/standalone/.next/server/app/api/wizard/chart/route_client-reference-manifest.js +2 -0
  215. package/.next/standalone/.next/server/app/api/wizard/chat/route.js +1 -1
  216. package/.next/standalone/.next/server/app/api/wizard/chat/route.js.nft.json +1 -1
  217. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js +1 -1
  218. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
  219. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js +1 -1
  220. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
  221. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js +1 -1
  222. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
  223. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js +1 -1
  224. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
  225. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js +1 -1
  226. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
  227. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js +1 -1
  228. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
  229. package/.next/standalone/.next/server/app/api/workspaces/route.js +2 -2
  230. package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  231. package/.next/standalone/.next/server/app/cortex.html +1 -1
  232. package/.next/standalone/.next/server/app/cortex.rsc +3 -3
  233. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +2 -2
  234. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex.segment.rsc +1 -1
  235. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  236. package/.next/standalone/.next/server/app/cortex.segments/_full.segment.rsc +3 -3
  237. package/.next/standalone/.next/server/app/cortex.segments/_head.segment.rsc +1 -1
  238. package/.next/standalone/.next/server/app/cortex.segments/_index.segment.rsc +2 -2
  239. package/.next/standalone/.next/server/app/cortex.segments/_tree.segment.rsc +2 -2
  240. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  241. package/.next/standalone/.next/server/app/login.html +1 -1
  242. package/.next/standalone/.next/server/app/login.rsc +2 -2
  243. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
  244. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  245. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
  246. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  247. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  248. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  249. package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
  250. package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
  251. package/.next/standalone/.next/server/app/m/projects.html +1 -1
  252. package/.next/standalone/.next/server/app/m/projects.rsc +2 -2
  253. package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
  254. package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
  255. package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
  256. package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +2 -2
  257. package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
  258. package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
  259. package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +1 -1
  260. package/.next/standalone/.next/server/app/m/sessions/[id]/page.js.nft.json +1 -1
  261. package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
  262. package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
  263. package/.next/standalone/.next/server/app/m/sessions.html +1 -1
  264. package/.next/standalone/.next/server/app/m/sessions.rsc +2 -2
  265. package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
  266. package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
  267. package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
  268. package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +2 -2
  269. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
  270. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
  271. package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +1 -1
  272. package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
  273. package/.next/standalone/.next/server/app/m/settings.html +1 -1
  274. package/.next/standalone/.next/server/app/m/settings.rsc +2 -2
  275. package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
  276. package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
  277. package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
  278. package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +2 -2
  279. package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
  280. package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
  281. package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +1 -1
  282. package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
  283. package/.next/standalone/.next/server/app/m/terminal.html +1 -1
  284. package/.next/standalone/.next/server/app/m/terminal.rsc +3 -3
  285. package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +3 -3
  286. package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
  287. package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
  288. package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +2 -2
  289. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +2 -2
  290. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
  291. package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +1 -1
  292. package/.next/standalone/.next/server/app/m.html +1 -1
  293. package/.next/standalone/.next/server/app/m.rsc +2 -2
  294. package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
  295. package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
  296. package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
  297. package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +2 -2
  298. package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
  299. package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
  300. package/.next/standalone/.next/server/app/network.html +1 -1
  301. package/.next/standalone/.next/server/app/network.rsc +2 -2
  302. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
  303. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
  304. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  305. package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +2 -2
  306. package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
  307. package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
  308. package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +2 -2
  309. package/.next/standalone/.next/server/app/projects.html +1 -1
  310. package/.next/standalone/.next/server/app/projects.rsc +2 -2
  311. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
  312. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
  313. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  314. package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  315. package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  316. package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  317. package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  318. package/.next/standalone/.next/server/app/sessions.html +1 -1
  319. package/.next/standalone/.next/server/app/sessions.rsc +2 -2
  320. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
  321. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
  322. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  323. package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +2 -2
  324. package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  325. package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
  326. package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
  327. package/.next/standalone/.next/server/app/settings.html +1 -1
  328. package/.next/standalone/.next/server/app/settings.rsc +2 -2
  329. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
  330. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
  331. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  332. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  333. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  334. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  335. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  336. package/.next/standalone/.next/server/app/terminal.html +1 -1
  337. package/.next/standalone/.next/server/app/terminal.rsc +3 -3
  338. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +2 -2
  339. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
  340. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  341. package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +3 -3
  342. package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
  343. package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
  344. package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +2 -2
  345. package/.next/standalone/.next/server/app/vr/page/react-loadable-manifest.json +1 -1
  346. package/.next/standalone/.next/server/app/vr/page_client-reference-manifest.js +1 -1
  347. package/.next/standalone/.next/server/app/vr.html +1 -1
  348. package/.next/standalone/.next/server/app/vr.rsc +3 -3
  349. package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +3 -3
  350. package/.next/standalone/.next/server/app/vr.segments/_head.segment.rsc +1 -1
  351. package/.next/standalone/.next/server/app/vr.segments/_index.segment.rsc +2 -2
  352. package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +2 -2
  353. package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +2 -2
  354. package/.next/standalone/.next/server/app/vr.segments/vr.segment.rsc +1 -1
  355. package/.next/standalone/.next/server/app/workspaces.html +1 -1
  356. package/.next/standalone/.next/server/app/workspaces.rsc +2 -2
  357. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
  358. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
  359. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  360. package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +2 -2
  361. package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
  362. package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
  363. package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
  364. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  365. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00e90fc6._.js +98 -0
  366. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01ab8675._.js +98 -0
  367. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03974f05._.js +98 -0
  368. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__bb331da9._.js → [root-of-the-server]__046c9b91._.js} +2 -2
  369. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04ae6bf0._.js +98 -0
  370. package/.next/standalone/.next/server/chunks/[root-of-the-server]__056fa416._.js +1 -1
  371. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__186cd0bb._.js → [root-of-the-server]__0ac4ea3f._.js} +2 -2
  372. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b8e64cb._.js +98 -0
  373. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__d95165f0._.js → [root-of-the-server]__0facd39e._.js} +2 -2
  374. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__69d315e5._.js → [root-of-the-server]__10bc76a3._.js} +2 -2
  375. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__9d68157b._.js → [root-of-the-server]__115f3934._.js} +2 -2
  376. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11f155f1._.js +3 -0
  377. package/.next/standalone/.next/server/chunks/[root-of-the-server]__160e7c73._.js +22 -33
  378. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__91e23c96._.js → [root-of-the-server]__17a3b966._.js} +2 -2
  379. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__277d9445._.js → [root-of-the-server]__17d3a2b2._.js} +2 -2
  380. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a86c055._.js +98 -0
  381. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__d0125483._.js → [root-of-the-server]__20b5e9c4._.js} +2 -2
  382. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__35f8e77e._.js → [root-of-the-server]__28d6fbd8._.js} +3 -3
  383. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__04f04898._.js → [root-of-the-server]__2a3f866b._.js} +2 -2
  384. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__a95bb38b._.js → [root-of-the-server]__316617e7._.js} +2 -2
  385. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__b689ff5e._.js → [root-of-the-server]__32ad8f71._.js} +3 -11
  386. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__6fe5e6c8._.js → [root-of-the-server]__35457394._.js} +2 -2
  387. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1f054c65._.js → [root-of-the-server]__35de78e6._.js} +2 -2
  388. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2f452778._.js → [root-of-the-server]__3685ffcb._.js} +3 -3
  389. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__614458b7._.js → [root-of-the-server]__38954988._.js} +2 -2
  390. package/.next/standalone/.next/server/chunks/[root-of-the-server]__426ad936._.js +106 -0
  391. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4985c034._.js +98 -0
  392. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e6fd27f8._.js → [root-of-the-server]__5c6ce9ed._.js} +3 -3
  393. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5cebe58a._.js +98 -0
  394. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d5e4789._.js +98 -0
  395. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__74084e07._.js → [root-of-the-server]__65676930._.js} +2 -2
  396. package/.next/standalone/.next/server/chunks/[root-of-the-server]__67cab326._.js +58 -0
  397. package/.next/standalone/.next/server/chunks/[root-of-the-server]__698c6f01._.js +98 -0
  398. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6c64af29._.js +131 -0
  399. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__d12644e7._.js → [root-of-the-server]__73aed9f5._.js} +3 -3
  400. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__ac84b704._.js → [root-of-the-server]__79b6a9bb._.js} +2 -2
  401. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e56abacf._.js → [root-of-the-server]__7db704c6._.js} +2 -2
  402. package/.next/standalone/.next/server/chunks/[root-of-the-server]__812ca02b._.js +98 -0
  403. package/.next/standalone/.next/server/chunks/[root-of-the-server]__821f50fa._.js +98 -0
  404. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8716b86e._.js +98 -0
  405. package/.next/standalone/.next/server/chunks/[root-of-the-server]__884ef754._.js +98 -0
  406. package/.next/standalone/.next/server/chunks/[root-of-the-server]__88cdbd68._.js +98 -0
  407. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89d9aba9._.js +98 -0
  408. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0903a426._.js → [root-of-the-server]__8d536cb5._.js} +3 -3
  409. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8df8c5d1._.js +98 -0
  410. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2d7a454e._.js → [root-of-the-server]__8f2ccc41._.js} +2 -2
  411. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2a2c5fc5._.js → [root-of-the-server]__95c9d682._.js} +2 -2
  412. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e5d7774._.js +98 -0
  413. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__cc6e2885._.js → [root-of-the-server]__9edcff87._.js} +2 -2
  414. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__feceb3e4._.js → [root-of-the-server]__a049dfc2._.js} +3 -3
  415. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a5b4bb9a._.js +98 -0
  416. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__929ea03a._.js → [root-of-the-server]__a83262a1._.js} +2 -2
  417. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9cd1240._.js +98 -0
  418. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2f300a68._.js → [root-of-the-server]__a9d7f822._.js} +3 -3
  419. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad08c221._.js +98 -0
  420. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad585f2f._.js +98 -0
  421. package/.next/standalone/.next/server/chunks/[root-of-the-server]__afcb8f7d._.js +98 -0
  422. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bc250d43._.js +98 -0
  423. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bce2a6e7._.js +98 -0
  424. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__ad4346fa._.js → [root-of-the-server]__c011bf91._.js} +3 -3
  425. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0ac2895._.js +3 -0
  426. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__563c0817._.js → [root-of-the-server]__c37d6380._.js} +2 -2
  427. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__4d5b78d2._.js → [root-of-the-server]__cae392eb._.js} +3 -3
  428. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cc2616bb._.js +3 -3
  429. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d501fa9b._.js +98 -0
  430. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__d0109b9b._.js → [root-of-the-server]__d59c6c15._.js} +3 -3
  431. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__11c684b1._.js → [root-of-the-server]__d5c1db32._.js} +3 -3
  432. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__b43306ee._.js → [root-of-the-server]__dba60c86._.js} +3 -3
  433. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2384f98e._.js → [root-of-the-server]__de14b9ae._.js} +2 -2
  434. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__c1deb5f3._.js → [root-of-the-server]__e10643d1._.js} +3 -3
  435. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__00fdfbda._.js → [root-of-the-server]__e2a996e5._.js} +2 -2
  436. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__4d903941._.js → [root-of-the-server]__e3477417._.js} +2 -2
  437. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__32dc5513._.js → [root-of-the-server]__e4db362e._.js} +2 -2
  438. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__49e42a3a._.js → [root-of-the-server]__e4e70b86._.js} +2 -2
  439. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__ac39ecc7._.js → [root-of-the-server]__e54925af._.js} +2 -2
  440. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__a90729a1._.js → [root-of-the-server]__e8edc5b0._.js} +3 -3
  441. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__eafd040b._.js → [root-of-the-server]__eab4d83b._.js} +2 -2
  442. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ead29015._.js +1 -1
  443. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__194955d4._.js → [root-of-the-server]__f056fd83._.js} +2 -2
  444. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f0e99572._.js +98 -0
  445. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fe1e16d0._.js +98 -0
  446. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__c8a62f42._.js → [root-of-the-server]__ff9cd277._.js} +3 -3
  447. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ffaea2ce._.js +98 -0
  448. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_wizard_chart_route_actions_888e2ec1.js +3 -0
  449. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__2cffc362._.js +3 -0
  450. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__f1050870._.js → [root-of-the-server]__47c97637._.js} +2 -2
  451. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
  452. package/.next/standalone/.next/server/chunks/ssr/_17b946fd._.js +3 -0
  453. package/.next/standalone/.next/server/chunks/ssr/_2a1d79e7._.js +1 -1
  454. package/.next/standalone/.next/server/chunks/ssr/_5c3c4cfa._.js +7 -5
  455. package/.next/standalone/.next/server/chunks/ssr/_ba432382._.js +7 -5
  456. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_cortex_page_tsx_0f33d8b3._.js +1 -1
  457. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_terminal_page_tsx_de5e8d85._.js +4 -4
  458. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__90eeddae._.js +1 -1
  459. package/.next/standalone/.next/server/middleware-manifest.json +1 -1
  460. package/.next/standalone/.next/server/pages/404.html +1 -1
  461. package/.next/standalone/.next/server/pages/500.html +2 -2
  462. package/.next/standalone/.next/static/chunks/0852575eb90c1e8d.js +85 -0
  463. package/.next/standalone/.next/static/chunks/{74d0ac0b1d0a1b79.js → 10b00b4f66102dcf.js} +1 -1
  464. package/.next/standalone/.next/static/chunks/{16eb77953dee9ea3.js → 19c71a8376c23c58.js} +1 -1
  465. package/.next/standalone/.next/static/chunks/2b769d1597e4fc1c.css +3 -0
  466. package/.next/standalone/.next/static/chunks/{3e91fc608659c524.js → 350271fe79509caf.js} +1 -1
  467. package/.next/standalone/.next/static/chunks/{70423c7afd8abf5f.js → 597847c22200c212.js} +1 -1
  468. package/.next/standalone/.next/static/chunks/{fb0abd1933b2b2e1.js → 7f6a14f1849fa94d.js} +1 -1
  469. package/.next/standalone/.next/static/chunks/{7ecd9bbb0ce4d68a.js → b7c8fe9b7275a84f.js} +1 -1
  470. package/.next/standalone/.next/static/chunks/{6245135a7afb8c7b.js → c9b10fc55516d142.js} +8 -6
  471. package/.next/standalone/.next/static/chunks/d0065f48eab94944.js +1 -0
  472. package/.next/standalone/.next/static/chunks/{180c1b9ff31b979f.js → f7b34c807badf95d.js} +8 -6
  473. package/.next/standalone/.spaces/cortex-context.md +35 -129
  474. package/.next/standalone/bin/spaces.js +7 -4
  475. package/.next/standalone/bin/terminal-server.js +48 -10
  476. package/.next/standalone/cortex-hook-debug.log +57 -23
  477. package/.next/standalone/package-lock.json +2 -2
  478. package/.next/standalone/package.json +1 -1
  479. package/.next/standalone/src/app/(desktop)/terminal/page.tsx +44 -5
  480. package/.next/standalone/src/app/api/benchmark/run/route.ts +24 -3
  481. package/.next/standalone/src/app/api/cortex/context/route.ts +1 -1
  482. package/.next/standalone/src/app/api/cortex/knowledge/route.ts +1 -1
  483. package/.next/standalone/src/app/api/cortex/search/route.ts +14 -2
  484. package/.next/standalone/src/app/api/folders/route.ts +16 -6
  485. package/.next/standalone/src/app/api/network/panes/[id]/route.ts +27 -11
  486. package/.next/standalone/src/app/api/network/panes/route.ts +25 -14
  487. package/.next/standalone/src/app/api/network/projects/route.ts +11 -4
  488. package/.next/standalone/src/app/api/network/search/route.ts +21 -14
  489. package/.next/standalone/src/app/api/network/sessions/[id]/messages/route.ts +18 -11
  490. package/.next/standalone/src/app/api/network/sessions/[id]/route.ts +16 -9
  491. package/.next/standalone/src/app/api/network/sessions/route.ts +25 -18
  492. package/.next/standalone/src/app/api/network/workspaces/[id]/route.ts +21 -12
  493. package/.next/standalone/src/app/api/network/workspaces/route.ts +16 -14
  494. package/.next/standalone/src/app/api/whisper/config/route.ts +16 -8
  495. package/.next/standalone/src/app/api/wizard/chart/route.ts +129 -0
  496. package/.next/standalone/src/components/cortex/benchmark-tab.tsx +14 -0
  497. package/.next/standalone/src/components/terminal/terminal-pane.tsx +78 -12
  498. package/.next/standalone/src/components/wizard/chart-wizard.tsx +405 -0
  499. package/.next/standalone/src/hooks/use-benchmark.ts +1 -0
  500. package/.next/standalone/src/hooks/use-speech-recognition.ts +2 -1
  501. package/.next/standalone/src/lib/cortex/benchmark.ts +17 -1
  502. package/.next/standalone/src/lib/cortex/index.ts +54 -1
  503. package/.next/standalone/src/lib/db/queries.ts +2 -89
  504. package/.next/standalone/src/lib/shell-user.ts +101 -0
  505. package/bin/spaces.js +7 -4
  506. package/bin/terminal-server.js +48 -10
  507. package/package.json +1 -1
  508. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09e8ccc9._.js +0 -98
  509. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1572d4ef._.js +0 -98
  510. package/.next/standalone/.next/server/chunks/[root-of-the-server]__212760e6._.js +0 -98
  511. package/.next/standalone/.next/server/chunks/[root-of-the-server]__228595ec._.js +0 -98
  512. package/.next/standalone/.next/server/chunks/[root-of-the-server]__283c890f._.js +0 -3
  513. package/.next/standalone/.next/server/chunks/[root-of-the-server]__379fc2e9._.js +0 -98
  514. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3b40d79f._.js +0 -98
  515. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3d3dca2b._.js +0 -98
  516. package/.next/standalone/.next/server/chunks/[root-of-the-server]__54163e52._.js +0 -98
  517. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5812f90a._.js +0 -98
  518. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c5e87f5._.js +0 -98
  519. package/.next/standalone/.next/server/chunks/[root-of-the-server]__60d15b16._.js +0 -98
  520. package/.next/standalone/.next/server/chunks/[root-of-the-server]__71f29038._.js +0 -98
  521. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7921aa80._.js +0 -98
  522. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7e077dd8._.js +0 -98
  523. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7ebc4280._.js +0 -131
  524. package/.next/standalone/.next/server/chunks/[root-of-the-server]__857c60bb._.js +0 -98
  525. package/.next/standalone/.next/server/chunks/[root-of-the-server]__874fe565._.js +0 -98
  526. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8e2171f7._.js +0 -98
  527. package/.next/standalone/.next/server/chunks/[root-of-the-server]__95659b2d._.js +0 -98
  528. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9679b91e._.js +0 -98
  529. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b0862d69._.js +0 -98
  530. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba87daaa._.js +0 -98
  531. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0461005._.js +0 -98
  532. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cabaac2b._.js +0 -98
  533. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cb027619._.js +0 -98
  534. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf608218._.js +0 -98
  535. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cfc1290d._.js +0 -98
  536. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d048ee6b._.js +0 -98
  537. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3cc946c._.js +0 -98
  538. package/.next/standalone/.next/server/chunks/[root-of-the-server]__efb8251e._.js +0 -98
  539. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f44c6882._.js +0 -98
  540. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f85283de._.js +0 -98
  541. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__843070a6._.js +0 -3
  542. package/.next/standalone/.next/server/chunks/ssr/_e84a0c06._.js +0 -3
  543. package/.next/standalone/.next/static/chunks/9d4164833c2c1fd6.js +0 -85
  544. package/.next/standalone/.next/static/chunks/bffaf378f7745d59.css +0 -3
  545. package/.next/standalone/.next/static/chunks/f091f4bf8d80fd07.js +0 -1
  546. /package/.next/standalone/.next/static/{0KefPNmR9NsrZHWWt9Xr7 → u1pHON3drz1mBi7owkbBP}/_buildManifest.js +0 -0
  547. /package/.next/standalone/.next/static/{0KefPNmR9NsrZHWWt9Xr7 → u1pHON3drz1mBi7owkbBP}/_clientMiddlewareManifest.json +0 -0
  548. /package/.next/standalone/.next/static/{0KefPNmR9NsrZHWWt9Xr7 → u1pHON3drz1mBi7owkbBP}/_ssgManifest.js +0 -0
@@ -2,6 +2,7 @@ import { NextRequest } from 'next/server';
2
2
  import { getPro } from '@/lib/pro';
3
3
  import { ensureInitialized } from '@/lib/db/init';
4
4
  import { getSessions, getWorkspacesForSession } from '@/lib/db/queries';
5
+ import { withUser } from '@/lib/auth';
5
6
 
6
7
  const notAvailable = () =>
7
8
  Response.json({ error: 'Requires @spaces/pro' }, { status: 404 });
@@ -10,8 +11,9 @@ export async function GET(req: NextRequest) {
10
11
  const pro = getPro();
11
12
  if (!pro) return notAvailable();
12
13
 
14
+ let keyRecord;
13
15
  try {
14
- pro.network.requireNetworkAuth(req);
16
+ keyRecord = pro.network.requireNetworkAuth(req);
15
17
  } catch (e: any) {
16
18
  if (e.name === 'NetworkAuthError') {
17
19
  return Response.json({ error: e.message }, { status: 401 });
@@ -19,25 +21,30 @@ export async function GET(req: NextRequest) {
19
21
  throw e;
20
22
  }
21
23
 
22
- await ensureInitialized();
24
+ const keyUser = keyRecord?.username;
25
+ if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
23
26
 
24
- const { searchParams } = req.nextUrl;
25
- const params = {
26
- projectId: searchParams.get('projectId') || undefined,
27
- projectPath: searchParams.get('projectPath') || undefined,
28
- search: searchParams.get('search') || undefined,
29
- sortBy: searchParams.get('sortBy') || 'modified',
30
- sortDir: searchParams.get('sortDir') || 'DESC',
31
- offset: parseInt(searchParams.get('offset') || '0', 10),
32
- limit: parseInt(searchParams.get('limit') || '50', 10),
33
- };
27
+ return withUser(keyUser, async () => {
28
+ await ensureInitialized();
34
29
 
35
- const result = getSessions(params);
30
+ const { searchParams } = req.nextUrl;
31
+ const params = {
32
+ projectId: searchParams.get('projectId') || undefined,
33
+ projectPath: searchParams.get('projectPath') || undefined,
34
+ search: searchParams.get('search') || undefined,
35
+ sortBy: searchParams.get('sortBy') || 'modified',
36
+ sortDir: searchParams.get('sortDir') || 'DESC',
37
+ offset: parseInt(searchParams.get('offset') || '0', 10),
38
+ limit: parseInt(searchParams.get('limit') || '50', 10),
39
+ };
36
40
 
37
- const sessions = result.sessions.map(s => ({
38
- ...s,
39
- workspaces: getWorkspacesForSession(s.id),
40
- }));
41
+ const result = getSessions(params);
41
42
 
42
- return Response.json({ sessions, total: result.total });
43
+ const sessions = result.sessions.map(s => ({
44
+ ...s,
45
+ workspaces: getWorkspacesForSession(s.id),
46
+ }));
47
+
48
+ return Response.json({ sessions, total: result.total });
49
+ });
43
50
  }
@@ -21,16 +21,15 @@ export async function GET(req: NextRequest, { params }: { params: Promise<{ id:
21
21
  throw e;
22
22
  }
23
23
 
24
- const { id } = await params;
25
24
  const keyUser = keyRecord?.username;
25
+ if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
26
26
 
27
- const handler = async () => {
27
+ const { id } = await params;
28
+ return withUser(keyUser, async () => {
28
29
  await ensureInitialized();
29
30
  const panes = getPanesByWorkspace(parseInt(id, 10));
30
31
  return Response.json({ panes });
31
- };
32
-
33
- return keyUser ? withUser(keyUser, handler) : handler();
32
+ });
34
33
  }
35
34
 
36
35
  export async function PUT(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
@@ -45,11 +44,16 @@ export async function PUT(req: NextRequest, { params }: { params: Promise<{ id:
45
44
  }
46
45
  if (keyRecord?.permissions !== 'admin') return Response.json({ error: 'Admin permission required' }, { status: 403 });
47
46
 
47
+ const keyUser = keyRecord?.username;
48
+ if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
49
+
48
50
  const { id } = await params;
49
- await ensureInitialized();
50
- const body = await req.json();
51
- updateWorkspace(parseInt(id, 10), body);
52
- return Response.json({ success: true });
51
+ return withUser(keyUser, async () => {
52
+ await ensureInitialized();
53
+ const body = await req.json();
54
+ updateWorkspace(parseInt(id, 10), body);
55
+ return Response.json({ success: true });
56
+ });
53
57
  }
54
58
 
55
59
  export async function DELETE(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
@@ -64,8 +68,13 @@ export async function DELETE(req: NextRequest, { params }: { params: Promise<{ i
64
68
  }
65
69
  if (keyRecord?.permissions !== 'admin') return Response.json({ error: 'Admin permission required' }, { status: 403 });
66
70
 
71
+ const keyUser = keyRecord?.username;
72
+ if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
73
+
67
74
  const { id } = await params;
68
- await ensureInitialized();
69
- deleteWorkspaceFull(parseInt(id, 10));
70
- return Response.json({ success: true });
75
+ return withUser(keyUser, async () => {
76
+ await ensureInitialized();
77
+ deleteWorkspaceFull(parseInt(id, 10));
78
+ return Response.json({ success: true });
79
+ });
71
80
  }
@@ -3,6 +3,7 @@ import { getPro } from '@/lib/pro';
3
3
  import { ensureInitialized } from '@/lib/db/init';
4
4
  import { getDb } from '@/lib/db/schema';
5
5
  import { createWorkspace } from '@/lib/db/queries';
6
+ import { withUser } from '@/lib/auth';
6
7
 
7
8
  const notAvailable = () =>
8
9
  Response.json({ error: 'Requires @spaces/pro' }, { status: 404 });
@@ -23,16 +24,12 @@ export async function GET(req: NextRequest) {
23
24
 
24
25
  // Scope to the API key's user so remote access sees their workspaces, not the server admin's
25
26
  const keyUser = keyRecord?.username;
26
- if (keyUser) {
27
- const { withUser } = await import('@/lib/auth');
28
- return withUser(keyUser, async () => {
29
- await ensureInitialized();
30
- return buildWorkspaceResponse();
31
- });
32
- }
27
+ if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
33
28
 
34
- await ensureInitialized();
35
- return buildWorkspaceResponse();
29
+ return withUser(keyUser, async () => {
30
+ await ensureInitialized();
31
+ return buildWorkspaceResponse();
32
+ });
36
33
  }
37
34
 
38
35
  export async function POST(req: NextRequest) {
@@ -50,12 +47,17 @@ export async function POST(req: NextRequest) {
50
47
  return Response.json({ error: 'Admin permission required' }, { status: 403 });
51
48
  }
52
49
 
53
- await ensureInitialized();
54
- const body = await req.json();
55
- if (!body.name) return Response.json({ error: 'name is required' }, { status: 400 });
50
+ const keyUser = keyRecord?.username;
51
+ if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
52
+
53
+ return withUser(keyUser, async () => {
54
+ await ensureInitialized();
55
+ const body = await req.json();
56
+ if (!body.name) return Response.json({ error: 'name is required' }, { status: 400 });
56
57
 
57
- const workspace = createWorkspace(body.name, body.description, body.color);
58
- return Response.json(workspace);
58
+ const workspace = createWorkspace(body.name, body.description, body.color);
59
+ return Response.json(workspace);
60
+ });
59
61
  }
60
62
 
61
63
  function buildWorkspaceResponse() {
@@ -1,27 +1,35 @@
1
1
  import { NextResponse } from 'next/server';
2
- import { readCortexConfig } from '@/lib/cortex/config';
3
- import { getUserPaths } from '@/lib/config';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import os from 'os';
4
5
 
5
6
  export const dynamic = 'force-dynamic';
6
7
 
7
8
  /**
8
9
  * GET /api/whisper/config — returns Groq/OpenAI key + endpoint for direct browser calls.
9
- * Checks cortex config first (user settings), then falls back to env vars.
10
+ * Reads config.json directly (bypasses cortex addon to avoid stale require cache).
11
+ * Falls back to env vars.
10
12
  */
11
13
  export async function GET() {
12
- // Try cortex config first (user-configured keys in settings)
13
14
  let configGroq = '';
14
15
  let configOpenai = '';
16
+
17
+ // Read config.json directly instead of going through cortex addon
15
18
  try {
16
- const { configPath } = getUserPaths('admin');
17
- const cortexCfg = readCortexConfig(configPath);
18
- configGroq = cortexCfg.groq_api_key || '';
19
- configOpenai = cortexCfg.openai_api_key || '';
19
+ const configPath = path.join(os.homedir(), '.spaces', 'config.json');
20
+ if (fs.existsSync(configPath)) {
21
+ const raw = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
22
+ const cortex = raw.cortex || {};
23
+ configGroq = cortex.groq_api_key || '';
24
+ configOpenai = cortex.openai_api_key || '';
25
+ }
20
26
  } catch {}
21
27
 
22
28
  const groqKey = configGroq || process.env.GROQ_API_KEY;
23
29
  const openaiKey = configOpenai || process.env.OPENAI_API_KEY;
24
30
 
31
+ console.log(`[Whisper Config] configGroq=${configGroq ? configGroq.slice(0, 8) + '...' : 'EMPTY'} configOpenai=${configOpenai ? configOpenai.slice(0, 8) + '...' : 'EMPTY'} envGroq=${process.env.GROQ_API_KEY ? 'SET' : 'UNSET'} envOpenai=${process.env.OPENAI_API_KEY ? 'SET' : 'UNSET'} → returning ${groqKey ? 'GROQ' : openaiKey ? 'OPENAI' : 'NONE'}`);
32
+
25
33
  if (groqKey) {
26
34
  return NextResponse.json({
27
35
  apiKey: groqKey,
@@ -0,0 +1,129 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+ import { getAuthUser, withUser } from '@/lib/auth';
3
+ import { getUserPaths } from '@/lib/config';
4
+
5
+ export const dynamic = 'force-dynamic';
6
+
7
+ const SYSTEM_PROMPT = `You are a data visualization assistant. Your job: help the user design a chart from their data through conversation. Ask 1-2 questions at a time. Converge toward a concrete chart spec.
8
+
9
+ Supported chart types:
10
+ - bar: Vertical or horizontal bar chart
11
+ - line: Line chart with optional area fill
12
+ - pie: Pie or donut chart
13
+ - scatter: Scatter plot with optional trend line
14
+ - heatmap: Color-coded grid/matrix
15
+ - table: Formatted data table with highlights
16
+
17
+ After each exchange, output an updated chart spec as a JSON block.
18
+
19
+ For SINGLE-SERIES data (bar, pie, scatter, simple line), use this format:
20
+
21
+ \`\`\`json
22
+ {
23
+ "chart": { "title": "...", "type": "bar", "xAxis": "...", "yAxis": "...", "color": "#6366f1" },
24
+ "data": [
25
+ { "label": "Q1", "value": 100 },
26
+ { "label": "Q2", "value": 150 }
27
+ ],
28
+ "options": { "showLegend": true, "stacked": false, "fillArea": false },
29
+ "summary": "One-line description"
30
+ }
31
+ \`\`\`
32
+
33
+ For MULTI-SERIES data (multiple lines, grouped comparison), use this format:
34
+
35
+ \`\`\`json
36
+ {
37
+ "chart": { "title": "...", "type": "line", "xAxis": "...", "yAxis": "...", "color": "#6366f1" },
38
+ "data": [],
39
+ "labels": ["Jan", "Feb", "Mar"],
40
+ "series": [
41
+ { "name": "East", "color": "#6366f1", "values": [100, 120, 140] },
42
+ { "name": "West", "color": "#22c55e", "values": [80, 95, 110] }
43
+ ],
44
+ "options": { "showLegend": true, "stacked": false, "fillArea": false },
45
+ "summary": "One-line description"
46
+ }
47
+ \`\`\`
48
+
49
+ Available series colors: #6366f1, #22c55e, #f59e0b, #ef4444, #3b82f6, #ec4899, #14b8a6, #a855f7, #f97316
50
+
51
+ Guidelines:
52
+ - Ask about: what data they have, what story they want to tell, audience, preferred chart type
53
+ - Suggest chart types based on the data shape (categorical → bar/pie, time series → line, correlation → scatter)
54
+ - Use multi-series format when the user asks for multiple lines, regions, categories, or comparisons
55
+ - Generate sample data if the user describes their data verbally
56
+ - Keep it simple — one chart at a time
57
+ - When the spec looks solid, suggest the user review it`;
58
+
59
+ export async function POST(request: NextRequest) {
60
+ const user = getAuthUser(request);
61
+ return withUser(user, async () => {
62
+ const { configPath } = getUserPaths(user);
63
+ let config: any = {};
64
+ try {
65
+ const { readCortexConfig } = await import('@/lib/cortex/config');
66
+ config = readCortexConfig(configPath);
67
+ } catch {}
68
+
69
+ const anthropicKey = config.anthropic_api_key || process.env.ANTHROPIC_API_KEY;
70
+ if (!anthropicKey) {
71
+ return NextResponse.json(
72
+ { error: 'No API key configured. Add your Anthropic key in Settings > Cortex.' },
73
+ { status: 400 }
74
+ );
75
+ }
76
+
77
+ const body = await request.json();
78
+ const { messages, currentSpec } = body;
79
+
80
+ const apiMessages = messages.map((m: any) => ({
81
+ role: m.role,
82
+ content: m.content,
83
+ }));
84
+
85
+ let systemPrompt = SYSTEM_PROMPT;
86
+ if (currentSpec) {
87
+ systemPrompt += `\n\nCurrent chart spec:\n\`\`\`json\n${JSON.stringify(currentSpec, null, 2)}\n\`\`\``;
88
+ }
89
+
90
+ try {
91
+ const res = await fetch('https://api.anthropic.com/v1/messages', {
92
+ method: 'POST',
93
+ headers: {
94
+ 'Content-Type': 'application/json',
95
+ 'x-api-key': anthropicKey,
96
+ 'anthropic-version': '2023-06-01',
97
+ },
98
+ body: JSON.stringify({
99
+ model: 'claude-haiku-4-5-20251001',
100
+ max_tokens: 2048,
101
+ system: systemPrompt,
102
+ messages: apiMessages,
103
+ }),
104
+ signal: AbortSignal.timeout(30000),
105
+ });
106
+
107
+ if (!res.ok) {
108
+ return NextResponse.json({ error: `API error: ${res.status}` }, { status: 502 });
109
+ }
110
+
111
+ const data = await res.json();
112
+ const reply = data.content?.[0]?.text || '';
113
+
114
+ // Extract JSON spec from reply
115
+ let spec = currentSpec;
116
+ const jsonMatch = reply.match(/```json\s*([\s\S]*?)```/);
117
+ if (jsonMatch) {
118
+ try {
119
+ spec = JSON.parse(jsonMatch[1]);
120
+ } catch { /* keep current spec */ }
121
+ }
122
+
123
+ const cleanReply = reply.replace(/```json[\s\S]*?```/g, '').trim();
124
+ return NextResponse.json({ reply: cleanReply, spec });
125
+ } catch (e: any) {
126
+ return NextResponse.json({ error: e.message }, { status: 500 });
127
+ }
128
+ });
129
+ }
@@ -310,6 +310,7 @@ function RunLauncher({ onRunComplete }: { onRunComplete: () => void }) {
310
310
  const [selectedCategories, setSelectedCategories] = useState<string[]>([]);
311
311
  const [customModel, setCustomModel] = useState('claude-haiku-4-5');
312
312
  const [noJudge, setNoJudge] = useState(false);
313
+ const [concurrency, setConcurrency] = useState(1);
313
314
  const [showCustom, setShowCustom] = useState(false);
314
315
 
315
316
  const isRunning = status?.running === true;
@@ -333,6 +334,7 @@ function RunLauncher({ onRunComplete }: { onRunComplete: () => void }) {
333
334
  categories: selectedCategories.length > 0 ? selectedCategories.join(',') : undefined,
334
335
  noJudge,
335
336
  model: customModel,
337
+ concurrency,
336
338
  });
337
339
  }
338
340
 
@@ -470,6 +472,18 @@ function RunLauncher({ onRunComplete }: { onRunComplete: () => void }) {
470
472
  </select>
471
473
  </div>
472
474
 
475
+ <div>
476
+ <div className="text-[10px] text-gray-600 uppercase tracking-wider mb-1">Concurrency</div>
477
+ <input
478
+ type="number"
479
+ min={1}
480
+ max={5}
481
+ value={concurrency}
482
+ onChange={e => setConcurrency(Math.min(5, Math.max(1, parseInt(e.target.value) || 1)))}
483
+ className="w-16 px-2.5 py-1 text-xs bg-white/5 border border-white/10 rounded-md text-gray-300 focus:outline-none focus:border-purple-500/50"
484
+ />
485
+ </div>
486
+
473
487
  <div className="flex items-center gap-2 mt-4">
474
488
  <input
475
489
  id="no-judge"
@@ -225,17 +225,33 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
225
225
  resolve();
226
226
  }));
227
227
 
228
- // Ctrl-C copies selection; Ctrl-V: return false WITHOUT preventDefault so browser
229
- // fires its paste event naturally xterm's paste handler picks it up via onData.
228
+ // Ctrl-C: when there's a selection, copy it to clipboard then clear selection.
229
+ // We return false to stop xterm sending ^C (SIGINT), and manually write to clipboard
230
+ // since xterm's selection isn't in the browser's native Selection API.
231
+ // Ctrl-V: return false WITHOUT preventDefault so browser fires its native paste event
232
+ // which xterm's paste handler picks up via onData.
230
233
  term.attachCustomKeyEventHandler((ev: KeyboardEvent) => {
231
234
  if (ev.type !== 'keydown') return true;
232
235
  if (ev.ctrlKey && ev.key === 'c' && term.hasSelection()) {
233
- navigator.clipboard?.writeText(term.getSelection());
236
+ const text = term.getSelection();
237
+ if (text && navigator.clipboard?.writeText) {
238
+ navigator.clipboard.writeText(text).catch(() => {
239
+ // Fallback: create a temporary textarea to copy
240
+ const ta = document.createElement('textarea');
241
+ ta.value = text;
242
+ ta.style.position = 'fixed';
243
+ ta.style.opacity = '0';
244
+ document.body.appendChild(ta);
245
+ ta.select();
246
+ document.execCommand('copy');
247
+ document.body.removeChild(ta);
248
+ });
249
+ }
234
250
  term.clearSelection();
235
251
  return false;
236
252
  }
237
253
  if (ev.ctrlKey && ev.key === 'v') {
238
- return false; // stop xterm from sending \x16; browser paste event fires naturally
254
+ return false;
239
255
  }
240
256
  return true;
241
257
  });
@@ -415,9 +431,22 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
415
431
  };
416
432
 
417
433
  // ─── Quest toolbar: send keystrokes to terminal ───
434
+ // Debug helper: always logs to console; writes to xterm only when enabled via
435
+ // localStorage.setItem('spaces-voice-debug', '1')
436
+ const debugVoice = (msg: string) => {
437
+ console.log('[Voice]', msg);
438
+ try {
439
+ if (localStorage.getItem('spaces-voice-debug') && xtermRef.current) {
440
+ xtermRef.current.write(`\r\n\x1b[93m[Voice] ${msg}\x1b[0m\r\n`);
441
+ }
442
+ } catch {}
443
+ };
444
+
418
445
  const sendKey = (key: string) => {
419
446
  if (wsRef.current?.readyState === WebSocket.OPEN) {
420
447
  wsRef.current.send(JSON.stringify({ type: 'data', data: key }));
448
+ } else {
449
+ debugVoice(`sendKey failed: WebSocket state=${wsRef.current?.readyState}`);
421
450
  }
422
451
  };
423
452
 
@@ -427,6 +456,8 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
427
456
  if (wsRef.current?.readyState === WebSocket.OPEN) {
428
457
  const bracketed = `\x1b[200~${text}\x1b[201~`;
429
458
  wsRef.current.send(JSON.stringify({ type: 'data', data: bracketed }));
459
+ } else {
460
+ debugVoice(`sendPaste failed: WebSocket state=${wsRef.current?.readyState}`);
430
461
  }
431
462
  };
432
463
 
@@ -475,6 +506,7 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
475
506
  let text = '';
476
507
  if (cfg?.apiKey) {
477
508
  // Direct call to Groq/OpenAI — skip server proxy for speed
509
+ console.log('[Voice] Transcribing via', cfg.backend || 'direct');
478
510
  const form = new FormData();
479
511
  form.append('file', blob, 'audio.webm');
480
512
  form.append('model', cfg.model);
@@ -488,21 +520,29 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
488
520
  if (res.ok) {
489
521
  const data = await res.json();
490
522
  text = data.text || '';
523
+ } else {
524
+ console.error('[Voice] API error:', res.status, await res.text().catch(() => ''));
491
525
  }
492
526
  } else {
493
527
  // Fallback to server proxy
528
+ console.log('[Voice] Transcribing via server proxy, cfg:', cfg);
494
529
  const form = new FormData();
495
530
  form.append('audio', blob, 'dictation.webm');
496
531
  const res = await fetch('/api/whisper', { method: 'POST', body: form });
497
532
  if (res.ok) {
498
533
  const data = await res.json();
499
534
  text = data.text || '';
535
+ } else {
536
+ console.error('[Voice] Server proxy error:', res.status, await res.text().catch(() => ''));
500
537
  }
501
538
  }
539
+ console.log('[Voice] Result:', JSON.stringify(text));
502
540
  if (text.trim()) {
503
541
  setQuestInput(prev => prev ? `${prev} ${text.trim()}` : text.trim());
504
542
  }
505
- } catch {}
543
+ } catch (err) {
544
+ console.error('[Voice] Exception:', err);
545
+ }
506
546
  setQuestMicStatus('off');
507
547
  };
508
548
 
@@ -556,8 +596,14 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
556
596
  try {
557
597
  // Fetch config once, cache for subsequent cycles
558
598
  if (!questWhisperCfgRef.current) {
599
+ debugVoice('Fetching whisper config...');
559
600
  const cfgRes = await fetch('/api/whisper/config');
560
- if (cfgRes.ok) questWhisperCfgRef.current = await cfgRes.json();
601
+ if (cfgRes.ok) {
602
+ questWhisperCfgRef.current = await cfgRes.json();
603
+ debugVoice(`Config: backend=${questWhisperCfgRef.current?.backend || 'none'} hasKey=${!!questWhisperCfgRef.current?.apiKey}`);
604
+ } else {
605
+ debugVoice(`Config fetch failed: ${cfgRes.status} ${await cfgRes.text().catch(() => '')}`);
606
+ }
561
607
  }
562
608
  if (!questImmersiveRef.current) return;
563
609
 
@@ -588,6 +634,7 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
588
634
 
589
635
  // No speech — restart or clean up
590
636
  if (!hasSpeech || chunks.length === 0) {
637
+ debugVoice(`No speech detected (hasSpeech=${hasSpeech} chunks=${chunks.length}) — restarting`);
591
638
  questDrainingRef.current = false;
592
639
  if (questImmersiveRef.current) setTimeout(startImmersiveCycle, 300);
593
640
  else setQuestMicStatus('off');
@@ -595,13 +642,15 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
595
642
  }
596
643
 
597
644
  const blob = new Blob(chunks, { type: 'audio/webm' });
598
- if (blob.size < 500) { setTimeout(startImmersiveCycle, 300); return; }
645
+ if (blob.size < 500) { debugVoice(`Blob too small (${blob.size}b) — restarting`); setTimeout(startImmersiveCycle, 300); return; }
599
646
 
600
647
  setQuestMicStatus('transcribing');
601
648
  const cfg = questWhisperCfgRef.current;
649
+ debugVoice(`Transcribing blob=${blob.size}b hasCfg=${!!cfg} hasKey=${!!cfg?.apiKey}`);
602
650
  try {
603
651
  let text = '';
604
652
  if (cfg?.apiKey) {
653
+ debugVoice(`Calling ${cfg.backend}: ${cfg.apiUrl}`);
605
654
  const form = new FormData();
606
655
  form.append('file', blob, 'audio.webm');
607
656
  form.append('model', cfg.model);
@@ -612,23 +661,39 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
612
661
  headers: { 'Authorization': `Bearer ${cfg.apiKey}` },
613
662
  body: form,
614
663
  });
615
- if (res.ok) text = (await res.json()).text || '';
664
+ if (res.ok) {
665
+ text = (await res.json()).text || '';
666
+ debugVoice(`Transcribed: "${text}"`);
667
+ } else {
668
+ const errBody = await res.text().catch(() => '');
669
+ debugVoice(`API error: ${res.status} ${errBody.slice(0, 200)}`);
670
+ }
616
671
  } else {
672
+ debugVoice('No API key — using server proxy /api/whisper');
617
673
  const form = new FormData();
618
674
  form.append('audio', blob, 'dictation.webm');
619
675
  const res = await fetch('/api/whisper', { method: 'POST', body: form });
620
- if (res.ok) text = (await res.json()).text || '';
676
+ if (res.ok) {
677
+ text = (await res.json()).text || '';
678
+ debugVoice(`Transcribed: "${text}"`);
679
+ } else {
680
+ const errBody = await res.text().catch(() => '');
681
+ debugVoice(`Proxy error: ${res.status} ${errBody.slice(0, 200)}`);
682
+ }
621
683
  }
684
+ debugVoice(`Result: "${text}" ws=${wsRef.current?.readyState} immersive=${questImmersiveRef.current} draining=${questDrainingRef.current}`);
622
685
  if (text.trim() && (questImmersiveRef.current || questDrainingRef.current)) {
623
686
  if (immersiveAutoSendRef.current) {
624
- // Single write: text + Enter in one message (avoids race between split sends)
687
+ debugVoice(`Sending: "${text.trim()}" + Enter`);
625
688
  sendKey(text.trim() + '\r');
626
689
  } else {
627
- // No auto-send: put text in the input field so user can review/edit
690
+ debugVoice(`Putting in input: "${text.trim()}"`);
628
691
  setQuestInput((prev) => prev ? prev + ' ' + text.trim() : text.trim());
629
692
  }
630
693
  }
631
- } catch {}
694
+ } catch (err: any) {
695
+ debugVoice(`Exception: ${err.message || err}`);
696
+ }
632
697
 
633
698
  // Loop: restart listening if still immersive, or clean up if draining
634
699
  questDrainingRef.current = false;
@@ -736,6 +801,7 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
736
801
  }
737
802
  if (finalText.length > lastFinalLength) {
738
803
  const newText = finalText.slice(lastFinalLength);
804
+ console.log('[Voice] recognized:', JSON.stringify(newText.trim()), 'autoSend:', autoSend, 'ws:', wsRef.current?.readyState);
739
805
  if (autoSend && immersiveAutoSendRef.current) {
740
806
  // Single write: text + Enter in one message (avoids race between split sends)
741
807
  sendKey(newText.trim() + '\r');