@jlongo78/agent-spaces 0.7.7 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (797) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +6 -0
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/required-server-files.json +19 -19
  6. package/.next/standalone/.next/routes-manifest.json +38 -0
  7. package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(desktop)/admin/users/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(desktop)/cortex/page/react-loadable-manifest.json +1 -1
  11. package/.next/standalone/.next/server/app/(desktop)/cortex/page.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/(desktop)/cortex/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(desktop)/network/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/(desktop)/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(desktop)/projects/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(desktop)/sessions/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(desktop)/settings/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/(desktop)/terminal/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/(desktop)/terminal/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  28. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  29. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  30. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  31. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  32. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  33. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  36. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  37. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  38. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  40. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  41. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  42. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  43. package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
  44. package/.next/standalone/.next/server/app/admin/analytics.rsc +6 -7
  45. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +2 -2
  46. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
  47. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  48. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  49. package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +6 -7
  50. package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
  51. package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
  52. package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +2 -2
  53. package/.next/standalone/.next/server/app/admin/users.html +1 -1
  54. package/.next/standalone/.next/server/app/admin/users.rsc +2 -2
  55. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  58. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  59. package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +2 -2
  60. package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
  61. package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
  62. package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +2 -2
  63. package/.next/standalone/.next/server/app/analytics.html +1 -1
  64. package/.next/standalone/.next/server/app/analytics.rsc +3 -3
  65. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +2 -2
  66. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
  67. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  68. package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +3 -3
  69. package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
  70. package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
  71. package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  72. package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/benchmark/lobes/route/app-paths-manifest.json +3 -0
  74. package/.next/standalone/.next/server/app/api/benchmark/lobes/route/build-manifest.json +11 -0
  75. package/.next/standalone/.next/server/app/api/benchmark/lobes/route/server-reference-manifest.json +4 -0
  76. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js +7 -0
  77. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.map +5 -0
  78. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.nft.json +1 -0
  79. package/.next/standalone/.next/server/app/api/benchmark/lobes/route_client-reference-manifest.js +2 -0
  80. package/.next/standalone/.next/server/app/api/benchmark/run/route/app-paths-manifest.json +3 -0
  81. package/.next/standalone/.next/server/app/api/benchmark/run/route/build-manifest.json +11 -0
  82. package/.next/standalone/.next/server/app/api/benchmark/run/route/server-reference-manifest.json +4 -0
  83. package/.next/standalone/.next/server/app/api/benchmark/run/route.js +7 -0
  84. package/.next/standalone/.next/server/app/api/benchmark/run/route.js.map +5 -0
  85. package/.next/standalone/.next/server/app/api/benchmark/run/route.js.nft.json +1 -0
  86. package/.next/standalone/.next/server/app/api/benchmark/run/route_client-reference-manifest.js +2 -0
  87. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route/app-paths-manifest.json +3 -0
  88. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route/build-manifest.json +11 -0
  89. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route/server-reference-manifest.json +4 -0
  90. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js +7 -0
  91. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.map +5 -0
  92. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.nft.json +1 -0
  93. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route_client-reference-manifest.js +2 -0
  94. package/.next/standalone/.next/server/app/api/benchmark/runs/route/app-paths-manifest.json +3 -0
  95. package/.next/standalone/.next/server/app/api/benchmark/runs/route/build-manifest.json +11 -0
  96. package/.next/standalone/.next/server/app/api/benchmark/runs/route/server-reference-manifest.json +4 -0
  97. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js +7 -0
  98. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.map +5 -0
  99. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.nft.json +1 -0
  100. package/.next/standalone/.next/server/app/api/benchmark/runs/route_client-reference-manifest.js +2 -0
  101. package/.next/standalone/.next/server/app/api/benchmark/status/route/app-paths-manifest.json +3 -0
  102. package/.next/standalone/.next/server/app/api/benchmark/status/route/build-manifest.json +11 -0
  103. package/.next/standalone/.next/server/app/api/benchmark/status/route/server-reference-manifest.json +4 -0
  104. package/.next/standalone/.next/server/app/api/benchmark/status/route.js +7 -0
  105. package/.next/standalone/.next/server/app/api/benchmark/status/route.js.map +5 -0
  106. package/.next/standalone/.next/server/app/api/benchmark/status/route.js.nft.json +1 -0
  107. package/.next/standalone/.next/server/app/api/benchmark/status/route_client-reference-manifest.js +2 -0
  108. package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/api/cortex/context/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/cortex/export/route.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js.nft.json +1 -1
  123. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js.nft.json +1 -1
  125. package/.next/standalone/.next/server/app/api/cortex/import/route.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js.nft.json +1 -1
  127. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js.nft.json +1 -1
  129. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js.nft.json +1 -1
  131. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js.nft.json +1 -1
  133. package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js.nft.json +1 -1
  134. package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js.nft.json +1 -1
  137. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/cortex/search/route.js.nft.json +1 -1
  139. package/.next/standalone/.next/server/app/api/cortex/settings/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/cortex/status/route.js.nft.json +1 -1
  141. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/cortex/usage/route.js.nft.json +1 -1
  143. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  145. package/.next/standalone/.next/server/app/api/files/route.js +1 -1
  146. package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  147. package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
  149. package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
  152. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
  155. package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
  161. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
  165. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/api/whisper/route/app-paths-manifest.json +3 -0
  168. package/.next/standalone/.next/server/app/api/whisper/route/build-manifest.json +11 -0
  169. package/.next/standalone/.next/server/app/api/whisper/route/server-reference-manifest.json +4 -0
  170. package/.next/standalone/.next/server/app/api/whisper/route.js +7 -0
  171. package/.next/standalone/.next/server/app/api/whisper/route.js.map +5 -0
  172. package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -0
  173. package/.next/standalone/.next/server/app/api/whisper/route_client-reference-manifest.js +2 -0
  174. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
  177. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
  179. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
  180. package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/cortex.html +1 -1
  182. package/.next/standalone/.next/server/app/cortex.rsc +3 -3
  183. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +2 -2
  184. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex.segment.rsc +1 -1
  185. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  186. package/.next/standalone/.next/server/app/cortex.segments/_full.segment.rsc +3 -3
  187. package/.next/standalone/.next/server/app/cortex.segments/_head.segment.rsc +1 -1
  188. package/.next/standalone/.next/server/app/cortex.segments/_index.segment.rsc +2 -2
  189. package/.next/standalone/.next/server/app/cortex.segments/_tree.segment.rsc +2 -2
  190. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/login.html +1 -1
  192. package/.next/standalone/.next/server/app/login.rsc +2 -2
  193. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
  194. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  195. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
  196. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  197. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  198. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  199. package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/m/projects.html +1 -1
  202. package/.next/standalone/.next/server/app/m/projects.rsc +2 -2
  203. package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
  204. package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
  205. package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
  206. package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +2 -2
  207. package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
  208. package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
  209. package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +1 -1
  210. package/.next/standalone/.next/server/app/m/sessions/[id]/page.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/app/m/sessions.html +1 -1
  214. package/.next/standalone/.next/server/app/m/sessions.rsc +2 -2
  215. package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
  216. package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
  217. package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
  218. package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +2 -2
  219. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
  220. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
  221. package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +1 -1
  222. package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
  223. package/.next/standalone/.next/server/app/m/settings.html +1 -1
  224. package/.next/standalone/.next/server/app/m/settings.rsc +2 -2
  225. package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
  226. package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
  227. package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
  228. package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +2 -2
  229. package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
  230. package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
  231. package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +1 -1
  232. package/.next/standalone/.next/server/app/m/terminal/page.js.nft.json +1 -1
  233. package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
  234. package/.next/standalone/.next/server/app/m/terminal.html +1 -1
  235. package/.next/standalone/.next/server/app/m/terminal.rsc +3 -3
  236. package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +3 -3
  237. package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
  238. package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
  239. package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +2 -2
  240. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +2 -2
  241. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
  242. package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +1 -1
  243. package/.next/standalone/.next/server/app/m.html +1 -1
  244. package/.next/standalone/.next/server/app/m.rsc +2 -2
  245. package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
  246. package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
  247. package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
  248. package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +2 -2
  249. package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
  250. package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
  251. package/.next/standalone/.next/server/app/network.html +1 -1
  252. package/.next/standalone/.next/server/app/network.rsc +2 -2
  253. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
  254. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
  255. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  256. package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +2 -2
  257. package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
  258. package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
  259. package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +2 -2
  260. package/.next/standalone/.next/server/app/projects.html +1 -1
  261. package/.next/standalone/.next/server/app/projects.rsc +2 -2
  262. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
  263. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
  264. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  265. package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  266. package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  267. package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  268. package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  269. package/.next/standalone/.next/server/app/sessions.html +1 -1
  270. package/.next/standalone/.next/server/app/sessions.rsc +2 -2
  271. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
  272. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
  273. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  274. package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +2 -2
  275. package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  276. package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
  277. package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
  278. package/.next/standalone/.next/server/app/settings.html +1 -1
  279. package/.next/standalone/.next/server/app/settings.rsc +2 -2
  280. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
  281. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
  282. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  283. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  284. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  285. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  286. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  287. package/.next/standalone/.next/server/app/terminal.html +1 -1
  288. package/.next/standalone/.next/server/app/terminal.rsc +3 -3
  289. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +2 -2
  290. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
  291. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  292. package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +3 -3
  293. package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
  294. package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
  295. package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +2 -2
  296. package/.next/standalone/.next/server/app/vr/page/react-loadable-manifest.json +1 -1
  297. package/.next/standalone/.next/server/app/vr/page_client-reference-manifest.js +1 -1
  298. package/.next/standalone/.next/server/app/vr.html +1 -1
  299. package/.next/standalone/.next/server/app/vr.rsc +3 -3
  300. package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +3 -3
  301. package/.next/standalone/.next/server/app/vr.segments/_head.segment.rsc +1 -1
  302. package/.next/standalone/.next/server/app/vr.segments/_index.segment.rsc +2 -2
  303. package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +2 -2
  304. package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +2 -2
  305. package/.next/standalone/.next/server/app/vr.segments/vr.segment.rsc +1 -1
  306. package/.next/standalone/.next/server/app/workspaces.html +1 -1
  307. package/.next/standalone/.next/server/app/workspaces.rsc +2 -2
  308. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
  309. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
  310. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  311. package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +2 -2
  312. package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
  313. package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
  314. package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
  315. package/.next/standalone/.next/server/app-paths-manifest.json +6 -0
  316. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0041efe4._.js +2 -2
  317. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00bf0ace._.js +2 -2
  318. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0a837dd9._.js +98 -0
  319. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e71d908._.js +3 -3
  320. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e9142f3._.js +2 -2
  321. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10e47926._.js +1 -1
  322. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1665dc78._.js +2 -2
  323. package/.next/standalone/.next/server/chunks/[root-of-the-server]__175cbabf._.js +2 -2
  324. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1adae357._.js +2 -2
  325. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1d359752._.js +2 -2
  326. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1e8fabeb._.js +2 -2
  327. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f8deca0._.js +8 -8
  328. package/.next/standalone/.next/server/chunks/[root-of-the-server]__253fdda1._.js +2 -2
  329. package/.next/standalone/.next/server/chunks/[root-of-the-server]__28e6434f._.js +2 -2
  330. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2a386564._.js +3 -3
  331. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2c20fb38._.js +2 -2
  332. package/.next/standalone/.next/server/chunks/[root-of-the-server]__309132cd._.js +1 -1
  333. package/.next/standalone/.next/server/chunks/[root-of-the-server]__33fec964._.js +3 -3
  334. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3786d8ae._.js +1 -1
  335. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3ae92407._.js +2 -2
  336. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3beda9fe._.js +2 -2
  337. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4619e9bd._.js +1 -1
  338. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4a051043._.js +1 -1
  339. package/.next/standalone/.next/server/chunks/[root-of-the-server]__508002e4._.js +2 -2
  340. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5086c373._.js +2 -2
  341. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5913e097._.js +2 -2
  342. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5b5f68d2._.js +2 -2
  343. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c1f2459._.js +2 -2
  344. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5ec8c977._.js +2 -2
  345. package/.next/standalone/.next/server/chunks/[root-of-the-server]__63cebc6c._.js +2 -2
  346. package/.next/standalone/.next/server/chunks/[root-of-the-server]__64d30d4d._.js +2 -2
  347. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6c54fc2e._.js +2 -2
  348. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6dc1fb7e._.js +1 -1
  349. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6e568102._.js +2 -2
  350. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6faa04c0._.js +2 -2
  351. package/.next/standalone/.next/server/chunks/[root-of-the-server]__74a34dc3._.js +2 -2
  352. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7819e4cf._.js +98 -0
  353. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7e7250a4._.js +2 -2
  354. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8309e0a4._.js +2 -2
  355. package/.next/standalone/.next/server/chunks/[root-of-the-server]__86cc0e2b._.js +6 -6
  356. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89c2565a._.js +2 -2
  357. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8d178ad9._.js +2 -2
  358. package/.next/standalone/.next/server/chunks/[root-of-the-server]__93ee06f3._.js +2 -2
  359. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e1f0137._.js +98 -0
  360. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e4c154a._.js +2 -2
  361. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9d2e1d3._.js +2 -2
  362. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ae53d343._.js +2 -2
  363. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b3a04cef._.js +2 -2
  364. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b4270b77._.js +1 -1
  365. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b6b6ce60._.js +3 -3
  366. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0757773._.js +98 -0
  367. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c24cfa91._.js +3 -0
  368. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__eb8acb65._.js → [root-of-the-server]__c7c47529._.js} +2 -2
  369. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c88b63f7._.js +2 -2
  370. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cba5f007._.js +1 -1
  371. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cbf4ceb0._.js +2 -2
  372. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cefdba2f._.js +2 -2
  373. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf9e82bb._.js +2 -2
  374. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d2897392._.js +2 -2
  375. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d3b2d856._.js +2 -2
  376. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d73273ca._.js +2 -2
  377. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d8417eb6._.js +2 -2
  378. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dc2a55de._.js +2 -2
  379. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e0d4690b._.js +2 -2
  380. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3ea8547._.js +98 -0
  381. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e678dd53._.js +1 -1
  382. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e9223f55._.js +2 -2
  383. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ea630076._.js +2 -2
  384. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f26ca49d._.js +1 -1
  385. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f33e1101._.js +1 -1
  386. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f515f865._.js +2 -2
  387. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fceb5d60._.js +2 -2
  388. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fed41403._.js +2 -2
  389. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ff2e98c2._.js +2 -2
  390. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_lobes_route_actions_ea7beadb.js +3 -0
  391. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_run_route_actions_9ed0ba41.js +3 -0
  392. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_runs_[id]_route_actions_39f90307.js +3 -0
  393. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_runs_route_actions_37cf958b.js +3 -0
  394. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_status_route_actions_009e2cba.js +3 -0
  395. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_whisper_route_actions_be9a633d.js +3 -0
  396. package/.next/standalone/.next/server/chunks/ssr/{_c1cfdd09._.js → [root-of-the-server]__16621ac5._.js} +2 -2
  397. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
  398. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__9c81bd86._.js +3 -0
  399. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e3bf6054._.js +5 -0
  400. package/.next/standalone/.next/server/chunks/ssr/{_81abf587._.js → _31ada310._.js} +2 -2
  401. package/.next/standalone/.next/server/chunks/ssr/_648a8a2d._.js +3 -0
  402. package/.next/standalone/.next/server/chunks/ssr/_999dae61._.js +3 -0
  403. package/.next/standalone/.next/server/chunks/ssr/_c48c91e5._.js +3 -0
  404. package/.next/standalone/.next/server/chunks/ssr/_f8959434._.js +3 -0
  405. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_cortex_page_tsx_0f33d8b3._.js +1 -1
  406. package/.next/standalone/.next/server/chunks/ssr/src_components_terminal_terminal-pane_tsx_803c5e2c._.js +9 -0
  407. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__32a0045c._.js +1 -1
  408. package/.next/standalone/.next/server/edge/chunks/_d73df637._.js +1 -1
  409. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  410. package/.next/standalone/.next/server/pages/404.html +1 -1
  411. package/.next/standalone/.next/server/pages/500.html +2 -2
  412. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  413. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  414. package/.next/standalone/.next/static/chunks/157826a3253f8ccf.js +7 -0
  415. package/.next/standalone/.next/static/chunks/{69606d281c39f9b2.js → 2f9f09924ff9d447.js} +1 -1
  416. package/.next/standalone/.next/static/chunks/{84fe8d44deeeb74f.js → 4ced66ef12d91b38.js} +35 -12
  417. package/.next/standalone/.next/static/chunks/57d04d161b8a01b3.js +7 -0
  418. package/.next/standalone/.next/static/chunks/709c4608e5b935e8.js +1 -0
  419. package/.next/standalone/.next/static/chunks/{9cfa0291d55d8d2a.js → 7b14d4e609b55b9b.js} +1 -1
  420. package/.next/standalone/.next/static/chunks/7be37f4a56b8f575.js +1 -0
  421. package/.next/standalone/.next/static/chunks/8021d5a2269ff113.js +1 -0
  422. package/.next/standalone/.next/static/chunks/a3fd93a9dde3cacc.js +1 -0
  423. package/.next/standalone/.next/static/chunks/{412140a02893327a.js → afee31c7399daf2a.js} +1 -1
  424. package/.next/standalone/.next/static/chunks/b92fdbf858aeb0b3.js +1 -0
  425. package/.next/standalone/.next/static/chunks/c17274c2f95d4ba2.js +5 -0
  426. package/.next/standalone/.next/static/chunks/e82f4414650587cf.js +7 -0
  427. package/.next/standalone/.next/static/chunks/f6464729e7aa0da0.css +3 -0
  428. package/.next/standalone/LICENSE +661 -0
  429. package/.next/standalone/NOTICE +5 -0
  430. package/.next/standalone/README.md +131 -0
  431. package/.next/standalone/bin/cortex-hook.sh +62 -62
  432. package/.next/standalone/bin/cortex-mcp.js +60 -60
  433. package/.next/standalone/bin/fix-standalone-externals.js +79 -0
  434. package/.next/standalone/bin/lib/auto-setup.js +110 -0
  435. package/.next/standalone/bin/mdns-service.js +171 -0
  436. package/.next/standalone/bin/postinstall.js +35 -0
  437. package/.next/standalone/bin/setup-admin.js +195 -0
  438. package/.next/standalone/bin/spaces-dev.js +247 -0
  439. package/.next/standalone/bin/spaces-install.js +638 -0
  440. package/.next/standalone/bin/spaces-reset-totp.js +50 -0
  441. package/.next/standalone/bin/spaces-service.js +1020 -0
  442. package/.next/standalone/bin/spaces-setup.js +253 -0
  443. package/.next/standalone/bin/spaces.js +788 -0
  444. package/.next/standalone/bin/ssh-auth-keys.sh +68 -0
  445. package/.next/standalone/bin/terminal-server.js +1807 -0
  446. package/.next/standalone/docker-compose.yml +28 -0
  447. package/.next/standalone/docs/architecture.md +387 -0
  448. package/.next/standalone/docs/cortex.md +293 -0
  449. package/.next/standalone/docs/getting-started.md +96 -0
  450. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-design.md +133 -0
  451. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-plan.md +959 -0
  452. package/.next/standalone/docs/plans/2026-03-07-service-command-design.md +146 -0
  453. package/.next/standalone/docs/plans/2026-03-07-service-command-plan.md +254 -0
  454. package/.next/standalone/docs/server-install.md +564 -0
  455. package/.next/standalone/docs/social-card.html +150 -0
  456. package/.next/standalone/docs/superpowers/plans/2026-03-12-spaces-cortex.md +5270 -0
  457. package/.next/standalone/docs/superpowers/plans/2026-03-13-cortex-wiring.md +1387 -1387
  458. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-entity-graph.md +1923 -1923
  459. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-knowledge-evolution.md +1113 -1113
  460. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-boundary-engine.md +853 -853
  461. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-context-engine.md +1274 -1274
  462. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-signal-ingestion.md +933 -933
  463. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-lobes.md +1080 -1080
  464. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-gravity-system.md +768 -768
  465. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-ui.md +1108 -1108
  466. package/.next/standalone/docs/superpowers/plans/2026-03-18-cortex-ui-integration.md +1846 -1846
  467. package/.next/standalone/docs/superpowers/plans/2026-03-19-vr-phase1-shell.md +1639 -0
  468. package/.next/standalone/docs/superpowers/specs/2026-03-11-universe-view-design.md +320 -0
  469. package/.next/standalone/docs/superpowers/specs/2026-03-12-spaces-brain-design.md +720 -0
  470. package/.next/standalone/docs/superpowers/specs/2026-03-13-cortex-wiring-design.md +268 -268
  471. package/.next/standalone/docs/superpowers/specs/2026-03-14-cortex-v2-design.md +623 -623
  472. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-lobes-design.md +263 -263
  473. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-v2-ui-design.md +240 -240
  474. package/.next/standalone/docs/superpowers/specs/2026-03-16-pane-ux-design.md +77 -0
  475. package/.next/standalone/docs/superpowers/specs/2026-03-18-cortex-ui-integration-design.md +341 -341
  476. package/.next/standalone/docs/superpowers/specs/2026-03-19-vr-phase1-shell-design.md +288 -0
  477. package/.next/standalone/docs/tiers.md +104 -0
  478. package/.next/standalone/eslint.config.mjs +18 -0
  479. package/.next/standalone/next.config.ts +20 -0
  480. package/.next/standalone/nginx.conf +53 -0
  481. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/README.md +46 -0
  482. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  483. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +1 -0
  484. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  485. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +42 -0
  486. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +46 -0
  487. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  488. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
  489. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  490. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
  491. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
  492. package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  493. package/.next/standalone/node_modules/@img/{sharp-win32-x64 → sharp-linux-x64}/package.json +46 -39
  494. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  495. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
  496. package/.next/standalone/package-lock.json +14154 -0
  497. package/.next/standalone/package.json +104 -104
  498. package/.next/standalone/postcss.config.mjs +7 -0
  499. package/.next/standalone/scripts/rebuild.cmd +65 -0
  500. package/.next/standalone/scripts/rebuild.sh +59 -0
  501. package/.next/standalone/server.js +1 -1
  502. package/.next/standalone/src/app/(desktop)/admin/analytics/page.tsx +266 -0
  503. package/.next/standalone/src/app/(desktop)/admin/users/page.tsx +399 -0
  504. package/.next/standalone/src/app/(desktop)/analytics/page.tsx +166 -0
  505. package/.next/standalone/src/app/(desktop)/cortex/page.tsx +81 -78
  506. package/.next/standalone/src/app/(desktop)/dashboard-client.tsx +56 -0
  507. package/.next/standalone/src/app/(desktop)/layout.tsx +18 -0
  508. package/.next/standalone/src/app/(desktop)/network/page.tsx +137 -0
  509. package/.next/standalone/src/app/(desktop)/page.tsx +17 -0
  510. package/.next/standalone/src/app/(desktop)/projects/page.tsx +68 -0
  511. package/.next/standalone/src/app/(desktop)/sessions/[id]/page.tsx +519 -0
  512. package/.next/standalone/src/app/(desktop)/sessions/page.tsx +145 -0
  513. package/.next/standalone/src/app/(desktop)/settings/page.tsx +446 -0
  514. package/.next/standalone/src/app/(desktop)/terminal/layout.tsx +7 -0
  515. package/.next/standalone/src/app/(desktop)/terminal/page.tsx +1151 -0
  516. package/.next/standalone/src/app/(desktop)/terminal/pane/[id]/page.tsx +211 -0
  517. package/.next/standalone/src/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page.tsx +192 -0
  518. package/.next/standalone/src/app/(desktop)/workspaces/page.tsx +12 -0
  519. package/.next/standalone/src/app/api/admin/analytics/route.ts +10 -0
  520. package/.next/standalone/src/app/api/admin/users/[id]/route.ts +20 -0
  521. package/.next/standalone/src/app/api/admin/users/route.ts +15 -0
  522. package/.next/standalone/src/app/api/analytics/overview/route.ts +80 -0
  523. package/.next/standalone/src/app/api/auth/login/route.ts +10 -0
  524. package/.next/standalone/src/app/api/auth/logout/route.ts +9 -0
  525. package/.next/standalone/src/app/api/auth/me/route.ts +22 -0
  526. package/.next/standalone/src/app/api/auth/totp/setup/route.ts +10 -0
  527. package/.next/standalone/src/app/api/auth/totp/status/route.ts +10 -0
  528. package/.next/standalone/src/app/api/auth/totp/verify/route.ts +10 -0
  529. package/.next/standalone/src/app/api/benchmark/lobes/route.ts +16 -0
  530. package/.next/standalone/src/app/api/benchmark/run/route.ts +92 -0
  531. package/.next/standalone/src/app/api/benchmark/runs/[id]/route.ts +26 -0
  532. package/.next/standalone/src/app/api/benchmark/runs/route.ts +16 -0
  533. package/.next/standalone/src/app/api/benchmark/status/route.ts +35 -0
  534. package/.next/standalone/src/app/api/bulk/route.ts +34 -0
  535. package/.next/standalone/src/app/api/chat/route.ts +85 -0
  536. package/.next/standalone/src/app/api/config/route.ts +30 -0
  537. package/.next/standalone/src/app/api/cortex/context/route.ts +78 -78
  538. package/.next/standalone/src/app/api/cortex/curation/assess/route.ts +27 -27
  539. package/.next/standalone/src/app/api/cortex/curation/publish/route.ts +23 -23
  540. package/.next/standalone/src/app/api/cortex/curation/refine/route.ts +23 -23
  541. package/.next/standalone/src/app/api/cortex/curation/review/route.ts +29 -29
  542. package/.next/standalone/src/app/api/cortex/curation/seed/route.ts +23 -23
  543. package/.next/standalone/src/app/api/cortex/export/route.ts +40 -40
  544. package/.next/standalone/src/app/api/cortex/federation/pending/route.ts +20 -20
  545. package/.next/standalone/src/app/api/cortex/federation/resolve/route.ts +43 -43
  546. package/.next/standalone/src/app/api/cortex/federation/search/route.ts +35 -35
  547. package/.next/standalone/src/app/api/cortex/federation/teach/route.ts +76 -76
  548. package/.next/standalone/src/app/api/cortex/graph/edges/route.ts +112 -112
  549. package/.next/standalone/src/app/api/cortex/graph/entities/[id]/route.ts +73 -73
  550. package/.next/standalone/src/app/api/cortex/graph/entities/route.ts +75 -75
  551. package/.next/standalone/src/app/api/cortex/graph/populate/route.ts +203 -203
  552. package/.next/standalone/src/app/api/cortex/import/route.ts +75 -75
  553. package/.next/standalone/src/app/api/cortex/import/status/route.ts +15 -15
  554. package/.next/standalone/src/app/api/cortex/ingest/bootstrap/route.ts +29 -29
  555. package/.next/standalone/src/app/api/cortex/ingest/status/route.ts +15 -15
  556. package/.next/standalone/src/app/api/cortex/knowledge/[id]/route.ts +91 -91
  557. package/.next/standalone/src/app/api/cortex/knowledge/route.ts +93 -93
  558. package/.next/standalone/src/app/api/cortex/lobes/[id]/route.ts +67 -67
  559. package/.next/standalone/src/app/api/cortex/lobes/route.ts +22 -22
  560. package/.next/standalone/src/app/api/cortex/lobes/share/route.ts +80 -80
  561. package/.next/standalone/src/app/api/cortex/marketplace/browse/route.ts +43 -43
  562. package/.next/standalone/src/app/api/cortex/marketplace/preview/route.ts +46 -46
  563. package/.next/standalone/src/app/api/cortex/mcp/call/route.ts +11 -11
  564. package/.next/standalone/src/app/api/cortex/mcp/tools/route.ts +6 -6
  565. package/.next/standalone/src/app/api/cortex/search/route.ts +43 -43
  566. package/.next/standalone/src/app/api/cortex/settings/route.ts +33 -33
  567. package/.next/standalone/src/app/api/cortex/status/route.ts +169 -169
  568. package/.next/standalone/src/app/api/cortex/timeline/route.ts +42 -42
  569. package/.next/standalone/src/app/api/cortex/usage/route.ts +31 -31
  570. package/.next/standalone/src/app/api/cortex/workspace/[id]/context/route.ts +41 -41
  571. package/.next/standalone/src/app/api/events/route.ts +40 -0
  572. package/.next/standalone/src/app/api/files/route.ts +187 -0
  573. package/.next/standalone/src/app/api/folders/route.ts +97 -0
  574. package/.next/standalone/src/app/api/network/connect-callback/route.ts +11 -0
  575. package/.next/standalone/src/app/api/network/connect-request/[id]/route.ts +11 -0
  576. package/.next/standalone/src/app/api/network/connect-request/route.ts +17 -0
  577. package/.next/standalone/src/app/api/network/discovered/route.ts +9 -0
  578. package/.next/standalone/src/app/api/network/handshake/route.ts +25 -0
  579. package/.next/standalone/src/app/api/network/health/route.ts +10 -0
  580. package/.next/standalone/src/app/api/network/identity/route.ts +15 -0
  581. package/.next/standalone/src/app/api/network/keys/[id]/route.ts +10 -0
  582. package/.next/standalone/src/app/api/network/keys/route.ts +15 -0
  583. package/.next/standalone/src/app/api/network/nodes/[id]/route.ts +15 -0
  584. package/.next/standalone/src/app/api/network/nodes/check/route.ts +9 -0
  585. package/.next/standalone/src/app/api/network/nodes/route.ts +15 -0
  586. package/.next/standalone/src/app/api/network/projects/route.ts +25 -0
  587. package/.next/standalone/src/app/api/network/proxy/[nodeId]/[...path]/route.ts +15 -0
  588. package/.next/standalone/src/app/api/network/search/route.ts +38 -0
  589. package/.next/standalone/src/app/api/network/sessions/[id]/messages/route.ts +36 -0
  590. package/.next/standalone/src/app/api/network/sessions/[id]/route.ts +34 -0
  591. package/.next/standalone/src/app/api/network/sessions/route.ts +43 -0
  592. package/.next/standalone/src/app/api/network/terminal/token/route.ts +10 -0
  593. package/.next/standalone/src/app/api/network/workspaces/[id]/route.ts +34 -0
  594. package/.next/standalone/src/app/api/network/workspaces/route.ts +61 -0
  595. package/.next/standalone/src/app/api/panes/[id]/route.ts +60 -0
  596. package/.next/standalone/src/app/api/panes/route.ts +39 -0
  597. package/.next/standalone/src/app/api/projects/route.ts +13 -0
  598. package/.next/standalone/src/app/api/search/route.ts +47 -0
  599. package/.next/standalone/src/app/api/sessions/[id]/chat/route.ts +120 -0
  600. package/.next/standalone/src/app/api/sessions/[id]/messages/route.ts +28 -0
  601. package/.next/standalone/src/app/api/sessions/[id]/route.ts +73 -0
  602. package/.next/standalone/src/app/api/sessions/route.ts +64 -0
  603. package/.next/standalone/src/app/api/sync/route.ts +24 -0
  604. package/.next/standalone/src/app/api/tags/route.ts +35 -0
  605. package/.next/standalone/src/app/api/tier/route.ts +16 -0
  606. package/.next/standalone/src/app/api/updates/route.ts +53 -0
  607. package/.next/standalone/src/app/api/whisper/route.ts +90 -0
  608. package/.next/standalone/src/app/api/workspaces/[id]/context/[key]/route.ts +39 -0
  609. package/.next/standalone/src/app/api/workspaces/[id]/context/route.ts +28 -0
  610. package/.next/standalone/src/app/api/workspaces/[id]/messages/[msgId]/route.ts +17 -0
  611. package/.next/standalone/src/app/api/workspaces/[id]/messages/route.ts +39 -0
  612. package/.next/standalone/src/app/api/workspaces/[id]/route.ts +47 -0
  613. package/.next/standalone/src/app/api/workspaces/[id]/sessions/route.ts +62 -0
  614. package/.next/standalone/src/app/api/workspaces/route.ts +79 -0
  615. package/.next/standalone/src/app/globals.css +85 -0
  616. package/.next/standalone/src/app/icon.png +0 -0
  617. package/.next/standalone/src/app/layout.tsx +33 -0
  618. package/.next/standalone/src/app/login/layout.tsx +7 -0
  619. package/.next/standalone/src/app/login/page.tsx +315 -0
  620. package/.next/standalone/src/app/m/layout.tsx +16 -0
  621. package/.next/standalone/src/app/m/page.tsx +118 -0
  622. package/.next/standalone/src/app/m/projects/page.tsx +64 -0
  623. package/.next/standalone/src/app/m/sessions/[id]/page.tsx +168 -0
  624. package/.next/standalone/src/app/m/sessions/page.tsx +177 -0
  625. package/.next/standalone/src/app/m/settings/page.tsx +230 -0
  626. package/.next/standalone/src/app/m/terminal/page.tsx +413 -0
  627. package/.next/standalone/src/app/vr/page.tsx +21 -0
  628. package/.next/standalone/src/app/vr/vr-app.tsx +163 -0
  629. package/.next/standalone/src/app/vr/vr-controls.tsx +139 -0
  630. package/.next/standalone/src/app/vr/vr-door.tsx +82 -0
  631. package/.next/standalone/src/app/vr/vr-environment.tsx +71 -0
  632. package/.next/standalone/src/app/vr/vr-gaze.tsx +89 -0
  633. package/.next/standalone/src/app/vr/vr-layout.ts +49 -0
  634. package/.next/standalone/src/app/vr/vr-lobby.tsx +97 -0
  635. package/.next/standalone/src/app/vr/vr-pane.tsx +195 -0
  636. package/.next/standalone/src/app/vr/vr-room.tsx +79 -0
  637. package/.next/standalone/src/app/vr/vr-terminal.tsx +303 -0
  638. package/.next/standalone/src/components/auth/totp-gate.tsx +183 -0
  639. package/.next/standalone/src/components/bus/activity-panel.tsx +261 -0
  640. package/.next/standalone/src/components/common/color-picker.tsx +35 -0
  641. package/.next/standalone/src/components/common/dev-directory-picker.tsx +339 -0
  642. package/.next/standalone/src/components/common/folder-picker.tsx +200 -0
  643. package/.next/standalone/src/components/common/tag-picker.tsx +190 -0
  644. package/.next/standalone/src/components/common/workspace-picker.tsx +113 -0
  645. package/.next/standalone/src/components/cortex/benchmark-tab.tsx +880 -0
  646. package/.next/standalone/src/components/cortex/constants.ts +29 -29
  647. package/.next/standalone/src/components/cortex/cortex-dashboard.tsx +304 -304
  648. package/.next/standalone/src/components/cortex/cortex-indicator.tsx +44 -44
  649. package/.next/standalone/src/components/cortex/cortex-panel.tsx +140 -140
  650. package/.next/standalone/src/components/cortex/cortex-settings.tsx +221 -221
  651. package/.next/standalone/src/components/cortex/curation-tab.tsx +810 -810
  652. package/.next/standalone/src/components/cortex/entity-detail.tsx +101 -101
  653. package/.next/standalone/src/components/cortex/entity-graph.tsx +382 -382
  654. package/.next/standalone/src/components/cortex/import-dialog.tsx +212 -212
  655. package/.next/standalone/src/components/cortex/injection-badge.tsx +72 -72
  656. package/.next/standalone/src/components/cortex/knowledge-card.tsx +109 -109
  657. package/.next/standalone/src/components/cortex/knowledge-tab.tsx +158 -158
  658. package/.next/standalone/src/components/cortex/lobe-settings.tsx +215 -215
  659. package/.next/standalone/src/components/cortex/marketplace-card.tsx +126 -126
  660. package/.next/standalone/src/components/cortex/marketplace-tab.tsx +113 -113
  661. package/.next/standalone/src/components/dashboard/activity-chart.tsx +41 -0
  662. package/.next/standalone/src/components/dashboard/model-usage-chart.tsx +61 -0
  663. package/.next/standalone/src/components/dashboard/recent-sessions.tsx +68 -0
  664. package/.next/standalone/src/components/dashboard/stats-cards.tsx +36 -0
  665. package/.next/standalone/src/components/files/file-explorer.tsx +703 -0
  666. package/.next/standalone/src/components/layout/providers.tsx +38 -0
  667. package/.next/standalone/src/components/layout/sidebar.tsx +170 -0
  668. package/.next/standalone/src/components/layout/tier-provider.tsx +53 -0
  669. package/.next/standalone/src/components/layout/update-banner.tsx +92 -0
  670. package/.next/standalone/src/components/mobile/bottom-nav.tsx +46 -0
  671. package/.next/standalone/src/components/mobile/mobile-chat-input.tsx +244 -0
  672. package/.next/standalone/src/components/mobile/mobile-header.tsx +44 -0
  673. package/.next/standalone/src/components/mobile/mobile-session-card.tsx +56 -0
  674. package/.next/standalone/src/components/mobile/mobile-terminal-input.tsx +71 -0
  675. package/.next/standalone/src/components/mobile/mobile-terminal-pane.tsx +300 -0
  676. package/.next/standalone/src/components/mobile/mobile-terminal-toolbar.tsx +53 -0
  677. package/.next/standalone/src/components/mobile/pull-to-refresh.tsx +82 -0
  678. package/.next/standalone/src/components/mobile/voice-input.tsx +53 -0
  679. package/.next/standalone/src/components/network/api-key-list.tsx +190 -0
  680. package/.next/standalone/src/components/network/connection-requests.tsx +94 -0
  681. package/.next/standalone/src/components/network/node-add-dialog.tsx +131 -0
  682. package/.next/standalone/src/components/network/node-badge.tsx +26 -0
  683. package/.next/standalone/src/components/network/node-list.tsx +207 -0
  684. package/.next/standalone/src/components/network/node-selector.tsx +49 -0
  685. package/.next/standalone/src/components/sessions/session-filters.tsx +116 -0
  686. package/.next/standalone/src/components/sessions/session-list.tsx +485 -0
  687. package/.next/standalone/src/components/terminal/terminal-pane.tsx +874 -0
  688. package/.next/standalone/src/components/viewer/chat-input.tsx +275 -0
  689. package/.next/standalone/src/components/viewer/message-renderer.tsx +551 -0
  690. package/.next/standalone/src/components/workspace/universe-cluster.tsx +131 -0
  691. package/.next/standalone/src/components/workspace/universe-orb.tsx +128 -0
  692. package/.next/standalone/src/components/workspace/universe-types.ts +22 -0
  693. package/.next/standalone/src/components/workspace/universe-utils.ts +11 -0
  694. package/.next/standalone/src/components/workspace/universe-view.tsx +397 -0
  695. package/.next/standalone/src/components/workspace/workspace-chooser.tsx +616 -0
  696. package/.next/standalone/src/hooks/use-benchmark.ts +71 -0
  697. package/.next/standalone/src/hooks/use-bus.ts +147 -0
  698. package/.next/standalone/src/hooks/use-idle-detection.ts +79 -0
  699. package/.next/standalone/src/hooks/use-network.ts +229 -0
  700. package/.next/standalone/src/hooks/use-sessions.ts +437 -0
  701. package/.next/standalone/src/hooks/use-speech-recognition.ts +113 -0
  702. package/.next/standalone/src/hooks/use-sse.ts +35 -0
  703. package/.next/standalone/src/hooks/use-tier.ts +39 -0
  704. package/.next/standalone/src/lib/agents.ts +70 -0
  705. package/.next/standalone/src/lib/aider/parser.ts +111 -0
  706. package/.next/standalone/src/lib/api.ts +19 -0
  707. package/.next/standalone/src/lib/auth.ts +47 -0
  708. package/.next/standalone/src/lib/claude/parser.ts +212 -0
  709. package/.next/standalone/src/lib/claude/stats.ts +204 -0
  710. package/.next/standalone/src/lib/codex/parser.ts +265 -0
  711. package/.next/standalone/src/lib/config.ts +115 -0
  712. package/.next/standalone/src/lib/cortex/benchmark.ts +67 -0
  713. package/.next/standalone/src/lib/cortex/config.ts +40 -40
  714. package/.next/standalone/src/lib/cortex/debug.ts +10 -10
  715. package/.next/standalone/src/lib/cortex/distillation/usage-store.ts +18 -18
  716. package/.next/standalone/src/lib/cortex/graph/resolver.ts +10 -10
  717. package/.next/standalone/src/lib/cortex/graph/types.ts +22 -22
  718. package/.next/standalone/src/lib/cortex/index.ts +56 -56
  719. package/.next/standalone/src/lib/cortex/ingestion/bootstrap.ts +14 -14
  720. package/.next/standalone/src/lib/cortex/knowledge/compat.ts +14 -14
  721. package/.next/standalone/src/lib/cortex/knowledge/contradiction.ts +10 -10
  722. package/.next/standalone/src/lib/cortex/knowledge/types.ts +67 -67
  723. package/.next/standalone/src/lib/cortex/lobes/config.ts +16 -16
  724. package/.next/standalone/src/lib/cortex/lobes/resolver.ts +8 -8
  725. package/.next/standalone/src/lib/cortex/lobes/shares.ts +14 -14
  726. package/.next/standalone/src/lib/cortex/mcp/server.ts +8 -8
  727. package/.next/standalone/src/lib/cortex/portability/exporter.ts +6 -6
  728. package/.next/standalone/src/lib/cortex/portability/importer.ts +10 -10
  729. package/.next/standalone/src/lib/cortex/retrieval/context-engine.ts +10 -10
  730. package/.next/standalone/src/lib/cortex/types.ts +39 -39
  731. package/.next/standalone/src/lib/cost-calculator.ts +48 -0
  732. package/.next/standalone/src/lib/db/init.ts +71 -0
  733. package/.next/standalone/src/lib/db/queries.ts +718 -0
  734. package/.next/standalone/src/lib/db/schema.ts +202 -0
  735. package/.next/standalone/src/lib/events/sse.ts +36 -0
  736. package/.next/standalone/src/lib/gemini/parser.ts +216 -0
  737. package/.next/standalone/src/lib/license.ts +56 -0
  738. package/.next/standalone/src/lib/pro.ts +31 -0
  739. package/.next/standalone/src/lib/sync/indexer.ts +429 -0
  740. package/.next/standalone/src/lib/sync/watcher.ts +64 -0
  741. package/.next/standalone/src/lib/teams.ts +31 -0
  742. package/.next/standalone/src/lib/telemetry.ts +75 -0
  743. package/.next/standalone/src/lib/terminal/server.ts +128 -0
  744. package/.next/standalone/src/lib/tier.ts +38 -0
  745. package/.next/standalone/src/lib/utils.ts +72 -0
  746. package/.next/standalone/src/middleware.ts +133 -0
  747. package/.next/standalone/src/types/claude.ts +208 -0
  748. package/.next/standalone/src/types/network.ts +61 -0
  749. package/.next/standalone/tests/setup.ts +8 -0
  750. package/.next/standalone/tsconfig.json +34 -34
  751. package/.next/standalone/vitest.config.ts +24 -0
  752. package/LICENSE +661 -661
  753. package/README.md +131 -131
  754. package/bin/cortex-hook.sh +62 -62
  755. package/bin/cortex-mcp.js +60 -60
  756. package/bin/fix-standalone-externals.js +79 -79
  757. package/bin/lib/auto-setup.js +110 -110
  758. package/bin/mdns-service.js +171 -171
  759. package/bin/postinstall.js +35 -35
  760. package/bin/setup-admin.js +195 -195
  761. package/bin/spaces-dev.js +247 -208
  762. package/bin/spaces-install.js +638 -599
  763. package/bin/spaces-reset-totp.js +50 -50
  764. package/bin/spaces-service.js +1020 -1020
  765. package/bin/spaces-setup.js +253 -253
  766. package/bin/spaces.js +788 -776
  767. package/bin/ssh-auth-keys.sh +68 -68
  768. package/bin/terminal-server.js +1807 -1683
  769. package/package.json +104 -104
  770. package/.next/standalone/.claude/settings.local.json +0 -55
  771. package/.next/standalone/.claude/spaces-env.json +0 -1
  772. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e921fdfc._.js +0 -5
  773. package/.next/standalone/.next/server/chunks/ssr/_2230ad2d._.js +0 -3
  774. package/.next/standalone/.next/server/chunks/ssr/_5cf334fd._.js +0 -3
  775. package/.next/standalone/.next/server/chunks/ssr/_db0abd0a._.js +0 -3
  776. package/.next/standalone/.next/server/chunks/ssr/_db2fec84._.js +0 -3
  777. package/.next/standalone/.next/server/chunks/ssr/_f4e57187._.js +0 -3
  778. package/.next/standalone/.next/server/chunks/ssr/src_40fa36ce._.js +0 -7
  779. package/.next/standalone/.next/static/chunks/003e7aa1adfe577d.js +0 -1
  780. package/.next/standalone/.next/static/chunks/158b52b84e647ac1.js +0 -5
  781. package/.next/standalone/.next/static/chunks/232d8aae4fefab70.js +0 -1
  782. package/.next/standalone/.next/static/chunks/5325351ef49cb65f.js +0 -1
  783. package/.next/standalone/.next/static/chunks/559735e598ca3cbb.js +0 -1
  784. package/.next/standalone/.next/static/chunks/5d5d7b0095dd52ae.js +0 -1
  785. package/.next/standalone/.next/static/chunks/898f380eba90427a.js +0 -1
  786. package/.next/standalone/.next/static/chunks/95339e55722bb4ca.js +0 -5
  787. package/.next/standalone/.next/static/chunks/9cd594813c539df9.js +0 -1
  788. package/.next/standalone/.next/static/chunks/c1a95aebf6725f64.css +0 -3
  789. package/.next/standalone/.next/static/chunks/c515eb77d9410aa0.js +0 -5
  790. package/.next/standalone/.next/static/chunks/d9ae203a7f123546.js +0 -5
  791. package/.next/standalone/.next/static/chunks/f9f2628207848ac2.js +0 -1
  792. package/.next/standalone/.spaces/cortex-context.md +0 -70
  793. package/.next/standalone/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64.node +0 -0
  794. /package/.next/standalone/.next/static/{BEY-sql3lQLouidpurSQf → PcpzUspSK8QDdwzAJz8br}/_buildManifest.js +0 -0
  795. /package/.next/standalone/.next/static/{BEY-sql3lQLouidpurSQf → PcpzUspSK8QDdwzAJz8br}/_clientMiddlewareManifest.json +0 -0
  796. /package/.next/standalone/.next/static/{BEY-sql3lQLouidpurSQf → PcpzUspSK8QDdwzAJz8br}/_ssgManifest.js +0 -0
  797. /package/.next/standalone/node_modules/@img/{sharp-win32-x64 → sharp-libvips-linux-x64}/versions.json +0 -0
@@ -1,599 +1,638 @@
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
- // Git args prefix: allow operating on repos owned by a different user
115
- // (e.g. admin account managing packages in the target user's home)
116
- const GIT_SAFE = ['-c', 'safe.directory=*'];
117
-
118
- /**
119
- * Clone a repo, trying SSH first then HTTPS (with optional PAT).
120
- */
121
- function gitClone(repo, dest, isPrivate) {
122
- const sshUrl = `git@github.com:${repo}.git`;
123
- const httpsUrl = `https://github.com/${repo}.git`;
124
-
125
- // Try SSH first
126
- try {
127
- log(`Cloning ${repo} (SSH)...`);
128
- run('git', [...GIT_SAFE, 'clone', '--depth', '1', sshUrl, dest]);
129
- return;
130
- } catch {
131
- // SSH failed, try HTTPS
132
- }
133
-
134
- // HTTPS — check for PAT if private
135
- if (isPrivate) {
136
- const pat = process.env.GH_PAT || process.env.GITHUB_TOKEN || '';
137
- if (pat) {
138
- log(`Cloning ${repo} (HTTPS + token)...`);
139
- const authedUrl = `https://${pat}@github.com/${repo}.git`;
140
- run('git', [...GIT_SAFE, 'clone', '--depth', '1', authedUrl, dest]);
141
- return;
142
- }
143
- }
144
-
145
- log(`Cloning ${repo} (HTTPS)...`);
146
- run('git', [...GIT_SAFE, 'clone', '--depth', '1', httpsUrl, dest]);
147
- }
148
-
149
- /**
150
- * Pull latest changes in a repo directory.
151
- * Stashes any local modifications first so pull doesn't fail.
152
- */
153
- function gitPull(dir) {
154
- log('Pulling latest...');
155
- // Stash local changes if any (e.g. hook-generated files)
156
- let stashed = false;
157
- try {
158
- const status = execFileSync('git', [...GIT_SAFE, 'status', '--porcelain'], { cwd: dir, encoding: 'utf-8' }).trim();
159
- if (status) {
160
- log('Stashing local changes...');
161
- run('git', [...GIT_SAFE, 'stash', '--include-untracked'], { cwd: dir });
162
- stashed = true;
163
- }
164
- } catch {}
165
- run('git', [...GIT_SAFE, 'pull', '--ff-only'], { cwd: dir });
166
- if (stashed) {
167
- try {
168
- run('git', [...GIT_SAFE, 'stash', 'pop'], { cwd: dir });
169
- log('Restored local changes.');
170
- } catch {
171
- log('Warning: Could not restore stashed changes. Run "git stash pop" manually in ' + dir);
172
- }
173
- }
174
- }
175
-
176
- /**
177
- * Create the symlink from node_modules/@spaces/<name> -> ../../<name>
178
- */
179
- function createSymlink(pkgKey) {
180
- const linkPath = path.join(NODE_MODULES_DIR, pkgKey);
181
- const targetPath = path.join('..', '..', pkgKey); // relative symlink
182
-
183
- fs.mkdirSync(NODE_MODULES_DIR, { recursive: true });
184
-
185
- // Remove existing link/dir
186
- try {
187
- const stat = fs.lstatSync(linkPath);
188
- if (stat.isSymbolicLink() || stat.isFile()) {
189
- fs.unlinkSync(linkPath);
190
- } else if (stat.isDirectory()) {
191
- fs.rmSync(linkPath, { recursive: true });
192
- }
193
- } catch {}
194
-
195
- fs.symlinkSync(targetPath, linkPath, process.platform === 'win32' ? 'junction' : 'dir');
196
- logOk(`Symlink: @spaces/${pkgKey} -> packages/${pkgKey}`);
197
- }
198
-
199
- /**
200
- * Check if a native module loads correctly from a package directory.
201
- */
202
- function checkNativeModule(moduleName, searchDir) {
203
- try {
204
- const nodePath = path.join(searchDir, 'node_modules');
205
- // Use execFileSync directly (no shell) so quotes aren't mangled on Windows
206
- const result = execFileSync(process.execPath, [
207
- '-e',
208
- `try { require('${moduleName}'); console.log('ok'); } catch(e) { console.log(e.message); }`,
209
- ], {
210
- encoding: 'utf-8',
211
- stdio: ['pipe', 'pipe', 'pipe'],
212
- cwd: searchDir,
213
- env: { ...process.env, NODE_PATH: nodePath },
214
- });
215
- return result.trim() === 'ok';
216
- } catch {
217
- return false;
218
- }
219
- }
220
-
221
- // ─── Install command ──────────────────────────────────────────
222
- function installPackage(pkgKey) {
223
- const pkg = PACKAGES[pkgKey];
224
- if (!pkg) {
225
- logErr(`Unknown package: ${pkgKey}`);
226
- log(`Available: ${Object.keys(PACKAGES).join(', ')}`);
227
- process.exit(1);
228
- }
229
-
230
- console.log(`\n Installing ${pkg.name}...\n`);
231
-
232
- // Pro requires teams as a prerequisite
233
- if (pkgKey === "pro") {
234
- const teamsDir = PACKAGES.teams.dir;
235
- if (!fs.existsSync(path.join(teamsDir, "dist", "index.js"))) {
236
- log("@spaces/pro requires @spaces/teams -- installing teams first...");
237
- console.log("");
238
- installPackage("teams");
239
- console.log("");
240
- }
241
- }
242
-
243
- // 1. Clone or pull
244
- if (fs.existsSync(path.join(pkg.dir, '.git'))) {
245
- gitPull(pkg.dir);
246
- } else {
247
- fs.mkdirSync(PACKAGES_DIR, { recursive: true });
248
- gitClone(pkg.repo, pkg.dir, pkg.private);
249
- }
250
-
251
- // 2. Install dependencies
252
- // Both teams and pro need TypeScript build
253
- log('Installing dependencies...');
254
- run('npm', ['install'], { cwd: pkg.dir });
255
-
256
- // Rebuild native modules for the current platform/ABI
257
- log('Rebuilding native modules...');
258
- run('npm', ['rebuild'], { cwd: pkg.dir });
259
-
260
- log('Building TypeScript...');
261
- run('npm', ['run', 'build'], { cwd: pkg.dir });
262
-
263
- log('Pruning dev dependencies...');
264
- run('npm', ['prune', '--omit=dev'], { cwd: pkg.dir });
265
-
266
- // 5. Create symlink
267
- createSymlink(pkgKey);
268
-
269
- // 6. Verify
270
- if (pkg.verify(pkg.dir)) {
271
- logOk(`${pkg.name} installed successfully`);
272
- } else {
273
- logErr(`${pkg.name} installed but ${pkg.verifyLabel} not found`);
274
- process.exit(1);
275
- }
276
-
277
- // 7. Verify native modules
278
- if (!checkNativeModule('better-sqlite3', pkg.dir)) {
279
- logWarn('better-sqlite3 native module not loading — attempting rebuild...');
280
- run('npm', ['rebuild', 'better-sqlite3'], { cwd: pkg.dir });
281
- if (checkNativeModule('better-sqlite3', pkg.dir)) {
282
- logOk('better-sqlite3 rebuilt successfully');
283
- } else {
284
- logErr('better-sqlite3 still failing — you may need to install build tools');
285
- }
286
- } else {
287
- logOk('Native modules OK');
288
- }
289
-
290
- // 8. Update tier in server.json
291
- const configPath = path.join(SPACES_DIR, 'server.json');
292
- try {
293
- const config = fs.existsSync(configPath)
294
- ? JSON.parse(fs.readFileSync(configPath, 'utf-8'))
295
- : { port: 3457, basePath: '' };
296
- // teams → team tier, pro → federation tier
297
- // Add-on packages set their tier; base package resets to community
298
- // only if no add-on package is currently installed
299
- const tierMap = { teams: 'team', pro: 'federation' };
300
- if (tierMap[pkgKey]) {
301
- // Installing an add-on — set its tier
302
- config.tier = tierMap[pkgKey];
303
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
304
- logOk(`Tier set to ${tierMap[pkgKey]}`);
305
- } else if (!config.tier || config.tier === 'community') {
306
- // Base package install, no add-on tier — ensure community
307
- config.tier = 'community';
308
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
309
- logOk(`Tier set to community`);
310
- } else {
311
- // Base package install but an add-on tier exists — preserve it
312
- logOk(`Tier unchanged (${config.tier})`);
313
- }
314
- } catch {}
315
-
316
- // 9. Verify require() works
317
- try {
318
- const result = execFileSync(process.execPath, [
319
- '-e',
320
- `const p = require.resolve('${pkg.name}'); console.log('resolved: ' + p);`,
321
- ], {
322
- encoding: 'utf-8',
323
- stdio: ['pipe', 'pipe', 'pipe'],
324
- env: { ...process.env, NODE_PATH: path.join(PACKAGES_DIR, 'node_modules') },
325
- });
326
- logOk(`require('${pkg.name}') -> ${result.trim().replace('resolved: ', '')}`);
327
- } catch {
328
- logWarn(`require('${pkg.name}') failed — this may be OK if peer deps aren't available yet`);
329
- }
330
-
331
- console.log('');
332
- }
333
-
334
- // ─── Verify command ───────────────────────────────────────────
335
- function verifyAll() {
336
- console.log('\n Spaces Package Verification\n');
337
-
338
- let allOk = true;
339
-
340
- for (const [key, pkg] of Object.entries(PACKAGES)) {
341
- log(`─── ${pkg.name} ───`);
342
-
343
- // Check if installed
344
- if (!fs.existsSync(pkg.dir)) {
345
- logWarn('Not installed');
346
- log('');
347
- continue;
348
- }
349
-
350
- // Check git status
351
- try {
352
- const branch = run('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: pkg.dir, quiet: true }).trim();
353
- const hash = run('git', ['rev-parse', '--short', 'HEAD'], { cwd: pkg.dir, quiet: true }).trim();
354
- logOk(`Git: ${branch} @ ${hash}`);
355
- } catch {
356
- logErr('Git status check failed');
357
- allOk = false;
358
- }
359
-
360
- // Check entry point
361
- if (pkg.verify(pkg.dir)) {
362
- logOk(`Entry: ${pkg.verifyLabel} exists`);
363
- } else {
364
- logErr(`Entry: ${pkg.verifyLabel} missing`);
365
- allOk = false;
366
- }
367
-
368
- // Check node_modules
369
- if (fs.existsSync(path.join(pkg.dir, 'node_modules'))) {
370
- logOk('Dependencies: node_modules present');
371
- } else {
372
- logErr('Dependencies: node_modules missing');
373
- allOk = false;
374
- }
375
-
376
- // Check symlink
377
- const linkPath = path.join(NODE_MODULES_DIR, key);
378
- try {
379
- const stat = fs.lstatSync(linkPath);
380
- if (stat.isSymbolicLink()) {
381
- const target = fs.readlinkSync(linkPath);
382
- logOk(`Symlink: @spaces/${key} -> ${target}`);
383
- } else {
384
- logWarn(`@spaces/${key} exists but is not a symlink`);
385
- }
386
- } catch {
387
- logErr(`Symlink: @spaces/${key} missing`);
388
- allOk = false;
389
- }
390
-
391
- // Check native modules
392
- const nativeOk = checkNativeModule('better-sqlite3', pkg.dir);
393
- if (nativeOk) {
394
- logOk('Native: better-sqlite3 loads OK');
395
- } else {
396
- logErr('Native: better-sqlite3 failed (ABI mismatch? Run: spaces upgrade)');
397
- allOk = false;
398
- }
399
-
400
- // Check require() resolution
401
- try {
402
- execFileSync(process.execPath, [
403
- '-e',
404
- `require.resolve('${pkg.name}')`,
405
- ], {
406
- encoding: 'utf-8',
407
- stdio: ['pipe', 'pipe', 'pipe'],
408
- env: { ...process.env, NODE_PATH: path.join(PACKAGES_DIR, 'node_modules') },
409
- });
410
- logOk(`require('${pkg.name}') resolves OK`);
411
- } catch {
412
- logErr(`require('${pkg.name}') fails`);
413
- allOk = false;
414
- }
415
-
416
- log('');
417
- }
418
-
419
- if (allOk) {
420
- logOk('All checks passed');
421
- } else {
422
- logErr('Some checks failed — run "spaces upgrade" to fix');
423
- }
424
- console.log('');
425
- }
426
-
427
- // ─── Upgrade command ──────────────────────────────────────────
428
- function upgradePackage(pkgKey) {
429
- if (pkgKey) {
430
- // Upgrade specific package
431
- const pkg = PACKAGES[pkgKey];
432
- if (!pkg) {
433
- logErr(`Unknown package: ${pkgKey}`);
434
- process.exit(1);
435
- }
436
- if (!fs.existsSync(pkg.dir)) {
437
- log(`${pkg.name} not installed — running install instead`);
438
- installPackage(pkgKey);
439
- return;
440
- }
441
- console.log(`\n Upgrading ${pkg.name}...\n`);
442
- doUpgrade(pkgKey, pkg);
443
- } else {
444
- // Upgrade all installed packages
445
- console.log('\n Upgrading all installed packages...\n');
446
- for (const [key, pkg] of Object.entries(PACKAGES)) {
447
- if (fs.existsSync(pkg.dir)) {
448
- log(`─── ${pkg.name} ───`);
449
- doUpgrade(key, pkg);
450
- log('');
451
- }
452
- }
453
- }
454
- console.log('');
455
- }
456
-
457
- function doUpgrade(pkgKey, pkg) {
458
- // Pull latest
459
- gitPull(pkg.dir);
460
-
461
- run('npm', ['install'], { cwd: pkg.dir });
462
- run('npm', ['rebuild'], { cwd: pkg.dir });
463
- log('Building TypeScript...');
464
- run('npm', ['run', 'build'], { cwd: pkg.dir });
465
- run('npm', ['prune', '--omit=dev'], { cwd: pkg.dir });
466
-
467
- // Re-create symlink
468
- createSymlink(pkgKey);
469
-
470
- if (pkg.verify(pkg.dir)) {
471
- logOk(`${pkg.name} upgraded successfully`);
472
- } else {
473
- logErr(`${pkg.name} upgrade failed — ${pkg.verifyLabel} not found`);
474
- }
475
- }
476
-
477
- // ─── Uninstall command ────────────────────────────────────────
478
- function uninstallOne(pkgKey) {
479
- const pkg = PACKAGES[pkgKey];
480
-
481
- // Remove symlink
482
- const linkPath = path.join(NODE_MODULES_DIR, pkgKey);
483
- try {
484
- const stat = fs.lstatSync(linkPath);
485
- if (stat.isSymbolicLink() || stat.isFile()) {
486
- fs.unlinkSync(linkPath);
487
- } else if (stat.isDirectory()) {
488
- fs.rmSync(linkPath, { recursive: true });
489
- }
490
- logOk(`Removed symlink @spaces/${pkgKey}`);
491
- } catch {
492
- logWarn(`Symlink @spaces/${pkgKey} not found`);
493
- }
494
-
495
- // Remove package directory
496
- if (fs.existsSync(pkg.dir)) {
497
- fs.rmSync(pkg.dir, { recursive: true });
498
- logOk(`Removed ${pkg.dir}`);
499
- } else {
500
- logWarn(`${pkg.dir} not found`);
501
- }
502
- }
503
-
504
- function uninstallPackage(pkgKey) {
505
- if (pkgKey) {
506
- const pkg = PACKAGES[pkgKey];
507
- if (!pkg) {
508
- logErr(`Unknown package: ${pkgKey}`);
509
- log(`Available: ${Object.keys(PACKAGES).join(', ')}`);
510
- process.exit(1);
511
- }
512
- console.log(`\n Uninstalling ${pkg.name}...\n`);
513
- uninstallOne(pkgKey);
514
- // Reset tier to community if removing a tier package
515
- const configPath = path.join(SPACES_DIR, 'server.json');
516
- try {
517
- if (fs.existsSync(configPath)) {
518
- const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
519
- if (config.tier && config.tier !== 'community') {
520
- config.tier = 'community';
521
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
522
- logOk('Reset tier to community');
523
- }
524
- }
525
- } catch {}
526
- logOk(`${pkg.name} uninstalled`);
527
- } else {
528
- console.log('\n Uninstalling everything...\n');
529
-
530
- // Remove tier packages
531
- for (const [key, pkg] of Object.entries(PACKAGES)) {
532
- if (fs.existsSync(pkg.dir) || fs.existsSync(path.join(NODE_MODULES_DIR, key))) {
533
- log(`─── ${pkg.name} ───`);
534
- uninstallOne(key);
535
- }
536
- }
537
- // Clean up packages dir
538
- try { fs.rmdirSync(NODE_MODULES_DIR); } catch {}
539
- try { fs.rmdirSync(path.join(PACKAGES_DIR, 'node_modules')); } catch {}
540
- try { fs.rmdirSync(PACKAGES_DIR); } catch {}
541
-
542
- // Remove the global spaces CLI
543
- log('─── @jlongo78/agent-spaces ───');
544
- try {
545
- run('npm', ['uninstall', '-g', '@jlongo78/agent-spaces'], { quiet: true });
546
- logOk('Removed global spaces CLI');
547
- } catch {
548
- logWarn('Global spaces CLI not found or already removed');
549
- }
550
-
551
- // Reset tier to community in server.json
552
- const configPath = path.join(SPACES_DIR, 'server.json');
553
- try {
554
- if (fs.existsSync(configPath)) {
555
- const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
556
- if (config.tier && config.tier !== 'community') {
557
- config.tier = 'community';
558
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
559
- logOk('Reset tier to community');
560
- }
561
- }
562
- } catch {}
563
-
564
- logOk('Spaces fully uninstalled');
565
- log('User data remains at ~/.spaces/ — remove manually if desired');
566
- }
567
- console.log('');
568
- }
569
-
570
- // ─── CLI ──────────────────────────────────────────────────────
571
- const command = process.argv[2];
572
- const target = process.argv[3];
573
-
574
- switch (command) {
575
- case 'install':
576
- if (!target) {
577
- logErr('Usage: spaces install <teams|pro>');
578
- process.exit(1);
579
- }
580
- installPackage(target);
581
- break;
582
-
583
- case 'uninstall':
584
- uninstallPackage(target || null);
585
- break;
586
-
587
- case 'verify':
588
- verifyAll();
589
- break;
590
-
591
- case 'upgrade':
592
- upgradePackage(target || null);
593
- break;
594
-
595
- default:
596
- logErr(`Unknown command: ${command}`);
597
- log('Usage: spaces <install|uninstall|verify|upgrade> [package]');
598
- process.exit(1);
599
- }
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
+ // Git args prefix: allow operating on repos owned by a different user
115
+ // (e.g. admin account managing packages in the target user's home)
116
+ const GIT_SAFE = ['-c', 'safe.directory=*'];
117
+
118
+ /**
119
+ * Clone a repo, trying SSH first then HTTPS (with optional PAT).
120
+ */
121
+ function gitClone(repo, dest, isPrivate) {
122
+ const sshUrl = `git@github.com:${repo}.git`;
123
+ const httpsUrl = `https://github.com/${repo}.git`;
124
+
125
+ // Try SSH first
126
+ try {
127
+ log(`Cloning ${repo} (SSH)...`);
128
+ run('git', [...GIT_SAFE, 'clone', '--depth', '1', sshUrl, dest]);
129
+ return;
130
+ } catch {
131
+ // SSH failed, try HTTPS
132
+ }
133
+
134
+ // HTTPS — check for PAT if private
135
+ if (isPrivate) {
136
+ const pat = process.env.GH_PAT || process.env.GITHUB_TOKEN || '';
137
+ if (pat) {
138
+ log(`Cloning ${repo} (HTTPS + token)...`);
139
+ const authedUrl = `https://${pat}@github.com/${repo}.git`;
140
+ run('git', [...GIT_SAFE, 'clone', '--depth', '1', authedUrl, dest]);
141
+ return;
142
+ }
143
+ }
144
+
145
+ log(`Cloning ${repo} (HTTPS)...`);
146
+ run('git', [...GIT_SAFE, 'clone', '--depth', '1', httpsUrl, dest]);
147
+ }
148
+
149
+ /**
150
+ * Pull latest changes in a repo directory.
151
+ * Stashes any local modifications first so pull doesn't fail.
152
+ */
153
+ function gitPull(dir) {
154
+ log('Pulling latest...');
155
+ // Stash local changes if any (e.g. hook-generated files)
156
+ let stashed = false;
157
+ try {
158
+ const status = execFileSync('git', [...GIT_SAFE, 'status', '--porcelain'], { cwd: dir, encoding: 'utf-8' }).trim();
159
+ if (status) {
160
+ log('Stashing local changes...');
161
+ run('git', [...GIT_SAFE, 'stash', '--include-untracked'], { cwd: dir });
162
+ stashed = true;
163
+ }
164
+ } catch {}
165
+ run('git', [...GIT_SAFE, 'pull', '--ff-only'], { cwd: dir });
166
+ if (stashed) {
167
+ try {
168
+ run('git', [...GIT_SAFE, 'stash', 'pop'], { cwd: dir });
169
+ log('Restored local changes.');
170
+ } catch {
171
+ log('Warning: Could not restore stashed changes. Run "git stash pop" manually in ' + dir);
172
+ }
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Create the symlink from node_modules/@spaces/<name> -> ../../<name>
178
+ */
179
+ function createSymlink(pkgKey) {
180
+ const linkPath = path.join(NODE_MODULES_DIR, pkgKey);
181
+ const targetPath = path.join('..', '..', pkgKey); // relative symlink
182
+
183
+ fs.mkdirSync(NODE_MODULES_DIR, { recursive: true });
184
+
185
+ // Remove existing link/dir
186
+ try {
187
+ const stat = fs.lstatSync(linkPath);
188
+ if (stat.isSymbolicLink() || stat.isFile()) {
189
+ fs.unlinkSync(linkPath);
190
+ } else if (stat.isDirectory()) {
191
+ fs.rmSync(linkPath, { recursive: true });
192
+ }
193
+ } catch {}
194
+
195
+ fs.symlinkSync(targetPath, linkPath, process.platform === 'win32' ? 'junction' : 'dir');
196
+ logOk(`Symlink: @spaces/${pkgKey} -> packages/${pkgKey}`);
197
+ }
198
+
199
+ /**
200
+ * Check if a native module loads correctly from a package directory.
201
+ */
202
+ function checkNativeModule(moduleName, searchDir) {
203
+ try {
204
+ const nodePath = path.join(searchDir, 'node_modules');
205
+ // Use execFileSync directly (no shell) so quotes aren't mangled on Windows
206
+ const result = execFileSync(process.execPath, [
207
+ '-e',
208
+ `try { require('${moduleName}'); console.log('ok'); } catch(e) { console.log(e.message); }`,
209
+ ], {
210
+ encoding: 'utf-8',
211
+ stdio: ['pipe', 'pipe', 'pipe'],
212
+ cwd: searchDir,
213
+ env: { ...process.env, NODE_PATH: nodePath },
214
+ });
215
+ return result.trim() === 'ok';
216
+ } catch {
217
+ return false;
218
+ }
219
+ }
220
+
221
+ // ─── Install command ──────────────────────────────────────────
222
+ function installPackage(pkgKey) {
223
+ const pkg = PACKAGES[pkgKey];
224
+ if (!pkg) {
225
+ logErr(`Unknown package: ${pkgKey}`);
226
+ log(`Available: ${Object.keys(PACKAGES).join(', ')}`);
227
+ process.exit(1);
228
+ }
229
+
230
+ console.log(`\n Installing ${pkg.name}...\n`);
231
+
232
+ // Pro requires teams as a prerequisite
233
+ if (pkgKey === "pro") {
234
+ const teamsDir = PACKAGES.teams.dir;
235
+ if (!fs.existsSync(path.join(teamsDir, "dist", "index.js"))) {
236
+ log("@spaces/pro requires @spaces/teams -- installing teams first...");
237
+ console.log("");
238
+ installPackage("teams");
239
+ console.log("");
240
+ }
241
+ }
242
+
243
+ // 1. Clone or pull
244
+ if (fs.existsSync(path.join(pkg.dir, '.git'))) {
245
+ gitPull(pkg.dir);
246
+ } else {
247
+ fs.mkdirSync(PACKAGES_DIR, { recursive: true });
248
+ gitClone(pkg.repo, pkg.dir, pkg.private);
249
+ }
250
+
251
+ // 2. Install dependencies
252
+ // Both teams and pro need TypeScript build
253
+ log('Installing dependencies...');
254
+ run('npm', ['install'], { cwd: pkg.dir });
255
+
256
+ // Rebuild native modules for the current platform/ABI
257
+ log('Rebuilding native modules...');
258
+ run('npm', ['rebuild'], { cwd: pkg.dir });
259
+
260
+ log('Building TypeScript...');
261
+ run('npm', ['run', 'build'], { cwd: pkg.dir });
262
+
263
+ log('Pruning dev dependencies...');
264
+ run('npm', ['prune', '--omit=dev'], { cwd: pkg.dir });
265
+
266
+ // 5. Create symlink
267
+ createSymlink(pkgKey);
268
+
269
+ // 6. Verify
270
+ if (pkg.verify(pkg.dir)) {
271
+ logOk(`${pkg.name} installed successfully`);
272
+ } else {
273
+ logErr(`${pkg.name} installed but ${pkg.verifyLabel} not found`);
274
+ process.exit(1);
275
+ }
276
+
277
+ // 7. Verify native modules
278
+ if (!checkNativeModule('better-sqlite3', pkg.dir)) {
279
+ logWarn('better-sqlite3 native module not loading — attempting rebuild...');
280
+ run('npm', ['rebuild', 'better-sqlite3'], { cwd: pkg.dir });
281
+ if (checkNativeModule('better-sqlite3', pkg.dir)) {
282
+ logOk('better-sqlite3 rebuilt successfully');
283
+ } else {
284
+ logErr('better-sqlite3 still failing — you may need to install build tools');
285
+ }
286
+ } else {
287
+ logOk('Native modules OK');
288
+ }
289
+
290
+ // 8. Update tier in server.json
291
+ const configPath = path.join(SPACES_DIR, 'server.json');
292
+ try {
293
+ const config = fs.existsSync(configPath)
294
+ ? JSON.parse(fs.readFileSync(configPath, 'utf-8'))
295
+ : { port: 3457, basePath: '' };
296
+ // teams → team tier, pro → federation tier
297
+ // Add-on packages set their tier; base package resets to community
298
+ // only if no add-on package is currently installed
299
+ const tierMap = { teams: 'team', pro: 'federation' };
300
+ if (tierMap[pkgKey]) {
301
+ // Installing an add-on — set its tier
302
+ config.tier = tierMap[pkgKey];
303
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
304
+ logOk(`Tier set to ${tierMap[pkgKey]}`);
305
+ } else if (!config.tier || config.tier === 'community') {
306
+ // Base package install, no add-on tier — ensure community
307
+ config.tier = 'community';
308
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
309
+ logOk(`Tier set to community`);
310
+ } else {
311
+ // Base package install but an add-on tier exists — preserve it
312
+ logOk(`Tier unchanged (${config.tier})`);
313
+ }
314
+ } catch {}
315
+
316
+ // 9. Verify require() works
317
+ try {
318
+ const result = execFileSync(process.execPath, [
319
+ '-e',
320
+ `const p = require.resolve('${pkg.name}'); console.log('resolved: ' + p);`,
321
+ ], {
322
+ encoding: 'utf-8',
323
+ stdio: ['pipe', 'pipe', 'pipe'],
324
+ env: { ...process.env, NODE_PATH: path.join(PACKAGES_DIR, 'node_modules') },
325
+ });
326
+ logOk(`require('${pkg.name}') -> ${result.trim().replace('resolved: ', '')}`);
327
+ } catch {
328
+ logWarn(`require('${pkg.name}') failed — this may be OK if peer deps aren't available yet`);
329
+ }
330
+
331
+ console.log('');
332
+ }
333
+
334
+ // ─── Verify command ───────────────────────────────────────────
335
+ function verifyAll() {
336
+ console.log('\n Spaces Package Verification\n');
337
+
338
+ let allOk = true;
339
+
340
+ for (const [key, pkg] of Object.entries(PACKAGES)) {
341
+ log(`─── ${pkg.name} ───`);
342
+
343
+ // Check if installed
344
+ if (!fs.existsSync(pkg.dir)) {
345
+ logWarn('Not installed');
346
+ log('');
347
+ continue;
348
+ }
349
+
350
+ // Check git status
351
+ try {
352
+ const branch = run('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: pkg.dir, quiet: true }).trim();
353
+ const hash = run('git', ['rev-parse', '--short', 'HEAD'], { cwd: pkg.dir, quiet: true }).trim();
354
+ logOk(`Git: ${branch} @ ${hash}`);
355
+ } catch {
356
+ logErr('Git status check failed');
357
+ allOk = false;
358
+ }
359
+
360
+ // Check entry point
361
+ if (pkg.verify(pkg.dir)) {
362
+ logOk(`Entry: ${pkg.verifyLabel} exists`);
363
+ } else {
364
+ logErr(`Entry: ${pkg.verifyLabel} missing`);
365
+ allOk = false;
366
+ }
367
+
368
+ // Check node_modules
369
+ if (fs.existsSync(path.join(pkg.dir, 'node_modules'))) {
370
+ logOk('Dependencies: node_modules present');
371
+ } else {
372
+ logErr('Dependencies: node_modules missing');
373
+ allOk = false;
374
+ }
375
+
376
+ // Check symlink
377
+ const linkPath = path.join(NODE_MODULES_DIR, key);
378
+ try {
379
+ const stat = fs.lstatSync(linkPath);
380
+ if (stat.isSymbolicLink()) {
381
+ const target = fs.readlinkSync(linkPath);
382
+ logOk(`Symlink: @spaces/${key} -> ${target}`);
383
+ } else {
384
+ logWarn(`@spaces/${key} exists but is not a symlink`);
385
+ }
386
+ } catch {
387
+ logErr(`Symlink: @spaces/${key} missing`);
388
+ allOk = false;
389
+ }
390
+
391
+ // Check native modules
392
+ const nativeOk = checkNativeModule('better-sqlite3', pkg.dir);
393
+ if (nativeOk) {
394
+ logOk('Native: better-sqlite3 loads OK');
395
+ } else {
396
+ logErr('Native: better-sqlite3 failed (ABI mismatch? Run: spaces upgrade)');
397
+ allOk = false;
398
+ }
399
+
400
+ // Check require() resolution
401
+ try {
402
+ execFileSync(process.execPath, [
403
+ '-e',
404
+ `require.resolve('${pkg.name}')`,
405
+ ], {
406
+ encoding: 'utf-8',
407
+ stdio: ['pipe', 'pipe', 'pipe'],
408
+ env: { ...process.env, NODE_PATH: path.join(PACKAGES_DIR, 'node_modules') },
409
+ });
410
+ logOk(`require('${pkg.name}') resolves OK`);
411
+ } catch {
412
+ logErr(`require('${pkg.name}') fails`);
413
+ allOk = false;
414
+ }
415
+
416
+ log('');
417
+ }
418
+
419
+ if (allOk) {
420
+ logOk('All checks passed');
421
+ } else {
422
+ logErr('Some checks failed — run "spaces upgrade" to fix');
423
+ }
424
+ console.log('');
425
+ }
426
+
427
+ // ─── Upgrade command ──────────────────────────────────────────
428
+
429
+ /**
430
+ * Upgrade the core @jlongo78/agent-spaces package via npm.
431
+ * Detects the current version, checks for a newer one, and upgrades in-place.
432
+ */
433
+ function upgradeCorePackage() {
434
+ const pkgName = '@jlongo78/agent-spaces';
435
+ log(`─── ${pkgName} (core) ───`);
436
+
437
+ // Get current installed version
438
+ let currentVersion = '0.0.0';
439
+ try { currentVersion = require('../package.json').version; } catch {}
440
+
441
+ // Check latest on npm
442
+ let latestVersion;
443
+ try {
444
+ latestVersion = run('npm', ['view', pkgName, 'version'], { quiet: true }).trim();
445
+ } catch {
446
+ logErr(`Could not check npm for latest ${pkgName} version`);
447
+ return;
448
+ }
449
+
450
+ if (latestVersion === currentVersion) {
451
+ logOk(`${pkgName} is already at latest (${currentVersion})`);
452
+ return;
453
+ }
454
+
455
+ log(`Upgrading ${pkgName}: ${currentVersion} → ${latestVersion}`);
456
+ try {
457
+ run('npm', ['install', '-g', `${pkgName}@latest`]);
458
+ logOk(`${pkgName} upgraded to ${latestVersion}`);
459
+ } catch (err) {
460
+ logErr(`Failed to upgrade ${pkgName}: ${err.message}`);
461
+ log('You may need to run with elevated permissions (sudo / admin shell)');
462
+ }
463
+ }
464
+
465
+ function upgradePackage(pkgKey) {
466
+ if (pkgKey) {
467
+ // Upgrade specific package
468
+ const pkg = PACKAGES[pkgKey];
469
+ if (!pkg) {
470
+ logErr(`Unknown package: ${pkgKey}`);
471
+ process.exit(1);
472
+ }
473
+ if (!fs.existsSync(pkg.dir)) {
474
+ log(`${pkg.name} not installed — running install instead`);
475
+ installPackage(pkgKey);
476
+ return;
477
+ }
478
+ console.log(`\n Upgrading ${pkg.name}...\n`);
479
+ doUpgrade(pkgKey, pkg);
480
+ } else {
481
+ // Upgrade core app first, then all installed addon packages
482
+ console.log('\n Upgrading Agent Spaces...\n');
483
+ upgradeCorePackage();
484
+ log('');
485
+ for (const [key, pkg] of Object.entries(PACKAGES)) {
486
+ if (fs.existsSync(pkg.dir)) {
487
+ log(`─── ${pkg.name} ───`);
488
+ doUpgrade(key, pkg);
489
+ log('');
490
+ }
491
+ }
492
+ }
493
+ console.log('');
494
+ }
495
+
496
+ function doUpgrade(pkgKey, pkg) {
497
+ // Pull latest
498
+ gitPull(pkg.dir);
499
+
500
+ run('npm', ['install'], { cwd: pkg.dir });
501
+ run('npm', ['rebuild'], { cwd: pkg.dir });
502
+ log('Building TypeScript...');
503
+ run('npm', ['run', 'build'], { cwd: pkg.dir });
504
+ run('npm', ['prune', '--omit=dev'], { cwd: pkg.dir });
505
+
506
+ // Re-create symlink
507
+ createSymlink(pkgKey);
508
+
509
+ if (pkg.verify(pkg.dir)) {
510
+ logOk(`${pkg.name} upgraded successfully`);
511
+ } else {
512
+ logErr(`${pkg.name} upgrade failed — ${pkg.verifyLabel} not found`);
513
+ }
514
+ }
515
+
516
+ // ─── Uninstall command ────────────────────────────────────────
517
+ function uninstallOne(pkgKey) {
518
+ const pkg = PACKAGES[pkgKey];
519
+
520
+ // Remove symlink
521
+ const linkPath = path.join(NODE_MODULES_DIR, pkgKey);
522
+ try {
523
+ const stat = fs.lstatSync(linkPath);
524
+ if (stat.isSymbolicLink() || stat.isFile()) {
525
+ fs.unlinkSync(linkPath);
526
+ } else if (stat.isDirectory()) {
527
+ fs.rmSync(linkPath, { recursive: true });
528
+ }
529
+ logOk(`Removed symlink @spaces/${pkgKey}`);
530
+ } catch {
531
+ logWarn(`Symlink @spaces/${pkgKey} not found`);
532
+ }
533
+
534
+ // Remove package directory
535
+ if (fs.existsSync(pkg.dir)) {
536
+ fs.rmSync(pkg.dir, { recursive: true });
537
+ logOk(`Removed ${pkg.dir}`);
538
+ } else {
539
+ logWarn(`${pkg.dir} not found`);
540
+ }
541
+ }
542
+
543
+ function uninstallPackage(pkgKey) {
544
+ if (pkgKey) {
545
+ const pkg = PACKAGES[pkgKey];
546
+ if (!pkg) {
547
+ logErr(`Unknown package: ${pkgKey}`);
548
+ log(`Available: ${Object.keys(PACKAGES).join(', ')}`);
549
+ process.exit(1);
550
+ }
551
+ console.log(`\n Uninstalling ${pkg.name}...\n`);
552
+ uninstallOne(pkgKey);
553
+ // Reset tier to community if removing a tier package
554
+ const configPath = path.join(SPACES_DIR, 'server.json');
555
+ try {
556
+ if (fs.existsSync(configPath)) {
557
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
558
+ if (config.tier && config.tier !== 'community') {
559
+ config.tier = 'community';
560
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
561
+ logOk('Reset tier to community');
562
+ }
563
+ }
564
+ } catch {}
565
+ logOk(`${pkg.name} uninstalled`);
566
+ } else {
567
+ console.log('\n Uninstalling everything...\n');
568
+
569
+ // Remove tier packages
570
+ for (const [key, pkg] of Object.entries(PACKAGES)) {
571
+ if (fs.existsSync(pkg.dir) || fs.existsSync(path.join(NODE_MODULES_DIR, key))) {
572
+ log(`─── ${pkg.name} ───`);
573
+ uninstallOne(key);
574
+ }
575
+ }
576
+ // Clean up packages dir
577
+ try { fs.rmdirSync(NODE_MODULES_DIR); } catch {}
578
+ try { fs.rmdirSync(path.join(PACKAGES_DIR, 'node_modules')); } catch {}
579
+ try { fs.rmdirSync(PACKAGES_DIR); } catch {}
580
+
581
+ // Remove the global spaces CLI
582
+ log('─── @jlongo78/agent-spaces ───');
583
+ try {
584
+ run('npm', ['uninstall', '-g', '@jlongo78/agent-spaces'], { quiet: true });
585
+ logOk('Removed global spaces CLI');
586
+ } catch {
587
+ logWarn('Global spaces CLI not found or already removed');
588
+ }
589
+
590
+ // Reset tier to community in server.json
591
+ const configPath = path.join(SPACES_DIR, 'server.json');
592
+ try {
593
+ if (fs.existsSync(configPath)) {
594
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
595
+ if (config.tier && config.tier !== 'community') {
596
+ config.tier = 'community';
597
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
598
+ logOk('Reset tier to community');
599
+ }
600
+ }
601
+ } catch {}
602
+
603
+ logOk('Spaces fully uninstalled');
604
+ log('User data remains at ~/.spaces/ — remove manually if desired');
605
+ }
606
+ console.log('');
607
+ }
608
+
609
+ // ─── CLI ──────────────────────────────────────────────────────
610
+ const command = process.argv[2];
611
+ const target = process.argv[3];
612
+
613
+ switch (command) {
614
+ case 'install':
615
+ if (!target) {
616
+ logErr('Usage: spaces install <teams|pro>');
617
+ process.exit(1);
618
+ }
619
+ installPackage(target);
620
+ break;
621
+
622
+ case 'uninstall':
623
+ uninstallPackage(target || null);
624
+ break;
625
+
626
+ case 'verify':
627
+ verifyAll();
628
+ break;
629
+
630
+ case 'upgrade':
631
+ upgradePackage(target || null);
632
+ break;
633
+
634
+ default:
635
+ logErr(`Unknown command: ${command}`);
636
+ log('Usage: spaces <install|uninstall|verify|upgrade> [package]');
637
+ process.exit(1);
638
+ }