@jlongo78/agent-spaces 1.0.5 → 1.0.6
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 +1 -1
- 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 +7 -0
- package/bin/lib/path-check.js +131 -0
- package/bin/spaces-postinstall.js +32 -0
- package/package.json +6 -6
- /package/.next/standalone/.next/static/{6qVfbrNMqfxdpew5EIxK4 → bi0-svZ3eI-QbAfmXzmwj}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{6qVfbrNMqfxdpew5EIxK4 → bi0-svZ3eI-QbAfmXzmwj}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{6qVfbrNMqfxdpew5EIxK4 → bi0-svZ3eI-QbAfmXzmwj}/_ssgManifest.js +0 -0
|
@@ -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\":\"bi0-svZ3eI-QbAfmXzmwj\"}\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": "b0f5195d2b5d24e5446b68d44999467a",
|
|
3
|
+
"previewModeSigningKey": "bc51c002bbef123a7ada1a76a70362e70451a334544c7389f8ae4ccaecfbe903",
|
|
4
|
+
"previewModeEncryptionKey": "3610e253c9e4af72ca86a995a4266647df9285f59451b6c9f2ddbe2af5100390"
|
|
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\": \"wwjXnRGaXhtPs2Q/6dGq9GQ0js45gQv1nWDUl8BaAzI=\"\n}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jlongo78/agent-spaces",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
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.6",
|
|
126
|
+
"@jlongo78/agent-spaces-tui-darwin-x64": "1.0.6",
|
|
127
|
+
"@jlongo78/agent-spaces-tui-linux-arm64": "1.0.6",
|
|
128
|
+
"@jlongo78/agent-spaces-tui-linux-x64": "1.0.6",
|
|
129
|
+
"@jlongo78/agent-spaces-tui-win32-x64": "1.0.6",
|
|
130
130
|
"otpauth": "^9.5.0",
|
|
131
131
|
"qrcode": "^1.5.4"
|
|
132
132
|
}
|
package/README.md
CHANGED
|
@@ -71,6 +71,13 @@ This installs two commands: `spaces` and `spaces-msg`.
|
|
|
71
71
|
- At least one coding agent on your `PATH` (see [Agents](#agents)), or just
|
|
72
72
|
use plain shell panes.
|
|
73
73
|
|
|
74
|
+
If npm's command folder is not on your `PATH` (Node installed some way
|
|
75
|
+
other than its installer, a custom npm prefix, or a terminal opened before
|
|
76
|
+
Node was installed), the install says so and prints the line that makes
|
|
77
|
+
`spaces` work in the terminal you are in. On Windows it also adds the
|
|
78
|
+
folder to your user `PATH`, as Node's installer does, so every new terminal
|
|
79
|
+
has it; set `SPACES_NO_PATH_FIX=1` to install without that.
|
|
80
|
+
|
|
74
81
|
## Quick start
|
|
75
82
|
|
|
76
83
|
```bash
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// After `npm install -g`, is `spaces` runnable? npm puts its commands in
|
|
4
|
+
// one folder (the prefix itself on Windows, `<prefix>/bin` elsewhere), and
|
|
5
|
+
// that folder is not always on PATH: Node installed some other way than its
|
|
6
|
+
// installer, a custom prefix, or a terminal opened before the installer
|
|
7
|
+
// changed PATH. Then the install succeeds and `spaces` is "not recognized".
|
|
8
|
+
//
|
|
9
|
+
// The postinstall hook uses this to check, to put the folder on the user's
|
|
10
|
+
// PATH on Windows (what Node's own installer does), and to say how to run
|
|
11
|
+
// Spaces right away. A process cannot change its parent shell's PATH, so the
|
|
12
|
+
// terminal that ran npm needs the one line printed here, or a new terminal.
|
|
13
|
+
|
|
14
|
+
const fs = require('fs');
|
|
15
|
+
const path = require('path');
|
|
16
|
+
const { execFileSync } = require('child_process');
|
|
17
|
+
|
|
18
|
+
/** Where npm put the `spaces` command for a global install under `prefix`. */
|
|
19
|
+
function globalBinDir(prefix, platform = process.platform) {
|
|
20
|
+
if (!prefix) return null;
|
|
21
|
+
return platform === 'win32' ? prefix : path.posix.join(prefix, 'bin');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function normalize(dir, platform) {
|
|
25
|
+
let d = String(dir).trim().replace(/^"(.*)"$/, '$1');
|
|
26
|
+
if (platform === 'win32') {
|
|
27
|
+
d = d.replace(/\//g, '\\').replace(/\\+$/, '').toLowerCase();
|
|
28
|
+
} else {
|
|
29
|
+
d = d.replace(/\/+$/, '');
|
|
30
|
+
}
|
|
31
|
+
return d;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Whether `dir` is one of the entries of the PATH string `pathValue`. */
|
|
35
|
+
function onPath(dir, pathValue, platform = process.platform) {
|
|
36
|
+
if (!dir || !pathValue) return false;
|
|
37
|
+
const want = normalize(dir, platform);
|
|
38
|
+
const sep = platform === 'win32' ? ';' : ':';
|
|
39
|
+
return String(pathValue).split(sep).some((p) => p && normalize(p, platform) === want);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** The PATH of the user's own environment on Windows (the registry), or null. */
|
|
43
|
+
function readUserPath(run = execFileSync, name = 'Path') {
|
|
44
|
+
try {
|
|
45
|
+
const out = run('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command',
|
|
46
|
+
"[Environment]::GetEnvironmentVariable($env:SPACES_VAR_NAME,'User')"],
|
|
47
|
+
{ encoding: 'utf-8', timeout: 15000, windowsHide: true, env: { ...process.env, SPACES_VAR_NAME: name } });
|
|
48
|
+
return String(out).trim();
|
|
49
|
+
} catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Appends `dir` to the user's PATH on Windows. Through .NET rather than
|
|
56
|
+
* `setx`, which truncates at 1024 characters, and which, unlike this, does
|
|
57
|
+
* not tell open programs (Explorer, new terminals) that PATH changed. The
|
|
58
|
+
* folder travels in an environment variable, never in the command text.
|
|
59
|
+
*/
|
|
60
|
+
function addToUserPath(dir, run = execFileSync, name = 'Path') {
|
|
61
|
+
try {
|
|
62
|
+
run('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command',
|
|
63
|
+
"$d = $env:SPACES_BIN_DIR; $n = $env:SPACES_VAR_NAME; $p = [Environment]::GetEnvironmentVariable($n,'User'); " +
|
|
64
|
+
"if (-not $p) { $p = $d } elseif (($p -split ';') -notcontains $d) { $p = $p.TrimEnd(';') + ';' + $d }; " +
|
|
65
|
+
"[Environment]::SetEnvironmentVariable($n, $p, 'User')"],
|
|
66
|
+
{ encoding: 'utf-8', timeout: 15000, windowsHide: true, env: { ...process.env, SPACES_BIN_DIR: dir, SPACES_VAR_NAME: name } });
|
|
67
|
+
return true;
|
|
68
|
+
} catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** The lines that make `spaces` runnable in the terminal that ran npm. */
|
|
74
|
+
function thisTerminalLines(dir, platform = process.platform) {
|
|
75
|
+
if (platform === 'win32') {
|
|
76
|
+
return [
|
|
77
|
+
`PowerShell: $env:Path = "${dir};" + $env:Path`,
|
|
78
|
+
`cmd: set "PATH=${dir};%PATH%"`,
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
return [`export PATH="${dir}:$PATH"`];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* What to tell the user, and whether to fix the user PATH, given where npm
|
|
86
|
+
* put the command and the two PATHs that matter: this terminal's, and (on
|
|
87
|
+
* Windows) the one new terminals will get. Pure, for tests.
|
|
88
|
+
*
|
|
89
|
+
* @returns {null | { addToUserPath: boolean, lines: string[] }}
|
|
90
|
+
*/
|
|
91
|
+
function plan({ dir, terminalPath, userPath, platform = process.platform, allowFix = true }) {
|
|
92
|
+
if (!dir || onPath(dir, terminalPath, platform)) return null;
|
|
93
|
+
const lines = [];
|
|
94
|
+
let fix = false;
|
|
95
|
+
if (platform === 'win32') {
|
|
96
|
+
const inUser = userPath !== null && onPath(dir, userPath, platform);
|
|
97
|
+
if (!inUser && allowFix && userPath !== null) {
|
|
98
|
+
fix = true;
|
|
99
|
+
lines.push(`Added ${dir} to your PATH, so "spaces" works in every new terminal.`);
|
|
100
|
+
} else if (!inUser) {
|
|
101
|
+
lines.push(`"spaces" is in ${dir}, which is not on your PATH. Add it in`);
|
|
102
|
+
lines.push('Settings > System > About > Advanced system settings > Environment Variables.');
|
|
103
|
+
} else {
|
|
104
|
+
lines.push('"spaces" works in any new terminal.');
|
|
105
|
+
}
|
|
106
|
+
lines.push('To use it in this terminal now, run:');
|
|
107
|
+
} else {
|
|
108
|
+
lines.push(`"spaces" is in ${dir}, which is not on your PATH.`);
|
|
109
|
+
lines.push('Add this line to your shell profile (~/.bashrc, ~/.zshrc), and run it now:');
|
|
110
|
+
}
|
|
111
|
+
return { addToUserPath: fix, lines: [...lines, ...thisTerminalLines(dir, platform).map((l) => ` ${l}`)] };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Writes to the terminal itself. npm hides what install scripts print unless
|
|
116
|
+
* they fail, and a message about how to run the thing just installed is
|
|
117
|
+
* worth getting past that. Falls back to stderr where there is no terminal.
|
|
118
|
+
*/
|
|
119
|
+
function sayToTerminal(text, platform = process.platform) {
|
|
120
|
+
const device = platform === 'win32' ? '\\\\.\\CONOUT$' : '/dev/tty';
|
|
121
|
+
try {
|
|
122
|
+
const fd = fs.openSync(device, 'w');
|
|
123
|
+
try { fs.writeSync(fd, text); } finally { fs.closeSync(fd); }
|
|
124
|
+
return true;
|
|
125
|
+
} catch {
|
|
126
|
+
try { process.stderr.write(text); } catch { /* nowhere to say it */ }
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
module.exports = { globalBinDir, onPath, readUserPath, addToUserPath, thisTerminalLines, plan, sayToTerminal };
|
|
@@ -39,6 +39,38 @@ try {
|
|
|
39
39
|
log(`Installed v${pkg.version}`);
|
|
40
40
|
} catch {}
|
|
41
41
|
|
|
42
|
+
// Make sure "spaces" runs: npm's command folder is not always on PATH.
|
|
43
|
+
// SPACES_NO_PATH_FIX=1 reports without changing the user's PATH.
|
|
44
|
+
try {
|
|
45
|
+
const pc = require('./lib/path-check');
|
|
46
|
+
// The package is <global node_modules>/@jlongo78/agent-spaces, and the
|
|
47
|
+
// global node_modules is <prefix>/node_modules on Windows and
|
|
48
|
+
// <prefix>/lib/node_modules elsewhere.
|
|
49
|
+
const globalModules = path.resolve(__dirname, '..', '..', '..');
|
|
50
|
+
const derived = path.basename(globalModules) === 'node_modules'
|
|
51
|
+
? (process.platform === 'win32' ? path.dirname(globalModules) : path.dirname(path.dirname(globalModules)))
|
|
52
|
+
: null;
|
|
53
|
+
const dir = pc.globalBinDir(derived || process.env.npm_config_prefix);
|
|
54
|
+
const isWin = process.platform === 'win32';
|
|
55
|
+
const terminalPath = process.env.PATH || process.env.Path || '';
|
|
56
|
+
const needs = dir && !pc.onPath(dir, terminalPath);
|
|
57
|
+
const todo = needs && pc.plan({
|
|
58
|
+
dir,
|
|
59
|
+
terminalPath,
|
|
60
|
+
userPath: isWin ? pc.readUserPath() : null,
|
|
61
|
+
allowFix: !process.env.SPACES_NO_PATH_FIX,
|
|
62
|
+
});
|
|
63
|
+
if (todo) {
|
|
64
|
+
const added = todo.addToUserPath ? pc.addToUserPath(dir) : false;
|
|
65
|
+
const lines = todo.addToUserPath && !added
|
|
66
|
+
? todo.lines.map((l) => l.startsWith('Added ') ? `"spaces" is in ${dir}, which is not on your PATH.` : l)
|
|
67
|
+
: todo.lines;
|
|
68
|
+
pc.sayToTerminal(`\n Spaces is installed.\n${lines.map((l) => ` ${l}`).join('\n')}\n\n`);
|
|
69
|
+
}
|
|
70
|
+
} catch {
|
|
71
|
+
// Advice only: an install never fails over it.
|
|
72
|
+
}
|
|
73
|
+
|
|
42
74
|
// Restart the service, but only when one is registered. `spaces service stop`
|
|
43
75
|
// kills node processes on the Spaces ports, so running it on an install with
|
|
44
76
|
// no service would take down a server the user started by hand.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jlongo78/agent-spaces",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
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.6",
|
|
126
|
+
"@jlongo78/agent-spaces-tui-darwin-x64": "1.0.6",
|
|
127
|
+
"@jlongo78/agent-spaces-tui-linux-arm64": "1.0.6",
|
|
128
|
+
"@jlongo78/agent-spaces-tui-linux-x64": "1.0.6",
|
|
129
|
+
"@jlongo78/agent-spaces-tui-win32-x64": "1.0.6",
|
|
130
130
|
"otpauth": "^9.5.0",
|
|
131
131
|
"qrcode": "^1.5.4"
|
|
132
132
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|