@jlongo78/agent-spaces 1.0.8 → 1.0.9

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 (179) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/server/app/(desktop)/page.js.nft.json +1 -1
  5. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  11. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  15. package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
  16. package/.next/standalone/.next/server/app/admin/analytics.rsc +1 -1
  17. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +1 -1
  18. package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +1 -1
  20. package/.next/standalone/.next/server/app/admin/users.html +1 -1
  21. package/.next/standalone/.next/server/app/admin/users.rsc +1 -1
  22. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
  23. package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +1 -1
  24. package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +1 -1
  25. package/.next/standalone/.next/server/app/analytics.html +1 -1
  26. package/.next/standalone/.next/server/app/analytics.rsc +1 -1
  27. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +1 -1
  28. package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +1 -1
  29. package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +1 -1
  30. package/.next/standalone/.next/server/app/api/admin/analytics/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/admin/os-users/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/admin/users/[id]/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/admin/users/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/auth/me/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/auth/totp/setup/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/auth/totp/status/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/auth/totp/verify/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/claude/usage/route.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/api/network/discovered/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/api/network/health/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/network/identity/route.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/api/network/keys/[id]/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/network/keys/route.js.nft.json +1 -1
  54. package/.next/standalone/.next/server/app/api/network/nodes/[id]/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/api/network/nodes/check/route.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/api/network/nodes/route.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/api/network/panes/route.js.nft.json +1 -1
  59. package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
  60. package/.next/standalone/.next/server/app/api/network/proxy/[nodeId]/[...path]/route.js.nft.json +1 -1
  61. package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
  62. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
  63. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
  66. package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
  67. package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/api/server-config/route.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/updates/route.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/wizard/chat/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
  89. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js.nft.json +1 -1
  92. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/login.html +1 -1
  95. package/.next/standalone/.next/server/app/login.rsc +1 -1
  96. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +1 -1
  97. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  98. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  99. package/.next/standalone/.next/server/app/m/projects.html +1 -1
  100. package/.next/standalone/.next/server/app/m/projects.rsc +1 -1
  101. package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +1 -1
  102. package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +1 -1
  103. package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
  104. package/.next/standalone/.next/server/app/m/sessions.html +1 -1
  105. package/.next/standalone/.next/server/app/m/sessions.rsc +1 -1
  106. package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +1 -1
  107. package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +1 -1
  108. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
  109. package/.next/standalone/.next/server/app/m/settings.html +1 -1
  110. package/.next/standalone/.next/server/app/m/settings.rsc +1 -1
  111. package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +1 -1
  112. package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +1 -1
  113. package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
  114. package/.next/standalone/.next/server/app/m/terminal.html +1 -1
  115. package/.next/standalone/.next/server/app/m/terminal.rsc +1 -1
  116. package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +1 -1
  117. package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +1 -1
  118. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +1 -1
  119. package/.next/standalone/.next/server/app/m.html +1 -1
  120. package/.next/standalone/.next/server/app/m.rsc +1 -1
  121. package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +1 -1
  122. package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +1 -1
  123. package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
  124. package/.next/standalone/.next/server/app/network.html +1 -1
  125. package/.next/standalone/.next/server/app/network.rsc +1 -1
  126. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
  127. package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +1 -1
  128. package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +1 -1
  129. package/.next/standalone/.next/server/app/projects.html +1 -1
  130. package/.next/standalone/.next/server/app/projects.rsc +1 -1
  131. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
  132. package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +1 -1
  133. package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +1 -1
  134. package/.next/standalone/.next/server/app/sessions.html +1 -1
  135. package/.next/standalone/.next/server/app/sessions.rsc +1 -1
  136. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
  137. package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +1 -1
  138. package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +1 -1
  139. package/.next/standalone/.next/server/app/settings.html +1 -1
  140. package/.next/standalone/.next/server/app/settings.rsc +1 -1
  141. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
  142. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  143. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  144. package/.next/standalone/.next/server/app/terminal.html +1 -1
  145. package/.next/standalone/.next/server/app/terminal.rsc +1 -1
  146. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +1 -1
  147. package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +1 -1
  148. package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +1 -1
  149. package/.next/standalone/.next/server/app/vr.html +1 -1
  150. package/.next/standalone/.next/server/app/vr.rsc +1 -1
  151. package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +1 -1
  152. package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +1 -1
  153. package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +1 -1
  154. package/.next/standalone/.next/server/app/workspaces.html +1 -1
  155. package/.next/standalone/.next/server/app/workspaces.rsc +1 -1
  156. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
  157. package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +1 -1
  158. package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +1 -1
  159. package/.next/standalone/.next/server/chunks/_1-inpovedul0t._.js +1 -1
  160. package/.next/standalone/.next/server/chunks/ssr/_1yl1yt70hdi7k._.js +1 -1
  161. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__00lhc9vpmf8oy._.js +2 -2
  162. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  163. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  164. package/.next/standalone/.next/server/pages/404.html +1 -1
  165. package/.next/standalone/.next/server/pages/500.html +1 -1
  166. package/.next/standalone/.next/server/preview-props.json +3 -3
  167. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  169. package/.next/standalone/package.json +6 -6
  170. package/README.md +38 -38
  171. package/bin/lib/cli-flags.js +1 -1
  172. package/bin/lib/desktop-auth.js +2 -2
  173. package/bin/lib/remote.js +1 -1
  174. package/bin/spaces-install.js +8 -7
  175. package/bin/spaces.js +22 -19
  176. package/package.json +6 -6
  177. /package/.next/standalone/.next/static/{Nh2HV1jT2b2b63is4U7JG → TUBrOcHqnnSk2PWe-0LXB}/_buildManifest.js +0 -0
  178. /package/.next/standalone/.next/static/{Nh2HV1jT2b2b63is4U7JG → TUBrOcHqnnSk2PWe-0LXB}/_clientMiddlewareManifest.js +0 -0
  179. /package/.next/standalone/.next/static/{Nh2HV1jT2b2b63is4U7JG → TUBrOcHqnnSk2PWe-0LXB}/_ssgManifest.js +0 -0
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
7
7
  "static/chunks/0cz1d0mv5g_q7.js"
8
8
  ],
9
9
  "lowPriorityFiles": [
10
- "static/Nh2HV1jT2b2b63is4U7JG/_buildManifest.js",
11
- "static/Nh2HV1jT2b2b63is4U7JG/_ssgManifest.js",
12
- "static/Nh2HV1jT2b2b63is4U7JG/_clientMiddlewareManifest.js"
10
+ "static/TUBrOcHqnnSk2PWe-0LXB/_buildManifest.js",
11
+ "static/TUBrOcHqnnSk2PWe-0LXB/_ssgManifest.js",
12
+ "static/TUBrOcHqnnSk2PWe-0LXB/_clientMiddlewareManifest.js"
13
13
  ],
14
14
  "rootMainFiles": [
15
15
  "static/chunks/2y6thg-ascuxk.js",
@@ -23,11 +23,11 @@
23
23
  "wasm": [],
24
24
  "assets": [],
25
25
  "env": {
26
- "__NEXT_BUILD_ID": "Nh2HV1jT2b2b63is4U7JG",
27
- "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "3hdcOz9A6BzveBbl12zI4YLCxNhtaRch2VRRffdLZSk=",
28
- "__NEXT_PREVIEW_MODE_ID": "a661722005c39e9c0419001387b78d69",
29
- "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "2cff18a066e8600936df39314fc6bc7d0547ff4b56e5d0c057f78b79ffdd033f",
30
- "__NEXT_PREVIEW_MODE_SIGNING_KEY": "5c193729612ccf368f0d0b0b9d222349acc09833c1878bf23ea93df2d39154b4"
26
+ "__NEXT_BUILD_ID": "TUBrOcHqnnSk2PWe-0LXB",
27
+ "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "EMYrnUwlDpHeQvGU50yYbOTGYjjhe2S8a7Yi/BalNJ0=",
28
+ "__NEXT_PREVIEW_MODE_ID": "f09dddf74fcd19208280d681c7f62cdb",
29
+ "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "7c20f05a1c279ed82a0244e59513287e5c4a71fcc6d69176f15a2bf6f5e3bdff",
30
+ "__NEXT_PREVIEW_MODE_SIGNING_KEY": "9a275ad2f919f295e599cc554ffae0165d1875a5b29f8705df98ff53c3ce4c7f"
31
31
  }
32
32
  }
33
33
  },
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/07t-bv_pwp3nh.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/2y6thg-ascuxk.js"/><script src="/_next/static/chunks/1oizlhl9fdqt_.js" async=""></script><script src="/_next/static/chunks/1hh1kjczjaem_.js" async=""></script><script src="/_next/static/chunks/2nii411saqstq.js" async=""></script><script src="/_next/static/chunks/319md_gnd8h_q.js" async=""></script><script src="/_next/static/chunks/turbopack-2c3mg3r-05n1w.js" async=""></script><script src="/_next/static/chunks/3wsek2shhl8h9.js" async=""></script><script src="/_next/static/chunks/1p4gjn76qfpfh.js" async=""></script><meta name="robots" content="noindex"/><title>Spaces</title><meta name="description" content="Agent workspace manager for Claude, Codex, Gemini, and more"/><link rel="icon" href="/icon.png"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="Ur3q_a_variable iaM1Ya_variable antialiased bg-zinc-950 text-zinc-100"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script id="_R_">(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push({"otherChunks":["static/chunks/2y6thg-ascuxk.js","static/chunks/1oizlhl9fdqt_.js","static/chunks/1hh1kjczjaem_.js","static/chunks/2nii411saqstq.js","static/chunks/319md_gnd8h_q.js"],"runtimeModuleIds":[94553]});</script><script src="/_next/static/chunks/2y6thg-ascuxk.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"/_next/static/chunks/3wsek2shhl8h9.js\"\n3:\"/_next/static/chunks/1p4gjn76qfpfh.js\"\n4:I[12524,[\"$2\",\"$3\"],\"Providers\"]\n5:I[39756,[\"$2\",\"$3\"],\"default\"]\n6:I[37457,[\"$2\",\"$3\"],\"default\"]\na:I[97367,[\"$2\",\"$3\"],\"OutletBoundary\"]\nb:\"$Sreact.suspense\"\nd:\"ViewportBoundary\"\ne:I[97367,[\"$2\",\"$3\"],\"$d\"]\n10:\"MetadataBoundary\"\n11:I[97367,[\"$2\",\"$3\"],\"$10\"]\n13:I[68027,[\"$2\",\"$3\"],\"default\",1]\n:HL[\"/_next/static/chunks/07t-bv_pwp3nh.css\",\"style\"]\n8:X\n9:[[\"children\",{\"s\":\"__PAGE__\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$La\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@c\"}]}]]}],\"p\":false,\"v\":null}}]]\n7:[[\"children\",{\"s\":\"/_not-found\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$8\"},\"c\":\"$Q9\"}]]\n0:{\"P\":null,\"c\":[\"\",\"_not-found\",\"\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/07t-bv_pwp3nh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3wsek2shhl8h9.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/1p4gjn76qfpfh.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"Ur3q_a_variable iaM1Ya_variable antialiased bg-zinc-950 text-zinc-100\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],\"p\":false,\"v\":null},\"c\":\"$Q7\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Le\",null,{\"children\":\"$Lf\"}],[\"$\",\"$L11\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L12\"}]}],null]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$13\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/07t-bv_pwp3nh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"Nh2HV1jT2b2b63is4U7JG\"}\n8:C\nf:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1\"}]]\n14:I[27201,[\"$2\",\"$3\"],\"IconMark\"]\nc:null\n12:[[\"$\",\"title\",\"0\",{\"children\":\"Spaces\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Agent workspace manager for Claude, Codex, Gemini, and more\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/icon.png\"}],[\"$\",\"$L14\",\"3\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/07t-bv_pwp3nh.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/2y6thg-ascuxk.js"/><script src="/_next/static/chunks/1oizlhl9fdqt_.js" async=""></script><script src="/_next/static/chunks/1hh1kjczjaem_.js" async=""></script><script src="/_next/static/chunks/2nii411saqstq.js" async=""></script><script src="/_next/static/chunks/319md_gnd8h_q.js" async=""></script><script src="/_next/static/chunks/turbopack-2c3mg3r-05n1w.js" async=""></script><script src="/_next/static/chunks/3wsek2shhl8h9.js" async=""></script><script src="/_next/static/chunks/1p4gjn76qfpfh.js" async=""></script><meta name="robots" content="noindex"/><title>Spaces</title><meta name="description" content="Agent workspace manager for Claude, Codex, Gemini, and more"/><link rel="icon" href="/icon.png"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="Ur3q_a_variable iaM1Ya_variable antialiased bg-zinc-950 text-zinc-100"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script id="_R_">(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push({"otherChunks":["static/chunks/2y6thg-ascuxk.js","static/chunks/1oizlhl9fdqt_.js","static/chunks/1hh1kjczjaem_.js","static/chunks/2nii411saqstq.js","static/chunks/319md_gnd8h_q.js"],"runtimeModuleIds":[94553]});</script><script src="/_next/static/chunks/2y6thg-ascuxk.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"/_next/static/chunks/3wsek2shhl8h9.js\"\n3:\"/_next/static/chunks/1p4gjn76qfpfh.js\"\n4:I[12524,[\"$2\",\"$3\"],\"Providers\"]\n5:I[39756,[\"$2\",\"$3\"],\"default\"]\n6:I[37457,[\"$2\",\"$3\"],\"default\"]\na:I[97367,[\"$2\",\"$3\"],\"OutletBoundary\"]\nb:\"$Sreact.suspense\"\nd:\"ViewportBoundary\"\ne:I[97367,[\"$2\",\"$3\"],\"$d\"]\n10:\"MetadataBoundary\"\n11:I[97367,[\"$2\",\"$3\"],\"$10\"]\n13:I[68027,[\"$2\",\"$3\"],\"default\",1]\n:HL[\"/_next/static/chunks/07t-bv_pwp3nh.css\",\"style\"]\n8:X\n9:[[\"children\",{\"s\":\"__PAGE__\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$La\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@c\"}]}]]}],\"p\":false,\"v\":null}}]]\n7:[[\"children\",{\"s\":\"/_not-found\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$8\"},\"c\":\"$Q9\"}]]\n0:{\"P\":null,\"c\":[\"\",\"_not-found\",\"\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/07t-bv_pwp3nh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3wsek2shhl8h9.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/1p4gjn76qfpfh.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"Ur3q_a_variable iaM1Ya_variable antialiased bg-zinc-950 text-zinc-100\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],\"p\":false,\"v\":null},\"c\":\"$Q7\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Le\",null,{\"children\":\"$Lf\"}],[\"$\",\"$L11\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L12\"}]}],null]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$13\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/07t-bv_pwp3nh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"TUBrOcHqnnSk2PWe-0LXB\"}\n8:C\nf:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1\"}]]\n14:I[27201,[\"$2\",\"$3\"],\"IconMark\"]\nc:null\n12:[[\"$\",\"title\",\"0\",{\"children\":\"Spaces\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Agent workspace manager for Claude, Codex, Gemini, and more\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/icon.png\"}],[\"$\",\"$L14\",\"3\",{}]]\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/2y6thg-ascuxk.js"/><script src="/_next/static/chunks/1oizlhl9fdqt_.js" async=""></script><script src="/_next/static/chunks/1hh1kjczjaem_.js" async=""></script><script src="/_next/static/chunks/2nii411saqstq.js" async=""></script><script src="/_next/static/chunks/319md_gnd8h_q.js" async=""></script><script src="/_next/static/chunks/turbopack-2c3mg3r-05n1w.js" async=""></script><script src="/_next/static/chunks/30g0jo299pr8e.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script id="_R_">(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push({"otherChunks":["static/chunks/2y6thg-ascuxk.js","static/chunks/1oizlhl9fdqt_.js","static/chunks/1hh1kjczjaem_.js","static/chunks/2nii411saqstq.js","static/chunks/319md_gnd8h_q.js"],"runtimeModuleIds":[94553]});</script><script src="/_next/static/chunks/2y6thg-ascuxk.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"/_next/static/chunks/30g0jo299pr8e.js\"\n3:I[39756,[\"$2\"],\"default\"]\n4:I[37457,[\"$2\"],\"default\"]\n7:I[97367,[\"$2\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\na:\"ViewportBoundary\"\nb:I[97367,[\"$2\"],\"$a\"]\nd:\"MetadataBoundary\"\ne:I[97367,[\"$2\"],\"$d\"]\n10:I[68027,[\"$2\"],\"default\",1]\n5:X\n6:[[\"children\",{\"s\":\"__PAGE__\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],\"p\":false,\"v\":null}}]]\n0:{\"P\":null,\"c\":[\"\",\"_global-error\",\"\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$5\"},\"c\":\"$Q6\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"$Le\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lf\"}]}],null]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$10\",[]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"Nh2HV1jT2b2b63is4U7JG\"}\n5:C\nc:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n9:null\nf:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/2y6thg-ascuxk.js"/><script src="/_next/static/chunks/1oizlhl9fdqt_.js" async=""></script><script src="/_next/static/chunks/1hh1kjczjaem_.js" async=""></script><script src="/_next/static/chunks/2nii411saqstq.js" async=""></script><script src="/_next/static/chunks/319md_gnd8h_q.js" async=""></script><script src="/_next/static/chunks/turbopack-2c3mg3r-05n1w.js" async=""></script><script src="/_next/static/chunks/30g0jo299pr8e.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script id="_R_">(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push({"otherChunks":["static/chunks/2y6thg-ascuxk.js","static/chunks/1oizlhl9fdqt_.js","static/chunks/1hh1kjczjaem_.js","static/chunks/2nii411saqstq.js","static/chunks/319md_gnd8h_q.js"],"runtimeModuleIds":[94553]});</script><script src="/_next/static/chunks/2y6thg-ascuxk.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"/_next/static/chunks/30g0jo299pr8e.js\"\n3:I[39756,[\"$2\"],\"default\"]\n4:I[37457,[\"$2\"],\"default\"]\n7:I[97367,[\"$2\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\na:\"ViewportBoundary\"\nb:I[97367,[\"$2\"],\"$a\"]\nd:\"MetadataBoundary\"\ne:I[97367,[\"$2\"],\"$d\"]\n10:I[68027,[\"$2\"],\"default\",1]\n5:X\n6:[[\"children\",{\"s\":\"__PAGE__\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],\"p\":false,\"v\":null}}]]\n0:{\"P\":null,\"c\":[\"\",\"_global-error\",\"\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$5\"},\"c\":\"$Q6\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"$Le\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lf\"}]}],null]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$10\",[]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"TUBrOcHqnnSk2PWe-0LXB\"}\n5:C\nc:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n9:null\nf:[]\n"])</script></body></html>
@@ -1,5 +1,5 @@
1
1
  {
2
- "previewModeId": "a661722005c39e9c0419001387b78d69",
3
- "previewModeSigningKey": "5c193729612ccf368f0d0b0b9d222349acc09833c1878bf23ea93df2d39154b4",
4
- "previewModeEncryptionKey": "2cff18a066e8600936df39314fc6bc7d0547ff4b56e5d0c057f78b79ffdd033f"
2
+ "previewModeId": "f09dddf74fcd19208280d681c7f62cdb",
3
+ "previewModeSigningKey": "9a275ad2f919f295e599cc554ffae0165d1875a5b29f8705df98ff53c3ce4c7f",
4
+ "previewModeEncryptionKey": "7c20f05a1c279ed82a0244e59513287e5c4a71fcc6d69176f15a2bf6f5e3bdff"
5
5
  }
@@ -1 +1 @@
1
- self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"3hdcOz9A6BzveBbl12zI4YLCxNhtaRch2VRRffdLZSk=\"\n}"
1
+ self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"EMYrnUwlDpHeQvGU50yYbOTGYjjhe2S8a7Yi/BalNJ0=\"\n}"
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "node": {},
3
3
  "edge": {},
4
- "encryptionKey": "3hdcOz9A6BzveBbl12zI4YLCxNhtaRch2VRRffdLZSk="
4
+ "encryptionKey": "EMYrnUwlDpHeQvGU50yYbOTGYjjhe2S8a7Yi/BalNJ0="
5
5
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jlongo78/agent-spaces",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "Agent workspace manager for Claude, Codex, Gemini, and more",
5
5
  "bin": {
6
6
  "spaces": "./bin/spaces.js",
@@ -122,11 +122,11 @@
122
122
  "xterm": "^5.3.0"
123
123
  },
124
124
  "optionalDependencies": {
125
- "@jlongo78/agent-spaces-tui-darwin-arm64": "1.0.8",
126
- "@jlongo78/agent-spaces-tui-darwin-x64": "1.0.8",
127
- "@jlongo78/agent-spaces-tui-linux-arm64": "1.0.8",
128
- "@jlongo78/agent-spaces-tui-linux-x64": "1.0.8",
129
- "@jlongo78/agent-spaces-tui-win32-x64": "1.0.8",
125
+ "@jlongo78/agent-spaces-tui-darwin-arm64": "1.0.9",
126
+ "@jlongo78/agent-spaces-tui-darwin-x64": "1.0.9",
127
+ "@jlongo78/agent-spaces-tui-linux-arm64": "1.0.9",
128
+ "@jlongo78/agent-spaces-tui-linux-x64": "1.0.9",
129
+ "@jlongo78/agent-spaces-tui-win32-x64": "1.0.9",
130
130
  "otpauth": "^9.5.0",
131
131
  "qrcode": "^1.5.4"
132
132
  }
package/README.md CHANGED
@@ -1,23 +1,16 @@
1
1
  <p align="center">
2
- <img src="public/spaces_logo.png" alt="Spaces" width="420" />
2
+ <img src="public/spaces_logo.png" alt="Spaces" width="240" />
3
3
  </p>
4
4
 
5
- <h3 align="center">A terminal workspace for your coding agents.<br/>Run them side by side, see which one needs you, and pick up where you left off, in your terminal or your browser.</h3>
5
+ <h3 align="center">Run your coding agents side by side, see which one needs you,<br/>and pick them up from your terminal, browser or phone.</h3>
6
6
 
7
7
  <p align="center">
8
- <a href="#install">Install</a> &middot;
9
- <a href="#quick-start">Quick start</a> &middot;
10
- <a href="#the-terminal-client">Terminal client</a> &middot;
11
- <a href="#the-web-app">Web app</a> &middot;
12
- <a href="#security">Security</a> &middot;
13
- <a href="docs/getting-started.md">Docs</a>
8
+ Claude Code, Codex, Gemini CLI and more, on your machine or a server you reach over SSH. Open source, no telemetry.
14
9
  </p>
15
10
 
16
11
  <p align="center">
17
12
  <a href="https://www.npmjs.com/package/@jlongo78/agent-spaces"><img src="https://img.shields.io/npm/v/@jlongo78/agent-spaces?style=flat-square&color=cb3837" alt="npm" /></a>
18
- <a href="https://github.com/jlongo78/spaces/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/jlongo78/spaces/ci.yml?style=flat-square&label=CI" alt="CI" /></a>
19
13
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square" alt="Apache-2.0 License" /></a>
20
- <img src="https://img.shields.io/badge/node-%3E%3D20.9-brightgreen?style=flat-square" alt="Node 20.9+" />
21
14
  <img src="https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey?style=flat-square" alt="Platforms" />
22
15
  </p>
23
16
 
@@ -25,33 +18,40 @@
25
18
  <img src="docs/images/terminal-client.gif" alt="The Spaces terminal client: Claude Code and Codex working in two spaces, split side by side; Codex stops to ask for approval, gets it from the menu, then the Files tab, a detach and a reattach" width="900" />
26
19
  </p>
27
20
 
28
- <p align="center"><sub>Recorded live: Claude Code and Codex working on a small app in two spaces. Nothing is staged except the prompts.</sub></p>
21
+ <p align="center"><sub>Recorded live: Claude Code and Codex working on a small app. Nothing is staged except the prompts.</sub></p>
29
22
 
30
- ---
31
-
32
- ## What is Spaces?
23
+ ```bash
24
+ curl -fsSL https://agentspaces.co/install.sh | sh # macOS, Linux
25
+ irm https://agentspaces.co/install.ps1 | iex # Windows (PowerShell)
26
+ ```
33
27
 
34
- Running one AI coding agent is easy. Running five is a mess of terminal tabs,
35
- and the moment you look away you lose track of which one finished, which one
36
- is waiting on you, and which one is still working.
28
+ <p align="center">
29
+ <a href="#install">Install</a> &middot;
30
+ <a href="#quick-start">Quick start</a> &middot;
31
+ <a href="#on-another-machine">On a server</a> &middot;
32
+ <a href="#the-terminal-client">Terminal client</a> &middot;
33
+ <a href="#the-web-app">Web app</a> &middot;
34
+ <a href="#security">Security</a> &middot;
35
+ <a href="https://agentspaces.co">Website</a>
36
+ </p>
37
37
 
38
- **Spaces** is a small server on your machine that keeps your agents in
39
- named, persistent workspaces ("spaces"). Every pane is a real terminal that
40
- keeps running whether or not anything is looking at it. Spaces watches each
41
- agent and tells you which one is working (`◐`), done (`✓`) or blocked
42
- waiting for you (`×`).
38
+ ## What is Spaces?
43
39
 
44
- You reach the same live agents two ways:
40
+ Five agents in five terminal tabs is a mess: look away and you lose track of
41
+ which one finished and which one is waiting on you. Spaces keeps them in
42
+ named, persistent workspaces and fixes that:
45
43
 
46
- - **The terminal client**, `spaces`: a sidebar of spaces and agents, tabs,
47
- a split view, a file browser and editor. It runs anywhere you have a
48
- terminal, including over SSH, and `spaces --remote you@devbox` drives
49
- Spaces on another machine from your laptop.
50
- - **The web app**, `spaces open`: the same spaces as a grid of browser
51
- terminals, plus session history, search and usage dashboards.
44
+ - **It knows who needs you.** Every agent shows as working (`◐`), done
45
+ (`✓`) or blocked waiting for you (`×`), and the one that stops tells you.
46
+ - **The same live agents, wherever you are.** The terminal client
47
+ (`spaces`), the web app (`spaces web`) and a phone layout are views of
48
+ the same running sessions. Detach, and they keep going.
49
+ - **One command puts it on a server.** `spaces --remote you@box` installs
50
+ Spaces there, sets up your SSH key and connects. Nothing is exposed
51
+ beyond SSH.
52
52
 
53
- Start an agent in the terminal, check on it from the browser, detach, and
54
- reattach from somewhere else: it is the same session the whole time.
53
+ Claude Code panes come back in the same conversation after a restart, and
54
+ every past Claude Code, Codex, Gemini CLI and Aider session is searchable.
55
55
 
56
56
  ## Install
57
57
 
@@ -105,12 +105,12 @@ menu, create a space, and start an agent in it. `ctrl+space d` detaches and
105
105
  leaves everything running.
106
106
 
107
107
  ```bash
108
- spaces open # open the web app in your browser, already signed in
108
+ spaces web # open the web app in your browser, already signed in
109
109
  spaces stop # stop the server, and every pane with it
110
110
  ```
111
111
 
112
112
  The server answers only you. Opening `http://localhost:3457` directly shows
113
- a "not signed in" page; `spaces open` signs the browser in with a link that
113
+ a "not signed in" page; `spaces web` signs the browser in with a link that
114
114
  works once, for two minutes. See [Security](#security).
115
115
 
116
116
  ### On another machine
@@ -147,7 +147,7 @@ it works. A "no" is remembered for that machine.
147
147
  For the web app instead of the terminal client:
148
148
 
149
149
  ```bash
150
- spaces open --remote you@devbox
150
+ spaces web --remote you@devbox
151
151
  ```
152
152
 
153
153
  This does the same, then signs your browser in through the tunnel and opens
@@ -164,8 +164,8 @@ offers to install.
164
164
  | `spaces tui` | The terminal client, explicitly. Never falls back to the browser. |
165
165
  | `spaces --remote <dest>` | The terminal client for Spaces on another machine, over SSH. Offers to install or update Spaces there first; `--yes` skips the questions. |
166
166
  | `spaces start` | Start the server in the background, if it is not running. |
167
- | `spaces open` | Open the web app in your browser, signed in. |
168
- | `spaces open --remote <dest>` | The web app for Spaces on another machine, through an SSH tunnel, signed in. |
167
+ | `spaces web` | Open the web app in your browser, signed in. |
168
+ | `spaces web --remote <dest>` | The web app for Spaces on another machine, through an SSH tunnel, signed in. |
169
169
  | `spaces stop` | Stop the server. |
170
170
  | `spaces restart` | Restart the server, through the service when one is installed. Running agents stop with it. |
171
171
  | `spaces status` | The installed version, whether the server runs, and how many agents are live in it. |
@@ -237,7 +237,7 @@ More in [tui/README.md](tui/README.md).
237
237
  <img src="docs/images/web-app.png" alt="The Spaces web app showing the todo-api space: the Claude Code pane has finished and the Codex pane is still working" width="900" />
238
238
  </p>
239
239
 
240
- `spaces open` signs your browser in and shows the same spaces and panes as
240
+ `spaces web` signs your browser in and shows the same spaces and panes as
241
241
  a grid of browser terminals: the very same agents, not copies, so you can
242
242
  start something in the terminal client and finish it here, or the other way
243
243
  round. On top of that it has things that suit a bigger screen:
@@ -340,7 +340,7 @@ Desktop mode, the default and the only supported mode, has a single owner:
340
340
  with a secret in `~/.spaces/internal_token` that only that account can
341
341
  read. Other accounts on the same machine get nothing; arriving over
342
342
  loopback proves nothing.
343
- - Browsers sign in through a one-time link from `spaces open` and get an
343
+ - Browsers sign in through a one-time link from `spaces web` and get an
344
344
  HttpOnly, SameSite=Strict cookie. Requests naming any host other than this
345
345
  machine's loopback are refused, which stops DNS-rebinding attacks.
346
346
  Credentials never go in URLs.
@@ -31,7 +31,7 @@ const SWITCHES = new Set([
31
31
  '--version', '-v',
32
32
  // spaces start (what --remote runs on the other machine).
33
33
  '--print-token',
34
- // spaces start, for spaces open --remote.
34
+ // spaces start, for spaces web --remote.
35
35
  '--print-login',
36
36
  // spaces --remote: install or update the other machine without asking.
37
37
  '--yes', '-y',
@@ -24,7 +24,7 @@
24
24
  * - The `spaces-desktop` cookie: the browser. A token signed with the
25
25
  * secret, HttpOnly (no script reads it) and SameSite=Strict (no other
26
26
  * site sends it). It is never the secret itself.
27
- * - A login code, once: `spaces open` mints one and opens the browser on
27
+ * - A login code, once: `spaces web` mints one and opens the browser on
28
28
  * it; the server swaps it for the cookie. Single use, two minutes.
29
29
  *
30
30
  * And before any of that, the Host header must name this machine's loopback
@@ -149,7 +149,7 @@ function verifyDesktop(secret, token, kind, now = Math.floor(Date.now() / 1000))
149
149
  }
150
150
 
151
151
  /**
152
- * Login codes: minted by whoever holds the secret (`spaces open`, or the
152
+ * Login codes: minted by whoever holds the secret (`spaces web`, or the
153
153
  * server opening a browser itself), redeemed by the server exactly once.
154
154
  * The used-set only has to outlive a code's two minutes.
155
155
  */
package/bin/lib/remote.js CHANGED
@@ -318,7 +318,7 @@ function parseStartBasePath(stdout) {
318
318
  }
319
319
 
320
320
  /**
321
- * The local port `spaces open --remote` tunnels from, the same each time for
321
+ * The local port `spaces web --remote` tunnels from, the same each time for
322
322
  * the same destination, so the address stays put in the browser's history.
323
323
  * Within 41000–41999; another is used when this one is taken.
324
324
  */
@@ -55,16 +55,17 @@ function samePlaceArgs() {
55
55
  }
56
56
 
57
57
  function run(cmd, args, opts = {}) {
58
- const isWin = process.platform === 'win32';
59
- const safeArgs = isWin
60
- ? args.map(a => (a.includes(' ') ? '"' + a + '"' : a))
61
- : args;
62
- return execFileSync(cmd, safeArgs, {
58
+ const options = {
63
59
  encoding: 'utf-8',
64
60
  stdio: opts.quiet ? ['pipe', 'pipe', 'pipe'] : 'inherit',
65
- shell: isWin,
66
61
  ...opts,
67
- });
62
+ };
63
+ if (process.platform !== 'win32') return execFileSync(cmd, args, options);
64
+ // npm is a .cmd on Windows, which only runs through the shell. One
65
+ // command line rather than a list of arguments: Node warns (DEP0190)
66
+ // about passing a list to a shell, which joins it unescaped anyway.
67
+ const line = [cmd, ...args].map((a) => (/[\s&|<>^"]/.test(a) ? `"${a.replace(/"/g, '""')}"` : a)).join(' ');
68
+ return execFileSync(line, { ...options, shell: true });
68
69
  }
69
70
 
70
71
  function restartServiceIfRunning() {
package/bin/spaces.js CHANGED
@@ -193,18 +193,18 @@ if (cliFlags.help) {
193
193
  Spaces - Agent Workspace Manager
194
194
 
195
195
  Usage:
196
- spaces Start the server (desktop mode by default)
197
- spaces tui Launch the terminal client
196
+ spaces Open the terminal client, starting the server if needed
197
+ spaces tui The same, and never falls back to the browser
198
198
  spaces --remote you@host The terminal client for Spaces on another machine,
199
199
  over SSH. Offers to install Spaces there, or to
200
200
  update it when it is older than this machine's
201
201
  spaces --remote you@host --yes
202
202
  The same, installing or updating without asking
203
- spaces open --remote you@host
203
+ spaces web --remote you@host
204
204
  The web app for Spaces on another machine, in your
205
205
  browser, through an SSH tunnel (Ctrl+C closes it)
206
206
  spaces start Start the server in the background, if it is not running
207
- spaces open Open the web app in your browser, signed in
207
+ spaces web Open the web app in your browser, signed in
208
208
  spaces signout Sign out every browser and terminal client
209
209
  spaces stop Stop running server
210
210
  spaces restart Restart the server (through the service, if installed)
@@ -247,11 +247,13 @@ if (cliFlags.help) {
247
247
  }
248
248
 
249
249
  // ─── Stop command ─────────────────────────────────────────
250
- const subcommand = args[0];
250
+ // `spaces web` was the browser command before `spaces web`; it stays as
251
+ // an alias, mapped here so nothing below has to know.
252
+ const subcommand = args[0] === 'open' ? 'web' : args[0];
251
253
  // `--remote` means "the terminal client, over there". With any other command
252
254
  // it would be silently ignored and the command would run here instead.
253
- if (cliFlags.remote && subcommand && subcommand !== 'tui' && subcommand !== 'open' && !subcommand.startsWith('-')) {
254
- console.error(` --remote works with "spaces", "spaces tui" and "spaces open", not "spaces ${subcommand}".`);
255
+ if (cliFlags.remote && subcommand && subcommand !== 'tui' && subcommand !== 'web' && !subcommand.startsWith('-')) {
256
+ console.error(` --remote works with "spaces", "spaces tui" and "spaces web", not "spaces ${subcommand}".`);
255
257
  console.error(` To run that on the other machine: ssh ${cliFlags.remote} spaces ${subcommand}`);
256
258
  process.exit(2);
257
259
  }
@@ -308,7 +310,7 @@ if (subcommand === 'service') {
308
310
  }
309
311
 
310
312
  // ─── Route tui to the platform terminal-client binary ─────
311
- if (subcommand === 'tui' || (cliFlags.remote && subcommand !== 'open')) {
313
+ if (subcommand === 'tui' || (cliFlags.remote && subcommand !== 'web')) {
312
314
  // Explicit `spaces tui` never silently opens a browser: the user asked
313
315
  // for the terminal client by name, so a failure is reported as one. Bare
314
316
  // `spaces --remote host` asks for the same thing.
@@ -332,11 +334,11 @@ if (subcommand === 'signout') {
332
334
  }
333
335
 
334
336
  // ─── Open the web app, signed in / setup wizard / server ──
335
- if (subcommand === 'open' && cliFlags.remote) {
337
+ if (subcommand === 'web' && cliFlags.remote) {
336
338
  // Waits for the tunnel on the event loop: part of this chain for the
337
339
  // same reason as `open` below.
338
340
  openRemote(cliFlags.remote);
339
- } else if (subcommand === 'open') {
341
+ } else if (subcommand === 'web') {
340
342
  // Exits by itself: at once, or on Linux once the timer that removes the
341
343
  // sign-in redirect page fires. Part of this chain so it no longer falls
342
344
  // through to "Unknown command" while that timer is pending.
@@ -609,8 +611,8 @@ function startDetached(startArgs) {
609
611
  const session = desktopSessionToken();
610
612
  if (session) console.log(`SPACES_TOKEN=${session}`);
611
613
  }
612
- // `spaces open --remote` asks for this: a browser sign-in code, the kind
613
- // `spaces open` puts in its link (one use, two minutes), and the path the
614
+ // `spaces web --remote` asks for this: a browser sign-in code, the kind
615
+ // `spaces web` puts in its link (one use, two minutes), and the path the
614
616
  // web app is served under. The secret itself never leaves this machine.
615
617
  if (!multiuser && startArgs.includes('--print-login')) {
616
618
  if (!listenerIsMine(port)) refuseForeignListener(port);
@@ -706,7 +708,7 @@ function signInUrl(port, basePath, secret) {
706
708
  }
707
709
 
708
710
  /**
709
- * `spaces open`: starts the server if needed and opens the web app in the
711
+ * `spaces web`: starts the server if needed and opens the web app in the
710
712
  * browser, already signed in through a one-time link.
711
713
  */
712
714
  function openSignedIn() {
@@ -762,7 +764,7 @@ function signOutEverywhere() {
762
764
  console.log(' If Spaces runs as a service, restart the service too, so it picks up the new secret.');
763
765
  }
764
766
  console.log(' Signed out everywhere: every browser, terminal client and remote session.');
765
- console.log(' Run "spaces open" or "spaces tui" to sign in again.');
767
+ console.log(' Run "spaces web" or "spaces tui" to sign in again.');
766
768
  process.exit(0);
767
769
  }
768
770
 
@@ -837,7 +839,7 @@ function launchRemote(dest, tuiArgs) {
837
839
  }
838
840
 
839
841
  /**
840
- * What `spaces --remote` and `spaces open --remote` share: Spaces running on
842
+ * What `spaces --remote` and `spaces web --remote` share: Spaces running on
841
843
  * `dest` (installed or updated first, with the user's say-so) and an SSH
842
844
  * tunnel to it from a local port. `login` also asks for a browser sign-in
843
845
  * code; `localPort` is tried before any free port. Returns what `spaces
@@ -963,7 +965,7 @@ function localPortIsFree(port) {
963
965
  }
964
966
 
965
967
  /**
966
- * `spaces open --remote <dest>`: the web app for Spaces on another machine.
968
+ * `spaces web --remote <dest>`: the web app for Spaces on another machine.
967
969
  * Connects as `spaces --remote` does, then signs the browser in through
968
970
  * the tunnel with a one-time code made over there, and keeps the tunnel up
969
971
  * until Ctrl+C.
@@ -1365,7 +1367,8 @@ function startServer() {
1365
1367
  },
1366
1368
  });
1367
1369
  } else {
1368
- next = spawn('npx', ['next', 'start', '--port', String(NEXT_INTERNAL_PORT)], {
1370
+ // One command line: a list of arguments to a shell draws Node's DEP0190.
1371
+ next = spawn(`npx next start --port ${Number(NEXT_INTERNAL_PORT)}`, {
1369
1372
  cwd: projectDir,
1370
1373
  stdio: ['ignore', 'pipe', 'pipe'],
1371
1374
  windowsHide: true,
@@ -1428,7 +1431,7 @@ function startServer() {
1428
1431
  if (!(isMultiuser ? openInBrowser(url) : openSignInLink(url))) {
1429
1432
  console.log(isMultiuser
1430
1433
  ? ` Open ${url} in your browser`
1431
- : ' Run "spaces open" to open Spaces in your browser, signed in.');
1434
+ : ' Run "spaces web" to open Spaces in your browser, signed in.');
1432
1435
  }
1433
1436
  }
1434
1437
  }
@@ -1514,7 +1517,7 @@ function startServer() {
1514
1517
  const headers = { 'Cache-Control': 'no-store', 'Referrer-Policy': 'no-referrer' };
1515
1518
  if (req.method !== 'GET' || !loginCodes.redeem(code)) {
1516
1519
  res.writeHead(401, { ...headers, 'Content-Type': 'text/plain; charset=utf-8' });
1517
- res.end('This sign-in link has expired or was already used. Run "spaces open" for a new one.');
1520
+ res.end('This sign-in link has expired or was already used. Run "spaces web" for a new one.');
1518
1521
  return;
1519
1522
  }
1520
1523
  const session = desktopAuth.signDesktop(internalToken, 'session', desktopAuth.SESSION_TTL_S);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jlongo78/agent-spaces",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "Agent workspace manager for Claude, Codex, Gemini, and more",
5
5
  "bin": {
6
6
  "spaces": "./bin/spaces.js",
@@ -122,11 +122,11 @@
122
122
  "xterm": "^5.3.0"
123
123
  },
124
124
  "optionalDependencies": {
125
- "@jlongo78/agent-spaces-tui-darwin-arm64": "1.0.8",
126
- "@jlongo78/agent-spaces-tui-darwin-x64": "1.0.8",
127
- "@jlongo78/agent-spaces-tui-linux-arm64": "1.0.8",
128
- "@jlongo78/agent-spaces-tui-linux-x64": "1.0.8",
129
- "@jlongo78/agent-spaces-tui-win32-x64": "1.0.8",
125
+ "@jlongo78/agent-spaces-tui-darwin-arm64": "1.0.9",
126
+ "@jlongo78/agent-spaces-tui-darwin-x64": "1.0.9",
127
+ "@jlongo78/agent-spaces-tui-linux-arm64": "1.0.9",
128
+ "@jlongo78/agent-spaces-tui-linux-x64": "1.0.9",
129
+ "@jlongo78/agent-spaces-tui-win32-x64": "1.0.9",
130
130
  "otpauth": "^9.5.0",
131
131
  "qrcode": "^1.5.4"
132
132
  }