@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.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/server/app/(desktop)/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.html +1 -1
- package/.next/standalone/.next/server/app/admin/users.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/analytics.html +1 -1
- package/.next/standalone/.next/server/app/analytics.rsc +1 -1
- package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/admin/analytics/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin/os-users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin/users/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin/users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/totp/setup/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/totp/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/totp/verify/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/claude/usage/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/discovered/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/health/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/identity/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/keys/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/keys/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/nodes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/nodes/check/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/nodes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/panes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/proxy/[nodeId]/[...path]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/server-config/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/updates/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/wizard/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/projects.html +1 -1
- package/.next/standalone/.next/server/app/m/projects.rsc +1 -1
- package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/sessions.html +1 -1
- package/.next/standalone/.next/server/app/m/sessions.rsc +1 -1
- package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/settings.html +1 -1
- package/.next/standalone/.next/server/app/m/settings.rsc +1 -1
- package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/terminal.html +1 -1
- package/.next/standalone/.next/server/app/m/terminal.rsc +1 -1
- package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m.html +1 -1
- package/.next/standalone/.next/server/app/m.rsc +1 -1
- package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/network.html +1 -1
- package/.next/standalone/.next/server/app/network.rsc +1 -1
- package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/projects.html +1 -1
- package/.next/standalone/.next/server/app/projects.rsc +1 -1
- package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/sessions.html +1 -1
- package/.next/standalone/.next/server/app/sessions.rsc +1 -1
- package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/terminal.html +1 -1
- package/.next/standalone/.next/server/app/terminal.rsc +1 -1
- package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/vr.html +1 -1
- package/.next/standalone/.next/server/app/vr.rsc +1 -1
- package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.html +1 -1
- package/.next/standalone/.next/server/app/workspaces.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/chunks/_1-inpovedul0t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1yl1yt70hdi7k._.js +1 -1
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__00lhc9vpmf8oy._.js +2 -2
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/preview-props.json +3 -3
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/package.json +6 -6
- package/README.md +38 -38
- package/bin/lib/cli-flags.js +1 -1
- package/bin/lib/desktop-auth.js +2 -2
- package/bin/lib/remote.js +1 -1
- package/bin/spaces-install.js +8 -7
- package/bin/spaces.js +22 -19
- package/package.json +6 -6
- /package/.next/standalone/.next/static/{Nh2HV1jT2b2b63is4U7JG → TUBrOcHqnnSk2PWe-0LXB}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{Nh2HV1jT2b2b63is4U7JG → TUBrOcHqnnSk2PWe-0LXB}/_clientMiddlewareManifest.js +0 -0
- /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/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
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": "
|
|
27
|
-
"NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "
|
|
28
|
-
"__NEXT_PREVIEW_MODE_ID": "
|
|
29
|
-
"__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "
|
|
30
|
-
"__NEXT_PREVIEW_MODE_SIGNING_KEY": "
|
|
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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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\":\"
|
|
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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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\":\"
|
|
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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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": "
|
|
3
|
-
"previewModeSigningKey": "
|
|
4
|
-
"previewModeEncryptionKey": "
|
|
2
|
+
"previewModeId": "f09dddf74fcd19208280d681c7f62cdb",
|
|
3
|
+
"previewModeSigningKey": "9a275ad2f919f295e599cc554ffae0165d1875a5b29f8705df98ff53c3ce4c7f",
|
|
4
|
+
"previewModeEncryptionKey": "7c20f05a1c279ed82a0244e59513287e5c4a71fcc6d69176f15a2bf6f5e3bdff"
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"
|
|
1
|
+
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"EMYrnUwlDpHeQvGU50yYbOTGYjjhe2S8a7Yi/BalNJ0=\"\n}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jlongo78/agent-spaces",
|
|
3
|
-
"version": "1.0.
|
|
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.
|
|
126
|
-
"@jlongo78/agent-spaces-tui-darwin-x64": "1.0.
|
|
127
|
-
"@jlongo78/agent-spaces-tui-linux-arm64": "1.0.
|
|
128
|
-
"@jlongo78/agent-spaces-tui-linux-x64": "1.0.
|
|
129
|
-
"@jlongo78/agent-spaces-tui-win32-x64": "1.0.
|
|
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="
|
|
2
|
+
<img src="public/spaces_logo.png" alt="Spaces" width="240" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
<h3 align="center">
|
|
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
|
-
|
|
9
|
-
<a href="#quick-start">Quick start</a> ·
|
|
10
|
-
<a href="#the-terminal-client">Terminal client</a> ·
|
|
11
|
-
<a href="#the-web-app">Web app</a> ·
|
|
12
|
-
<a href="#security">Security</a> ·
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
<p align="center">
|
|
29
|
+
<a href="#install">Install</a> ·
|
|
30
|
+
<a href="#quick-start">Quick start</a> ·
|
|
31
|
+
<a href="#on-another-machine">On a server</a> ·
|
|
32
|
+
<a href="#the-terminal-client">Terminal client</a> ·
|
|
33
|
+
<a href="#the-web-app">Web app</a> ·
|
|
34
|
+
<a href="#security">Security</a> ·
|
|
35
|
+
<a href="https://agentspaces.co">Website</a>
|
|
36
|
+
</p>
|
|
37
37
|
|
|
38
|
-
|
|
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
|
-
|
|
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
|
-
- **
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
54
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
168
|
-
| `spaces
|
|
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
|
|
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
|
|
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.
|
package/bin/lib/cli-flags.js
CHANGED
|
@@ -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
|
|
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',
|
package/bin/lib/desktop-auth.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
*/
|
package/bin/spaces-install.js
CHANGED
|
@@ -55,16 +55,17 @@ function samePlaceArgs() {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
function run(cmd, args, opts = {}) {
|
|
58
|
-
const
|
|
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
|
|
197
|
-
spaces tui
|
|
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
|
|
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
|
|
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
|
-
|
|
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 !== '
|
|
254
|
-
console.error(` --remote works with "spaces", "spaces tui" and "spaces
|
|
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 !== '
|
|
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 === '
|
|
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 === '
|
|
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
|
|
613
|
-
// `spaces
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
126
|
-
"@jlongo78/agent-spaces-tui-darwin-x64": "1.0.
|
|
127
|
-
"@jlongo78/agent-spaces-tui-linux-arm64": "1.0.
|
|
128
|
-
"@jlongo78/agent-spaces-tui-linux-x64": "1.0.
|
|
129
|
-
"@jlongo78/agent-spaces-tui-win32-x64": "1.0.
|
|
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
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|