@jlongo78/agent-spaces 0.5.1 → 0.5.3

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 (317) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +2 -2
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +19 -19
  5. package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
  6. package/.next/standalone/.next/server/app/(desktop)/admin/users/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(desktop)/network/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(desktop)/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(desktop)/projects/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(desktop)/sessions/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(desktop)/settings/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/(desktop)/terminal/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  19. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  20. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  21. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  22. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  23. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  24. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  25. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  27. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  28. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  29. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  30. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  31. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  32. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  33. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  34. package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
  35. package/.next/standalone/.next/server/app/admin/analytics.rsc +2 -2
  36. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +1 -1
  37. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
  38. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  40. package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +2 -2
  41. package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
  42. package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
  43. package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +2 -2
  44. package/.next/standalone/.next/server/app/admin/users.html +1 -1
  45. package/.next/standalone/.next/server/app/admin/users.rsc +2 -2
  46. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
  47. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
  48. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  49. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  50. package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +2 -2
  51. package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
  52. package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
  53. package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +2 -2
  54. package/.next/standalone/.next/server/app/analytics.html +1 -1
  55. package/.next/standalone/.next/server/app/analytics.rsc +2 -2
  56. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
  58. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  59. package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +2 -2
  60. package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
  61. package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
  62. package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  63. package/.next/standalone/.next/server/app/api/analytics/overview/route.js +2 -2
  64. package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/api/bulk/route.js +2 -2
  66. package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
  67. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/api/events/route.js +2 -2
  69. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/api/network/handshake/route.js +1 -1
  72. package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/panes/[id]/route.js +2 -2
  74. package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/api/panes/route.js +2 -2
  76. package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/api/projects/route.js +2 -2
  78. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/api/search/route.js +2 -2
  80. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js +2 -2
  82. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js +2 -2
  84. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js +2 -2
  86. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/sessions/route.js +2 -2
  88. package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
  89. package/.next/standalone/.next/server/app/api/sync/route.js +3 -3
  90. package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/api/tags/route.js +2 -2
  92. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/api/tier/route.js +1 -1
  94. package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
  95. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js +2 -2
  96. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js +2 -2
  98. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js +2 -2
  100. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
  101. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js +2 -2
  102. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js +2 -2
  104. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js +2 -2
  106. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/api/workspaces/route.js +2 -2
  108. package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/login.html +1 -1
  111. package/.next/standalone/.next/server/app/login.rsc +2 -2
  112. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
  113. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  114. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
  115. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  116. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  117. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  118. package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/m/projects.html +1 -1
  121. package/.next/standalone/.next/server/app/m/projects.rsc +2 -2
  122. package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
  123. package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
  124. package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
  125. package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +2 -2
  126. package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
  127. package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
  128. package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +1 -1
  129. package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/m/sessions.html +1 -1
  132. package/.next/standalone/.next/server/app/m/sessions.rsc +2 -2
  133. package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
  134. package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
  135. package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
  136. package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +2 -2
  137. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
  138. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
  139. package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +1 -1
  140. package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/m/settings.html +1 -1
  142. package/.next/standalone/.next/server/app/m/settings.rsc +2 -2
  143. package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
  144. package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
  145. package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
  146. package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +2 -2
  147. package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
  148. package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
  149. package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +1 -1
  150. package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/m/terminal.html +1 -1
  152. package/.next/standalone/.next/server/app/m/terminal.rsc +2 -2
  153. package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +2 -2
  154. package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
  155. package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
  156. package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +2 -2
  157. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +1 -1
  158. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
  159. package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +1 -1
  160. package/.next/standalone/.next/server/app/m.html +1 -1
  161. package/.next/standalone/.next/server/app/m.rsc +2 -2
  162. package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
  163. package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
  164. package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
  165. package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +2 -2
  166. package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
  167. package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
  168. package/.next/standalone/.next/server/app/network.html +1 -1
  169. package/.next/standalone/.next/server/app/network.rsc +2 -2
  170. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
  171. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
  172. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  173. package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +2 -2
  174. package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
  175. package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
  176. package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +2 -2
  177. package/.next/standalone/.next/server/app/projects.html +1 -1
  178. package/.next/standalone/.next/server/app/projects.rsc +2 -2
  179. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
  180. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
  181. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  182. package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  183. package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  184. package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  185. package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  186. package/.next/standalone/.next/server/app/sessions.html +1 -1
  187. package/.next/standalone/.next/server/app/sessions.rsc +2 -2
  188. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
  189. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
  190. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  191. package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +2 -2
  192. package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  193. package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
  194. package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
  195. package/.next/standalone/.next/server/app/settings.html +1 -1
  196. package/.next/standalone/.next/server/app/settings.rsc +2 -2
  197. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
  198. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
  199. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  200. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  201. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  202. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  203. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  204. package/.next/standalone/.next/server/app/terminal.html +1 -1
  205. package/.next/standalone/.next/server/app/terminal.rsc +2 -2
  206. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +1 -1
  207. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
  208. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  209. package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +2 -2
  210. package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
  211. package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
  212. package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +2 -2
  213. package/.next/standalone/.next/server/app/workspaces.html +1 -1
  214. package/.next/standalone/.next/server/app/workspaces.rsc +2 -2
  215. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
  216. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
  217. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  218. package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +2 -2
  219. package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
  220. package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
  221. package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
  222. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e742ef33._.js → [root-of-the-server]__0e4c2d35._.js} +2 -2
  223. package/.next/standalone/.next/server/chunks/[root-of-the-server]__130dee4b._.js +98 -0
  224. package/.next/standalone/.next/server/chunks/[root-of-the-server]__142c2f41._.js +98 -0
  225. package/.next/standalone/.next/server/chunks/[root-of-the-server]__160e7c73._.js +148 -0
  226. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2861e096._.js +1 -1
  227. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2d3d8d52._.js +98 -0
  228. package/.next/standalone/.next/server/chunks/[root-of-the-server]__57b966d5._.js +98 -0
  229. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5a0020ba._.js +106 -0
  230. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5bd0f118._.js +98 -0
  231. package/.next/standalone/.next/server/chunks/[root-of-the-server]__64f5810e._.js +98 -0
  232. package/.next/standalone/.next/server/chunks/[root-of-the-server]__74c48d65._.js +98 -0
  233. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7d6610c4._.js +98 -0
  234. package/.next/standalone/.next/server/chunks/[root-of-the-server]__84f3af14._.js +98 -0
  235. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8765f2fc._.js +98 -0
  236. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a2ee9884._.js +1 -1
  237. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a6eb742d._.js +98 -0
  238. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b4c83e91._.js +114 -0
  239. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c546cf71._.js +1 -1
  240. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cae0486f._.js +106 -0
  241. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d5615808._.js +98 -0
  242. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d877df12._.js +1 -1
  243. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f66ceeb8._.js +98 -0
  244. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f84e3cf3._.js +98 -0
  245. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f893957c._.js +98 -0
  246. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fcd26315._.js +98 -0
  247. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fd505913._.js +98 -0
  248. package/.next/standalone/.next/server/chunks/[root-of-the-server]__feff7b91._.js +98 -0
  249. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
  250. package/.next/standalone/.next/server/edge/chunks/_d73df637._.js +1 -1
  251. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  252. package/.next/standalone/.next/server/pages/404.html +1 -1
  253. package/.next/standalone/.next/server/pages/500.html +2 -2
  254. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  255. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  256. package/.next/standalone/.next/static/chunks/67c7bf5024309fca.css +3 -0
  257. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/README.md +46 -0
  258. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  259. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +1 -0
  260. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  261. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +42 -0
  262. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +46 -0
  263. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  264. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
  265. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  266. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
  267. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
  268. package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  269. package/.next/standalone/node_modules/@img/{sharp-win32-x64 → sharp-linux-x64}/package.json +46 -39
  270. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  271. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
  272. package/.next/standalone/package.json +89 -89
  273. package/.next/standalone/server.js +1 -1
  274. package/.next/standalone/tsconfig.json +34 -34
  275. package/LICENSE +661 -661
  276. package/README.md +131 -131
  277. package/bin/fix-standalone-externals.js +79 -79
  278. package/bin/lib/auto-setup.js +101 -101
  279. package/bin/mdns-service.js +171 -171
  280. package/bin/postinstall.js +35 -35
  281. package/bin/setup-admin.js +189 -189
  282. package/bin/spaces-dev.js +208 -208
  283. package/bin/spaces-install.js +483 -426
  284. package/bin/spaces-setup.js +247 -242
  285. package/bin/spaces.js +465 -465
  286. package/bin/terminal-server.js +1117 -1117
  287. package/package.json +89 -89
  288. package/.next/standalone/.claude/settings.local.json +0 -11
  289. package/.next/standalone/.next/server/chunks/[root-of-the-server]__086be15a._.js +0 -3
  290. package/.next/standalone/.next/server/chunks/[root-of-the-server]__20353b76._.js +0 -3
  291. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2b6758fc._.js +0 -3
  292. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2e9d1d5a._.js +0 -3
  293. package/.next/standalone/.next/server/chunks/[root-of-the-server]__34c34116._.js +0 -3
  294. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3ce30e4e._.js +0 -3
  295. package/.next/standalone/.next/server/chunks/[root-of-the-server]__43112c34._.js +0 -3
  296. package/.next/standalone/.next/server/chunks/[root-of-the-server]__47a63195._.js +0 -3
  297. package/.next/standalone/.next/server/chunks/[root-of-the-server]__60689e2b._.js +0 -3
  298. package/.next/standalone/.next/server/chunks/[root-of-the-server]__83b9bcf3._.js +0 -11
  299. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89124c96._.js +0 -243
  300. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8c2eee30._.js +0 -3
  301. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8ffcf827._.js +0 -3
  302. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e343d64._.js +0 -3
  303. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a651ede9._.js +0 -3
  304. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b4b692df._.js +0 -3
  305. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b4edb4d6._.js +0 -3
  306. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b71497ab._.js +0 -243
  307. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bef2ed87._.js +0 -3
  308. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c525457e._.js +0 -19
  309. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ccc27199._.js +0 -3
  310. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ce5edd98._.js +0 -3
  311. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dd2e81be._.js +0 -11
  312. package/.next/standalone/.next/static/chunks/ff5fac1bd7b518dd.css +0 -3
  313. package/.next/standalone/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64.node +0 -0
  314. /package/.next/standalone/.next/static/{U-EFIvMEHFIoGaoj6xBXK → nbYSIjUtkSwSvTgyR5p00}/_buildManifest.js +0 -0
  315. /package/.next/standalone/.next/static/{U-EFIvMEHFIoGaoj6xBXK → nbYSIjUtkSwSvTgyR5p00}/_clientMiddlewareManifest.json +0 -0
  316. /package/.next/standalone/.next/static/{U-EFIvMEHFIoGaoj6xBXK → nbYSIjUtkSwSvTgyR5p00}/_ssgManifest.js +0 -0
  317. /package/.next/standalone/node_modules/@img/{sharp-win32-x64 → sharp-libvips-linux-x64}/versions.json +0 -0
@@ -1,242 +1,247 @@
1
- #!/usr/bin/env node
2
-
3
- // Setup wizard for Spaces server edition.
4
- // Run via: spaces --setup
5
-
6
- const Database = require('better-sqlite3');
7
- const crypto = require('crypto');
8
- const readline = require('readline');
9
- const path = require('path');
10
- const fs = require('fs');
11
- const os = require('os');
12
-
13
- const SPACES_DIR = path.join(os.homedir(), '.spaces');
14
- const CONFIG_PATH = path.join(SPACES_DIR, 'server.json');
15
- const ADMIN_DB_PATH = path.join(SPACES_DIR, 'admin.db');
16
- const SESSION_SECRET_PATH = path.join(SPACES_DIR, 'session_secret');
17
-
18
- function prompt(rl, question, defaultValue) {
19
- const suffix = defaultValue ? ` [${defaultValue}]` : '';
20
- return new Promise((resolve) => rl.question(` ${question}${suffix}: `, (answer) => {
21
- resolve(answer.trim() || defaultValue || '');
22
- }));
23
- }
24
-
25
- function promptHidden(question) {
26
- return new Promise((resolve) => {
27
- const stdin = process.stdin;
28
- const stdout = process.stdout;
29
- stdout.write(` ${question}: `);
30
- stdin.setRawMode(true);
31
- stdin.resume();
32
- stdin.setEncoding('utf8');
33
-
34
- let password = '';
35
- const onData = (ch) => {
36
- if (ch === '\n' || ch === '\r' || ch === '\u0004') {
37
- stdin.setRawMode(false);
38
- stdin.pause();
39
- stdin.removeListener('data', onData);
40
- stdout.write('\n');
41
- resolve(password);
42
- } else if (ch === '\u0003') {
43
- process.exit(1);
44
- } else if (ch === '\u007F' || ch === '\b') {
45
- if (password.length > 0) {
46
- password = password.slice(0, -1);
47
- stdout.write('\b \b');
48
- }
49
- } else {
50
- password += ch;
51
- stdout.write('*');
52
- }
53
- };
54
- stdin.on('data', onData);
55
- });
56
- }
57
-
58
- function hashPassword(password) {
59
- const salt = crypto.randomBytes(16).toString('hex');
60
- const hash = crypto.scryptSync(password, salt, 64).toString('hex');
61
- return `${salt}:${hash}`;
62
- }
63
-
64
- async function main() {
65
- console.log('');
66
- console.log(' Spaces — Server Setup');
67
- console.log(' =====================');
68
- console.log('');
69
-
70
- // Ensure ~/.spaces directory
71
- if (!fs.existsSync(SPACES_DIR)) {
72
- fs.mkdirSync(SPACES_DIR, { recursive: true });
73
- }
74
-
75
- // Detect @spaces/pro
76
- let hasSpacesPro = false;
77
- try { require.resolve('@spaces/pro'); hasSpacesPro = true; } catch {}
78
-
79
- if (hasSpacesPro) {
80
- console.log(' Detected @spaces/pro — full features available.');
81
- } else {
82
- console.log(' @spaces/pro not found — community features only.');
83
- console.log(' Install @spaces/pro for auth, multi-user, and federation.');
84
- }
85
- console.log('');
86
-
87
- // Load existing config
88
- let existingConfig = {};
89
- if (fs.existsSync(CONFIG_PATH)) {
90
- try { existingConfig = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8')); } catch {}
91
- }
92
-
93
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
94
-
95
- // Tier
96
- const defaultTier = existingConfig.tier || (hasSpacesPro ? 'federation' : 'community');
97
- const tier = await prompt(rl, 'Tier (community|server|team|federation)', defaultTier);
98
- const validTiers = ['community', 'server', 'team', 'federation'];
99
- if (!validTiers.includes(tier)) {
100
- console.error(`\n Error: Invalid tier "${tier}". Must be one of: ${validTiers.join(', ')}`);
101
- process.exit(1);
102
- }
103
-
104
- const needsAuth = tier !== 'community';
105
-
106
- // Admin user (non-community tiers)
107
- if (needsAuth) {
108
- console.log('');
109
- console.log(' Admin User');
110
- console.log(' ──────────');
111
-
112
- // Generate session secret if missing
113
- if (!fs.existsSync(SESSION_SECRET_PATH)) {
114
- const hex = crypto.randomBytes(32).toString('hex');
115
- fs.writeFileSync(SESSION_SECRET_PATH, hex, { mode: 0o600 });
116
- console.log(` Generated session secret at ${SESSION_SECRET_PATH}`);
117
- }
118
-
119
- // Open/create admin database
120
- const db = new Database(ADMIN_DB_PATH);
121
- db.pragma('journal_mode = WAL');
122
- db.pragma('synchronous = NORMAL');
123
- db.pragma('foreign_keys = ON');
124
-
125
- db.exec(`
126
- CREATE TABLE IF NOT EXISTS users (
127
- id TEXT PRIMARY KEY,
128
- username TEXT NOT NULL UNIQUE,
129
- password_hash TEXT NOT NULL,
130
- display_name TEXT NOT NULL DEFAULT '',
131
- shell_user TEXT NOT NULL,
132
- role TEXT NOT NULL DEFAULT 'user',
133
- totp_secret TEXT,
134
- totp_enabled INTEGER DEFAULT 0,
135
- created TEXT DEFAULT (datetime('now'))
136
- );
137
- `);
138
-
139
- const existingAdmin = db.prepare("SELECT username FROM users WHERE role = 'admin' LIMIT 1").get();
140
- if (existingAdmin) {
141
- console.log(` Admin user already exists: ${existingAdmin.username}`);
142
- } else {
143
- const username = await prompt(rl, 'Username', 'admin');
144
- if (!username) {
145
- console.error(' Error: username cannot be empty');
146
- process.exit(1);
147
- }
148
-
149
- const existing = db.prepare('SELECT id FROM users WHERE username = ?').get(username);
150
- if (existing) {
151
- console.error(` Error: user "${username}" already exists`);
152
- process.exit(1);
153
- }
154
-
155
- rl.close();
156
-
157
- const password = await promptHidden('Password');
158
- if (password.length < 8) {
159
- console.error(' Error: password must be at least 8 characters');
160
- process.exit(1);
161
- }
162
-
163
- const confirm = await promptHidden('Confirm password');
164
- if (password !== confirm) {
165
- console.error(' Error: passwords do not match');
166
- process.exit(1);
167
- }
168
-
169
- const rl2 = readline.createInterface({ input: process.stdin, output: process.stdout });
170
- const displayName = await prompt(rl2, 'Display name', username);
171
- rl2.close();
172
-
173
- const shellUser = os.userInfo().username;
174
- const id = crypto.randomUUID();
175
- const passwordHash = hashPassword(password);
176
-
177
- db.prepare(`
178
- INSERT INTO users (id, username, password_hash, display_name, shell_user, role)
179
- VALUES (?, ?, ?, ?, ?, 'admin')
180
- `).run(id, username, passwordHash, displayName, shellUser);
181
-
182
- console.log(`\n Admin user "${username}" created.`);
183
- }
184
- db.close();
185
- }
186
-
187
- // Server config
188
- console.log('');
189
- console.log(' Server');
190
- console.log(' ──────────');
191
-
192
- // Close rl if it's still open (community path or existing admin path)
193
- try { rl.close(); } catch {}
194
- const rl3 = readline.createInterface({ input: process.stdin, output: process.stdout });
195
-
196
- const defaultPort = existingConfig.port || 3457;
197
- const portStr = await prompt(rl3, 'Port', String(defaultPort));
198
- const port = parseInt(portStr, 10) || defaultPort;
199
-
200
- const defaultBasePath = existingConfig.basePath || '';
201
- const basePath = await prompt(rl3, 'Base path (leave empty for root)', defaultBasePath);
202
-
203
- rl3.close();
204
-
205
- // Save config
206
- const config = { tier, port, basePath };
207
- fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
208
-
209
- console.log('');
210
- console.log(` Saved to ${CONFIG_PATH}`);
211
-
212
- // Generate proxy config hints if basePath is set
213
- if (basePath) {
214
- console.log('');
215
- console.log(' Reverse Proxy Configuration');
216
- console.log(' ───────────────────────────');
217
- console.log('');
218
- console.log(' For nginx:');
219
- console.log(` location ${basePath}/ {`);
220
- console.log(` proxy_pass http://localhost:${port}/;`);
221
- console.log(' proxy_http_version 1.1;');
222
- console.log(' proxy_set_header Upgrade $http_upgrade;');
223
- console.log(' proxy_set_header Connection "upgrade";');
224
- console.log(' proxy_set_header Host $host;');
225
- console.log(' proxy_set_header X-Real-IP $remote_addr;');
226
- console.log(' }');
227
- console.log('');
228
- console.log(' For Traefik (docker-compose labels):');
229
- console.log(` - "traefik.http.routers.spaces.rule=PathPrefix(\`${basePath}\`)"`);
230
- console.log(` - "traefik.http.middlewares.spaces-strip.stripprefix.prefixes=${basePath}"`);
231
- console.log(' - "traefik.http.routers.spaces.middlewares=spaces-strip"');
232
- }
233
-
234
- console.log('');
235
- console.log(' Start with: spaces');
236
- console.log('');
237
- }
238
-
239
- main().catch((err) => {
240
- console.error(`\n Error: ${err.message}`);
241
- process.exit(1);
242
- });
1
+ #!/usr/bin/env node
2
+
3
+ // Setup wizard for Spaces server edition.
4
+ // Run via: spaces --setup
5
+
6
+ const Database = require('better-sqlite3');
7
+ const crypto = require('crypto');
8
+ const readline = require('readline');
9
+ const path = require('path');
10
+ const fs = require('fs');
11
+ const os = require('os');
12
+
13
+ const SPACES_DIR = path.join(os.homedir(), '.spaces');
14
+ const CONFIG_PATH = path.join(SPACES_DIR, 'server.json');
15
+ const ADMIN_DB_PATH = path.join(SPACES_DIR, 'admin.db');
16
+ const SESSION_SECRET_PATH = path.join(SPACES_DIR, 'session_secret');
17
+
18
+ function prompt(rl, question, defaultValue) {
19
+ const suffix = defaultValue ? ` [${defaultValue}]` : '';
20
+ return new Promise((resolve) => rl.question(` ${question}${suffix}: `, (answer) => {
21
+ resolve(answer.trim() || defaultValue || '');
22
+ }));
23
+ }
24
+
25
+ function promptHidden(question) {
26
+ return new Promise((resolve) => {
27
+ const stdin = process.stdin;
28
+ const stdout = process.stdout;
29
+ stdout.write(` ${question}: `);
30
+ stdin.setRawMode(true);
31
+ stdin.resume();
32
+ stdin.setEncoding('utf8');
33
+
34
+ let password = '';
35
+ const onData = (ch) => {
36
+ if (ch === '\n' || ch === '\r' || ch === '\u0004') {
37
+ stdin.setRawMode(false);
38
+ stdin.pause();
39
+ stdin.removeListener('data', onData);
40
+ stdout.write('\n');
41
+ resolve(password);
42
+ } else if (ch === '\u0003') {
43
+ process.exit(1);
44
+ } else if (ch === '\u007F' || ch === '\b') {
45
+ if (password.length > 0) {
46
+ password = password.slice(0, -1);
47
+ stdout.write('\b \b');
48
+ }
49
+ } else {
50
+ password += ch;
51
+ stdout.write('*');
52
+ }
53
+ };
54
+ stdin.on('data', onData);
55
+ });
56
+ }
57
+
58
+ function hashPassword(password) {
59
+ const salt = crypto.randomBytes(16).toString('hex');
60
+ const hash = crypto.scryptSync(password, salt, 64).toString('hex');
61
+ return `${salt}:${hash}`;
62
+ }
63
+
64
+ async function main() {
65
+ console.log('');
66
+ console.log(' Spaces — Server Setup');
67
+ console.log(' =====================');
68
+ console.log('');
69
+
70
+ // Ensure ~/.spaces directory
71
+ if (!fs.existsSync(SPACES_DIR)) {
72
+ fs.mkdirSync(SPACES_DIR, { recursive: true });
73
+ }
74
+
75
+ // Detect @spaces/pro (check managed install path first)
76
+ let hasSpacesPro = false;
77
+ const managedPro = path.join(SPACES_DIR, "packages", "node_modules", "@spaces", "pro", "dist", "index.js");
78
+ if (fs.existsSync(managedPro)) {
79
+ hasSpacesPro = true;
80
+ } else {
81
+ try { require.resolve("@spaces/pro"); hasSpacesPro = true; } catch {}
82
+ }
83
+
84
+ if (hasSpacesPro) {
85
+ console.log(' Detected @spaces/pro — full features available.');
86
+ } else {
87
+ console.log(' @spaces/pro not found — community features only.');
88
+ console.log(' Install @spaces/pro for auth, multi-user, and federation.');
89
+ }
90
+ console.log('');
91
+
92
+ // Load existing config
93
+ let existingConfig = {};
94
+ if (fs.existsSync(CONFIG_PATH)) {
95
+ try { existingConfig = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8')); } catch {}
96
+ }
97
+
98
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
99
+
100
+ // Tier
101
+ const defaultTier = existingConfig.tier || (hasSpacesPro ? 'federation' : 'community');
102
+ const tier = await prompt(rl, 'Tier (community|server|team|federation)', defaultTier);
103
+ const validTiers = ['community', 'server', 'team', 'federation'];
104
+ if (!validTiers.includes(tier)) {
105
+ console.error(`\n Error: Invalid tier "${tier}". Must be one of: ${validTiers.join(', ')}`);
106
+ process.exit(1);
107
+ }
108
+
109
+ const needsAuth = tier !== 'community';
110
+
111
+ // Admin user (non-community tiers)
112
+ if (needsAuth) {
113
+ console.log('');
114
+ console.log(' Admin User');
115
+ console.log(' ──────────');
116
+
117
+ // Generate session secret if missing
118
+ if (!fs.existsSync(SESSION_SECRET_PATH)) {
119
+ const hex = crypto.randomBytes(32).toString('hex');
120
+ fs.writeFileSync(SESSION_SECRET_PATH, hex, { mode: 0o600 });
121
+ console.log(` Generated session secret at ${SESSION_SECRET_PATH}`);
122
+ }
123
+
124
+ // Open/create admin database
125
+ const db = new Database(ADMIN_DB_PATH);
126
+ db.pragma('journal_mode = WAL');
127
+ db.pragma('synchronous = NORMAL');
128
+ db.pragma('foreign_keys = ON');
129
+
130
+ db.exec(`
131
+ CREATE TABLE IF NOT EXISTS users (
132
+ id TEXT PRIMARY KEY,
133
+ username TEXT NOT NULL UNIQUE,
134
+ password_hash TEXT NOT NULL,
135
+ display_name TEXT NOT NULL DEFAULT '',
136
+ shell_user TEXT NOT NULL,
137
+ role TEXT NOT NULL DEFAULT 'user',
138
+ totp_secret TEXT,
139
+ totp_enabled INTEGER DEFAULT 0,
140
+ created TEXT DEFAULT (datetime('now'))
141
+ );
142
+ `);
143
+
144
+ const existingAdmin = db.prepare("SELECT username FROM users WHERE role = 'admin' LIMIT 1").get();
145
+ if (existingAdmin) {
146
+ console.log(` Admin user already exists: ${existingAdmin.username}`);
147
+ } else {
148
+ const username = await prompt(rl, 'Username', 'admin');
149
+ if (!username) {
150
+ console.error(' Error: username cannot be empty');
151
+ process.exit(1);
152
+ }
153
+
154
+ const existing = db.prepare('SELECT id FROM users WHERE username = ?').get(username);
155
+ if (existing) {
156
+ console.error(` Error: user "${username}" already exists`);
157
+ process.exit(1);
158
+ }
159
+
160
+ rl.close();
161
+
162
+ const password = await promptHidden('Password');
163
+ if (password.length < 8) {
164
+ console.error(' Error: password must be at least 8 characters');
165
+ process.exit(1);
166
+ }
167
+
168
+ const confirm = await promptHidden('Confirm password');
169
+ if (password !== confirm) {
170
+ console.error(' Error: passwords do not match');
171
+ process.exit(1);
172
+ }
173
+
174
+ const rl2 = readline.createInterface({ input: process.stdin, output: process.stdout });
175
+ const displayName = await prompt(rl2, 'Display name', username);
176
+ rl2.close();
177
+
178
+ const shellUser = os.userInfo().username;
179
+ const id = crypto.randomUUID();
180
+ const passwordHash = hashPassword(password);
181
+
182
+ db.prepare(`
183
+ INSERT INTO users (id, username, password_hash, display_name, shell_user, role)
184
+ VALUES (?, ?, ?, ?, ?, 'admin')
185
+ `).run(id, username, passwordHash, displayName, shellUser);
186
+
187
+ console.log(`\n Admin user "${username}" created.`);
188
+ }
189
+ db.close();
190
+ }
191
+
192
+ // Server config
193
+ console.log('');
194
+ console.log(' Server');
195
+ console.log(' ──────────');
196
+
197
+ // Close rl if it's still open (community path or existing admin path)
198
+ try { rl.close(); } catch {}
199
+ const rl3 = readline.createInterface({ input: process.stdin, output: process.stdout });
200
+
201
+ const defaultPort = existingConfig.port || 3457;
202
+ const portStr = await prompt(rl3, 'Port', String(defaultPort));
203
+ const port = parseInt(portStr, 10) || defaultPort;
204
+
205
+ const defaultBasePath = existingConfig.basePath || '';
206
+ const basePath = await prompt(rl3, 'Base path (leave empty for root)', defaultBasePath);
207
+
208
+ rl3.close();
209
+
210
+ // Save config
211
+ const config = { tier, port, basePath };
212
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
213
+
214
+ console.log('');
215
+ console.log(` Saved to ${CONFIG_PATH}`);
216
+
217
+ // Generate proxy config hints if basePath is set
218
+ if (basePath) {
219
+ console.log('');
220
+ console.log(' Reverse Proxy Configuration');
221
+ console.log(' ───────────────────────────');
222
+ console.log('');
223
+ console.log(' For nginx:');
224
+ console.log(` location ${basePath}/ {`);
225
+ console.log(` proxy_pass http://localhost:${port}/;`);
226
+ console.log(' proxy_http_version 1.1;');
227
+ console.log(' proxy_set_header Upgrade $http_upgrade;');
228
+ console.log(' proxy_set_header Connection "upgrade";');
229
+ console.log(' proxy_set_header Host $host;');
230
+ console.log(' proxy_set_header X-Real-IP $remote_addr;');
231
+ console.log(' }');
232
+ console.log('');
233
+ console.log(' For Traefik (docker-compose labels):');
234
+ console.log(` - "traefik.http.routers.spaces.rule=PathPrefix(\`${basePath}\`)"`);
235
+ console.log(` - "traefik.http.middlewares.spaces-strip.stripprefix.prefixes=${basePath}"`);
236
+ console.log(' - "traefik.http.routers.spaces.middlewares=spaces-strip"');
237
+ }
238
+
239
+ console.log('');
240
+ console.log(' Start with: spaces');
241
+ console.log('');
242
+ }
243
+
244
+ main().catch((err) => {
245
+ console.error(`\n Error: ${err.message}`);
246
+ process.exit(1);
247
+ });