@jlongo78/agent-spaces 0.5.2 → 0.5.4
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/.claude/settings.local.json +6 -1
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/admin/users/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/network/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/sessions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/terminal/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +2 -2
- 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/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.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/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- 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/_not-found.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 +4 -4
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
- 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 +4 -4
- package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
- 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 +4 -4
- package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/analytics/overview/route.js +2 -2
- package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bulk/route.js +2 -2
- package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/chat/route.js +1 -1
- package/.next/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js +2 -2
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/handshake/route.js +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/projects/route.js +2 -1
- package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/search/route.js +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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]/route.js +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/route.js +2 -2
- package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/search/route.js +2 -2
- package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sync/route.js +3 -3
- package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tags/route.js +2 -2
- package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tier/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/route.js +2 -2
- package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +3 -3
- package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/projects.html +1 -1
- package/.next/standalone/.next/server/app/m/projects.rsc +4 -4
- package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/sessions.html +1 -1
- package/.next/standalone/.next/server/app/m/sessions.rsc +4 -4
- package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/settings.html +1 -1
- package/.next/standalone/.next/server/app/m/settings.rsc +4 -4
- package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/terminal.html +1 -1
- package/.next/standalone/.next/server/app/m/terminal.rsc +4 -4
- package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m.html +1 -1
- package/.next/standalone/.next/server/app/m.rsc +4 -4
- package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/network.html +1 -1
- package/.next/standalone/.next/server/app/network.rsc +4 -4
- package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
- 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 +4 -4
- package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
- 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 +4 -4
- package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
- 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 +4 -4
- package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- 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 +4 -4
- package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.html +1 -1
- package/.next/standalone/.next/server/app/workspaces.rsc +4 -4
- package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d038fdf._.js +106 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e742ef33._.js → [root-of-the-server]__12673e47._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__130dee4b._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__142c2f41._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__160e7c73._.js +148 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2861e096._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2d3d8d52._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__45205e47._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__46b7da42._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4cf845f6._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__57b966d5._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5a0020ba._.js +106 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5bd0f118._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5bf8f2c0._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__69eb20b1._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__74c48d65._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7d6610c4._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__84f3af14._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a38f7af1._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a6eb742d._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b4c83e91._.js +114 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b7c8a7dd._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c1d7faa6._.js +106 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c546cf71._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__a2ee9884._.js → [root-of-the-server]__c977bf2f._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d2f9be33._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d5615808._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d877df12._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e9d6e526._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f66ceeb8._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f893957c._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fcd26315._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fd505913._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__feff7b91._.js +98 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1f12caba._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_43e7e611._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_network_page_tsx_27f035db._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_lib_telemetry_ts_d7f80cd0._.js +1 -1
- package/.next/standalone/.next/server/edge/chunks/_d73df637._.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +2 -2
- package/.next/standalone/.next/static/chunks/{10c6424526b53431.js → 483bf086feba6531.js} +1 -1
- package/.next/standalone/.next/static/chunks/{f8d7a4a58f712ecd.js → 56ddb2d75f5beb1a.js} +1 -1
- package/.next/standalone/.next/static/chunks/7c4cfb3160fa8dd4.js +5 -0
- package/.next/standalone/.next/static/chunks/{3434c5b2c9958276.js → ae3a695e671c8d31.js} +1 -1
- package/.next/standalone/.next/static/chunks/e972ec0d23b19896.js +5 -0
- package/.next/standalone/package.json +1 -1
- package/bin/lib/auto-setup.js +10 -1
- package/bin/setup-admin.js +7 -1
- package/bin/spaces-install.js +137 -16
- package/bin/spaces-service.js +881 -0
- package/bin/spaces-setup.js +14 -3
- package/bin/spaces.js +55 -21
- package/bin/terminal-server.js +146 -11
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__086be15a._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__18a58c5f._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__20353b76._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2b6758fc._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2e9d1d5a._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__34c34116._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3ce30e4e._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__41e589ee._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__43112c34._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__464db440._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__47a63195._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4ad64489._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__60689e2b._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__83b9bcf3._.js +0 -11
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__89124c96._.js +0 -243
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8c2eee30._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8ffcf827._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__95b7f18e._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e343d64._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a651ede9._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a6ce192e._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b4b692df._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b4edb4d6._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b71497ab._.js +0 -243
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__bef2ed87._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c525457e._.js +0 -19
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ccc27199._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ce5edd98._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__dd2e81be._.js +0 -11
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e2b78951._.js +0 -3
- package/.next/standalone/.next/static/chunks/302ce212c690bec4.js +0 -5
- package/.next/standalone/.next/static/chunks/cb442c50eecb758d.js +0 -5
- /package/.next/standalone/.next/static/{O6DdjswRa9GKIUCn6RwBy → 5J530rtIR_FsG4E9MLLpB}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{O6DdjswRa9GKIUCn6RwBy → 5J530rtIR_FsG4E9MLLpB}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{O6DdjswRa9GKIUCn6RwBy → 5J530rtIR_FsG4E9MLLpB}/_ssgManifest.js +0 -0
package/bin/spaces-setup.js
CHANGED
|
@@ -72,9 +72,14 @@ async function main() {
|
|
|
72
72
|
fs.mkdirSync(SPACES_DIR, { recursive: true });
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
// Detect @spaces/pro
|
|
75
|
+
// Detect @spaces/pro (check managed install path first)
|
|
76
76
|
let hasSpacesPro = false;
|
|
77
|
-
|
|
77
|
+
const managedPro = path.join(SPACES_DIR, "packages", "node_modules", "@spaces", "pro", "dist", "index.js");
|
|
78
|
+
if (fs.existsSync(managedPro)) {
|
|
79
|
+
hasSpacesPro = true;
|
|
80
|
+
} else {
|
|
81
|
+
try { require.resolve("@spaces/pro"); hasSpacesPro = true; } catch {}
|
|
82
|
+
}
|
|
78
83
|
|
|
79
84
|
if (hasSpacesPro) {
|
|
80
85
|
console.log(' Detected @spaces/pro — full features available.');
|
|
@@ -170,7 +175,13 @@ async function main() {
|
|
|
170
175
|
const displayName = await prompt(rl2, 'Display name', username);
|
|
171
176
|
rl2.close();
|
|
172
177
|
|
|
173
|
-
|
|
178
|
+
let shellUser = os.userInfo().username;
|
|
179
|
+
if (process.platform === 'win32' && shellUser.toUpperCase() === 'SYSTEM' && process.env.USERPROFILE) {
|
|
180
|
+
const candidate = path.basename(process.env.USERPROFILE);
|
|
181
|
+
if (/^[a-zA-Z0-9][a-zA-Z0-9 ._-]{0,63}$/.test(candidate)) {
|
|
182
|
+
shellUser = candidate;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
174
185
|
const id = crypto.randomUUID();
|
|
175
186
|
const passwordHash = hashPassword(password);
|
|
176
187
|
|
package/bin/spaces.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
1
|
+
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
const http = require('http');
|
|
4
4
|
const { execFileSync, spawn } = require('child_process');
|
|
@@ -41,6 +41,12 @@ if (cliFlags.help) {
|
|
|
41
41
|
spaces --port 3457 Override port
|
|
42
42
|
spaces --tier team Override tier (community|team|federation)
|
|
43
43
|
spaces --base-path /spaces Set base path for reverse proxy
|
|
44
|
+
spaces service install Install as OS service (systemd/launchd/Task Scheduler)
|
|
45
|
+
spaces service uninstall Remove OS service
|
|
46
|
+
spaces service start Start the service
|
|
47
|
+
spaces service stop Stop the service
|
|
48
|
+
spaces service status Show service status
|
|
49
|
+
spaces service logs Tail service logs
|
|
44
50
|
spaces --help Show this help
|
|
45
51
|
`);
|
|
46
52
|
process.exit(0);
|
|
@@ -64,10 +70,24 @@ if (subcommand === 'install' || subcommand === 'uninstall' || subcommand === 've
|
|
|
64
70
|
process.exit(status || 0);
|
|
65
71
|
}
|
|
66
72
|
|
|
73
|
+
// ─── Route service commands to spaces-service.js ─────
|
|
74
|
+
if (subcommand === 'service') {
|
|
75
|
+
const serviceScript = path.join(__dirname, 'spaces-service.js');
|
|
76
|
+
const { status } = require('child_process').spawnSync(
|
|
77
|
+
process.execPath, [serviceScript, ...args.slice(1)],
|
|
78
|
+
{ stdio: 'inherit', env: process.env }
|
|
79
|
+
);
|
|
80
|
+
process.exit(status || 0);
|
|
81
|
+
}
|
|
82
|
+
|
|
67
83
|
// ─── Setup wizard ─────────────────────────────────────────
|
|
68
84
|
if (cliFlags.setup) {
|
|
69
85
|
require('./spaces-setup');
|
|
70
86
|
// spaces-setup handles its own process.exit
|
|
87
|
+
} else if (subcommand && !subcommand.startsWith('-')) {
|
|
88
|
+
console.error(` Unknown command: ${subcommand}`);
|
|
89
|
+
console.error(` Run "spaces --help" for usage`);
|
|
90
|
+
process.exit(1);
|
|
71
91
|
} else {
|
|
72
92
|
startServer();
|
|
73
93
|
}
|
|
@@ -284,16 +304,19 @@ function startServer() {
|
|
|
284
304
|
console.log(`\n Ready at http://localhost:${PORT}\n`);
|
|
285
305
|
|
|
286
306
|
const url = `http://localhost:${PORT}`;
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
307
|
+
const isService = process.env.SPACES_SERVICE === '1';
|
|
308
|
+
if (!isService) {
|
|
309
|
+
try {
|
|
310
|
+
if (process.platform === 'win32') {
|
|
311
|
+
execFileSync('cmd', ['/c', 'start', url], { stdio: 'ignore' });
|
|
312
|
+
} else if (process.platform === 'darwin') {
|
|
313
|
+
execFileSync('open', [url], { stdio: 'ignore' });
|
|
314
|
+
} else {
|
|
315
|
+
execFileSync('xdg-open', [url], { stdio: 'ignore' });
|
|
316
|
+
}
|
|
317
|
+
} catch {
|
|
318
|
+
console.log(` Open ${url} in your browser`);
|
|
294
319
|
}
|
|
295
|
-
} catch {
|
|
296
|
-
console.log(` Open ${url} in your browser`);
|
|
297
320
|
}
|
|
298
321
|
}
|
|
299
322
|
});
|
|
@@ -367,16 +390,27 @@ function startServer() {
|
|
|
367
390
|
// ─── Stop running server ─────────────────────────────────────
|
|
368
391
|
function findPidsOnPort(port) {
|
|
369
392
|
const pids = new Set();
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
393
|
+
if (process.platform === 'win32') {
|
|
394
|
+
try {
|
|
395
|
+
const output = execFileSync('netstat', ['-ano'], { encoding: 'utf-8' });
|
|
396
|
+
for (const line of output.split(String.fromCharCode(10))) {
|
|
397
|
+
if (line.includes(':' + port + ' ') && line.includes('LISTENING')) {
|
|
398
|
+
const parts = line.trim().split(/\s+/);
|
|
399
|
+
const pid = parseInt(parts[parts.length - 1], 10);
|
|
400
|
+
if (pid > 0) pids.add(pid);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
} catch {}
|
|
404
|
+
} else {
|
|
405
|
+
try {
|
|
406
|
+
const output = execFileSync('lsof', ['-ti', `tcp:${port}`], { encoding: 'utf-8' }).trim();
|
|
407
|
+
for (const p of output.split('\n')) { if (p.trim()) pids.add(parseInt(p.trim(), 10)); }
|
|
408
|
+
} catch {}
|
|
409
|
+
try {
|
|
410
|
+
const output = execFileSync('fuser', [`${port}/tcp`], { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
411
|
+
for (const p of output.split(/\s+/)) { if (p.trim()) pids.add(parseInt(p.trim(), 10)); }
|
|
412
|
+
} catch {}
|
|
413
|
+
}
|
|
380
414
|
return [...pids].filter(p => !isNaN(p) && p > 0);
|
|
381
415
|
}
|
|
382
416
|
|
|
@@ -412,7 +446,7 @@ function stopServer() {
|
|
|
412
446
|
}
|
|
413
447
|
escalated = true;
|
|
414
448
|
}
|
|
415
|
-
require('child_process').spawnSync('sleep', ['0.2']);
|
|
449
|
+
if (process.platform === 'win32') { require('child_process').spawnSync('powershell', ['-Command', 'Start-Sleep -Milliseconds 200']); } else { require('child_process').spawnSync('sleep', ['0.2']); }
|
|
416
450
|
}
|
|
417
451
|
} else {
|
|
418
452
|
console.log(` No running server found on port ${port}`);
|
package/bin/terminal-server.js
CHANGED
|
@@ -303,6 +303,87 @@ function parseCookies(cookieHeader) {
|
|
|
303
303
|
|
|
304
304
|
const SERVICE_KEY = path.join(os.homedir(), '.spaces', 'service_key');
|
|
305
305
|
|
|
306
|
+
// Ensure the SSH service key exists, has correct permissions, and is authorized.
|
|
307
|
+
function ensureServiceKeyAtRuntime() {
|
|
308
|
+
if (process.platform !== 'win32') return;
|
|
309
|
+
const { spawnSync } = require('child_process');
|
|
310
|
+
const currentUser = os.userInfo().username;
|
|
311
|
+
|
|
312
|
+
// Generate key if missing
|
|
313
|
+
if (!fs.existsSync(SERVICE_KEY)) {
|
|
314
|
+
const dir = path.dirname(SERVICE_KEY);
|
|
315
|
+
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
|
316
|
+
const result = spawnSync('ssh-keygen', [
|
|
317
|
+
'-t', 'ed25519', '-f', SERVICE_KEY, '-N', '', '-C', 'spaces-service-key',
|
|
318
|
+
], { stdio: 'pipe', timeout: 10000 });
|
|
319
|
+
if (result.status !== 0) {
|
|
320
|
+
console.error('[SSH] Failed to generate service key');
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
// Lock down permissions: only the process owner + SYSTEM
|
|
324
|
+
spawnSync('icacls', [SERVICE_KEY, '/inheritance:r',
|
|
325
|
+
'/remove', 'BUILTIN\\Administrators', '/remove', 'BUILTIN\\Users', '/remove', 'Everyone',
|
|
326
|
+
'/grant:r', currentUser + ':(F)',
|
|
327
|
+
'/grant', 'NT AUTHORITY\\SYSTEM:(F)'], { stdio: 'pipe', timeout: 5000 });
|
|
328
|
+
console.log('[SSH] Generated service key as ' + currentUser);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// Always ensure the public key is authorized
|
|
332
|
+
if (!fs.existsSync(SERVICE_KEY + '.pub')) return;
|
|
333
|
+
const pubKey = fs.readFileSync(SERVICE_KEY + '.pub', 'utf-8').trim();
|
|
334
|
+
|
|
335
|
+
// Authorize in administrators_authorized_keys (for admin shell users)
|
|
336
|
+
try {
|
|
337
|
+
const adminAuthKeys = path.join(process.env.ProgramData || 'C:\\ProgramData', 'ssh', 'administrators_authorized_keys');
|
|
338
|
+
const authDir = path.dirname(adminAuthKeys);
|
|
339
|
+
if (!fs.existsSync(authDir)) fs.mkdirSync(authDir, { recursive: true });
|
|
340
|
+
// Set restrictive ACL first (SYSTEM write + Administrators read), then append
|
|
341
|
+
spawnSync('icacls', [adminAuthKeys, '/inheritance:r',
|
|
342
|
+
'/grant:r', 'SYSTEM:(F)', '/grant', 'Administrators:(R)'], { stdio: 'pipe', timeout: 5000 });
|
|
343
|
+
let existing = '';
|
|
344
|
+
try { existing = fs.readFileSync(adminAuthKeys, 'utf-8'); } catch {}
|
|
345
|
+
if (!existing.includes(pubKey)) {
|
|
346
|
+
fs.appendFileSync(adminAuthKeys, pubKey + String.fromCharCode(10));
|
|
347
|
+
console.log('[SSH] Authorized service key in administrators_authorized_keys');
|
|
348
|
+
}
|
|
349
|
+
} catch (e) {
|
|
350
|
+
console.error('[SSH] Could not authorize admin key (non-fatal):', e.message);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// Authorize in each shell user's ~/.ssh/authorized_keys (for non-admin users)
|
|
354
|
+
// Scan user profiles that have a .claude directory (likely terminal targets)
|
|
355
|
+
try {
|
|
356
|
+
const usersDir = path.dirname(os.homedir());
|
|
357
|
+
const skip = new Set(['Public', 'Default', 'Default User', 'All Users']);
|
|
358
|
+
const profiles = fs.readdirSync(usersDir)
|
|
359
|
+
.filter(name => !skip.has(name) && !name.startsWith('.'))
|
|
360
|
+
.filter(name => fs.existsSync(path.join(usersDir, name, '.claude')));
|
|
361
|
+
for (const username of profiles) {
|
|
362
|
+
try {
|
|
363
|
+
const sshDir = path.join(usersDir, username, '.ssh');
|
|
364
|
+
if (!fs.existsSync(sshDir)) fs.mkdirSync(sshDir, { recursive: true });
|
|
365
|
+
const authKeysPath = path.join(sshDir, 'authorized_keys');
|
|
366
|
+
let existing = '';
|
|
367
|
+
try { existing = fs.readFileSync(authKeysPath, 'utf-8'); } catch {}
|
|
368
|
+
if (!existing.includes(pubKey)) {
|
|
369
|
+
fs.appendFileSync(authKeysPath, pubKey + String.fromCharCode(10));
|
|
370
|
+
// OpenSSH on Windows requires authorized_keys to be owned by the user
|
|
371
|
+
// and not writable by others; lock down permissions
|
|
372
|
+
spawnSync('icacls', [authKeysPath, '/inheritance:r',
|
|
373
|
+
'/grant:r', username + ':(F)',
|
|
374
|
+
'/grant', 'NT AUTHORITY\\SYSTEM:(F)'], { stdio: 'pipe', timeout: 5000 });
|
|
375
|
+
console.log('[SSH] Authorized service key for user ' + username);
|
|
376
|
+
}
|
|
377
|
+
} catch (e) {
|
|
378
|
+
console.error('[SSH] Could not authorize key for ' + username + ' (non-fatal):', e.message);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
} catch (e) {
|
|
382
|
+
console.error('[SSH] Could not scan user profiles (non-fatal):', e.message);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
try { ensureServiceKeyAtRuntime(); } catch (e) { console.error('[SSH] Key setup failed (non-fatal):', e.message); }
|
|
386
|
+
|
|
306
387
|
// Session store: keeps ptys alive across WebSocket reconnections
|
|
307
388
|
// Key: paneId, Value: { pty, ws (current WebSocket or null), buffer (rolling output), username }
|
|
308
389
|
const sessions = new Map();
|
|
@@ -343,13 +424,33 @@ function findGitBash() {
|
|
|
343
424
|
return null;
|
|
344
425
|
}
|
|
345
426
|
|
|
427
|
+
// ─── SSH binary detection (Windows) ──────────────────────
|
|
428
|
+
function findSshBinary() {
|
|
429
|
+
if (process.platform !== 'win32') return '/usr/bin/ssh';
|
|
430
|
+
// Windows OpenSSH ships in System32
|
|
431
|
+
const sysSSH = path.join(process.env.SystemRoot || 'C:\\Windows', 'System32', 'OpenSSH', 'ssh.exe');
|
|
432
|
+
if (fs.existsSync(sysSSH)) return sysSSH;
|
|
433
|
+
// Git for Windows also bundles ssh
|
|
434
|
+
const gitSSH = 'C:\\Program Files\\Git\\usr\\bin\\ssh.exe';
|
|
435
|
+
if (fs.existsSync(gitSSH)) return gitSSH;
|
|
436
|
+
try {
|
|
437
|
+
const result = require('child_process').execSync('where ssh.exe 2>nul', { encoding: 'utf-8', timeout: 3000 });
|
|
438
|
+
const first = result.trim().split(String.fromCharCode(10))[0].trim();
|
|
439
|
+
if (first && fs.existsSync(first)) return first;
|
|
440
|
+
} catch {}
|
|
441
|
+
return null;
|
|
442
|
+
}
|
|
443
|
+
|
|
346
444
|
// ─── Origin validation ───────────────────────────────────
|
|
347
|
-
function isAllowedOrigin(origin) {
|
|
445
|
+
function isAllowedOrigin(origin, req) {
|
|
348
446
|
if (!origin) return false;
|
|
349
447
|
try {
|
|
350
448
|
const url = new URL(origin);
|
|
351
449
|
// Allow localhost/127.0.0.1 (any port)
|
|
352
450
|
if (url.hostname === 'localhost' || url.hostname === '127.0.0.1') return true;
|
|
451
|
+
// Allow if origin matches the server's own Host header (same-origin requests)
|
|
452
|
+
const host = req && req.headers && req.headers.host;
|
|
453
|
+
if (host && url.host === host) return true;
|
|
353
454
|
// Allow configured hostname from env (e.g., spaces.example.com)
|
|
354
455
|
const allowed = process.env.SPACES_ALLOWED_ORIGINS;
|
|
355
456
|
if (allowed) {
|
|
@@ -448,6 +549,16 @@ function handleConnection(wss, ws, req) {
|
|
|
448
549
|
const isLocal = remoteIp === '127.0.0.1' || remoteIp === '::1' || remoteIp === '::ffff:127.0.0.1' || remoteIp.startsWith('172.') || remoteIp.startsWith('::ffff:172.');
|
|
449
550
|
if ((terminalToken === 'desktop-local' || terminalToken === 'session-auth') && (SPACES_TIER === 'desktop' || SPACES_TIER === 'community' || isLocal)) {
|
|
450
551
|
username = os.userInfo().username;
|
|
552
|
+
// When running as SYSTEM, resolve to the first real user from admin DB
|
|
553
|
+
if (process.platform === "win32" && username.toUpperCase() === "SYSTEM") {
|
|
554
|
+
const db = getAdminDb();
|
|
555
|
+
if (db) {
|
|
556
|
+
try {
|
|
557
|
+
const row = db.prepare("SELECT username FROM users LIMIT 1").get();
|
|
558
|
+
if (row) username = row.username;
|
|
559
|
+
} catch {}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
451
562
|
console.log(`[Auth] Authenticated via desktop token: ${username}`);
|
|
452
563
|
} else {
|
|
453
564
|
// Verify terminal token — if signed by this server's secret, trust it
|
|
@@ -546,18 +657,26 @@ function handleConnection(wss, ws, req) {
|
|
|
546
657
|
const shellUser = lookupShellUser(username);
|
|
547
658
|
const processUser = os.userInfo().username;
|
|
548
659
|
let shell, args;
|
|
549
|
-
const isSSH =
|
|
660
|
+
const isSSH = shellUser !== processUser;
|
|
550
661
|
if (isSSH) {
|
|
551
662
|
// SSH to localhost as the mapped shell user using the service key
|
|
552
|
-
|
|
663
|
+
const sshBin = findSshBinary();
|
|
664
|
+
if (!sshBin) {
|
|
665
|
+
console.error(`[Spawn] SSH binary not found — cannot spawn as ${shellUser}`);
|
|
666
|
+
ws.send(JSON.stringify({ type: 'error', data: 'SSH not available. Install OpenSSH to enable multi-user terminals.' }));
|
|
667
|
+
ws.close();
|
|
668
|
+
return;
|
|
669
|
+
}
|
|
670
|
+
shell = sshBin;
|
|
553
671
|
args = [
|
|
554
|
-
'-4',
|
|
555
|
-
'-i', SERVICE_KEY,
|
|
556
672
|
'-o', 'StrictHostKeyChecking=accept-new',
|
|
557
673
|
'-o', `UserKnownHostsFile=${path.join(os.homedir(), '.spaces', 'known_hosts')}`,
|
|
674
|
+
'-i', SERVICE_KEY,
|
|
558
675
|
'-t',
|
|
559
676
|
`${shellUser}@localhost`,
|
|
560
677
|
];
|
|
678
|
+
// Force IPv4 — localhost may resolve to ::1 (IPv6) which sshd can reject
|
|
679
|
+
args.unshift('-4');
|
|
561
680
|
} else if (isWindows && agentType !== 'shell') {
|
|
562
681
|
// Agents like Claude Code require bash on Windows — find git-bash
|
|
563
682
|
shell = findGitBash();
|
|
@@ -580,7 +699,7 @@ function handleConnection(wss, ws, req) {
|
|
|
580
699
|
// Fall back to HOME if cwd doesn't exist (e.g. remote path from another node)
|
|
581
700
|
let safeCwd = cwd;
|
|
582
701
|
if (!fs.existsSync(safeCwd)) {
|
|
583
|
-
safeCwd =
|
|
702
|
+
safeCwd = os.homedir();
|
|
584
703
|
console.log(`[Spawn] cwd "${cwd}" does not exist, falling back to "${safeCwd}"`);
|
|
585
704
|
}
|
|
586
705
|
|
|
@@ -641,11 +760,17 @@ function handleConnection(wss, ws, req) {
|
|
|
641
760
|
|
|
642
761
|
// SSH sessions start in the remote user's home dir — cd to target cwd first
|
|
643
762
|
if (isSSH) {
|
|
644
|
-
// Use single quotes to prevent shell expansion; escape any single quotes in the path
|
|
645
|
-
const escapedCwd = safeCwd.replace(/'/g, "'\\''");
|
|
646
763
|
setTimeout(() => {
|
|
647
764
|
if (!session.exited) {
|
|
648
|
-
|
|
765
|
+
if (isWindows) {
|
|
766
|
+
// Windows cmd.exe uses double quotes
|
|
767
|
+
const escapedCwd = safeCwd.replace(/"/g, '""');
|
|
768
|
+
term.write(`cd /d "${escapedCwd}"\r`);
|
|
769
|
+
} else {
|
|
770
|
+
// Unix shells use single quotes
|
|
771
|
+
const escapedCwd = safeCwd.replace(/'/g, "'\\''");
|
|
772
|
+
term.write(`cd '${escapedCwd}'\r`);
|
|
773
|
+
}
|
|
649
774
|
}
|
|
650
775
|
}, 300);
|
|
651
776
|
}
|
|
@@ -758,6 +883,9 @@ function handleConnection(wss, ws, req) {
|
|
|
758
883
|
|
|
759
884
|
ws.send(JSON.stringify({ type: 'ready', paneId }));
|
|
760
885
|
|
|
886
|
+
// Confirm actual collaboration state so browser syncs with backend
|
|
887
|
+
ws.send(JSON.stringify({ type: 'collab-updated', isCollaborating }));
|
|
888
|
+
|
|
761
889
|
// ─── Session ID detection for new Claude sessions ────────
|
|
762
890
|
if (agentType === 'claude' && (!agentSession || agentSession === 'new')) {
|
|
763
891
|
detectNewClaudeSession(paneId, cwd, ws, session, username);
|
|
@@ -769,6 +897,13 @@ function handleConnection(wss, ws, req) {
|
|
|
769
897
|
function getUserHome(username) {
|
|
770
898
|
const shellUser = lookupShellUser(username);
|
|
771
899
|
if (shellUser === os.userInfo().username) return os.homedir();
|
|
900
|
+
if (process.platform === 'win32') {
|
|
901
|
+
// On Windows, user profiles live under the Users directory
|
|
902
|
+
const usersDir = path.dirname(os.homedir());
|
|
903
|
+
const userHome = path.join(usersDir, shellUser);
|
|
904
|
+
if (fs.existsSync(userHome)) return userHome;
|
|
905
|
+
return os.homedir();
|
|
906
|
+
}
|
|
772
907
|
return `/home/${shellUser}`;
|
|
773
908
|
}
|
|
774
909
|
|
|
@@ -1074,7 +1209,7 @@ function createTerminalServer(httpServer) {
|
|
|
1074
1209
|
if (url.pathname === '/ws' || url.pathname.endsWith('/ws')) {
|
|
1075
1210
|
// Verify origin for browser clients
|
|
1076
1211
|
const origin = req.headers.origin;
|
|
1077
|
-
if (origin && !isAllowedOrigin(origin)) {
|
|
1212
|
+
if (origin && !isAllowedOrigin(origin, req)) {
|
|
1078
1213
|
socket.destroy();
|
|
1079
1214
|
return;
|
|
1080
1215
|
}
|
|
@@ -1105,7 +1240,7 @@ if (require.main === module) {
|
|
|
1105
1240
|
verifyClient: ({ req }) => {
|
|
1106
1241
|
const origin = req.headers.origin;
|
|
1107
1242
|
if (!origin) return true;
|
|
1108
|
-
return isAllowedOrigin(origin);
|
|
1243
|
+
return isAllowedOrigin(origin, req);
|
|
1109
1244
|
},
|
|
1110
1245
|
});
|
|
1111
1246
|
setupWss(wss);
|
package/package.json
CHANGED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},15286,e=>{"use strict";var t=e.i(14747),r=e.i(22734),s=e.i(46786),n=e.i(54799),a=e.i(17516),i=e.i(99944);function o(e){let r=e;if(a.HAS_MULTIUSER)try{let t=(0,i.getTeams)();t&&(r=t.admin.resolveShellUser(e))}catch{}let n=r===s.default.userInfo().username?s.default.homedir():`/home/${r}`,o=r===s.default.userInfo().username?t.default.join(s.default.homedir(),".spaces"):t.default.join(s.default.homedir(),".spaces","users",e);return{claudeDir:t.default.join(n,".claude"),claudeProjectsDir:t.default.join(n,".claude","projects"),statsPath:t.default.join(n,".claude","stats-cache.json"),codexDir:t.default.join(n,".codex"),codexSessionsDir:t.default.join(n,".codex","sessions"),geminiDir:t.default.join(n,".gemini"),geminiChatsBaseDir:t.default.join(n,".gemini","tmp"),geminiProjectsRegistry:t.default.join(n,".gemini","projects.json"),spacesDir:o,dbPath:t.default.join(o,"spaces.db"),configPath:t.default.join(o,"config.json")}}function l(e){let{spacesDir:t}=o(e);r.default.existsSync(t)||r.default.mkdirSync(t,{recursive:!0})}function d(e){let{configPath:t,spacesDir:s}=o(e);try{if(r.default.existsSync(t)){let e=JSON.parse(r.default.readFileSync(t,"utf-8"));return{installId:e.installId||n.default.randomUUID(),telemetryOptOut:!!e.telemetryOptOut,devDirectories:Array.isArray(e.devDirectories)?e.devDirectories.filter(e=>"string"==typeof e):[]}}}catch{}r.default.existsSync(s)||r.default.mkdirSync(s,{recursive:!0});let a={installId:n.default.randomUUID(),telemetryOptOut:!1,devDirectories:[]};return r.default.writeFileSync(t,JSON.stringify(a,null,2)),a}function u(e,t){let s={...d(e),...t},{configPath:n}=o(e);return r.default.writeFileSync(n,JSON.stringify(s,null,2)),s}parseInt(process.env.SPACES_PORT||"3457",10),e.s(["ensureUserSpacesDir",()=>l,"getUserPaths",()=>o,"readConfig",()=>d,"writeConfig",()=>u])},10430,(e,t,r)=>{t.exports=e.x("async_hooks",()=>require("async_hooks"))},79832,e=>{"use strict";var t=e.i(10430),r=e.i(46786),s=e.i(17516);let n=new t.AsyncLocalStorage;function a(e){return s.HAS_AUTH&&e.headers.get("x-auth-user")||r.default.userInfo().username}function i(e,t){return n.run(e,t)}function o(){let e=n.getStore();return e||r.default.userInfo().username}e.s(["getAuthUser",()=>a,"getCurrentUser",()=>o,"withUser",()=>i])},62562,(e,t,r)=>{t.exports=e.x("module",()=>require("module"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},99944,e=>{"use strict";var t=e.i(62562),r=e.i(14747);let s=null,n=!1;function a(){if(!n){for(let e of function(){let e=[r.default.join(process.cwd(),"package.json")];for(let t of(process.env.NODE_PATH||"").split(r.default.delimiter))t&&e.push(r.default.join(t,"_anchor.js"));return e}())try{s=(0,t.createRequire)(e)("@spaces/teams");break}catch{}n=!0}return s}function i(){return null!==a()}e.s(["getTeams",()=>a,"hasTeams",()=>i])},4730,e=>{e.v({name:"@jlongo78/agent-spaces",version:"0.5.2",description:"Agent workspace manager for Claude, Codex, Gemini, and more",bin:{spaces:"./bin/spaces.js"},files:["bin/",".next/standalone/"],engines:{node:">=20.9.0"},repository:{type:"git",url:"git+https://github.com/jlongo78/spaces.git"},keywords:["ai","agent","workspace","terminal","claude","codex","gemini"],homepage:"http://www.agentspaces.co",license:"AGPL-3.0-only",scripts:{start:"node bin/spaces.js",dev:"node bin/spaces-dev.js",build:"cross-env STANDALONE=1 next build && node -e \"const fs=require('fs');fs.cpSync('.next/static','.next/standalone/.next/static',{recursive:true});fs.cpSync('public','.next/standalone/public',{recursive:true})\" && node bin/fix-standalone-externals.js",prepublishOnly:"npm run build",setup:"node bin/spaces-setup.js","setup-admin":"node bin/setup-admin.js","server:build":"next build","server:start":"next start --port 3457",lint:"eslint"},dependencies:{"@modelcontextprotocol/sdk":"^1.27.1","better-sqlite3":"^12.6.2","bonjour-service":"^1.3.0","node-pty":"^1.1.0",ws:"^8.19.0"},devDependencies:{"@tailwindcss/postcss":"^4","@tanstack/react-query":"^5.90.21","@types/better-sqlite3":"^7.6.13","@types/node":"^20","@types/qrcode":"^1.5.6","@types/react":"^19","@types/react-dom":"^19","@types/ws":"^8.18.1","@xterm/addon-fit":"^0.11.0","@xterm/addon-web-links":"^0.12.0",chokidar:"^5.0.0","class-variance-authority":"^0.7.1",clsx:"^2.1.1","cross-env":"^10.1.0","date-fns":"^4.1.0",eslint:"^9","eslint-config-next":"16.1.6",geist:"^1.4.1","lucide-react":"^0.575.0",next:"16.1.6",otpauth:"^9.5.0","posthog-js":"^1.352.0","posthog-node":"^5.21.2",qrcode:"^1.5.4",react:"19.2.3","react-dom":"19.2.3","react-markdown":"^10.1.0",recharts:"^3.7.0","rehype-highlight":"^7.0.2","remark-gfm":"^4.0.1","tailwind-merge":"^3.5.0",tailwindcss:"^4",typescript:"^5",xterm:"^5.3.0"},optionalDependencies:{"@types/qrcode":"^1.5.6",otpauth:"^9.5.0",qrcode:"^1.5.4"}})},17516,e=>{"use strict";let t=process.env.SPACES_TIER||process.env.NEXT_PUBLIC_TIER||("server"===process.env.NEXT_PUBLIC_EDITION?"federation":"community"),r="team"===t||"federation"===t,s="federation"===t,n=!r;function a(){let a="0.0.0";try{a=e.r(4730).version}catch{}return{tier:t,version:a,hasAuth:r,hasAdmin:r,hasCollaboration:r,hasNetwork:s,hasMultiuser:r,isDesktop:n,basePath:""}}e.s(["HAS_AUTH",0,r,"HAS_MULTIUSER",0,r,"getTierFlags",()=>a])},46786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},65836,e=>{"use strict";var t=e.i(7304),r=e.i(60569),s=e.i(79832),n=e.i(99944);let a=new Set,i=new Set,o=!1;async function l(){let l=(0,s.getCurrentUser)();if(!a.has(l)){if((0,t.getDb)(),a.add(l),!o){o=!0;let r=(0,n.getTeams)();if(r){let{sseManager:s}=await e.A(72354);r.init({getDb:t.getDb,sseManager:s})}}if(!i.has(l)){i.add(l);try{let e=await (0,r.fullSync)();console.log(`[spaces:${l}] Synced ${e.projects} projects, ${e.sessions} sessions`);let t=await (0,r.enrichMissingSessions)();t>0&&console.log(`[spaces:${l}] Enriched ${t} sessions from JSONL`),(0,r.buildFtsIndex)((e,t)=>{e%10==0&&console.log(`[spaces:${l}] FTS indexing: ${e}/${t}`)}).then(e=>{e>0&&console.log(`[spaces:${l}] FTS indexed ${e} sessions`)}).catch(e=>{console.error(`[spaces:${l}] FTS indexing error:`,e)})}catch(e){console.error(`[spaces:${l}] Sync error:`,e)}finally{i.delete(l)}}}}e.s(["ensureInitialized",()=>l])},69529,e=>{"use strict";var t=e.i(47909),r=e.i(74017),s=e.i(96250),n=e.i(59756),a=e.i(61916),i=e.i(74677),o=e.i(69741),l=e.i(16795),d=e.i(87718),u=e.i(95169),c=e.i(47587),p=e.i(66012),f=e.i(70101),h=e.i(74838),g=e.i(10372),x=e.i(93695);e.i(52474);var m=e.i(220),v=e.i(89171),y=e.i(79832),w=e.i(65836),R=e.i(50837),S=e.i(21150);async function b(e,{params:t}){let r=(0,y.getAuthUser)(e);return(0,y.withUser)(r,async()=>{await (0,w.ensureInitialized)();let{id:r}=await t,{searchParams:s}=e.nextUrl,n=parseInt(s.get("offset")||"0",10),a=parseInt(s.get("limit")||"50",10),i=(0,R.getSessionById)(r);if(!i)return v.NextResponse.json({error:"Session not found"},{status:404});let o=await (0,S.readMessages)(i.fullPath,n,a);return v.NextResponse.json(o)})}e.s(["GET",()=>b],80237);var j=e.i(80237);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/sessions/[id]/messages/route",pathname:"/api/sessions/[id]/messages",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/sessions/[id]/messages/route.ts",nextConfigOutput:"standalone",userland:j}),{workAsyncStorage:A,workUnitAsyncStorage:C,serverHooks:T}=E;function _(){return(0,s.patchFetch)({workAsyncStorage:A,workUnitAsyncStorage:C})}async function k(e,t,s){E.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/sessions/[id]/messages/route";v=v.replace(/\/index$/,"")||"/";let y=await E.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:w,params:R,nextConfig:S,parsedUrl:b,isDraftMode:j,prerenderManifest:A,routerServerContext:C,isOnDemandRevalidate:T,revalidateOnlyGenerated:_,resolvedPathname:k,clientReferenceManifest:I,serverActionsManifest:P}=y,U=(0,o.normalizeAppPath)(v),N=!!(A.dynamicRoutes[U]||A.routes[k]),O=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,b,!1):t.end("This page could not be found"),null);if(N&&!j){let e=!!A.routes[k],t=A.dynamicRoutes[U];if(t&&!1===t.fallback&&!e){if(S.experimental.adapterPath)return await O();throw new x.NoFallbackError}}let D=null;!N||E.isDev||j||(D="/index"===(D=k)?"/":D);let q=!0===E.isDev||!N,H=N&&!q;P&&I&&(0,i.setManifestsSingleton)({page:v,clientReferenceManifest:I,serverActionsManifest:P});let $=e.method||"GET",M=(0,a.getTracer)(),F=M.getActiveScopeSpan(),L={params:R,prerenderManifest:A,renderOpts:{experimental:{authInterrupts:!!S.experimental.authInterrupts},cacheComponents:!!S.cacheComponents,supportsDynamicResponse:q,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:S.cacheLife,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,n)=>E.onRequestError(e,t,s,n,C)},sharedContext:{buildId:w}},B=new l.NodeNextRequest(e),K=new l.NodeNextResponse(t),G=d.NextRequestAdapter.fromNodeNextRequest(B,(0,d.signalFromNodeResponse)(t));try{let i=async e=>E.handle(G,L).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route");if(s){let t=`${$} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t)}else e.updateName(`${$} ${v}`)}),o=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var a,l;let d=async({previousCacheEntry:r})=>{try{if(!o&&T&&_&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await i(n);e.fetchMetrics=L.renderOpts.fetchMetrics;let l=L.renderOpts.pendingWaitUntil;l&&s.waitUntil&&(s.waitUntil(l),l=void 0);let d=L.renderOpts.collectedTags;if(!N)return await (0,p.sendResponse)(B,K,a,L.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(a.headers);d&&(t[g.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==L.renderOpts.collectedRevalidate&&!(L.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&L.renderOpts.collectedRevalidate,s=void 0===L.renderOpts.collectedExpire||L.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:L.renderOpts.collectedExpire;return{value:{kind:m.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:T})},!1,C),t}},u=await E.handleResponse({req:e,nextConfig:S,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:_,responseGenerator:d,waitUntil:s.waitUntil,isMinimalMode:o});if(!N)return null;if((null==u||null==(a=u.value)?void 0:a.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(l=u.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});o||t.setHeader("x-nextjs-cache",T?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),j&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let x=(0,f.fromNodeOutgoingHttpHeaders)(u.value.headers);return o&&N||x.delete(g.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||x.get("Cache-Control")||x.set("Cache-Control",(0,h.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(B,K,new Response(u.value.body,{headers:x,status:u.value.status||200})),null};F?await l(F):await M.withPropagatedContext(e.headers,()=>M.trace(u.BaseServerSpan.handleRequest,{spanName:`${$} ${v}`,kind:a.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},l))}catch(t){if(t instanceof x.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:U,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:T})},!1,C),N)throw t;return await (0,p.sendResponse)(B,K,new Response(null,{status:500})),null}}e.s(["handler",()=>k,"patchFetch",()=>_,"routeModule",()=>E,"serverHooks",()=>T,"workAsyncStorage",()=>A,"workUnitAsyncStorage",()=>C],69529)},72354,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_events_sse_ts_1ad73980._.js"].map(t=>e.l(t))).then(()=>t(20776)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__086be15a._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[62562,(e,t,r)=>{t.exports=e.x("module",()=>require("module"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},18167,e=>{"use strict";var t=e.i(62562),r=e.i(14747);let n=null,a=!1;function s(){if(!a){for(let e of function(){let e=[r.default.join(process.cwd(),"package.json")];for(let t of(process.env.NODE_PATH||"").split(r.default.delimiter))t&&e.push(r.default.join(t,"_anchor.js"));return e}())try{n=(0,t.createRequire)(e)("@spaces/pro");break}catch{}a=!0}return n}e.s(["getPro",()=>s])},23520,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250),a=e.i(59756),s=e.i(61916),o=e.i(74677),i=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),p=e.i(47587),c=e.i(66012),h=e.i(70101),R=e.i(74838),x=e.i(10372),f=e.i(93695);e.i(52474);var v=e.i(220),g=e.i(18167);async function w(e){let t=(0,g.getPro)();return t?.network.api.sessions.GET(e)??Response.json({error:"Requires @spaces/pro"},{status:404})}e.s(["GET",()=>w],46760);var E=e.i(46760);let m=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/network/sessions/route",pathname:"/api/network/sessions",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/network/sessions/route.ts",nextConfigOutput:"standalone",userland:E}),{workAsyncStorage:C,workUnitAsyncStorage:y,serverHooks:A}=m;function b(){return(0,n.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:y})}async function T(e,t,n){m.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let g="/api/network/sessions/route";g=g.replace(/\/index$/,"")||"/";let w=await m.prepare(e,t,{srcPage:g,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:E,params:C,nextConfig:y,parsedUrl:A,isDraftMode:b,prerenderManifest:T,routerServerContext:k,isOnDemandRevalidate:P,revalidateOnlyGenerated:N,resolvedPathname:q,clientReferenceManifest:O,serverActionsManifest:_}=w,j=(0,i.normalizeAppPath)(g),S=!!(T.dynamicRoutes[j]||T.routes[q]),H=async()=>((null==k?void 0:k.render404)?await k.render404(e,t,A,!1):t.end("This page could not be found"),null);if(S&&!b){let e=!!T.routes[q],t=T.dynamicRoutes[j];if(t&&!1===t.fallback&&!e){if(y.experimental.adapterPath)return await H();throw new f.NoFallbackError}}let U=null;!S||m.isDev||b||(U="/index"===(U=q)?"/":U);let I=!0===m.isDev||!S,D=S&&!I;_&&O&&(0,o.setManifestsSingleton)({page:g,clientReferenceManifest:O,serverActionsManifest:_});let M=e.method||"GET",$=(0,s.getTracer)(),F=$.getActiveScopeSpan(),K={params:C,prerenderManifest:T,renderOpts:{experimental:{authInterrupts:!!y.experimental.authInterrupts},cacheComponents:!!y.cacheComponents,supportsDynamicResponse:I,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:y.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>m.onRequestError(e,t,n,a,k)},sharedContext:{buildId:E}},B=new l.NodeNextRequest(e),G=new l.NodeNextResponse(t),L=u.NextRequestAdapter.fromNodeNextRequest(B,(0,u.signalFromNodeResponse)(t));try{let o=async e=>m.handle(L,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${M} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${M} ${g}`)}),i=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var s,l;let u=async({previousCacheEntry:r})=>{try{if(!i&&P&&N&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await o(a);e.fetchMetrics=K.renderOpts.fetchMetrics;let l=K.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let u=K.renderOpts.collectedTags;if(!S)return await (0,c.sendResponse)(B,G,s,K.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(s.headers);u&&(t[x.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=x.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,n=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=x.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await m.onRequestError(e,t,{routerKind:"App Router",routePath:g,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:P})},!1,k),t}},d=await m.handleResponse({req:e,nextConfig:y,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:N,responseGenerator:u,waitUntil:n.waitUntil,isMinimalMode:i});if(!S)return null;if((null==d||null==(s=d.value)?void 0:s.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(l=d.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",P?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let f=(0,h.fromNodeOutgoingHttpHeaders)(d.value.headers);return i&&S||f.delete(x.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||f.get("Cache-Control")||f.set("Cache-Control",(0,R.getCacheControlHeader)(d.cacheControl)),await (0,c.sendResponse)(B,G,new Response(d.value.body,{headers:f,status:d.value.status||200})),null};F?await l(F):await $.withPropagatedContext(e.headers,()=>$.trace(d.BaseServerSpan.handleRequest,{spanName:`${M} ${g}`,kind:s.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},l))}catch(t){if(t instanceof f.NoFallbackError||await m.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:P})},!1,k),S)throw t;return await (0,c.sendResponse)(B,G,new Response(null,{status:500})),null}}e.s(["handler",()=>T,"patchFetch",()=>b,"routeModule",()=>m,"serverHooks",()=>A,"workAsyncStorage",()=>C,"workUnitAsyncStorage",()=>y],23520)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__18a58c5f._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},18167,e=>{"use strict";var t=e.i(62562),r=e.i(14747);let s=null,n=!1;function a(){if(!n){for(let e of function(){let e=[r.default.join(process.cwd(),"package.json")];for(let t of(process.env.NODE_PATH||"").split(r.default.delimiter))t&&e.push(r.default.join(t,"_anchor.js"));return e}())try{s=(0,t.createRequire)(e)("@spaces/pro");break}catch{}n=!0}return s}e.s(["getPro",()=>a])},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},15286,e=>{"use strict";var t=e.i(14747),r=e.i(22734),s=e.i(46786),n=e.i(54799),a=e.i(17516),i=e.i(99944);function o(e){let r=e;if(a.HAS_MULTIUSER)try{let t=(0,i.getTeams)();t&&(r=t.admin.resolveShellUser(e))}catch{}let n=r===s.default.userInfo().username?s.default.homedir():`/home/${r}`,o=r===s.default.userInfo().username?t.default.join(s.default.homedir(),".spaces"):t.default.join(s.default.homedir(),".spaces","users",e);return{claudeDir:t.default.join(n,".claude"),claudeProjectsDir:t.default.join(n,".claude","projects"),statsPath:t.default.join(n,".claude","stats-cache.json"),codexDir:t.default.join(n,".codex"),codexSessionsDir:t.default.join(n,".codex","sessions"),geminiDir:t.default.join(n,".gemini"),geminiChatsBaseDir:t.default.join(n,".gemini","tmp"),geminiProjectsRegistry:t.default.join(n,".gemini","projects.json"),spacesDir:o,dbPath:t.default.join(o,"spaces.db"),configPath:t.default.join(o,"config.json")}}function l(e){let{spacesDir:t}=o(e);r.default.existsSync(t)||r.default.mkdirSync(t,{recursive:!0})}function d(e){let{configPath:t,spacesDir:s}=o(e);try{if(r.default.existsSync(t)){let e=JSON.parse(r.default.readFileSync(t,"utf-8"));return{installId:e.installId||n.default.randomUUID(),telemetryOptOut:!!e.telemetryOptOut,devDirectories:Array.isArray(e.devDirectories)?e.devDirectories.filter(e=>"string"==typeof e):[]}}}catch{}r.default.existsSync(s)||r.default.mkdirSync(s,{recursive:!0});let a={installId:n.default.randomUUID(),telemetryOptOut:!1,devDirectories:[]};return r.default.writeFileSync(t,JSON.stringify(a,null,2)),a}function c(e,t){let s={...d(e),...t},{configPath:n}=o(e);return r.default.writeFileSync(n,JSON.stringify(s,null,2)),s}parseInt(process.env.SPACES_PORT||"3457",10),e.s(["ensureUserSpacesDir",()=>l,"getUserPaths",()=>o,"readConfig",()=>d,"writeConfig",()=>c])},10430,(e,t,r)=>{t.exports=e.x("async_hooks",()=>require("async_hooks"))},79832,e=>{"use strict";var t=e.i(10430),r=e.i(46786),s=e.i(17516);let n=new t.AsyncLocalStorage;function a(e){return s.HAS_AUTH&&e.headers.get("x-auth-user")||r.default.userInfo().username}function i(e,t){return n.run(e,t)}function o(){let e=n.getStore();return e||r.default.userInfo().username}e.s(["getAuthUser",()=>a,"getCurrentUser",()=>o,"withUser",()=>i])},62562,(e,t,r)=>{t.exports=e.x("module",()=>require("module"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},99944,e=>{"use strict";var t=e.i(62562),r=e.i(14747);let s=null,n=!1;function a(){if(!n){for(let e of function(){let e=[r.default.join(process.cwd(),"package.json")];for(let t of(process.env.NODE_PATH||"").split(r.default.delimiter))t&&e.push(r.default.join(t,"_anchor.js"));return e}())try{s=(0,t.createRequire)(e)("@spaces/teams");break}catch{}n=!0}return s}function i(){return null!==a()}e.s(["getTeams",()=>a,"hasTeams",()=>i])},4730,e=>{e.v({name:"@jlongo78/agent-spaces",version:"0.5.2",description:"Agent workspace manager for Claude, Codex, Gemini, and more",bin:{spaces:"./bin/spaces.js"},files:["bin/",".next/standalone/"],engines:{node:">=20.9.0"},repository:{type:"git",url:"git+https://github.com/jlongo78/spaces.git"},keywords:["ai","agent","workspace","terminal","claude","codex","gemini"],homepage:"http://www.agentspaces.co",license:"AGPL-3.0-only",scripts:{start:"node bin/spaces.js",dev:"node bin/spaces-dev.js",build:"cross-env STANDALONE=1 next build && node -e \"const fs=require('fs');fs.cpSync('.next/static','.next/standalone/.next/static',{recursive:true});fs.cpSync('public','.next/standalone/public',{recursive:true})\" && node bin/fix-standalone-externals.js",prepublishOnly:"npm run build",setup:"node bin/spaces-setup.js","setup-admin":"node bin/setup-admin.js","server:build":"next build","server:start":"next start --port 3457",lint:"eslint"},dependencies:{"@modelcontextprotocol/sdk":"^1.27.1","better-sqlite3":"^12.6.2","bonjour-service":"^1.3.0","node-pty":"^1.1.0",ws:"^8.19.0"},devDependencies:{"@tailwindcss/postcss":"^4","@tanstack/react-query":"^5.90.21","@types/better-sqlite3":"^7.6.13","@types/node":"^20","@types/qrcode":"^1.5.6","@types/react":"^19","@types/react-dom":"^19","@types/ws":"^8.18.1","@xterm/addon-fit":"^0.11.0","@xterm/addon-web-links":"^0.12.0",chokidar:"^5.0.0","class-variance-authority":"^0.7.1",clsx:"^2.1.1","cross-env":"^10.1.0","date-fns":"^4.1.0",eslint:"^9","eslint-config-next":"16.1.6",geist:"^1.4.1","lucide-react":"^0.575.0",next:"16.1.6",otpauth:"^9.5.0","posthog-js":"^1.352.0","posthog-node":"^5.21.2",qrcode:"^1.5.4",react:"19.2.3","react-dom":"19.2.3","react-markdown":"^10.1.0",recharts:"^3.7.0","rehype-highlight":"^7.0.2","remark-gfm":"^4.0.1","tailwind-merge":"^3.5.0",tailwindcss:"^4",typescript:"^5",xterm:"^5.3.0"},optionalDependencies:{"@types/qrcode":"^1.5.6",otpauth:"^9.5.0",qrcode:"^1.5.4"}})},17516,e=>{"use strict";let t=process.env.SPACES_TIER||process.env.NEXT_PUBLIC_TIER||("server"===process.env.NEXT_PUBLIC_EDITION?"federation":"community"),r="team"===t||"federation"===t,s="federation"===t,n=!r;function a(){let a="0.0.0";try{a=e.r(4730).version}catch{}return{tier:t,version:a,hasAuth:r,hasAdmin:r,hasCollaboration:r,hasNetwork:s,hasMultiuser:r,isDesktop:n,basePath:""}}e.s(["HAS_AUTH",0,r,"HAS_MULTIUSER",0,r,"getTierFlags",()=>a])},46786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},65836,e=>{"use strict";var t=e.i(7304),r=e.i(60569),s=e.i(79832),n=e.i(99944);let a=new Set,i=new Set,o=!1;async function l(){let l=(0,s.getCurrentUser)();if(!a.has(l)){if((0,t.getDb)(),a.add(l),!o){o=!0;let r=(0,n.getTeams)();if(r){let{sseManager:s}=await e.A(72354);r.init({getDb:t.getDb,sseManager:s})}}if(!i.has(l)){i.add(l);try{let e=await (0,r.fullSync)();console.log(`[spaces:${l}] Synced ${e.projects} projects, ${e.sessions} sessions`);let t=await (0,r.enrichMissingSessions)();t>0&&console.log(`[spaces:${l}] Enriched ${t} sessions from JSONL`),(0,r.buildFtsIndex)((e,t)=>{e%10==0&&console.log(`[spaces:${l}] FTS indexing: ${e}/${t}`)}).then(e=>{e>0&&console.log(`[spaces:${l}] FTS indexed ${e} sessions`)}).catch(e=>{console.error(`[spaces:${l}] FTS indexing error:`,e)})}catch(e){console.error(`[spaces:${l}] Sync error:`,e)}finally{i.delete(l)}}}}e.s(["ensureInitialized",()=>l])},86100,e=>{"use strict";var t=e.i(47909),r=e.i(74017),s=e.i(96250),n=e.i(59756),a=e.i(61916),i=e.i(74677),o=e.i(69741),l=e.i(16795),d=e.i(87718),c=e.i(95169),u=e.i(47587),p=e.i(66012),f=e.i(70101),h=e.i(74838),g=e.i(10372),x=e.i(93695);e.i(52474);var m=e.i(220),v=e.i(89171),y=e.i(79832),w=e.i(65836),R=e.i(50837),j=e.i(18167);async function S(e){let t=(0,y.getAuthUser)(e);return(0,y.withUser)(t,async()=>{await (0,w.ensureInitialized)();let{searchParams:t}=e.nextUrl,r={projectId:t.get("projectId")||void 0,projectPath:t.get("projectPath")||void 0,starred:t.has("starred")?"true"===t.get("starred"):void 0,tagId:t.has("tagId")?parseInt(t.get("tagId"),10):void 0,search:t.get("search")||void 0,agentType:t.get("agentType")||void 0,sortBy:t.get("sortBy")||"modified",sortDir:t.get("sortDir")||"DESC",offset:parseInt(t.get("offset")||"0",10),limit:parseInt(t.get("limit")||"50",10)},s=(0,R.getSessions)(r);if("all"===(t.get("nodes")||"").replace(/\/+$/,""))try{let{aggregateSessions:e}=(0,j.getPro)().network,t={};r.search&&(t.search=r.search),t.sortBy=r.sortBy,t.sortDir=r.sortDir,t.limit=String(r.limit);let n=await e(s,t);for(let e of n.sessions)e.nodeId&&(e.workspaces=(0,R.getWorkspacesForSession)(e.id),e.tags||(e.tags=[]));return v.NextResponse.json({sessions:n.sessions,total:n.total,errors:n.errors})}catch{}return v.NextResponse.json(s)})}e.s(["GET",()=>S],72626);var b=e.i(72626);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/sessions/route",pathname:"/api/sessions",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/sessions/route.ts",nextConfigOutput:"standalone",userland:b}),{workAsyncStorage:A,workUnitAsyncStorage:C,serverHooks:T}=E;function I(){return(0,s.patchFetch)({workAsyncStorage:A,workUnitAsyncStorage:C})}async function k(e,t,s){E.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/sessions/route";v=v.replace(/\/index$/,"")||"/";let y=await E.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:w,params:R,nextConfig:j,parsedUrl:S,isDraftMode:b,prerenderManifest:A,routerServerContext:C,isOnDemandRevalidate:T,revalidateOnlyGenerated:I,resolvedPathname:k,clientReferenceManifest:P,serverActionsManifest:_}=y,D=(0,o.normalizeAppPath)(v),U=!!(A.dynamicRoutes[D]||A.routes[k]),N=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,S,!1):t.end("This page could not be found"),null);if(U&&!b){let e=!!A.routes[k],t=A.dynamicRoutes[D];if(t&&!1===t.fallback&&!e){if(j.experimental.adapterPath)return await N();throw new x.NoFallbackError}}let O=null;!U||E.isDev||b||(O="/index"===(O=k)?"/":O);let q=!0===E.isDev||!U,H=U&&!q;_&&P&&(0,i.setManifestsSingleton)({page:v,clientReferenceManifest:P,serverActionsManifest:_});let $=e.method||"GET",F=(0,a.getTracer)(),M=F.getActiveScopeSpan(),L={params:R,prerenderManifest:A,renderOpts:{experimental:{authInterrupts:!!j.experimental.authInterrupts},cacheComponents:!!j.cacheComponents,supportsDynamicResponse:q,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:j.cacheLife,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,n)=>E.onRequestError(e,t,s,n,C)},sharedContext:{buildId:w}},B=new l.NodeNextRequest(e),K=new l.NodeNextResponse(t),G=d.NextRequestAdapter.fromNodeNextRequest(B,(0,d.signalFromNodeResponse)(t));try{let i=async e=>E.handle(G,L).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route");if(s){let t=`${$} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t)}else e.updateName(`${$} ${v}`)}),o=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var a,l;let d=async({previousCacheEntry:r})=>{try{if(!o&&T&&I&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await i(n);e.fetchMetrics=L.renderOpts.fetchMetrics;let l=L.renderOpts.pendingWaitUntil;l&&s.waitUntil&&(s.waitUntil(l),l=void 0);let d=L.renderOpts.collectedTags;if(!U)return await (0,p.sendResponse)(B,K,a,L.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(a.headers);d&&(t[g.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==L.renderOpts.collectedRevalidate&&!(L.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&L.renderOpts.collectedRevalidate,s=void 0===L.renderOpts.collectedExpire||L.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:L.renderOpts.collectedExpire;return{value:{kind:m.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:T})},!1,C),t}},c=await E.handleResponse({req:e,nextConfig:j,cacheKey:O,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:I,responseGenerator:d,waitUntil:s.waitUntil,isMinimalMode:o});if(!U)return null;if((null==c||null==(a=c.value)?void 0:a.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(l=c.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});o||t.setHeader("x-nextjs-cache",T?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let x=(0,f.fromNodeOutgoingHttpHeaders)(c.value.headers);return o&&U||x.delete(g.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||x.get("Cache-Control")||x.set("Cache-Control",(0,h.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(B,K,new Response(c.value.body,{headers:x,status:c.value.status||200})),null};M?await l(M):await F.withPropagatedContext(e.headers,()=>F.trace(c.BaseServerSpan.handleRequest,{spanName:`${$} ${v}`,kind:a.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},l))}catch(t){if(t instanceof x.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:T})},!1,C),U)throw t;return await (0,p.sendResponse)(B,K,new Response(null,{status:500})),null}}e.s(["handler",()=>k,"patchFetch",()=>I,"routeModule",()=>E,"serverHooks",()=>T,"workAsyncStorage",()=>A,"workUnitAsyncStorage",()=>C],86100)},72354,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_events_sse_ts_1ad73980._.js"].map(t=>e.l(t))).then(()=>t(20776)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__20353b76._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},15286,e=>{"use strict";var t=e.i(14747),r=e.i(22734),s=e.i(46786),n=e.i(54799),a=e.i(17516),i=e.i(99944);function o(e){let r=e;if(a.HAS_MULTIUSER)try{let t=(0,i.getTeams)();t&&(r=t.admin.resolveShellUser(e))}catch{}let n=r===s.default.userInfo().username?s.default.homedir():`/home/${r}`,o=r===s.default.userInfo().username?t.default.join(s.default.homedir(),".spaces"):t.default.join(s.default.homedir(),".spaces","users",e);return{claudeDir:t.default.join(n,".claude"),claudeProjectsDir:t.default.join(n,".claude","projects"),statsPath:t.default.join(n,".claude","stats-cache.json"),codexDir:t.default.join(n,".codex"),codexSessionsDir:t.default.join(n,".codex","sessions"),geminiDir:t.default.join(n,".gemini"),geminiChatsBaseDir:t.default.join(n,".gemini","tmp"),geminiProjectsRegistry:t.default.join(n,".gemini","projects.json"),spacesDir:o,dbPath:t.default.join(o,"spaces.db"),configPath:t.default.join(o,"config.json")}}function l(e){let{spacesDir:t}=o(e);r.default.existsSync(t)||r.default.mkdirSync(t,{recursive:!0})}function d(e){let{configPath:t,spacesDir:s}=o(e);try{if(r.default.existsSync(t)){let e=JSON.parse(r.default.readFileSync(t,"utf-8"));return{installId:e.installId||n.default.randomUUID(),telemetryOptOut:!!e.telemetryOptOut,devDirectories:Array.isArray(e.devDirectories)?e.devDirectories.filter(e=>"string"==typeof e):[]}}}catch{}r.default.existsSync(s)||r.default.mkdirSync(s,{recursive:!0});let a={installId:n.default.randomUUID(),telemetryOptOut:!1,devDirectories:[]};return r.default.writeFileSync(t,JSON.stringify(a,null,2)),a}function c(e,t){let s={...d(e),...t},{configPath:n}=o(e);return r.default.writeFileSync(n,JSON.stringify(s,null,2)),s}parseInt(process.env.SPACES_PORT||"3457",10),e.s(["ensureUserSpacesDir",()=>l,"getUserPaths",()=>o,"readConfig",()=>d,"writeConfig",()=>c])},10430,(e,t,r)=>{t.exports=e.x("async_hooks",()=>require("async_hooks"))},79832,e=>{"use strict";var t=e.i(10430),r=e.i(46786),s=e.i(17516);let n=new t.AsyncLocalStorage;function a(e){return s.HAS_AUTH&&e.headers.get("x-auth-user")||r.default.userInfo().username}function i(e,t){return n.run(e,t)}function o(){let e=n.getStore();return e||r.default.userInfo().username}e.s(["getAuthUser",()=>a,"getCurrentUser",()=>o,"withUser",()=>i])},62562,(e,t,r)=>{t.exports=e.x("module",()=>require("module"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},99944,e=>{"use strict";var t=e.i(62562),r=e.i(14747);let s=null,n=!1;function a(){if(!n){for(let e of function(){let e=[r.default.join(process.cwd(),"package.json")];for(let t of(process.env.NODE_PATH||"").split(r.default.delimiter))t&&e.push(r.default.join(t,"_anchor.js"));return e}())try{s=(0,t.createRequire)(e)("@spaces/teams");break}catch{}n=!0}return s}function i(){return null!==a()}e.s(["getTeams",()=>a,"hasTeams",()=>i])},4730,e=>{e.v({name:"@jlongo78/agent-spaces",version:"0.5.2",description:"Agent workspace manager for Claude, Codex, Gemini, and more",bin:{spaces:"./bin/spaces.js"},files:["bin/",".next/standalone/"],engines:{node:">=20.9.0"},repository:{type:"git",url:"git+https://github.com/jlongo78/spaces.git"},keywords:["ai","agent","workspace","terminal","claude","codex","gemini"],homepage:"http://www.agentspaces.co",license:"AGPL-3.0-only",scripts:{start:"node bin/spaces.js",dev:"node bin/spaces-dev.js",build:"cross-env STANDALONE=1 next build && node -e \"const fs=require('fs');fs.cpSync('.next/static','.next/standalone/.next/static',{recursive:true});fs.cpSync('public','.next/standalone/public',{recursive:true})\" && node bin/fix-standalone-externals.js",prepublishOnly:"npm run build",setup:"node bin/spaces-setup.js","setup-admin":"node bin/setup-admin.js","server:build":"next build","server:start":"next start --port 3457",lint:"eslint"},dependencies:{"@modelcontextprotocol/sdk":"^1.27.1","better-sqlite3":"^12.6.2","bonjour-service":"^1.3.0","node-pty":"^1.1.0",ws:"^8.19.0"},devDependencies:{"@tailwindcss/postcss":"^4","@tanstack/react-query":"^5.90.21","@types/better-sqlite3":"^7.6.13","@types/node":"^20","@types/qrcode":"^1.5.6","@types/react":"^19","@types/react-dom":"^19","@types/ws":"^8.18.1","@xterm/addon-fit":"^0.11.0","@xterm/addon-web-links":"^0.12.0",chokidar:"^5.0.0","class-variance-authority":"^0.7.1",clsx:"^2.1.1","cross-env":"^10.1.0","date-fns":"^4.1.0",eslint:"^9","eslint-config-next":"16.1.6",geist:"^1.4.1","lucide-react":"^0.575.0",next:"16.1.6",otpauth:"^9.5.0","posthog-js":"^1.352.0","posthog-node":"^5.21.2",qrcode:"^1.5.4",react:"19.2.3","react-dom":"19.2.3","react-markdown":"^10.1.0",recharts:"^3.7.0","rehype-highlight":"^7.0.2","remark-gfm":"^4.0.1","tailwind-merge":"^3.5.0",tailwindcss:"^4",typescript:"^5",xterm:"^5.3.0"},optionalDependencies:{"@types/qrcode":"^1.5.6",otpauth:"^9.5.0",qrcode:"^1.5.4"}})},17516,e=>{"use strict";let t=process.env.SPACES_TIER||process.env.NEXT_PUBLIC_TIER||("server"===process.env.NEXT_PUBLIC_EDITION?"federation":"community"),r="team"===t||"federation"===t,s="federation"===t,n=!r;function a(){let a="0.0.0";try{a=e.r(4730).version}catch{}return{tier:t,version:a,hasAuth:r,hasAdmin:r,hasCollaboration:r,hasNetwork:s,hasMultiuser:r,isDesktop:n,basePath:""}}e.s(["HAS_AUTH",0,r,"HAS_MULTIUSER",0,r,"getTierFlags",()=>a])},46786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},65836,e=>{"use strict";var t=e.i(7304),r=e.i(60569),s=e.i(79832),n=e.i(99944);let a=new Set,i=new Set,o=!1;async function l(){let l=(0,s.getCurrentUser)();if(!a.has(l)){if((0,t.getDb)(),a.add(l),!o){o=!0;let r=(0,n.getTeams)();if(r){let{sseManager:s}=await e.A(72354);r.init({getDb:t.getDb,sseManager:s})}}if(!i.has(l)){i.add(l);try{let e=await (0,r.fullSync)();console.log(`[spaces:${l}] Synced ${e.projects} projects, ${e.sessions} sessions`);let t=await (0,r.enrichMissingSessions)();t>0&&console.log(`[spaces:${l}] Enriched ${t} sessions from JSONL`),(0,r.buildFtsIndex)((e,t)=>{e%10==0&&console.log(`[spaces:${l}] FTS indexing: ${e}/${t}`)}).then(e=>{e>0&&console.log(`[spaces:${l}] FTS indexed ${e} sessions`)}).catch(e=>{console.error(`[spaces:${l}] FTS indexing error:`,e)})}catch(e){console.error(`[spaces:${l}] Sync error:`,e)}finally{i.delete(l)}}}}e.s(["ensureInitialized",()=>l])},66009,e=>{"use strict";var t=e.i(47909),r=e.i(74017),s=e.i(96250),n=e.i(59756),a=e.i(61916),i=e.i(74677),o=e.i(69741),l=e.i(16795),d=e.i(87718),c=e.i(95169),u=e.i(47587),p=e.i(66012),f=e.i(70101),h=e.i(74838),g=e.i(10372),m=e.i(93695);e.i(52474);var x=e.i(220),y=e.i(89171),v=e.i(79832),w=e.i(65836),R=e.i(50837);async function S(e){let t=(0,v.getAuthUser)(e);return(0,v.withUser)(t,async()=>(await (0,w.ensureInitialized)(),y.NextResponse.json((0,R.getActivePanes)())))}async function b(t){let r=(0,v.getAuthUser)(t);return(0,v.withUser)(r,async()=>{await (0,w.ensureInitialized)();let r=await t.json(),s=(0,R.createPane)({id:r.id||crypto.randomUUID(),title:r.title||"Terminal",color:r.color||"#6366f1",cwd:r.cwd||e.r(46786).homedir(),claudeSessionId:r.claudeSessionId,agentType:r.agentType||"shell",customCommand:r.customCommand,sortOrder:r.sortOrder,workspaceId:r.workspaceId,nodeId:r.nodeId,isCollaborating:r.isCollaborating});return y.NextResponse.json(s)})}e.s(["GET",()=>S,"POST",()=>b],23756);var j=e.i(23756);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/panes/route",pathname:"/api/panes",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/panes/route.ts",nextConfigOutput:"standalone",userland:j}),{workAsyncStorage:A,workUnitAsyncStorage:C,serverHooks:T}=E;function I(){return(0,s.patchFetch)({workAsyncStorage:A,workUnitAsyncStorage:C})}async function k(e,t,s){E.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/panes/route";y=y.replace(/\/index$/,"")||"/";let v=await E.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:w,params:R,nextConfig:S,parsedUrl:b,isDraftMode:j,prerenderManifest:A,routerServerContext:C,isOnDemandRevalidate:T,revalidateOnlyGenerated:I,resolvedPathname:k,clientReferenceManifest:P,serverActionsManifest:U}=v,_=(0,o.normalizeAppPath)(y),O=!!(A.dynamicRoutes[_]||A.routes[k]),D=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,b,!1):t.end("This page could not be found"),null);if(O&&!j){let e=!!A.routes[k],t=A.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(S.experimental.adapterPath)return await D();throw new m.NoFallbackError}}let N=null;!O||E.isDev||j||(N="/index"===(N=k)?"/":N);let q=!0===E.isDev||!O,H=O&&!q;U&&P&&(0,i.setManifestsSingleton)({page:y,clientReferenceManifest:P,serverActionsManifest:U});let $=e.method||"GET",F=(0,a.getTracer)(),M=F.getActiveScopeSpan(),L={params:R,prerenderManifest:A,renderOpts:{experimental:{authInterrupts:!!S.experimental.authInterrupts},cacheComponents:!!S.cacheComponents,supportsDynamicResponse:q,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:S.cacheLife,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,n)=>E.onRequestError(e,t,s,n,C)},sharedContext:{buildId:w}},B=new l.NodeNextRequest(e),K=new l.NodeNextResponse(t),G=d.NextRequestAdapter.fromNodeNextRequest(B,(0,d.signalFromNodeResponse)(t));try{let i=async e=>E.handle(G,L).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route");if(s){let t=`${$} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t)}else e.updateName(`${$} ${y}`)}),o=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var a,l;let d=async({previousCacheEntry:r})=>{try{if(!o&&T&&I&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await i(n);e.fetchMetrics=L.renderOpts.fetchMetrics;let l=L.renderOpts.pendingWaitUntil;l&&s.waitUntil&&(s.waitUntil(l),l=void 0);let d=L.renderOpts.collectedTags;if(!O)return await (0,p.sendResponse)(B,K,a,L.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(a.headers);d&&(t[g.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==L.renderOpts.collectedRevalidate&&!(L.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&L.renderOpts.collectedRevalidate,s=void 0===L.renderOpts.collectedExpire||L.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:L.renderOpts.collectedExpire;return{value:{kind:x.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:T})},!1,C),t}},c=await E.handleResponse({req:e,nextConfig:S,cacheKey:N,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:I,responseGenerator:d,waitUntil:s.waitUntil,isMinimalMode:o});if(!O)return null;if((null==c||null==(a=c.value)?void 0:a.kind)!==x.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(l=c.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});o||t.setHeader("x-nextjs-cache",T?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),j&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,f.fromNodeOutgoingHttpHeaders)(c.value.headers);return o&&O||m.delete(g.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,h.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(B,K,new Response(c.value.body,{headers:m,status:c.value.status||200})),null};M?await l(M):await F.withPropagatedContext(e.headers,()=>F.trace(c.BaseServerSpan.handleRequest,{spanName:`${$} ${y}`,kind:a.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},l))}catch(t){if(t instanceof m.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:T})},!1,C),O)throw t;return await (0,p.sendResponse)(B,K,new Response(null,{status:500})),null}}e.s(["handler",()=>k,"patchFetch",()=>I,"routeModule",()=>E,"serverHooks",()=>T,"workAsyncStorage",()=>A,"workUnitAsyncStorage",()=>C],66009)},72354,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_events_sse_ts_1ad73980._.js"].map(t=>e.l(t))).then(()=>t(20776)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__2b6758fc._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},15286,e=>{"use strict";var t=e.i(14747),r=e.i(22734),s=e.i(46786),n=e.i(54799),a=e.i(17516),i=e.i(99944);function o(e){let r=e;if(a.HAS_MULTIUSER)try{let t=(0,i.getTeams)();t&&(r=t.admin.resolveShellUser(e))}catch{}let n=r===s.default.userInfo().username?s.default.homedir():`/home/${r}`,o=r===s.default.userInfo().username?t.default.join(s.default.homedir(),".spaces"):t.default.join(s.default.homedir(),".spaces","users",e);return{claudeDir:t.default.join(n,".claude"),claudeProjectsDir:t.default.join(n,".claude","projects"),statsPath:t.default.join(n,".claude","stats-cache.json"),codexDir:t.default.join(n,".codex"),codexSessionsDir:t.default.join(n,".codex","sessions"),geminiDir:t.default.join(n,".gemini"),geminiChatsBaseDir:t.default.join(n,".gemini","tmp"),geminiProjectsRegistry:t.default.join(n,".gemini","projects.json"),spacesDir:o,dbPath:t.default.join(o,"spaces.db"),configPath:t.default.join(o,"config.json")}}function l(e){let{spacesDir:t}=o(e);r.default.existsSync(t)||r.default.mkdirSync(t,{recursive:!0})}function u(e){let{configPath:t,spacesDir:s}=o(e);try{if(r.default.existsSync(t)){let e=JSON.parse(r.default.readFileSync(t,"utf-8"));return{installId:e.installId||n.default.randomUUID(),telemetryOptOut:!!e.telemetryOptOut,devDirectories:Array.isArray(e.devDirectories)?e.devDirectories.filter(e=>"string"==typeof e):[]}}}catch{}r.default.existsSync(s)||r.default.mkdirSync(s,{recursive:!0});let a={installId:n.default.randomUUID(),telemetryOptOut:!1,devDirectories:[]};return r.default.writeFileSync(t,JSON.stringify(a,null,2)),a}function d(e,t){let s={...u(e),...t},{configPath:n}=o(e);return r.default.writeFileSync(n,JSON.stringify(s,null,2)),s}parseInt(process.env.SPACES_PORT||"3457",10),e.s(["ensureUserSpacesDir",()=>l,"getUserPaths",()=>o,"readConfig",()=>u,"writeConfig",()=>d])},10430,(e,t,r)=>{t.exports=e.x("async_hooks",()=>require("async_hooks"))},79832,e=>{"use strict";var t=e.i(10430),r=e.i(46786),s=e.i(17516);let n=new t.AsyncLocalStorage;function a(e){return s.HAS_AUTH&&e.headers.get("x-auth-user")||r.default.userInfo().username}function i(e,t){return n.run(e,t)}function o(){let e=n.getStore();return e||r.default.userInfo().username}e.s(["getAuthUser",()=>a,"getCurrentUser",()=>o,"withUser",()=>i])},62562,(e,t,r)=>{t.exports=e.x("module",()=>require("module"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},99944,e=>{"use strict";var t=e.i(62562),r=e.i(14747);let s=null,n=!1;function a(){if(!n){for(let e of function(){let e=[r.default.join(process.cwd(),"package.json")];for(let t of(process.env.NODE_PATH||"").split(r.default.delimiter))t&&e.push(r.default.join(t,"_anchor.js"));return e}())try{s=(0,t.createRequire)(e)("@spaces/teams");break}catch{}n=!0}return s}function i(){return null!==a()}e.s(["getTeams",()=>a,"hasTeams",()=>i])},4730,e=>{e.v({name:"@jlongo78/agent-spaces",version:"0.5.2",description:"Agent workspace manager for Claude, Codex, Gemini, and more",bin:{spaces:"./bin/spaces.js"},files:["bin/",".next/standalone/"],engines:{node:">=20.9.0"},repository:{type:"git",url:"git+https://github.com/jlongo78/spaces.git"},keywords:["ai","agent","workspace","terminal","claude","codex","gemini"],homepage:"http://www.agentspaces.co",license:"AGPL-3.0-only",scripts:{start:"node bin/spaces.js",dev:"node bin/spaces-dev.js",build:"cross-env STANDALONE=1 next build && node -e \"const fs=require('fs');fs.cpSync('.next/static','.next/standalone/.next/static',{recursive:true});fs.cpSync('public','.next/standalone/public',{recursive:true})\" && node bin/fix-standalone-externals.js",prepublishOnly:"npm run build",setup:"node bin/spaces-setup.js","setup-admin":"node bin/setup-admin.js","server:build":"next build","server:start":"next start --port 3457",lint:"eslint"},dependencies:{"@modelcontextprotocol/sdk":"^1.27.1","better-sqlite3":"^12.6.2","bonjour-service":"^1.3.0","node-pty":"^1.1.0",ws:"^8.19.0"},devDependencies:{"@tailwindcss/postcss":"^4","@tanstack/react-query":"^5.90.21","@types/better-sqlite3":"^7.6.13","@types/node":"^20","@types/qrcode":"^1.5.6","@types/react":"^19","@types/react-dom":"^19","@types/ws":"^8.18.1","@xterm/addon-fit":"^0.11.0","@xterm/addon-web-links":"^0.12.0",chokidar:"^5.0.0","class-variance-authority":"^0.7.1",clsx:"^2.1.1","cross-env":"^10.1.0","date-fns":"^4.1.0",eslint:"^9","eslint-config-next":"16.1.6",geist:"^1.4.1","lucide-react":"^0.575.0",next:"16.1.6",otpauth:"^9.5.0","posthog-js":"^1.352.0","posthog-node":"^5.21.2",qrcode:"^1.5.4",react:"19.2.3","react-dom":"19.2.3","react-markdown":"^10.1.0",recharts:"^3.7.0","rehype-highlight":"^7.0.2","remark-gfm":"^4.0.1","tailwind-merge":"^3.5.0",tailwindcss:"^4",typescript:"^5",xterm:"^5.3.0"},optionalDependencies:{"@types/qrcode":"^1.5.6",otpauth:"^9.5.0",qrcode:"^1.5.4"}})},17516,e=>{"use strict";let t=process.env.SPACES_TIER||process.env.NEXT_PUBLIC_TIER||("server"===process.env.NEXT_PUBLIC_EDITION?"federation":"community"),r="team"===t||"federation"===t,s="federation"===t,n=!r;function a(){let a="0.0.0";try{a=e.r(4730).version}catch{}return{tier:t,version:a,hasAuth:r,hasAdmin:r,hasCollaboration:r,hasNetwork:s,hasMultiuser:r,isDesktop:n,basePath:""}}e.s(["HAS_AUTH",0,r,"HAS_MULTIUSER",0,r,"getTierFlags",()=>a])},46786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},65836,e=>{"use strict";var t=e.i(7304),r=e.i(60569),s=e.i(79832),n=e.i(99944);let a=new Set,i=new Set,o=!1;async function l(){let l=(0,s.getCurrentUser)();if(!a.has(l)){if((0,t.getDb)(),a.add(l),!o){o=!0;let r=(0,n.getTeams)();if(r){let{sseManager:s}=await e.A(72354);r.init({getDb:t.getDb,sseManager:s})}}if(!i.has(l)){i.add(l);try{let e=await (0,r.fullSync)();console.log(`[spaces:${l}] Synced ${e.projects} projects, ${e.sessions} sessions`);let t=await (0,r.enrichMissingSessions)();t>0&&console.log(`[spaces:${l}] Enriched ${t} sessions from JSONL`),(0,r.buildFtsIndex)((e,t)=>{e%10==0&&console.log(`[spaces:${l}] FTS indexing: ${e}/${t}`)}).then(e=>{e>0&&console.log(`[spaces:${l}] FTS indexed ${e} sessions`)}).catch(e=>{console.error(`[spaces:${l}] FTS indexing error:`,e)})}catch(e){console.error(`[spaces:${l}] Sync error:`,e)}finally{i.delete(l)}}}}e.s(["ensureInitialized",()=>l])},96823,e=>{"use strict";var t=e.i(47909),r=e.i(74017),s=e.i(96250),n=e.i(59756),a=e.i(61916),i=e.i(74677),o=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),c=e.i(47587),p=e.i(66012),f=e.i(70101),h=e.i(74838),g=e.i(10372),x=e.i(93695);e.i(52474);var m=e.i(220),y=e.i(89171),v=e.i(79832),w=e.i(65836),R=e.i(50837);async function j(e,{params:t}){let r=(0,v.getAuthUser)(e);return(0,v.withUser)(r,async()=>{await (0,w.ensureInitialized)();let{id:e}=await t,r=(0,R.getPaneById)(e);return r?y.NextResponse.json(r):y.NextResponse.json({error:"Not found"},{status:404})})}async function S(e,{params:t}){let r=(0,v.getAuthUser)(e);return(0,v.withUser)(r,async()=>{await (0,w.ensureInitialized)();let{id:r}=await t,s=await e.json();return(0,R.updatePane)(r,s),y.NextResponse.json({success:!0})})}async function b(e,{params:t}){let r=(0,v.getAuthUser)(e);return(0,v.withUser)(r,async()=>{await (0,w.ensureInitialized)();let{id:r}=await t,s=await e.json();return(0,R.updatePane)(r,s),y.NextResponse.json({success:!0})})}async function E(e,{params:t}){let r=(0,v.getAuthUser)(e);return(0,v.withUser)(r,async()=>{await (0,w.ensureInitialized)();let{id:e}=await t;return(0,R.deletePane)(e),y.NextResponse.json({success:!0})})}e.s(["DELETE",()=>E,"GET",()=>j,"POST",()=>b,"PUT",()=>S],15629);var A=e.i(15629);let T=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/panes/[id]/route",pathname:"/api/panes/[id]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/panes/[id]/route.ts",nextConfigOutput:"standalone",userland:A}),{workAsyncStorage:C,workUnitAsyncStorage:P,serverHooks:U}=T;function I(){return(0,s.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:P})}async function N(e,t,s){T.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/panes/[id]/route";y=y.replace(/\/index$/,"")||"/";let v=await T.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:w,params:R,nextConfig:j,parsedUrl:S,isDraftMode:b,prerenderManifest:E,routerServerContext:A,isOnDemandRevalidate:C,revalidateOnlyGenerated:P,resolvedPathname:U,clientReferenceManifest:I,serverActionsManifest:N}=v,_=(0,o.normalizeAppPath)(y),k=!!(E.dynamicRoutes[_]||E.routes[U]),O=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,S,!1):t.end("This page could not be found"),null);if(k&&!b){let e=!!E.routes[U],t=E.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(j.experimental.adapterPath)return await O();throw new x.NoFallbackError}}let D=null;!k||T.isDev||b||(D="/index"===(D=U)?"/":D);let q=!0===T.isDev||!k,H=k&&!q;N&&I&&(0,i.setManifestsSingleton)({page:y,clientReferenceManifest:I,serverActionsManifest:N});let $=e.method||"GET",F=(0,a.getTracer)(),M=F.getActiveScopeSpan(),L={params:R,prerenderManifest:E,renderOpts:{experimental:{authInterrupts:!!j.experimental.authInterrupts},cacheComponents:!!j.cacheComponents,supportsDynamicResponse:q,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:j.cacheLife,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,n)=>T.onRequestError(e,t,s,n,A)},sharedContext:{buildId:w}},B=new l.NodeNextRequest(e),K=new l.NodeNextResponse(t),z=u.NextRequestAdapter.fromNodeNextRequest(B,(0,u.signalFromNodeResponse)(t));try{let i=async e=>T.handle(z,L).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route");if(s){let t=`${$} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t)}else e.updateName(`${$} ${y}`)}),o=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var a,l;let u=async({previousCacheEntry:r})=>{try{if(!o&&C&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await i(n);e.fetchMetrics=L.renderOpts.fetchMetrics;let l=L.renderOpts.pendingWaitUntil;l&&s.waitUntil&&(s.waitUntil(l),l=void 0);let u=L.renderOpts.collectedTags;if(!k)return await (0,p.sendResponse)(B,K,a,L.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(a.headers);u&&(t[g.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==L.renderOpts.collectedRevalidate&&!(L.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&L.renderOpts.collectedRevalidate,s=void 0===L.renderOpts.collectedExpire||L.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:L.renderOpts.collectedExpire;return{value:{kind:m.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await T.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:C})},!1,A),t}},d=await T.handleResponse({req:e,nextConfig:j,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:E,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:P,responseGenerator:u,waitUntil:s.waitUntil,isMinimalMode:o});if(!k)return null;if((null==d||null==(a=d.value)?void 0:a.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(l=d.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});o||t.setHeader("x-nextjs-cache",C?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let x=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return o&&k||x.delete(g.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||x.get("Cache-Control")||x.set("Cache-Control",(0,h.getCacheControlHeader)(d.cacheControl)),await (0,p.sendResponse)(B,K,new Response(d.value.body,{headers:x,status:d.value.status||200})),null};M?await l(M):await F.withPropagatedContext(e.headers,()=>F.trace(d.BaseServerSpan.handleRequest,{spanName:`${$} ${y}`,kind:a.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},l))}catch(t){if(t instanceof x.NoFallbackError||await T.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:C})},!1,A),k)throw t;return await (0,p.sendResponse)(B,K,new Response(null,{status:500})),null}}e.s(["handler",()=>N,"patchFetch",()=>I,"routeModule",()=>T,"serverHooks",()=>U,"workAsyncStorage",()=>C,"workUnitAsyncStorage",()=>P],96823)},72354,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_events_sse_ts_1ad73980._.js"].map(t=>e.l(t))).then(()=>t(20776)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__2e9d1d5a._.js.map
|