@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,660 +1,660 @@
1
- #!/usr/bin/env node
2
-
3
- 'use strict';
4
-
5
- const { execFileSync } = require('child_process');
6
- const path = require('path');
7
- const os = require('os');
8
- const fs = require('fs');
9
-
10
- // Resolve the target user's home directory.
11
- // On Windows, if running from a separate admin account, find the user
12
- // who actually has Claude Code data (.claude/ directory).
13
- function resolveTargetHome() {
14
- const currentHome = os.homedir();
15
- if (process.platform !== 'win32') return currentHome;
16
- // Check if the current user has .claude — if so, they're the target
17
- if (fs.existsSync(path.join(currentHome, '.claude'))) return currentHome;
18
- // Scan for users with .claude
19
- const usersDir = path.dirname(currentHome);
20
- const skip = new Set(['Public', 'Default', 'Default User', 'All Users']);
21
- try {
22
- const claudeUsers = fs.readdirSync(usersDir)
23
- .filter(name => !skip.has(name) && !name.startsWith('.'))
24
- .filter(name => fs.existsSync(path.join(usersDir, name, '.claude')));
25
- if (claudeUsers.length === 1) return path.join(usersDir, claudeUsers[0]);
26
- } catch {}
27
- return currentHome;
28
- }
29
-
30
- const TARGET_HOME = resolveTargetHome();
31
- const SPACES_DIR = path.join(TARGET_HOME, '.spaces');
32
- const PACKAGES_DIR = path.join(SPACES_DIR, 'packages');
33
- const NODE_MODULES_DIR = path.join(PACKAGES_DIR, 'node_modules', '@spaces');
34
-
35
- // ─── Package definitions ─────────────────────────────────────
36
- const PACKAGES = {
37
- teams: {
38
- name: '@spaces/teams',
39
- dir: path.join(PACKAGES_DIR, 'teams'),
40
- repo: 'jlongo78/spaces-teams',
41
- private: false,
42
- verify: (dir) => fs.existsSync(path.join(dir, 'dist', 'index.js')),
43
- verifyLabel: 'dist/index.js',
44
- },
45
- pro: {
46
- name: '@spaces/pro',
47
- dir: path.join(PACKAGES_DIR, 'pro'),
48
- repo: 'jlongo78/spaces-pro',
49
- private: true,
50
- verify: (dir) => fs.existsSync(path.join(dir, 'dist', 'index.js')),
51
- verifyLabel: 'dist/index.js',
52
- },
53
- cortex: {
54
- name: '@spaces/cortex',
55
- dir: path.join(PACKAGES_DIR, 'cortex'),
56
- repo: 'jlongo78/spaces-cortex',
57
- private: true,
58
- verify: (dir) => fs.existsSync(path.join(dir, 'dist', 'index.js')),
59
- verifyLabel: 'dist/index.js',
60
- },
61
- };
62
-
63
- // ─── Helpers ──────────────────────────────────────────────────
64
- function log(msg) { console.log(` ${msg}`); }
65
- function logOk(msg) { console.log(` ✓ ${msg}`); }
66
- function logErr(msg) { console.error(` ✗ ${msg}`); }
67
- function logWarn(msg) { console.log(` ! ${msg}`); }
68
-
69
- // On Windows, ensure Git is in PATH (admin accounts may not inherit user PATH)
70
- function ensureGitInPath() {
71
- if (process.platform !== 'win32') return;
72
- try {
73
- execFileSync('git', ['--version'], { stdio: 'pipe', shell: true });
74
- return; // git already available
75
- } catch {}
76
- // Try common Git install locations (system-wide and per-user)
77
- const candidates = [
78
- path.join(process.env.ProgramFiles || 'C:\\Program Files', 'Git', 'cmd'),
79
- path.join(process.env['ProgramFiles(x86)'] || 'C:\\Program Files (x86)', 'Git', 'cmd'),
80
- // Per-user installs (check target user and all profiles)
81
- path.join(TARGET_HOME, 'AppData', 'Local', 'Programs', 'Git', 'cmd'),
82
- path.join(TARGET_HOME, 'AppData', 'Local', 'Programs', 'Git', 'mingw64', 'bin'),
83
- ];
84
- // Also check all user profiles in case Git is installed by a different user
85
- try {
86
- const usersDir = path.dirname(os.homedir());
87
- for (const name of fs.readdirSync(usersDir)) {
88
- candidates.push(path.join(usersDir, name, 'AppData', 'Local', 'Programs', 'Git', 'cmd'));
89
- candidates.push(path.join(usersDir, name, 'AppData', 'Local', 'Programs', 'Git', 'mingw64', 'bin'));
90
- }
91
- } catch {}
92
- for (const dir of candidates) {
93
- if (fs.existsSync(path.join(dir, 'git.exe'))) {
94
- process.env.PATH = process.env.PATH + ';' + dir;
95
- return;
96
- }
97
- }
98
- }
99
- ensureGitInPath();
100
-
101
- function run(cmd, args, opts = {}) {
102
- const isWin = process.platform === 'win32';
103
- const safeArgs = isWin
104
- ? args.map(a => (a.includes(' ') ? '"' + a + '"' : a))
105
- : args;
106
- return execFileSync(cmd, safeArgs, {
107
- encoding: 'utf-8',
108
- stdio: opts.quiet ? ['pipe', 'pipe', 'pipe'] : 'inherit',
109
- shell: isWin,
110
- ...opts,
111
- });
112
- }
113
-
114
- function restartServiceIfRunning() {
115
- const serviceScript = path.join(__dirname, 'spaces-service.js');
116
- try {
117
- log('Restarting service...');
118
- execFileSync(process.execPath, [serviceScript, 'stop'], { stdio: 'pipe', timeout: 10000 });
119
- } catch { /* may not be running */ }
120
- try {
121
- execFileSync(process.execPath, [serviceScript, 'start'], { stdio: 'inherit', timeout: 10000 });
122
- logOk('Service restarted with new version');
123
- } catch {
124
- log('Run "spaces service start" to start the new version');
125
- }
126
- }
127
-
128
- // Git args prefix: allow operating on repos owned by a different user
129
- // (e.g. admin account managing packages in the target user's home)
130
- const GIT_SAFE = ['-c', 'safe.directory=*'];
131
-
132
- /**
133
- * Clone a repo, trying SSH first then HTTPS (with optional PAT).
134
- */
135
- function gitClone(repo, dest, isPrivate) {
136
- const sshUrl = `git@github.com:${repo}.git`;
137
- const httpsUrl = `https://github.com/${repo}.git`;
138
-
139
- // Try SSH first
140
- try {
141
- log(`Cloning ${repo} (SSH)...`);
142
- run('git', [...GIT_SAFE, 'clone', '--depth', '1', sshUrl, dest]);
143
- return;
144
- } catch {
145
- // SSH failed, try HTTPS
146
- }
147
-
148
- // HTTPS — check for PAT if private
149
- if (isPrivate) {
150
- const pat = process.env.GH_PAT || process.env.GITHUB_TOKEN || '';
151
- if (pat) {
152
- log(`Cloning ${repo} (HTTPS + token)...`);
153
- const authedUrl = `https://${pat}@github.com/${repo}.git`;
154
- run('git', [...GIT_SAFE, 'clone', '--depth', '1', authedUrl, dest]);
155
- return;
156
- }
157
- }
158
-
159
- log(`Cloning ${repo} (HTTPS)...`);
160
- run('git', [...GIT_SAFE, 'clone', '--depth', '1', httpsUrl, dest]);
161
- }
162
-
163
- /**
164
- * Pull latest changes in a repo directory.
165
- * Stashes any local modifications first so pull doesn't fail.
166
- */
167
- function gitPull(dir) {
168
- log('Pulling latest...');
169
- // Stash local changes if any (e.g. hook-generated files)
170
- let stashed = false;
171
- try {
172
- const status = execFileSync('git', [...GIT_SAFE, 'status', '--porcelain'], { cwd: dir, encoding: 'utf-8' }).trim();
173
- if (status) {
174
- log('Stashing local changes...');
175
- run('git', [...GIT_SAFE, 'stash', '--include-untracked'], { cwd: dir });
176
- stashed = true;
177
- }
178
- } catch {}
179
- run('git', [...GIT_SAFE, 'pull', '--ff-only'], { cwd: dir });
180
- if (stashed) {
181
- try {
182
- run('git', [...GIT_SAFE, 'stash', 'pop'], { cwd: dir });
183
- log('Restored local changes.');
184
- } catch {
185
- log('Warning: Could not restore stashed changes. Run "git stash pop" manually in ' + dir);
186
- }
187
- }
188
- }
189
-
190
- /**
191
- * Create the symlink from node_modules/@spaces/<name> -> ../../<name>
192
- */
193
- function createSymlink(pkgKey) {
194
- const linkPath = path.join(NODE_MODULES_DIR, pkgKey);
195
- const targetPath = path.join('..', '..', pkgKey); // relative symlink
196
-
197
- fs.mkdirSync(NODE_MODULES_DIR, { recursive: true });
198
-
199
- // Remove existing link/dir
200
- try {
201
- const stat = fs.lstatSync(linkPath);
202
- if (stat.isSymbolicLink() || stat.isFile()) {
203
- fs.unlinkSync(linkPath);
204
- } else if (stat.isDirectory()) {
205
- fs.rmSync(linkPath, { recursive: true });
206
- }
207
- } catch {}
208
-
209
- fs.symlinkSync(targetPath, linkPath, process.platform === 'win32' ? 'junction' : 'dir');
210
- logOk(`Symlink: @spaces/${pkgKey} -> packages/${pkgKey}`);
211
- }
212
-
213
- /**
214
- * Check if a native module loads correctly from a package directory.
215
- */
216
- function checkNativeModule(moduleName, searchDir) {
217
- try {
218
- const nodePath = path.join(searchDir, 'node_modules');
219
- // Use execFileSync directly (no shell) so quotes aren't mangled on Windows
220
- const result = execFileSync(process.execPath, [
221
- '-e',
222
- `try { require('${moduleName}'); console.log('ok'); } catch(e) { console.log(e.message); }`,
223
- ], {
224
- encoding: 'utf-8',
225
- stdio: ['pipe', 'pipe', 'pipe'],
226
- cwd: searchDir,
227
- env: { ...process.env, NODE_PATH: nodePath },
228
- });
229
- return result.trim() === 'ok';
230
- } catch {
231
- return false;
232
- }
233
- }
234
-
235
- // ─── Install command ──────────────────────────────────────────
236
- function installPackage(pkgKey) {
237
- const pkg = PACKAGES[pkgKey];
238
- if (!pkg) {
239
- logErr(`Unknown package: ${pkgKey}`);
240
- log(`Available: ${Object.keys(PACKAGES).join(', ')}`);
241
- process.exit(1);
242
- }
243
-
244
- console.log(`\n Installing ${pkg.name}...\n`);
245
-
246
- // Pro requires teams as a prerequisite
247
- if (pkgKey === "pro") {
248
- const teamsDir = PACKAGES.teams.dir;
249
- if (!fs.existsSync(path.join(teamsDir, "dist", "index.js"))) {
250
- log("@spaces/pro requires @spaces/teams -- installing teams first...");
251
- console.log("");
252
- installPackage("teams");
253
- console.log("");
254
- }
255
- }
256
-
257
- // 1. Clone or pull
258
- if (fs.existsSync(path.join(pkg.dir, '.git'))) {
259
- gitPull(pkg.dir);
260
- } else {
261
- fs.mkdirSync(PACKAGES_DIR, { recursive: true });
262
- gitClone(pkg.repo, pkg.dir, pkg.private);
263
- }
264
-
265
- // 2. Install dependencies
266
- // Both teams and pro need TypeScript build
267
- log('Installing dependencies...');
268
- run('npm', ['install'], { cwd: pkg.dir });
269
-
270
- // Rebuild native modules for the current platform/ABI
271
- log('Rebuilding native modules...');
272
- run('npm', ['rebuild'], { cwd: pkg.dir });
273
-
274
- log('Building TypeScript...');
275
- run('npm', ['run', 'build'], { cwd: pkg.dir });
276
-
277
- log('Pruning dev dependencies...');
278
- run('npm', ['prune', '--omit=dev'], { cwd: pkg.dir });
279
-
280
- // 5. Create symlink
281
- createSymlink(pkgKey);
282
-
283
- // 6. Verify
284
- if (pkg.verify(pkg.dir)) {
285
- logOk(`${pkg.name} installed successfully`);
286
- } else {
287
- logErr(`${pkg.name} installed but ${pkg.verifyLabel} not found`);
288
- process.exit(1);
289
- }
290
-
291
- // 7. Verify native modules
292
- if (!checkNativeModule('better-sqlite3', pkg.dir)) {
293
- logWarn('better-sqlite3 native module not loading — attempting rebuild...');
294
- run('npm', ['rebuild', 'better-sqlite3'], { cwd: pkg.dir });
295
- if (checkNativeModule('better-sqlite3', pkg.dir)) {
296
- logOk('better-sqlite3 rebuilt successfully');
297
- } else {
298
- logErr('better-sqlite3 still failing — you may need to install build tools');
299
- }
300
- } else {
301
- logOk('Native modules OK');
302
- }
303
-
304
- // 8. Update tier in server.json
305
- const configPath = path.join(SPACES_DIR, 'server.json');
306
- try {
307
- const config = fs.existsSync(configPath)
308
- ? JSON.parse(fs.readFileSync(configPath, 'utf-8'))
309
- : { port: 3457, basePath: '' };
310
- // teams → team tier, pro → federation tier
311
- // Add-on packages set their tier; base package resets to community
312
- // only if no add-on package is currently installed
313
- const tierMap = { teams: 'team', pro: 'federation' };
314
- if (tierMap[pkgKey]) {
315
- // Installing an add-on — set its tier
316
- config.tier = tierMap[pkgKey];
317
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
318
- logOk(`Tier set to ${tierMap[pkgKey]}`);
319
- } else if (!config.tier || config.tier === 'community') {
320
- // Base package install, no add-on tier — ensure community
321
- config.tier = 'community';
322
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
323
- logOk(`Tier set to community`);
324
- } else {
325
- // Base package install but an add-on tier exists — preserve it
326
- logOk(`Tier unchanged (${config.tier})`);
327
- }
328
- } catch {}
329
-
330
- // 9. Verify require() works
331
- try {
332
- const result = execFileSync(process.execPath, [
333
- '-e',
334
- `const p = require.resolve('${pkg.name}'); console.log('resolved: ' + p);`,
335
- ], {
336
- encoding: 'utf-8',
337
- stdio: ['pipe', 'pipe', 'pipe'],
338
- env: { ...process.env, NODE_PATH: path.join(PACKAGES_DIR, 'node_modules') },
339
- });
340
- logOk(`require('${pkg.name}') -> ${result.trim().replace('resolved: ', '')}`);
341
- } catch {
342
- logWarn(`require('${pkg.name}') failed — this may be OK if peer deps aren't available yet`);
343
- }
344
-
345
- console.log('');
346
- }
347
-
348
- // ─── Verify command ───────────────────────────────────────────
349
- function verifyAll() {
350
- console.log('\n Spaces Package Verification\n');
351
-
352
- let allOk = true;
353
-
354
- for (const [key, pkg] of Object.entries(PACKAGES)) {
355
- log(`─── ${pkg.name} ───`);
356
-
357
- // Check if installed
358
- if (!fs.existsSync(pkg.dir)) {
359
- logWarn('Not installed');
360
- log('');
361
- continue;
362
- }
363
-
364
- // Check git status
365
- try {
366
- const branch = run('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: pkg.dir, quiet: true }).trim();
367
- const hash = run('git', ['rev-parse', '--short', 'HEAD'], { cwd: pkg.dir, quiet: true }).trim();
368
- logOk(`Git: ${branch} @ ${hash}`);
369
- } catch {
370
- logErr('Git status check failed');
371
- allOk = false;
372
- }
373
-
374
- // Check entry point
375
- if (pkg.verify(pkg.dir)) {
376
- logOk(`Entry: ${pkg.verifyLabel} exists`);
377
- } else {
378
- logErr(`Entry: ${pkg.verifyLabel} missing`);
379
- allOk = false;
380
- }
381
-
382
- // Check node_modules
383
- if (fs.existsSync(path.join(pkg.dir, 'node_modules'))) {
384
- logOk('Dependencies: node_modules present');
385
- } else {
386
- logErr('Dependencies: node_modules missing');
387
- allOk = false;
388
- }
389
-
390
- // Check symlink
391
- const linkPath = path.join(NODE_MODULES_DIR, key);
392
- try {
393
- const stat = fs.lstatSync(linkPath);
394
- if (stat.isSymbolicLink()) {
395
- const target = fs.readlinkSync(linkPath);
396
- logOk(`Symlink: @spaces/${key} -> ${target}`);
397
- } else {
398
- logWarn(`@spaces/${key} exists but is not a symlink`);
399
- }
400
- } catch {
401
- logErr(`Symlink: @spaces/${key} missing`);
402
- allOk = false;
403
- }
404
-
405
- // Check native modules
406
- const nativeOk = checkNativeModule('better-sqlite3', pkg.dir);
407
- if (nativeOk) {
408
- logOk('Native: better-sqlite3 loads OK');
409
- } else {
410
- logErr('Native: better-sqlite3 failed (ABI mismatch? Run: spaces upgrade)');
411
- allOk = false;
412
- }
413
-
414
- // Check require() resolution
415
- try {
416
- execFileSync(process.execPath, [
417
- '-e',
418
- `require.resolve('${pkg.name}')`,
419
- ], {
420
- encoding: 'utf-8',
421
- stdio: ['pipe', 'pipe', 'pipe'],
422
- env: { ...process.env, NODE_PATH: path.join(PACKAGES_DIR, 'node_modules') },
423
- });
424
- logOk(`require('${pkg.name}') resolves OK`);
425
- } catch {
426
- logErr(`require('${pkg.name}') fails`);
427
- allOk = false;
428
- }
429
-
430
- log('');
431
- }
432
-
433
- if (allOk) {
434
- logOk('All checks passed');
435
- } else {
436
- logErr('Some checks failed — run "spaces upgrade" to fix');
437
- }
438
- console.log('');
439
- }
440
-
441
- // ─── Upgrade command ──────────────────────────────────────────
442
-
443
- /**
444
- * Upgrade the core @jlongo78/agent-spaces package via npm.
445
- * Detects the current version, checks for a newer one, and upgrades in-place.
446
- */
447
- function upgradeCorePackage() {
448
- const pkgName = '@jlongo78/agent-spaces';
449
- log(`─── ${pkgName} (core) ───`);
450
-
451
- // Get current installed version
452
- let currentVersion = '0.0.0';
453
- try { currentVersion = require('../package.json').version; } catch {}
454
-
455
- // Check latest on npm
456
- let latestVersion;
457
- try {
458
- latestVersion = run('npm', ['view', pkgName, 'version'], { quiet: true }).trim();
459
- } catch {
460
- logErr(`Could not check npm for latest ${pkgName} version`);
461
- return;
462
- }
463
-
464
- if (latestVersion === currentVersion) {
465
- logOk(`${pkgName} is already at latest (${currentVersion})`);
466
- return;
467
- }
468
-
469
- log(`Upgrading ${pkgName}: ${currentVersion} → ${latestVersion}`);
470
- try {
471
- run('npm', ['install', '-g', `${pkgName}@latest`]);
472
- logOk(`${pkgName} upgraded to ${latestVersion}`);
473
- } catch (err) {
474
- logErr(`Failed to upgrade ${pkgName}: ${err.message}`);
475
- log('You may need to run with elevated permissions (sudo / admin shell)');
476
- return;
477
- }
478
-
479
- // Clear stale update-check cache so the UI shows the correct version
480
- try { fs.unlinkSync(path.join(SPACES_DIR, 'update-check.json')); } catch {}
481
-
482
- // Restart the service if it's running so the new version takes effect
483
- restartServiceIfRunning();
484
- }
485
-
486
- function upgradePackage(pkgKey) {
487
- if (pkgKey) {
488
- // Upgrade specific package
489
- const pkg = PACKAGES[pkgKey];
490
- if (!pkg) {
491
- logErr(`Unknown package: ${pkgKey}`);
492
- process.exit(1);
493
- }
494
- if (!fs.existsSync(pkg.dir)) {
495
- log(`${pkg.name} not installed — running install instead`);
496
- installPackage(pkgKey);
497
- return;
498
- }
499
- console.log(`\n Upgrading ${pkg.name}...\n`);
500
- doUpgrade(pkgKey, pkg);
501
- restartServiceIfRunning();
502
- } else {
503
- // Upgrade core app first, then all installed addon packages
504
- console.log('\n Upgrading Agent Spaces...\n');
505
- upgradeCorePackage();
506
- log('');
507
- for (const [key, pkg] of Object.entries(PACKAGES)) {
508
- if (fs.existsSync(pkg.dir)) {
509
- log(`─── ${pkg.name} ───`);
510
- doUpgrade(key, pkg);
511
- log('');
512
- }
513
- }
514
- }
515
- console.log('');
516
- }
517
-
518
- function doUpgrade(pkgKey, pkg) {
519
- // Pull latest
520
- gitPull(pkg.dir);
521
-
522
- run('npm', ['install'], { cwd: pkg.dir });
523
- run('npm', ['rebuild'], { cwd: pkg.dir });
524
- log('Building TypeScript...');
525
- run('npm', ['run', 'build'], { cwd: pkg.dir });
526
- run('npm', ['prune', '--omit=dev'], { cwd: pkg.dir });
527
-
528
- // Re-create symlink
529
- createSymlink(pkgKey);
530
-
531
- if (pkg.verify(pkg.dir)) {
532
- logOk(`${pkg.name} upgraded successfully`);
533
- } else {
534
- logErr(`${pkg.name} upgrade failed — ${pkg.verifyLabel} not found`);
535
- }
536
- }
537
-
538
- // ─── Uninstall command ────────────────────────────────────────
539
- function uninstallOne(pkgKey) {
540
- const pkg = PACKAGES[pkgKey];
541
-
542
- // Remove symlink
543
- const linkPath = path.join(NODE_MODULES_DIR, pkgKey);
544
- try {
545
- const stat = fs.lstatSync(linkPath);
546
- if (stat.isSymbolicLink() || stat.isFile()) {
547
- fs.unlinkSync(linkPath);
548
- } else if (stat.isDirectory()) {
549
- fs.rmSync(linkPath, { recursive: true });
550
- }
551
- logOk(`Removed symlink @spaces/${pkgKey}`);
552
- } catch {
553
- logWarn(`Symlink @spaces/${pkgKey} not found`);
554
- }
555
-
556
- // Remove package directory
557
- if (fs.existsSync(pkg.dir)) {
558
- fs.rmSync(pkg.dir, { recursive: true });
559
- logOk(`Removed ${pkg.dir}`);
560
- } else {
561
- logWarn(`${pkg.dir} not found`);
562
- }
563
- }
564
-
565
- function uninstallPackage(pkgKey) {
566
- if (pkgKey) {
567
- const pkg = PACKAGES[pkgKey];
568
- if (!pkg) {
569
- logErr(`Unknown package: ${pkgKey}`);
570
- log(`Available: ${Object.keys(PACKAGES).join(', ')}`);
571
- process.exit(1);
572
- }
573
- console.log(`\n Uninstalling ${pkg.name}...\n`);
574
- uninstallOne(pkgKey);
575
- // Reset tier to community if removing a tier package
576
- const configPath = path.join(SPACES_DIR, 'server.json');
577
- try {
578
- if (fs.existsSync(configPath)) {
579
- const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
580
- if (config.tier && config.tier !== 'community') {
581
- config.tier = 'community';
582
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
583
- logOk('Reset tier to community');
584
- }
585
- }
586
- } catch {}
587
- logOk(`${pkg.name} uninstalled`);
588
- } else {
589
- console.log('\n Uninstalling everything...\n');
590
-
591
- // Remove tier packages
592
- for (const [key, pkg] of Object.entries(PACKAGES)) {
593
- if (fs.existsSync(pkg.dir) || fs.existsSync(path.join(NODE_MODULES_DIR, key))) {
594
- log(`─── ${pkg.name} ───`);
595
- uninstallOne(key);
596
- }
597
- }
598
- // Clean up packages dir
599
- try { fs.rmdirSync(NODE_MODULES_DIR); } catch {}
600
- try { fs.rmdirSync(path.join(PACKAGES_DIR, 'node_modules')); } catch {}
601
- try { fs.rmdirSync(PACKAGES_DIR); } catch {}
602
-
603
- // Remove the global spaces CLI
604
- log('─── @jlongo78/agent-spaces ───');
605
- try {
606
- run('npm', ['uninstall', '-g', '@jlongo78/agent-spaces'], { quiet: true });
607
- logOk('Removed global spaces CLI');
608
- } catch {
609
- logWarn('Global spaces CLI not found or already removed');
610
- }
611
-
612
- // Reset tier to community in server.json
613
- const configPath = path.join(SPACES_DIR, 'server.json');
614
- try {
615
- if (fs.existsSync(configPath)) {
616
- const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
617
- if (config.tier && config.tier !== 'community') {
618
- config.tier = 'community';
619
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
620
- logOk('Reset tier to community');
621
- }
622
- }
623
- } catch {}
624
-
625
- logOk('Spaces fully uninstalled');
626
- log('User data remains at ~/.spaces/ — remove manually if desired');
627
- }
628
- console.log('');
629
- }
630
-
631
- // ─── CLI ──────────────────────────────────────────────────────
632
- const command = process.argv[2];
633
- const target = process.argv[3];
634
-
635
- switch (command) {
636
- case 'install':
637
- if (!target) {
638
- logErr('Usage: spaces install <teams|pro>');
639
- process.exit(1);
640
- }
641
- installPackage(target);
642
- break;
643
-
644
- case 'uninstall':
645
- uninstallPackage(target || null);
646
- break;
647
-
648
- case 'verify':
649
- verifyAll();
650
- break;
651
-
652
- case 'upgrade':
653
- upgradePackage(target || null);
654
- break;
655
-
656
- default:
657
- logErr(`Unknown command: ${command}`);
658
- log('Usage: spaces <install|uninstall|verify|upgrade> [package]');
659
- process.exit(1);
660
- }
1
+ #!/usr/bin/env node
2
+
3
+ 'use strict';
4
+
5
+ const { execFileSync } = require('child_process');
6
+ const path = require('path');
7
+ const os = require('os');
8
+ const fs = require('fs');
9
+
10
+ // Resolve the target user's home directory.
11
+ // On Windows, if running from a separate admin account, find the user
12
+ // who actually has Claude Code data (.claude/ directory).
13
+ function resolveTargetHome() {
14
+ const currentHome = os.homedir();
15
+ if (process.platform !== 'win32') return currentHome;
16
+ // Check if the current user has .claude — if so, they're the target
17
+ if (fs.existsSync(path.join(currentHome, '.claude'))) return currentHome;
18
+ // Scan for users with .claude
19
+ const usersDir = path.dirname(currentHome);
20
+ const skip = new Set(['Public', 'Default', 'Default User', 'All Users']);
21
+ try {
22
+ const claudeUsers = fs.readdirSync(usersDir)
23
+ .filter(name => !skip.has(name) && !name.startsWith('.'))
24
+ .filter(name => fs.existsSync(path.join(usersDir, name, '.claude')));
25
+ if (claudeUsers.length === 1) return path.join(usersDir, claudeUsers[0]);
26
+ } catch {}
27
+ return currentHome;
28
+ }
29
+
30
+ const TARGET_HOME = resolveTargetHome();
31
+ const SPACES_DIR = path.join(TARGET_HOME, '.spaces');
32
+ const PACKAGES_DIR = path.join(SPACES_DIR, 'packages');
33
+ const NODE_MODULES_DIR = path.join(PACKAGES_DIR, 'node_modules', '@spaces');
34
+
35
+ // ─── Package definitions ─────────────────────────────────────
36
+ const PACKAGES = {
37
+ teams: {
38
+ name: '@spaces/teams',
39
+ dir: path.join(PACKAGES_DIR, 'teams'),
40
+ repo: 'jlongo78/spaces-teams',
41
+ private: false,
42
+ verify: (dir) => fs.existsSync(path.join(dir, 'dist', 'index.js')),
43
+ verifyLabel: 'dist/index.js',
44
+ },
45
+ pro: {
46
+ name: '@spaces/pro',
47
+ dir: path.join(PACKAGES_DIR, 'pro'),
48
+ repo: 'jlongo78/spaces-pro',
49
+ private: true,
50
+ verify: (dir) => fs.existsSync(path.join(dir, 'dist', 'index.js')),
51
+ verifyLabel: 'dist/index.js',
52
+ },
53
+ cortex: {
54
+ name: '@spaces/cortex',
55
+ dir: path.join(PACKAGES_DIR, 'cortex'),
56
+ repo: 'jlongo78/spaces-cortex',
57
+ private: true,
58
+ verify: (dir) => fs.existsSync(path.join(dir, 'dist', 'index.js')),
59
+ verifyLabel: 'dist/index.js',
60
+ },
61
+ };
62
+
63
+ // ─── Helpers ──────────────────────────────────────────────────
64
+ function log(msg) { console.log(` ${msg}`); }
65
+ function logOk(msg) { console.log(` ✓ ${msg}`); }
66
+ function logErr(msg) { console.error(` ✗ ${msg}`); }
67
+ function logWarn(msg) { console.log(` ! ${msg}`); }
68
+
69
+ // On Windows, ensure Git is in PATH (admin accounts may not inherit user PATH)
70
+ function ensureGitInPath() {
71
+ if (process.platform !== 'win32') return;
72
+ try {
73
+ execFileSync('git', ['--version'], { stdio: 'pipe', shell: true });
74
+ return; // git already available
75
+ } catch {}
76
+ // Try common Git install locations (system-wide and per-user)
77
+ const candidates = [
78
+ path.join(process.env.ProgramFiles || 'C:\\Program Files', 'Git', 'cmd'),
79
+ path.join(process.env['ProgramFiles(x86)'] || 'C:\\Program Files (x86)', 'Git', 'cmd'),
80
+ // Per-user installs (check target user and all profiles)
81
+ path.join(TARGET_HOME, 'AppData', 'Local', 'Programs', 'Git', 'cmd'),
82
+ path.join(TARGET_HOME, 'AppData', 'Local', 'Programs', 'Git', 'mingw64', 'bin'),
83
+ ];
84
+ // Also check all user profiles in case Git is installed by a different user
85
+ try {
86
+ const usersDir = path.dirname(os.homedir());
87
+ for (const name of fs.readdirSync(usersDir)) {
88
+ candidates.push(path.join(usersDir, name, 'AppData', 'Local', 'Programs', 'Git', 'cmd'));
89
+ candidates.push(path.join(usersDir, name, 'AppData', 'Local', 'Programs', 'Git', 'mingw64', 'bin'));
90
+ }
91
+ } catch {}
92
+ for (const dir of candidates) {
93
+ if (fs.existsSync(path.join(dir, 'git.exe'))) {
94
+ process.env.PATH = process.env.PATH + ';' + dir;
95
+ return;
96
+ }
97
+ }
98
+ }
99
+ ensureGitInPath();
100
+
101
+ function run(cmd, args, opts = {}) {
102
+ const isWin = process.platform === 'win32';
103
+ const safeArgs = isWin
104
+ ? args.map(a => (a.includes(' ') ? '"' + a + '"' : a))
105
+ : args;
106
+ return execFileSync(cmd, safeArgs, {
107
+ encoding: 'utf-8',
108
+ stdio: opts.quiet ? ['pipe', 'pipe', 'pipe'] : 'inherit',
109
+ shell: isWin,
110
+ ...opts,
111
+ });
112
+ }
113
+
114
+ function restartServiceIfRunning() {
115
+ const serviceScript = path.join(__dirname, 'spaces-service.js');
116
+ try {
117
+ log('Restarting service...');
118
+ execFileSync(process.execPath, [serviceScript, 'stop'], { stdio: 'pipe', timeout: 10000 });
119
+ } catch { /* may not be running */ }
120
+ try {
121
+ execFileSync(process.execPath, [serviceScript, 'start'], { stdio: 'inherit', timeout: 10000 });
122
+ logOk('Service restarted with new version');
123
+ } catch {
124
+ log('Run "spaces service start" to start the new version');
125
+ }
126
+ }
127
+
128
+ // Git args prefix: allow operating on repos owned by a different user
129
+ // (e.g. admin account managing packages in the target user's home)
130
+ const GIT_SAFE = ['-c', 'safe.directory=*'];
131
+
132
+ /**
133
+ * Clone a repo, trying SSH first then HTTPS (with optional PAT).
134
+ */
135
+ function gitClone(repo, dest, isPrivate) {
136
+ const sshUrl = `git@github.com:${repo}.git`;
137
+ const httpsUrl = `https://github.com/${repo}.git`;
138
+
139
+ // Try SSH first
140
+ try {
141
+ log(`Cloning ${repo} (SSH)...`);
142
+ run('git', [...GIT_SAFE, 'clone', '--depth', '1', sshUrl, dest]);
143
+ return;
144
+ } catch {
145
+ // SSH failed, try HTTPS
146
+ }
147
+
148
+ // HTTPS — check for PAT if private
149
+ if (isPrivate) {
150
+ const pat = process.env.GH_PAT || process.env.GITHUB_TOKEN || '';
151
+ if (pat) {
152
+ log(`Cloning ${repo} (HTTPS + token)...`);
153
+ const authedUrl = `https://${pat}@github.com/${repo}.git`;
154
+ run('git', [...GIT_SAFE, 'clone', '--depth', '1', authedUrl, dest]);
155
+ return;
156
+ }
157
+ }
158
+
159
+ log(`Cloning ${repo} (HTTPS)...`);
160
+ run('git', [...GIT_SAFE, 'clone', '--depth', '1', httpsUrl, dest]);
161
+ }
162
+
163
+ /**
164
+ * Pull latest changes in a repo directory.
165
+ * Stashes any local modifications first so pull doesn't fail.
166
+ */
167
+ function gitPull(dir) {
168
+ log('Pulling latest...');
169
+ // Stash local changes if any (e.g. hook-generated files)
170
+ let stashed = false;
171
+ try {
172
+ const status = execFileSync('git', [...GIT_SAFE, 'status', '--porcelain'], { cwd: dir, encoding: 'utf-8' }).trim();
173
+ if (status) {
174
+ log('Stashing local changes...');
175
+ run('git', [...GIT_SAFE, 'stash', '--include-untracked'], { cwd: dir });
176
+ stashed = true;
177
+ }
178
+ } catch {}
179
+ run('git', [...GIT_SAFE, 'pull', '--ff-only'], { cwd: dir });
180
+ if (stashed) {
181
+ try {
182
+ run('git', [...GIT_SAFE, 'stash', 'pop'], { cwd: dir });
183
+ log('Restored local changes.');
184
+ } catch {
185
+ log('Warning: Could not restore stashed changes. Run "git stash pop" manually in ' + dir);
186
+ }
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Create the symlink from node_modules/@spaces/<name> -> ../../<name>
192
+ */
193
+ function createSymlink(pkgKey) {
194
+ const linkPath = path.join(NODE_MODULES_DIR, pkgKey);
195
+ const targetPath = path.join('..', '..', pkgKey); // relative symlink
196
+
197
+ fs.mkdirSync(NODE_MODULES_DIR, { recursive: true });
198
+
199
+ // Remove existing link/dir
200
+ try {
201
+ const stat = fs.lstatSync(linkPath);
202
+ if (stat.isSymbolicLink() || stat.isFile()) {
203
+ fs.unlinkSync(linkPath);
204
+ } else if (stat.isDirectory()) {
205
+ fs.rmSync(linkPath, { recursive: true });
206
+ }
207
+ } catch {}
208
+
209
+ fs.symlinkSync(targetPath, linkPath, process.platform === 'win32' ? 'junction' : 'dir');
210
+ logOk(`Symlink: @spaces/${pkgKey} -> packages/${pkgKey}`);
211
+ }
212
+
213
+ /**
214
+ * Check if a native module loads correctly from a package directory.
215
+ */
216
+ function checkNativeModule(moduleName, searchDir) {
217
+ try {
218
+ const nodePath = path.join(searchDir, 'node_modules');
219
+ // Use execFileSync directly (no shell) so quotes aren't mangled on Windows
220
+ const result = execFileSync(process.execPath, [
221
+ '-e',
222
+ `try { require('${moduleName}'); console.log('ok'); } catch(e) { console.log(e.message); }`,
223
+ ], {
224
+ encoding: 'utf-8',
225
+ stdio: ['pipe', 'pipe', 'pipe'],
226
+ cwd: searchDir,
227
+ env: { ...process.env, NODE_PATH: nodePath },
228
+ });
229
+ return result.trim() === 'ok';
230
+ } catch {
231
+ return false;
232
+ }
233
+ }
234
+
235
+ // ─── Install command ──────────────────────────────────────────
236
+ function installPackage(pkgKey) {
237
+ const pkg = PACKAGES[pkgKey];
238
+ if (!pkg) {
239
+ logErr(`Unknown package: ${pkgKey}`);
240
+ log(`Available: ${Object.keys(PACKAGES).join(', ')}`);
241
+ process.exit(1);
242
+ }
243
+
244
+ console.log(`\n Installing ${pkg.name}...\n`);
245
+
246
+ // Pro requires teams as a prerequisite
247
+ if (pkgKey === "pro") {
248
+ const teamsDir = PACKAGES.teams.dir;
249
+ if (!fs.existsSync(path.join(teamsDir, "dist", "index.js"))) {
250
+ log("@spaces/pro requires @spaces/teams -- installing teams first...");
251
+ console.log("");
252
+ installPackage("teams");
253
+ console.log("");
254
+ }
255
+ }
256
+
257
+ // 1. Clone or pull
258
+ if (fs.existsSync(path.join(pkg.dir, '.git'))) {
259
+ gitPull(pkg.dir);
260
+ } else {
261
+ fs.mkdirSync(PACKAGES_DIR, { recursive: true });
262
+ gitClone(pkg.repo, pkg.dir, pkg.private);
263
+ }
264
+
265
+ // 2. Install dependencies
266
+ // Both teams and pro need TypeScript build
267
+ log('Installing dependencies...');
268
+ run('npm', ['install'], { cwd: pkg.dir });
269
+
270
+ // Rebuild native modules for the current platform/ABI
271
+ log('Rebuilding native modules...');
272
+ run('npm', ['rebuild'], { cwd: pkg.dir });
273
+
274
+ log('Building TypeScript...');
275
+ run('npm', ['run', 'build'], { cwd: pkg.dir });
276
+
277
+ log('Pruning dev dependencies...');
278
+ run('npm', ['prune', '--omit=dev'], { cwd: pkg.dir });
279
+
280
+ // 5. Create symlink
281
+ createSymlink(pkgKey);
282
+
283
+ // 6. Verify
284
+ if (pkg.verify(pkg.dir)) {
285
+ logOk(`${pkg.name} installed successfully`);
286
+ } else {
287
+ logErr(`${pkg.name} installed but ${pkg.verifyLabel} not found`);
288
+ process.exit(1);
289
+ }
290
+
291
+ // 7. Verify native modules
292
+ if (!checkNativeModule('better-sqlite3', pkg.dir)) {
293
+ logWarn('better-sqlite3 native module not loading — attempting rebuild...');
294
+ run('npm', ['rebuild', 'better-sqlite3'], { cwd: pkg.dir });
295
+ if (checkNativeModule('better-sqlite3', pkg.dir)) {
296
+ logOk('better-sqlite3 rebuilt successfully');
297
+ } else {
298
+ logErr('better-sqlite3 still failing — you may need to install build tools');
299
+ }
300
+ } else {
301
+ logOk('Native modules OK');
302
+ }
303
+
304
+ // 8. Update tier in server.json
305
+ const configPath = path.join(SPACES_DIR, 'server.json');
306
+ try {
307
+ const config = fs.existsSync(configPath)
308
+ ? JSON.parse(fs.readFileSync(configPath, 'utf-8'))
309
+ : { port: 3457, basePath: '' };
310
+ // teams → team tier, pro → federation tier
311
+ // Add-on packages set their tier; base package resets to community
312
+ // only if no add-on package is currently installed
313
+ const tierMap = { teams: 'team', pro: 'federation' };
314
+ if (tierMap[pkgKey]) {
315
+ // Installing an add-on — set its tier
316
+ config.tier = tierMap[pkgKey];
317
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
318
+ logOk(`Tier set to ${tierMap[pkgKey]}`);
319
+ } else if (!config.tier || config.tier === 'community') {
320
+ // Base package install, no add-on tier — ensure community
321
+ config.tier = 'community';
322
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
323
+ logOk(`Tier set to community`);
324
+ } else {
325
+ // Base package install but an add-on tier exists — preserve it
326
+ logOk(`Tier unchanged (${config.tier})`);
327
+ }
328
+ } catch {}
329
+
330
+ // 9. Verify require() works
331
+ try {
332
+ const result = execFileSync(process.execPath, [
333
+ '-e',
334
+ `const p = require.resolve('${pkg.name}'); console.log('resolved: ' + p);`,
335
+ ], {
336
+ encoding: 'utf-8',
337
+ stdio: ['pipe', 'pipe', 'pipe'],
338
+ env: { ...process.env, NODE_PATH: path.join(PACKAGES_DIR, 'node_modules') },
339
+ });
340
+ logOk(`require('${pkg.name}') -> ${result.trim().replace('resolved: ', '')}`);
341
+ } catch {
342
+ logWarn(`require('${pkg.name}') failed — this may be OK if peer deps aren't available yet`);
343
+ }
344
+
345
+ console.log('');
346
+ }
347
+
348
+ // ─── Verify command ───────────────────────────────────────────
349
+ function verifyAll() {
350
+ console.log('\n Spaces Package Verification\n');
351
+
352
+ let allOk = true;
353
+
354
+ for (const [key, pkg] of Object.entries(PACKAGES)) {
355
+ log(`─── ${pkg.name} ───`);
356
+
357
+ // Check if installed
358
+ if (!fs.existsSync(pkg.dir)) {
359
+ logWarn('Not installed');
360
+ log('');
361
+ continue;
362
+ }
363
+
364
+ // Check git status
365
+ try {
366
+ const branch = run('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: pkg.dir, quiet: true }).trim();
367
+ const hash = run('git', ['rev-parse', '--short', 'HEAD'], { cwd: pkg.dir, quiet: true }).trim();
368
+ logOk(`Git: ${branch} @ ${hash}`);
369
+ } catch {
370
+ logErr('Git status check failed');
371
+ allOk = false;
372
+ }
373
+
374
+ // Check entry point
375
+ if (pkg.verify(pkg.dir)) {
376
+ logOk(`Entry: ${pkg.verifyLabel} exists`);
377
+ } else {
378
+ logErr(`Entry: ${pkg.verifyLabel} missing`);
379
+ allOk = false;
380
+ }
381
+
382
+ // Check node_modules
383
+ if (fs.existsSync(path.join(pkg.dir, 'node_modules'))) {
384
+ logOk('Dependencies: node_modules present');
385
+ } else {
386
+ logErr('Dependencies: node_modules missing');
387
+ allOk = false;
388
+ }
389
+
390
+ // Check symlink
391
+ const linkPath = path.join(NODE_MODULES_DIR, key);
392
+ try {
393
+ const stat = fs.lstatSync(linkPath);
394
+ if (stat.isSymbolicLink()) {
395
+ const target = fs.readlinkSync(linkPath);
396
+ logOk(`Symlink: @spaces/${key} -> ${target}`);
397
+ } else {
398
+ logWarn(`@spaces/${key} exists but is not a symlink`);
399
+ }
400
+ } catch {
401
+ logErr(`Symlink: @spaces/${key} missing`);
402
+ allOk = false;
403
+ }
404
+
405
+ // Check native modules
406
+ const nativeOk = checkNativeModule('better-sqlite3', pkg.dir);
407
+ if (nativeOk) {
408
+ logOk('Native: better-sqlite3 loads OK');
409
+ } else {
410
+ logErr('Native: better-sqlite3 failed (ABI mismatch? Run: spaces upgrade)');
411
+ allOk = false;
412
+ }
413
+
414
+ // Check require() resolution
415
+ try {
416
+ execFileSync(process.execPath, [
417
+ '-e',
418
+ `require.resolve('${pkg.name}')`,
419
+ ], {
420
+ encoding: 'utf-8',
421
+ stdio: ['pipe', 'pipe', 'pipe'],
422
+ env: { ...process.env, NODE_PATH: path.join(PACKAGES_DIR, 'node_modules') },
423
+ });
424
+ logOk(`require('${pkg.name}') resolves OK`);
425
+ } catch {
426
+ logErr(`require('${pkg.name}') fails`);
427
+ allOk = false;
428
+ }
429
+
430
+ log('');
431
+ }
432
+
433
+ if (allOk) {
434
+ logOk('All checks passed');
435
+ } else {
436
+ logErr('Some checks failed — run "spaces upgrade" to fix');
437
+ }
438
+ console.log('');
439
+ }
440
+
441
+ // ─── Upgrade command ──────────────────────────────────────────
442
+
443
+ /**
444
+ * Upgrade the core @jlongo78/agent-spaces package via npm.
445
+ * Detects the current version, checks for a newer one, and upgrades in-place.
446
+ */
447
+ function upgradeCorePackage() {
448
+ const pkgName = '@jlongo78/agent-spaces';
449
+ log(`─── ${pkgName} (core) ───`);
450
+
451
+ // Get current installed version
452
+ let currentVersion = '0.0.0';
453
+ try { currentVersion = require('../package.json').version; } catch {}
454
+
455
+ // Check latest on npm
456
+ let latestVersion;
457
+ try {
458
+ latestVersion = run('npm', ['view', pkgName, 'version'], { quiet: true }).trim();
459
+ } catch {
460
+ logErr(`Could not check npm for latest ${pkgName} version`);
461
+ return;
462
+ }
463
+
464
+ if (latestVersion === currentVersion) {
465
+ logOk(`${pkgName} is already at latest (${currentVersion})`);
466
+ return;
467
+ }
468
+
469
+ log(`Upgrading ${pkgName}: ${currentVersion} → ${latestVersion}`);
470
+ try {
471
+ run('npm', ['install', '-g', `${pkgName}@latest`]);
472
+ logOk(`${pkgName} upgraded to ${latestVersion}`);
473
+ } catch (err) {
474
+ logErr(`Failed to upgrade ${pkgName}: ${err.message}`);
475
+ log('You may need to run with elevated permissions (sudo / admin shell)');
476
+ return;
477
+ }
478
+
479
+ // Clear stale update-check cache so the UI shows the correct version
480
+ try { fs.unlinkSync(path.join(SPACES_DIR, 'update-check.json')); } catch {}
481
+
482
+ // Restart the service if it's running so the new version takes effect
483
+ restartServiceIfRunning();
484
+ }
485
+
486
+ function upgradePackage(pkgKey) {
487
+ if (pkgKey) {
488
+ // Upgrade specific package
489
+ const pkg = PACKAGES[pkgKey];
490
+ if (!pkg) {
491
+ logErr(`Unknown package: ${pkgKey}`);
492
+ process.exit(1);
493
+ }
494
+ if (!fs.existsSync(pkg.dir)) {
495
+ log(`${pkg.name} not installed — running install instead`);
496
+ installPackage(pkgKey);
497
+ return;
498
+ }
499
+ console.log(`\n Upgrading ${pkg.name}...\n`);
500
+ doUpgrade(pkgKey, pkg);
501
+ restartServiceIfRunning();
502
+ } else {
503
+ // Upgrade core app first, then all installed addon packages
504
+ console.log('\n Upgrading Agent Spaces...\n');
505
+ upgradeCorePackage();
506
+ log('');
507
+ for (const [key, pkg] of Object.entries(PACKAGES)) {
508
+ if (fs.existsSync(pkg.dir)) {
509
+ log(`─── ${pkg.name} ───`);
510
+ doUpgrade(key, pkg);
511
+ log('');
512
+ }
513
+ }
514
+ }
515
+ console.log('');
516
+ }
517
+
518
+ function doUpgrade(pkgKey, pkg) {
519
+ // Pull latest
520
+ gitPull(pkg.dir);
521
+
522
+ run('npm', ['install'], { cwd: pkg.dir });
523
+ run('npm', ['rebuild'], { cwd: pkg.dir });
524
+ log('Building TypeScript...');
525
+ run('npm', ['run', 'build'], { cwd: pkg.dir });
526
+ run('npm', ['prune', '--omit=dev'], { cwd: pkg.dir });
527
+
528
+ // Re-create symlink
529
+ createSymlink(pkgKey);
530
+
531
+ if (pkg.verify(pkg.dir)) {
532
+ logOk(`${pkg.name} upgraded successfully`);
533
+ } else {
534
+ logErr(`${pkg.name} upgrade failed — ${pkg.verifyLabel} not found`);
535
+ }
536
+ }
537
+
538
+ // ─── Uninstall command ────────────────────────────────────────
539
+ function uninstallOne(pkgKey) {
540
+ const pkg = PACKAGES[pkgKey];
541
+
542
+ // Remove symlink
543
+ const linkPath = path.join(NODE_MODULES_DIR, pkgKey);
544
+ try {
545
+ const stat = fs.lstatSync(linkPath);
546
+ if (stat.isSymbolicLink() || stat.isFile()) {
547
+ fs.unlinkSync(linkPath);
548
+ } else if (stat.isDirectory()) {
549
+ fs.rmSync(linkPath, { recursive: true });
550
+ }
551
+ logOk(`Removed symlink @spaces/${pkgKey}`);
552
+ } catch {
553
+ logWarn(`Symlink @spaces/${pkgKey} not found`);
554
+ }
555
+
556
+ // Remove package directory
557
+ if (fs.existsSync(pkg.dir)) {
558
+ fs.rmSync(pkg.dir, { recursive: true });
559
+ logOk(`Removed ${pkg.dir}`);
560
+ } else {
561
+ logWarn(`${pkg.dir} not found`);
562
+ }
563
+ }
564
+
565
+ function uninstallPackage(pkgKey) {
566
+ if (pkgKey) {
567
+ const pkg = PACKAGES[pkgKey];
568
+ if (!pkg) {
569
+ logErr(`Unknown package: ${pkgKey}`);
570
+ log(`Available: ${Object.keys(PACKAGES).join(', ')}`);
571
+ process.exit(1);
572
+ }
573
+ console.log(`\n Uninstalling ${pkg.name}...\n`);
574
+ uninstallOne(pkgKey);
575
+ // Reset tier to community if removing a tier package
576
+ const configPath = path.join(SPACES_DIR, 'server.json');
577
+ try {
578
+ if (fs.existsSync(configPath)) {
579
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
580
+ if (config.tier && config.tier !== 'community') {
581
+ config.tier = 'community';
582
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
583
+ logOk('Reset tier to community');
584
+ }
585
+ }
586
+ } catch {}
587
+ logOk(`${pkg.name} uninstalled`);
588
+ } else {
589
+ console.log('\n Uninstalling everything...\n');
590
+
591
+ // Remove tier packages
592
+ for (const [key, pkg] of Object.entries(PACKAGES)) {
593
+ if (fs.existsSync(pkg.dir) || fs.existsSync(path.join(NODE_MODULES_DIR, key))) {
594
+ log(`─── ${pkg.name} ───`);
595
+ uninstallOne(key);
596
+ }
597
+ }
598
+ // Clean up packages dir
599
+ try { fs.rmdirSync(NODE_MODULES_DIR); } catch {}
600
+ try { fs.rmdirSync(path.join(PACKAGES_DIR, 'node_modules')); } catch {}
601
+ try { fs.rmdirSync(PACKAGES_DIR); } catch {}
602
+
603
+ // Remove the global spaces CLI
604
+ log('─── @jlongo78/agent-spaces ───');
605
+ try {
606
+ run('npm', ['uninstall', '-g', '@jlongo78/agent-spaces'], { quiet: true });
607
+ logOk('Removed global spaces CLI');
608
+ } catch {
609
+ logWarn('Global spaces CLI not found or already removed');
610
+ }
611
+
612
+ // Reset tier to community in server.json
613
+ const configPath = path.join(SPACES_DIR, 'server.json');
614
+ try {
615
+ if (fs.existsSync(configPath)) {
616
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
617
+ if (config.tier && config.tier !== 'community') {
618
+ config.tier = 'community';
619
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
620
+ logOk('Reset tier to community');
621
+ }
622
+ }
623
+ } catch {}
624
+
625
+ logOk('Spaces fully uninstalled');
626
+ log('User data remains at ~/.spaces/ — remove manually if desired');
627
+ }
628
+ console.log('');
629
+ }
630
+
631
+ // ─── CLI ──────────────────────────────────────────────────────
632
+ const command = process.argv[2];
633
+ const target = process.argv[3];
634
+
635
+ switch (command) {
636
+ case 'install':
637
+ if (!target) {
638
+ logErr('Usage: spaces install <teams|pro>');
639
+ process.exit(1);
640
+ }
641
+ installPackage(target);
642
+ break;
643
+
644
+ case 'uninstall':
645
+ uninstallPackage(target || null);
646
+ break;
647
+
648
+ case 'verify':
649
+ verifyAll();
650
+ break;
651
+
652
+ case 'upgrade':
653
+ upgradePackage(target || null);
654
+ break;
655
+
656
+ default:
657
+ logErr(`Unknown command: ${command}`);
658
+ log('Usage: spaces <install|uninstall|verify|upgrade> [package]');
659
+ process.exit(1);
660
+ }