@jlongo78/agent-spaces 0.10.0-beta.2 → 0.10.0-beta.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/.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)/cortex/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 +2 -2
- package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/!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 +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/admin/users.html +1 -1
- package/.next/standalone/.next/server/app/admin/users.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/!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 +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/analytics.html +1 -1
- package/.next/standalone/.next/server/app/analytics.rsc +2 -2
- package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/api/admin/analytics/route.js +4 -2
- package/.next/standalone/.next/server/app/api/admin/analytics/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin/users/[id]/route.js +4 -2
- package/.next/standalone/.next/server/app/api/admin/users/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin/users/route.js +4 -2
- package/.next/standalone/.next/server/app/api/admin/users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/analytics/overview/route.js +5 -4
- package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login/route.js +3 -2
- package/.next/standalone/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route.js +2 -2
- package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route.js +3 -2
- package/.next/standalone/.next/server/app/api/auth/me/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/totp/setup/route.js +2 -2
- package/.next/standalone/.next/server/app/api/auth/totp/setup/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/totp/status/route.js +2 -2
- package/.next/standalone/.next/server/app/api/auth/totp/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/totp/verify/route.js +3 -2
- package/.next/standalone/.next/server/app/api/auth/totp/verify/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js +4 -3
- package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/benchmark/run/route.js +4 -3
- package/.next/standalone/.next/server/app/api/benchmark/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js +4 -3
- package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/benchmark/runs/route.js +4 -3
- package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/benchmark/status/route.js +4 -3
- package/.next/standalone/.next/server/app/api/benchmark/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bulk/route.js +5 -4
- package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/chat/route.js +4 -2
- package/.next/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/claude/usage/route.js +5 -4
- package/.next/standalone/.next/server/app/api/claude/usage/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/config/route.js +3 -3
- package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/context/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/context/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/export/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/export/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/import/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/import/status/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/import/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/lobes/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/lobes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js +3 -3
- package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js +3 -3
- package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/search/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/settings/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/settings/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/status/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/timeline/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/timeline/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/usage/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/usage/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js +5 -3
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/files/route.js +3 -2
- package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/folders/route.js +3 -3
- package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/connect-callback/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/connect-callback/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/connect-request/[id]/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/connect-request/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/connect-request/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/connect-request/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/discovered/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/discovered/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/handshake/route.js +4 -3
- package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/health/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/health/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/identity/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/identity/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/keys/[id]/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/keys/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/keys/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/keys/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/nodes/[id]/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/nodes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/nodes/check/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/nodes/check/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/nodes/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/nodes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/panes/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/panes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/projects/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/proxy/[nodeId]/[...path]/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/proxy/[nodeId]/[...path]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/search/route.js +6 -5
- 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 +6 -5
- 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 +6 -5
- 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 +6 -5
- package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/terminal/token/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/terminal/token/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js +6 -5
- 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 +6 -5
- package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js +5 -4
- package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/panes/[id]/route.js +5 -4
- 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 +5 -4
- package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/route.js +5 -4
- package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js +3 -3
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js +3 -3
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/search/route.js +6 -5
- package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/server-config/route.js +2 -2
- package/.next/standalone/.next/server/app/api/server-config/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js +5 -3
- 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 +5 -4
- 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 +5 -4
- 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 +6 -5
- package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sync/route.js +4 -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 +5 -4
- package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tier/route.js +4 -3
- package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/updates/route.js +2 -2
- package/.next/standalone/.next/server/app/api/updates/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/whisper/config/route.js +2 -2
- package/.next/standalone/.next/server/app/api/whisper/config/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/whisper/route.js +2 -2
- package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/wizard/chat/route.js +3 -3
- package/.next/standalone/.next/server/app/api/wizard/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js +5 -3
- 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 +5 -3
- 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 +5 -3
- 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 +5 -3
- 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 +5 -4
- 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 +5 -4
- package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js +5 -4
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js +5 -4
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/route.js +6 -5
- package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/cortex.html +1 -1
- package/.next/standalone/.next/server/app/cortex.rsc +2 -2
- package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/cortex.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/cortex.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/cortex.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/cortex.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/icon.png/route.js +2 -2
- package/.next/standalone/.next/server/app/icon.png/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 +2 -2
- package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/m.html +1 -1
- package/.next/standalone/.next/server/app/m.rsc +2 -2
- package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/network.html +1 -1
- package/.next/standalone/.next/server/app/network.rsc +2 -2
- package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/projects.html +1 -1
- package/.next/standalone/.next/server/app/projects.rsc +2 -2
- package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/sessions.html +1 -1
- package/.next/standalone/.next/server/app/sessions.rsc +2 -2
- package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/terminal.html +1 -1
- package/.next/standalone/.next/server/app/terminal.rsc +3 -3
- 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 +1 -1
- package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- package/.next/standalone/.next/server/app/vr/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/vr.html +1 -1
- package/.next/standalone/.next/server/app/vr.rsc +2 -2
- package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/vr.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/vr.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/vr.segments/vr.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.html +1 -1
- package/.next/standalone/.next/server/app/workspaces.rsc +2 -2
- package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cf5ebdb._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0f15af1e._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__107eab8a._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1094360c._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__118ea5e0._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__160e7c73._.js +5 -5
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__16d4da21._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1c542684._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f23bae4._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1faefa3e._.js +19 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2145098e._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2748c76c._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2c08d908._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2e29b4bd._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e3ecfd17._.js → [root-of-the-server]__34fd47d2._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__366b6cec._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4d51508f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5663673e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__57e0cc31._.js +133 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__57ebbe63._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d3345e4._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5ee7aa9d._.js +11 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__60caf825._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__65c9857f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__678f6823._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__685c95d8._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__41d4d426._.js → [root-of-the-server]__69568dc2._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6a0bc4ae._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6b876561._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6e89713c._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6f713737._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__725f10f4._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__785b0597._.js +38 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7c728bed._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7da958b5._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7daed406._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7f140e4b._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__80d826f7._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__83a3c97b._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__84c15a0e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__85c33341._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__88f3d920._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8c916e85._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8deb2ae3._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8df5a740._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8f238bd9._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__955ab668._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9a061e91._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a04a87d5._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a803051f._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac0a9b09._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac3e37b6._.js +13 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__96685488._.js → [root-of-the-server]__add9e50d._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b57f4274._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b84b3426._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba8224a1._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__bd1c1d0d._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c1442c38._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c18bdab2._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c1efc6a8._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c697b87e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c6dc43c6._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ccce7f4f._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d92f347c._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__dac9e21e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3f9ddbc._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e66fc05f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e7add82c._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fa9a5ec0._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ff9f6af0._.js +42 -0
- package/.next/standalone/.next/server/chunks/_0142f96b._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0ebd30d3._.js +3 -0
- package/.next/standalone/.next/server/chunks/_19a59078._.js +3 -0
- package/.next/standalone/.next/server/chunks/_1bc02021._.js +11 -0
- package/.next/standalone/.next/server/chunks/_1e381a28._.js +3 -0
- package/.next/standalone/.next/server/chunks/_2699eda7._.js +3 -0
- package/.next/standalone/.next/server/chunks/_2fd02f70._.js +3 -0
- package/.next/standalone/.next/server/chunks/_373d522f._.js +3 -0
- package/.next/standalone/.next/server/chunks/_43fc1196._.js +3 -0
- package/.next/standalone/.next/server/chunks/_48ec4374._.js +3 -0
- package/.next/standalone/.next/server/chunks/_563d9ecc._.js +3 -0
- package/.next/standalone/.next/server/chunks/_583f9ae2._.js +3 -0
- package/.next/standalone/.next/server/chunks/_5a167705._.js +3 -0
- package/.next/standalone/.next/server/chunks/_5a8cc3a5._.js +3 -0
- package/.next/standalone/.next/server/chunks/_5d894fb4._.js +3 -0
- package/.next/standalone/.next/server/chunks/_6bbf8264._.js +3 -0
- package/.next/standalone/.next/server/chunks/_6c4bcec1._.js +3 -0
- package/.next/standalone/.next/server/chunks/_7a29d111._.js +3 -0
- package/.next/standalone/.next/server/chunks/_7d3bab25._.js +3 -0
- package/.next/standalone/.next/server/chunks/_7ed4d1a4._.js +3 -0
- package/.next/standalone/.next/server/chunks/_8072d20c._.js +3 -0
- package/.next/standalone/.next/server/chunks/_81b87c01._.js +3 -0
- package/.next/standalone/.next/server/chunks/_881b7b28._.js +3 -0
- package/.next/standalone/.next/server/chunks/_902a1d56._.js +3 -0
- package/.next/standalone/.next/server/chunks/_96258f1c._.js +3 -0
- package/.next/standalone/.next/server/chunks/_96f79f8f._.js +3 -0
- package/.next/standalone/.next/server/chunks/_a0379bc2._.js +3 -0
- package/.next/standalone/.next/server/chunks/_a0f604e8._.js +3 -0
- package/.next/standalone/.next/server/chunks/_a959b121._.js +3 -0
- package/.next/standalone/.next/server/chunks/_a975011f._.js +3 -0
- package/.next/standalone/.next/server/chunks/_aa956b66._.js +3 -0
- package/.next/standalone/.next/server/chunks/_ad7e7d57._.js +3 -0
- package/.next/standalone/.next/server/chunks/_aebf2285._.js +3 -0
- package/.next/standalone/.next/server/chunks/_b259dda0._.js +36 -0
- package/.next/standalone/.next/server/chunks/_b7c60fdc._.js +3 -0
- package/.next/standalone/.next/server/chunks/_bd23ddeb._.js +3 -0
- package/.next/standalone/.next/server/chunks/_cd02dfbe._.js +3 -0
- package/.next/standalone/.next/server/chunks/_d3ecca80._.js +3 -0
- package/.next/standalone/.next/server/chunks/_d48dfa43._.js +11 -0
- package/.next/standalone/.next/server/chunks/_dba648d6._.js +3 -0
- package/.next/standalone/.next/server/chunks/_df42ac6e._.js +3 -0
- package/.next/standalone/.next/server/chunks/_dfe0e460._.js +42 -0
- package/.next/standalone/.next/server/chunks/_ead2734e._.js +3 -0
- package/.next/standalone/.next/server/chunks/_eb4efd0a._.js +3 -0
- package/.next/standalone/.next/server/chunks/_eb66a871._.js +3 -0
- package/.next/standalone/.next/server/chunks/_ef715efd._.js +3 -0
- package/.next/standalone/.next/server/chunks/_f361a656._.js +3 -0
- package/.next/standalone/.next/server/chunks/_f54ddbf4._.js +3 -0
- package/.next/standalone/.next/server/chunks/_fe2866f2._.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_4c408326.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_5603adbc.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_7180f8ad.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_b6be66d9.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f7054fd7.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_terminal_page_tsx_de5e8d85._.js +1 -1
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__90eeddae._.js +1 -1
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__ca3f649e._.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/{732b7502f82e7c37.css → 044decb96250e420.css} +1 -1
- package/.next/standalone/.next/static/chunks/{23a9627a951672ed.js → 8b53c673e79b82f1.js} +3 -3
- package/.next/standalone/bin/scrub-standalone.js +5 -0
- package/.next/standalone/bin/spaces-dev.js +13 -3
- package/.next/standalone/bin/spaces.js +25 -4
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +3 -2
- package/.next/standalone/src/app/(desktop)/terminal/page.tsx +22 -1
- package/.next/standalone/src/app/api/network/discovered/route.ts +2 -2
- package/.next/standalone/src/app/api/network/nodes/check/route.ts +2 -2
- package/.next/standalone/src/app/api/network/nodes/route.ts +2 -2
- package/.next/standalone/src/app/api/server-config/route.ts +9 -18
- package/.next/standalone/src/lib/admin/api/analytics.ts +1 -8
- package/.next/standalone/src/lib/admin/api/users.ts +1 -8
- package/.next/standalone/src/lib/admin/api/usersById.ts +1 -8
- package/.next/standalone/src/lib/auth/guard.ts +46 -0
- package/.next/standalone/src/lib/auth/index.ts +1 -0
- package/.next/standalone/src/lib/db/queries.ts +11 -1
- package/.next/standalone/src/lib/network/api/discovered.ts +4 -1
- package/.next/standalone/src/lib/network/api/identity.ts +6 -0
- package/.next/standalone/src/lib/network/api/keys.ts +6 -0
- package/.next/standalone/src/lib/network/api/keysById.ts +3 -0
- package/.next/standalone/src/lib/network/api/nodes.ts +49 -3
- package/.next/standalone/src/lib/network/api/nodesById.ts +5 -0
- package/.next/standalone/src/lib/network/api/nodesCheck.ts +4 -1
- package/.next/standalone/src/lib/network/api/proxy.ts +5 -0
- package/.next/standalone/src/middleware.ts +24 -10
- package/.next/standalone/tsconfig.tsbuildinfo +1 -1
- package/bin/scrub-standalone.js +5 -0
- package/bin/spaces-dev.js +13 -3
- package/bin/spaces.js +25 -4
- package/package.json +3 -2
- package/.next/standalone/.next/server/chunks/[externals]_next_dist_b89b5a39._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0153ac12._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__01a4559c._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__029ab763._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__037992dc._.js +0 -141
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06bb204a._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fd17dcf._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__107439ea._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__12dff461._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__13eb511a._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__141c8d34._.js +0 -172
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__151efd48._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__16c141c2._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__17fee60c._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a525be8._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1aea45f5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1cb4ee6b._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1e25d3db._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f7566a3._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__20382bee._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2082a624._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2091a7ed._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__24525ae7._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__284b02fc._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2a1a1d0f._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2cf17888._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__323ae5c9._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__34db98f7._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__39efba69._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3aeedc57._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3bbe9d04._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3c2324ba._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__40df3f5d._.js +0 -172
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__42a3fe3c._.js +0 -141
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__42d5d5be._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__49821b61._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__49f58cee._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4b9c38dc._.js +0 -141
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4c0ee9c7._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__530862c6._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__55504160._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__599f26fe._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5efa69f5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__60483ece._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__61135659._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__66331034._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6887294d._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6b9396b4._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6cfd7062._.js +0 -166
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6e8d89e2._.js +0 -149
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6f5b3cfe._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__71d5b087._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__76434a8e._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__798bafa7._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7b873fdb._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7d73f791._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7dc76d0e._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__80a85d1f._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__81f2a9b7._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__82f11618._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__834efefe._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__853663ea._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__861f2472._.js +0 -172
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__882d0924._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__88959e7f._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8b6c05dc._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__912a22a4._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__93d21ad1._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__94532b09._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__97e87518._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9c13c8d0._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9cb13212._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9d315363._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9ec369db._.js +0 -13
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9f09ade5._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9f986ad2._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a35913cf._.js +0 -172
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a3641117._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a76c75a0._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a934c48d._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9431ac6._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__aa3381a4._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ab1cc16c._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ab22ca4f._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac20d518._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__aee3bf91._.js +0 -172
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b1114936._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b15ade1f._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b2bc7a81._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b51446e5._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba344563._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c3b2e20c._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ca93ae79._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf4a76c0._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d20bed9e._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d2d59054._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d4f1c0c0._.js +0 -38
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d6de7a45._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__da33b519._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__dc820e44._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e1058e69._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e1dfb4d4._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3606cd1._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e55b6fc5._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e6555dc3._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e65c3971._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ea9e2d75._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ec37cbee._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f3c19e4b._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f445bd01._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f7b0b4da._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fb4c016b._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fd86530e._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fef9b1ec._.js +0 -133
- package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-design.md +0 -133
- package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-plan.md +0 -959
- package/.next/standalone/docs/plans/2026-03-07-service-command-design.md +0 -146
- package/.next/standalone/docs/plans/2026-03-07-service-command-plan.md +0 -254
- package/.next/standalone/docs/plans/2026-04-23-consolidate-addons-design.md +0 -212
- package/.next/standalone/docs/plans/2026-04-23-consolidate-addons-plan.md +0 -1509
- package/.next/standalone/docs/superpowers/plans/2026-03-12-spaces-cortex.md +0 -5270
- package/.next/standalone/docs/superpowers/plans/2026-03-13-cortex-wiring.md +0 -1387
- package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-entity-graph.md +0 -1923
- package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-knowledge-evolution.md +0 -1113
- package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-boundary-engine.md +0 -853
- package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-context-engine.md +0 -1274
- package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-signal-ingestion.md +0 -933
- package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-lobes.md +0 -1080
- package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-gravity-system.md +0 -768
- package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-ui.md +0 -1108
- package/.next/standalone/docs/superpowers/plans/2026-03-18-cortex-ui-integration.md +0 -1846
- package/.next/standalone/docs/superpowers/plans/2026-03-19-vr-phase1-shell.md +0 -1639
- package/.next/standalone/docs/superpowers/plans/2026-03-27-dockview-pane-layout.md +0 -98
- package/.next/standalone/docs/superpowers/plans/2026-04-21-workspace-todos.md +0 -1097
- package/.next/standalone/docs/superpowers/plans/2026-04-22-claude-usage-display.md +0 -749
- package/.next/standalone/docs/superpowers/specs/2026-03-11-universe-view-design.md +0 -320
- package/.next/standalone/docs/superpowers/specs/2026-03-12-spaces-brain-design.md +0 -720
- package/.next/standalone/docs/superpowers/specs/2026-03-13-cortex-wiring-design.md +0 -268
- package/.next/standalone/docs/superpowers/specs/2026-03-14-cortex-v2-design.md +0 -623
- package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-lobes-design.md +0 -263
- package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-v2-ui-design.md +0 -240
- package/.next/standalone/docs/superpowers/specs/2026-03-16-pane-ux-design.md +0 -77
- package/.next/standalone/docs/superpowers/specs/2026-03-18-cortex-ui-integration-design.md +0 -341
- package/.next/standalone/docs/superpowers/specs/2026-03-19-vr-phase1-shell-design.md +0 -288
- package/.next/standalone/docs/superpowers/specs/2026-03-27-pane-diff-review-and-project-wizard-design.md +0 -322
- package/.next/standalone/docs/superpowers/specs/2026-04-21-workspace-todos-design.md +0 -180
- package/.next/standalone/docs/superpowers/specs/2026-04-22-claude-usage-display-design.md +0 -183
- /package/.next/standalone/.next/static/{Y9EeSGuSi-8qpkLvIBy0a → mimGB6C_ZmJMiVnOe9tqZ}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{Y9EeSGuSi-8qpkLvIBy0a → mimGB6C_ZmJMiVnOe9tqZ}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{Y9EeSGuSi-8qpkLvIBy0a → mimGB6C_ZmJMiVnOe9tqZ}/_ssgManifest.js +0 -0
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
# Design: `spaces service` subcommand
|
|
2
|
-
|
|
3
|
-
**Date:** 2026-03-07
|
|
4
|
-
|
|
5
|
-
## Purpose
|
|
6
|
-
|
|
7
|
-
Allow customers to install Spaces as a persistent system service so it starts automatically on boot/login without manual intervention.
|
|
8
|
-
|
|
9
|
-
## CLI Interface
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
spaces service install # prompts: system or user level
|
|
13
|
-
spaces service uninstall # stops, disables, removes service config
|
|
14
|
-
spaces service start # starts via service manager
|
|
15
|
-
spaces service stop # stops via service manager
|
|
16
|
-
spaces service status # shows running state
|
|
17
|
-
spaces service logs # tails service logs
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Config Capture
|
|
21
|
-
|
|
22
|
-
`install` reads the current resolved config (port, tier, base-path, allowed-origins) from `~/.spaces/server.json` and bakes them into the service definition as environment variables. Also captures:
|
|
23
|
-
|
|
24
|
-
- `process.execPath` — exact node binary (handles nvm/fnm)
|
|
25
|
-
- Resolved path to `bin/spaces.js`
|
|
26
|
-
|
|
27
|
-
Running `install` again overwrites the existing definition and restarts — idempotent, safe to re-run after config changes.
|
|
28
|
-
|
|
29
|
-
## Install Prompt
|
|
30
|
-
|
|
31
|
-
```
|
|
32
|
-
Install as:
|
|
33
|
-
1. System service (starts on boot, runs as root)
|
|
34
|
-
2. User service (starts on login, runs as your user)
|
|
35
|
-
Choice [2]:
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Default is user-level (most customers won't have root/admin).
|
|
39
|
-
|
|
40
|
-
## Platform: Linux (systemd)
|
|
41
|
-
|
|
42
|
-
**User service:** `~/.config/systemd/user/spaces.service`, managed with `systemctl --user`.
|
|
43
|
-
|
|
44
|
-
**System service:** `/etc/systemd/system/spaces.service`, managed with `systemctl`. Runs as the installing user (`User=`/`Group=` directives). Re-execs with `sudo` if needed.
|
|
45
|
-
|
|
46
|
-
Unit file template (user-level):
|
|
47
|
-
|
|
48
|
-
```ini
|
|
49
|
-
[Unit]
|
|
50
|
-
Description=Spaces - Agent Workspace Manager
|
|
51
|
-
After=network.target
|
|
52
|
-
|
|
53
|
-
[Service]
|
|
54
|
-
Type=simple
|
|
55
|
-
ExecStart=/path/to/node /path/to/spaces.js
|
|
56
|
-
WorkingDirectory=/path/to/spaces/project
|
|
57
|
-
Environment=SPACES_PORT=3457
|
|
58
|
-
Environment=SPACES_TIER=community
|
|
59
|
-
Environment=SPACES_BASE_PATH=
|
|
60
|
-
Environment=SPACES_ALLOWED_ORIGINS=
|
|
61
|
-
Restart=on-failure
|
|
62
|
-
RestartSec=5
|
|
63
|
-
|
|
64
|
-
[Install]
|
|
65
|
-
WantedBy=default.target
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
System-level uses `multi-user.target` and adds `User=`/`Group=`.
|
|
69
|
-
|
|
70
|
-
After writing, `install` runs `daemon-reload`, `enable`, and `start`.
|
|
71
|
-
|
|
72
|
-
**Logs:** `journalctl --user -u spaces -f` (user) or `journalctl -u spaces -f` (system).
|
|
73
|
-
|
|
74
|
-
## Platform: macOS (launchd)
|
|
75
|
-
|
|
76
|
-
**User service:** `~/Library/LaunchAgents/com.agentspaces.spaces.plist`
|
|
77
|
-
|
|
78
|
-
**System service:** `/Library/LaunchDaemons/com.agentspaces.spaces.plist` (requires sudo, uses `UserName` key).
|
|
79
|
-
|
|
80
|
-
Plist template:
|
|
81
|
-
|
|
82
|
-
```xml
|
|
83
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
84
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
|
85
|
-
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
86
|
-
<plist version="1.0">
|
|
87
|
-
<dict>
|
|
88
|
-
<key>Label</key>
|
|
89
|
-
<string>com.agentspaces.spaces</string>
|
|
90
|
-
<key>ProgramArguments</key>
|
|
91
|
-
<array>
|
|
92
|
-
<string>/path/to/node</string>
|
|
93
|
-
<string>/path/to/spaces.js</string>
|
|
94
|
-
</array>
|
|
95
|
-
<key>WorkingDirectory</key>
|
|
96
|
-
<string>/path/to/spaces/project</string>
|
|
97
|
-
<key>EnvironmentVariables</key>
|
|
98
|
-
<dict>
|
|
99
|
-
<key>SPACES_PORT</key><string>3457</string>
|
|
100
|
-
<key>SPACES_TIER</key><string>community</string>
|
|
101
|
-
</dict>
|
|
102
|
-
<key>RunAtLoad</key><true/>
|
|
103
|
-
<key>KeepAlive</key><true/>
|
|
104
|
-
<key>StandardOutPath</key>
|
|
105
|
-
<string>/path/to/.spaces/logs/spaces.out.log</string>
|
|
106
|
-
<key>StandardErrorPath</key>
|
|
107
|
-
<string>/path/to/.spaces/logs/spaces.err.log</string>
|
|
108
|
-
</dict>
|
|
109
|
-
</plist>
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
**Logs:** `tail -f ~/.spaces/logs/spaces.out.log`
|
|
113
|
-
|
|
114
|
-
`install` runs `launchctl load -w` / `launchctl bootstrap`. `uninstall` runs `launchctl unload` then deletes the plist.
|
|
115
|
-
|
|
116
|
-
## Platform: Windows (Task Scheduler)
|
|
117
|
-
|
|
118
|
-
Both user and system level use Task Scheduler (avoids needing `node-windows` or similar deps).
|
|
119
|
-
|
|
120
|
-
**User service:** `schtasks /Create /TN "Spaces" /TR "..." /SC ONLOGON /RL HIGHEST`
|
|
121
|
-
|
|
122
|
-
**System service:** `schtasks /Create /TN "Spaces" /TR "..." /SC ONSTART /RU SYSTEM`
|
|
123
|
-
|
|
124
|
-
**Logs:** Output redirected to `%USERPROFILE%\.spaces\logs\spaces.out.log`.
|
|
125
|
-
|
|
126
|
-
## Implementation
|
|
127
|
-
|
|
128
|
-
Single file: `bin/spaces-service.js`. Detects platform via `process.platform` and dispatches to platform-specific functions. Each platform's install/uninstall is ~40-60 lines — small enough for one file.
|
|
129
|
-
|
|
130
|
-
Routing in `bin/spaces.js` follows the same pattern as `spaces install`:
|
|
131
|
-
|
|
132
|
-
```js
|
|
133
|
-
if (subcommand === 'service') {
|
|
134
|
-
const serviceScript = path.join(__dirname, 'spaces-service.js');
|
|
135
|
-
const { status } = spawnSync(process.execPath, [serviceScript, ...args.slice(1)], {
|
|
136
|
-
stdio: 'inherit', env: process.env
|
|
137
|
-
});
|
|
138
|
-
process.exit(status || 0);
|
|
139
|
-
}
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## What's NOT in scope
|
|
143
|
-
|
|
144
|
-
- No dependency on `node-windows`, `node-mac`, or `node-linux`
|
|
145
|
-
- `uninstall` does not touch `~/.spaces/` data — only removes the service config
|
|
146
|
-
- No Docker/container support (services don't make sense inside containers)
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
# `spaces service` Implementation Plan
|
|
2
|
-
|
|
3
|
-
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
|
4
|
-
|
|
5
|
-
**Goal:** Add a `spaces service` subcommand that installs/manages Spaces as a persistent OS service on Linux (systemd), macOS (launchd), and Windows (Task Scheduler).
|
|
6
|
-
|
|
7
|
-
**Architecture:** Single file `bin/spaces-service.js` dispatched from `bin/spaces.js`. Platform detection via `process.platform` routes to platform-specific install/uninstall/start/stop/status/logs functions. Config is read from `~/.spaces/server.json` and baked into service definitions.
|
|
8
|
-
|
|
9
|
-
**Tech Stack:** Node.js (no new dependencies). Uses `child_process.execFileSync`/`spawnSync` for service manager commands. `readline` for interactive prompt.
|
|
10
|
-
|
|
11
|
-
**Design doc:** `docs/plans/2026-03-07-service-command-design.md`
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
### Task 1: Route `service` subcommand in `bin/spaces.js`
|
|
16
|
-
|
|
17
|
-
**Files:**
|
|
18
|
-
- Modify: `bin/spaces.js:29-46` (help text)
|
|
19
|
-
- Modify: `bin/spaces.js:56-65` (subcommand routing)
|
|
20
|
-
|
|
21
|
-
**Step 1: Add service to help text**
|
|
22
|
-
|
|
23
|
-
In `bin/spaces.js`, find the help text block and add the service commands. Change:
|
|
24
|
-
|
|
25
|
-
```js
|
|
26
|
-
spaces --help Show this help
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
to:
|
|
30
|
-
|
|
31
|
-
```js
|
|
32
|
-
spaces service install Install as OS service (systemd/launchd/Task Scheduler)
|
|
33
|
-
spaces service uninstall Remove OS service
|
|
34
|
-
spaces service start Start the service
|
|
35
|
-
spaces service stop Stop the service
|
|
36
|
-
spaces service status Show service status
|
|
37
|
-
spaces service logs Tail service logs
|
|
38
|
-
spaces --help Show this help
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
**Step 2: Add routing for `service` subcommand**
|
|
42
|
-
|
|
43
|
-
In `bin/spaces.js`, after the install/uninstall/verify/upgrade routing block (line 57-65), add a new block before the setup wizard section:
|
|
44
|
-
|
|
45
|
-
```js
|
|
46
|
-
// ─── Route service commands to spaces-service.js ─────
|
|
47
|
-
if (subcommand === 'service') {
|
|
48
|
-
const serviceScript = path.join(__dirname, 'spaces-service.js');
|
|
49
|
-
const { status } = require('child_process').spawnSync(
|
|
50
|
-
process.execPath, [serviceScript, ...args.slice(1)],
|
|
51
|
-
{ stdio: 'inherit', env: process.env }
|
|
52
|
-
);
|
|
53
|
-
process.exit(status || 0);
|
|
54
|
-
}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
**Step 3: Verify routing works**
|
|
58
|
-
|
|
59
|
-
Run: `node bin/spaces.js --help`
|
|
60
|
-
Expected: Service commands appear in help output.
|
|
61
|
-
|
|
62
|
-
Run: `node bin/spaces.js service`
|
|
63
|
-
Expected: Error about missing `spaces-service.js` (we haven't created it yet) or "Unknown command" -- confirms routing is wired.
|
|
64
|
-
|
|
65
|
-
**Step 4: Commit**
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
git add bin/spaces.js
|
|
69
|
-
git commit -m "Add service subcommand routing and help text"
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
### Task 2: Create `bin/spaces-service.js` -- scaffolding, config capture, and prompt
|
|
75
|
-
|
|
76
|
-
**Files:**
|
|
77
|
-
- Create: `bin/spaces-service.js`
|
|
78
|
-
|
|
79
|
-
**Step 1: Create the file with shared helpers and CLI dispatch**
|
|
80
|
-
|
|
81
|
-
Create `bin/spaces-service.js` with:
|
|
82
|
-
- Shared constants: `SPACES_DIR`, `CONFIG_PATH`, `LOGS_DIR`, `SERVICE_NAME` (`spaces`), `LABEL` (`com.agentspaces.spaces`), `TASK_NAME` (`Spaces`)
|
|
83
|
-
- Helper functions: `log()`, `logOk()`, `logErr()` (same pattern as spaces-install.js)
|
|
84
|
-
- `resolveConfig()` -- reads `~/.spaces/server.json`, returns `{ port, tier, basePath, allowedOrigins }` with defaults
|
|
85
|
-
- `resolveSpacesPath()` -- returns `path.join(__dirname, 'spaces.js')`
|
|
86
|
-
- `resolveProjectDir()` -- returns `path.join(__dirname, '..')`
|
|
87
|
-
- `resolveNodePath()` -- returns `process.execPath`
|
|
88
|
-
- `promptLevel()` -- uses readline to ask system vs user, defaults to user (choice 2)
|
|
89
|
-
- `ensureLogsDir()` -- creates `~/.spaces/logs/` via `fs.mkdirSync` with recursive
|
|
90
|
-
- `LEVEL_PATH` (`~/.spaces/service-level`) -- tracks installed level so start/stop/status/logs know which to target
|
|
91
|
-
- `saveLevel(level)` and `loadLevel()` -- write/read the level file
|
|
92
|
-
- `getPlatform()` -- returns `linux`/`darwin`/`win32` or exits with error
|
|
93
|
-
- Dispatch table mapping platform to `{ install, uninstall, start, stop, status, logs }` functions
|
|
94
|
-
- `main()` async function that reads `process.argv[2]` as action, dispatches to platform function
|
|
95
|
-
- Stub function declarations for all 18 platform functions (will be filled in Tasks 3-5)
|
|
96
|
-
|
|
97
|
-
**Step 2: Verify scaffolding runs**
|
|
98
|
-
|
|
99
|
-
Run: `node bin/spaces-service.js`
|
|
100
|
-
Expected: Prints usage message and exits cleanly.
|
|
101
|
-
|
|
102
|
-
**Step 3: Commit**
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
git add bin/spaces-service.js
|
|
106
|
-
git commit -m "Add spaces-service.js scaffolding with config capture and prompt"
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
### Task 3: Implement Linux (systemd) functions
|
|
112
|
-
|
|
113
|
-
**Files:**
|
|
114
|
-
- Modify: `bin/spaces-service.js` (fill in Linux stubs)
|
|
115
|
-
|
|
116
|
-
**Step 1: Implement all Linux functions**
|
|
117
|
-
|
|
118
|
-
- `linuxServicePath(level)` -- returns `/etc/systemd/system/spaces.service` for system, `~/.config/systemd/user/spaces.service` for user (creates dir with `mkdirSync` recursive)
|
|
119
|
-
- `linuxUnitFile(level)` -- generates systemd unit file string:
|
|
120
|
-
- `[Unit]` with `Description` and `After=network.target`
|
|
121
|
-
- `[Service]` with `Type=simple`, `ExecStart` (node + spaces.js), `WorkingDirectory`, `Environment` lines for port/tier/basePath/allowedOrigins, `Restart=on-failure`, `RestartSec=5`
|
|
122
|
-
- System level adds `User=` and `Group=` from `os.userInfo().username`
|
|
123
|
-
- `[Install]` with `WantedBy=multi-user.target` (system) or `default.target` (user)
|
|
124
|
-
- `linuxSystemctl(level, ...args)` -- runs `sudo systemctl ...args` for system, `systemctl --user ...args` for user, via `execFileSync` with `stdio: 'inherit'`
|
|
125
|
-
- `linuxInstall()` -- prompts level, writes unit file (via `sudo tee` for system, `fs.writeFileSync` for user), saves level, runs daemon-reload + enable + start. For user level, also runs `loginctl enable-linger` so service survives logout.
|
|
126
|
-
- `linuxUninstall()` -- loads saved level, stops + disables + removes unit file + daemon-reload + removes level file
|
|
127
|
-
- `linuxStart()` / `linuxStop()` -- loads level, runs systemctl start/stop
|
|
128
|
-
- `linuxStatus()` -- loads level, runs systemctl status (catches non-zero exit from stopped services)
|
|
129
|
-
- `linuxLogs()` -- loads level, runs `journalctl -u spaces -f --no-pager` (with `--user` for user level, `sudo` for system level) via `spawnSync` with `stdio: 'inherit'`
|
|
130
|
-
|
|
131
|
-
All service manager calls use `execFileSync` (not `exec`) to prevent shell injection.
|
|
132
|
-
|
|
133
|
-
**Step 2: Test on this Linux machine**
|
|
134
|
-
|
|
135
|
-
Run: `node bin/spaces-service.js install` (choose user)
|
|
136
|
-
Then: `node bin/spaces-service.js status`
|
|
137
|
-
Then: `node bin/spaces-service.js uninstall`
|
|
138
|
-
|
|
139
|
-
**Step 3: Commit**
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
git add bin/spaces-service.js
|
|
143
|
-
git commit -m "Implement Linux systemd service management"
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
### Task 4: Implement macOS (launchd) functions
|
|
149
|
-
|
|
150
|
-
**Files:**
|
|
151
|
-
- Modify: `bin/spaces-service.js` (fill in macOS stubs)
|
|
152
|
-
|
|
153
|
-
**Step 1: Implement all macOS functions**
|
|
154
|
-
|
|
155
|
-
- `darwinPlistPath(level)` -- returns `/Library/LaunchDaemons/com.agentspaces.spaces.plist` for system, `~/Library/LaunchAgents/com.agentspaces.spaces.plist` for user
|
|
156
|
-
- `darwinPlistContent(level)` -- generates XML plist string with:
|
|
157
|
-
- `Label`: `com.agentspaces.spaces`
|
|
158
|
-
- `ProgramArguments`: array with node path and spaces.js path
|
|
159
|
-
- `WorkingDirectory`: project dir
|
|
160
|
-
- `EnvironmentVariables`: dict with port, tier, basePath (if set), allowedOrigins (if set)
|
|
161
|
-
- `RunAtLoad`: true, `KeepAlive`: true
|
|
162
|
-
- `StandardOutPath` / `StandardErrorPath`: `~/.spaces/logs/spaces.out.log` and `.err.log`
|
|
163
|
-
- System level adds `UserName` key
|
|
164
|
-
- `darwinInstall()` -- prompts level, unloads existing if present, writes plist (via `sudo tee` + `chown root:wheel` + `chmod 644` for system, `fs.writeFileSync` for user), saves level, loads with `launchctl load -w`
|
|
165
|
-
- `darwinUninstall()` -- loads level, runs `launchctl unload -w`, deletes plist file, removes level file
|
|
166
|
-
- `darwinStart()` / `darwinStop()` -- loads level, runs `launchctl load -w` / `launchctl unload -w`
|
|
167
|
-
- `darwinStatus()` -- runs `launchctl list`, filters output for the label
|
|
168
|
-
- `darwinLogs()` -- runs `tail -f ~/.spaces/logs/spaces.out.log` via `spawnSync`
|
|
169
|
-
|
|
170
|
-
**Step 2: Commit**
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
git add bin/spaces-service.js
|
|
174
|
-
git commit -m "Implement macOS launchd service management"
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
### Task 5: Implement Windows (Task Scheduler) functions
|
|
180
|
-
|
|
181
|
-
**Files:**
|
|
182
|
-
- Modify: `bin/spaces-service.js` (fill in Windows stubs)
|
|
183
|
-
|
|
184
|
-
**Step 1: Implement all Windows functions**
|
|
185
|
-
|
|
186
|
-
- `win32WrapperScript()` -- writes a `.cmd` file to `~/.spaces/spaces-service.cmd` that sets environment variables and runs `node spaces.js` with stdout/stderr redirected to log files. Returns the wrapper path. This is needed because `schtasks /TR` doesn't handle multi-arg commands or env vars well.
|
|
187
|
-
- `win32Install()` -- prompts level, generates wrapper script, deletes existing task (`schtasks /Delete /TN Spaces /F`), creates task with `/SC ONLOGON /RL HIGHEST` (user) or `/SC ONSTART /RU SYSTEM` (system), saves level, starts immediately with `/Run`
|
|
188
|
-
- `win32Uninstall()` -- ends task (`/End`), deletes task (`/Delete /F`), removes wrapper script and level file
|
|
189
|
-
- `win32Start()` / `win32Stop()` -- runs `schtasks /Run` / `schtasks /End`
|
|
190
|
-
- `win32Status()` -- runs `schtasks /Query /TN Spaces /V /FO LIST`
|
|
191
|
-
- `win32Logs()` -- runs `powershell -Command "Get-Content path -Wait -Tail 50"` via `spawnSync`
|
|
192
|
-
|
|
193
|
-
All `schtasks` calls use `execFileSync` with array args (no shell).
|
|
194
|
-
|
|
195
|
-
**Step 2: Commit**
|
|
196
|
-
|
|
197
|
-
```bash
|
|
198
|
-
git add bin/spaces-service.js
|
|
199
|
-
git commit -m "Implement Windows Task Scheduler service management"
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
### Task 6: Update documentation
|
|
205
|
-
|
|
206
|
-
**Files:**
|
|
207
|
-
- Modify: `docs/server-install.md`
|
|
208
|
-
|
|
209
|
-
**Step 1: Add "Running as a Service" section**
|
|
210
|
-
|
|
211
|
-
After the "CLI Reference" section (~line 295), add a new section covering:
|
|
212
|
-
- `spaces service install` with explanation of the system/user prompt
|
|
213
|
-
- Table of all service subcommands (status, stop, start, logs, uninstall)
|
|
214
|
-
- Note about re-running install after config changes
|
|
215
|
-
- Platform details table (Linux/macOS/Windows with paths for user and system level)
|
|
216
|
-
- Logs info (journalctl for Linux, file-based for macOS/Windows)
|
|
217
|
-
|
|
218
|
-
**Step 2: Update CLI Reference**
|
|
219
|
-
|
|
220
|
-
Add `spaces service <action>` line to the existing CLI Reference block.
|
|
221
|
-
|
|
222
|
-
**Step 3: Commit**
|
|
223
|
-
|
|
224
|
-
```bash
|
|
225
|
-
git add docs/server-install.md
|
|
226
|
-
git commit -m "Add service management docs to server-install.md"
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
### Task 7: End-to-end test on Linux
|
|
232
|
-
|
|
233
|
-
**Step 1: Test full lifecycle**
|
|
234
|
-
|
|
235
|
-
```bash
|
|
236
|
-
node bin/spaces.js service install # choose user
|
|
237
|
-
node bin/spaces.js service status # should show active
|
|
238
|
-
node bin/spaces.js service logs # Ctrl+C after seeing output
|
|
239
|
-
node bin/spaces.js service stop # should stop
|
|
240
|
-
node bin/spaces.js service status # should show inactive
|
|
241
|
-
node bin/spaces.js service start # should restart
|
|
242
|
-
node bin/spaces.js service uninstall # should clean up
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
**Step 2: Verify cleanup**
|
|
246
|
-
|
|
247
|
-
Confirm no leftover files at `~/.config/systemd/user/spaces.service` or `~/.spaces/service-level`.
|
|
248
|
-
|
|
249
|
-
**Step 3: Commit any fixes**
|
|
250
|
-
|
|
251
|
-
```bash
|
|
252
|
-
git add -A
|
|
253
|
-
git commit -m "Fix issues found during service e2e testing"
|
|
254
|
-
```
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
# Consolidating Spaces Addons — Design
|
|
2
|
-
|
|
3
|
-
**Status:** proposed
|
|
4
|
-
**Author:** jlongo78 (with Claude)
|
|
5
|
-
**Date:** 2026-04-23
|
|
6
|
-
**Paired plan:** `docs/plans/2026-04-23-consolidate-addons-plan.md`
|
|
7
|
-
|
|
8
|
-
## Problem
|
|
9
|
-
|
|
10
|
-
Spaces currently ships as an open-source core (`@jlongo78/agent-spaces`, AGPL-3.0) with three optional addons loaded at runtime via `createRequire`:
|
|
11
|
-
|
|
12
|
-
- `@spaces/pro` — federation/network (private)
|
|
13
|
-
- `@spaces/teams` — auth, admin, collaboration bus, MCP server (private)
|
|
14
|
-
- `@spaces/cortex` — RAG knowledge engine (separate repo, heavier product)
|
|
15
|
-
|
|
16
|
-
The addon architecture exists to gate features behind tiers (`community | team | federation`). In practice:
|
|
17
|
-
|
|
18
|
-
- The tier/install machinery is a persistent source of setup friction (`bin/spaces-install.js`, NODE_PATH resolution in `bin/spaces.js:309-349`, `@spaces/teams` peer-dep dance, `createRequire` anchor files).
|
|
19
|
-
- We are not monetizing Spaces and have no near-term plans to. The tier abstraction pays no dividend.
|
|
20
|
-
- ~30 Next.js route handlers are thin proxies (`pro?.network.api.X.Y(req) ?? notAvailable()`) whose only purpose is to handle the absent-addon case.
|
|
21
|
-
- The two stub shims (`src/lib/pro.ts`, `src/lib/teams.ts`) add cognitive load for anyone reading the auth/federation code.
|
|
22
|
-
|
|
23
|
-
## Goals
|
|
24
|
-
|
|
25
|
-
1. Fold `@spaces/pro` source into `spaces/src/lib/network/`.
|
|
26
|
-
2. Fold `@spaces/teams` source into `spaces/src/lib/{auth,admin,collab}/` and `spaces/bin/`.
|
|
27
|
-
3. Delete the `createRequire` stub layer, the tier install workflow, and the `@spaces/*` NODE_PATH resolution in the launcher.
|
|
28
|
-
4. Preserve current behavior for existing installs (desktop users stay logged out by default; server operators still gate with auth + admin DB).
|
|
29
|
-
5. Keep `@spaces/cortex` as an external optional addon — unchanged.
|
|
30
|
-
|
|
31
|
-
## Non-goals
|
|
32
|
-
|
|
33
|
-
- No conversion of `.js` files to TypeScript during the move. Defer TS conversion of `bus/broker.js`, `db/queries.js`, `db/migrations.js`, and collab route handlers to a follow-up.
|
|
34
|
-
- No changes to cortex, to the `src/lib/cortex/*` stub layer, or to the `@spaces/cortex` package.
|
|
35
|
-
- No rewrite of auth UX, session format, or TOTP flow. Same wire format, same DB schema.
|
|
36
|
-
- No changes to the federation protocol or `/api/network/*` contract. Same wire format.
|
|
37
|
-
|
|
38
|
-
## Current architecture
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
spaces/
|
|
42
|
-
├── src/
|
|
43
|
-
│ ├── middleware.ts ← auth gate keyed off HAS_AUTH (from tier.ts)
|
|
44
|
-
│ ├── lib/
|
|
45
|
-
│ │ ├── auth.ts ← getAuthUser/withUser (AsyncLocalStorage)
|
|
46
|
-
│ │ ├── tier.ts ← TIER/HAS_AUTH/HAS_NETWORK/IS_DESKTOP flags
|
|
47
|
-
│ │ ├── pro.ts ← createRequire shim → @spaces/pro
|
|
48
|
-
│ │ ├── teams.ts ← createRequire shim → @spaces/teams
|
|
49
|
-
│ │ └── config.ts ← calls getTeams() for shell-user resolution
|
|
50
|
-
│ └── app/api/
|
|
51
|
-
│ ├── admin/*/route.ts ← thin proxy → teams.admin.api.X.Y(req)
|
|
52
|
-
│ ├── auth/*/route.ts ← thin proxy → teams.auth.api.X.Y(req)
|
|
53
|
-
│ ├── network/*/route.ts ← thin proxy → pro.network.api.X.Y(req)
|
|
54
|
-
│ └── workspaces/[id]/
|
|
55
|
-
│ ├── messages/*/route.ts ← thin proxy → teams.api.messages.X(req)
|
|
56
|
-
│ └── context/*/route.ts ← thin proxy → teams.api.context.X(req)
|
|
57
|
-
└── bin/
|
|
58
|
-
├── spaces.js ← lines 242-360: tier detect, NODE_PATH, addon probe
|
|
59
|
-
├── spaces-install.js ← install/remove @spaces/{pro,teams,cortex}
|
|
60
|
-
└── lib/auto-setup.js ← session secret + admin.db bootstrap
|
|
61
|
-
|
|
62
|
-
spaces-pro/ ← private, 27 src files, network-only
|
|
63
|
-
└── src/network/ ← identity, auth, db, client, aggregator + 18 API handlers
|
|
64
|
-
|
|
65
|
-
spaces-teams/ ← private, 18 TS + 9 JS files under src/
|
|
66
|
-
└── src/
|
|
67
|
-
├── auth/{session,totp}.ts + api/{login,logout,me,totpSetup,totpStatus,totpVerify}.ts
|
|
68
|
-
├── admin/{db.ts,index.ts} + api/{analytics,users,usersById}.ts
|
|
69
|
-
├── bus/broker.js
|
|
70
|
-
├── db/{migrations,queries}.js
|
|
71
|
-
├── api/{messages,messageById,context,contextByKey}.js ← collab route handlers
|
|
72
|
-
├── terminal/collaboration.js
|
|
73
|
-
├── init.js
|
|
74
|
-
└── middleware.ts ← stale; spaces/src/middleware.ts is canonical
|
|
75
|
-
bin/
|
|
76
|
-
├── spaces-msg.js ← CLI: post messages from a pane
|
|
77
|
-
├── mcp-server.js ← MCP server for agent→workspace messaging
|
|
78
|
-
└── spaces-hook.js ← Claude Code hook
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
## Target architecture
|
|
82
|
-
|
|
83
|
-
```
|
|
84
|
-
spaces/
|
|
85
|
-
├── src/
|
|
86
|
-
│ ├── middleware.ts ← keyed off IS_MULTIUSER (renamed from HAS_AUTH)
|
|
87
|
-
│ ├── lib/
|
|
88
|
-
│ │ ├── auth/ ← folder, preserves @/lib/auth imports
|
|
89
|
-
│ │ │ ├── index.ts ← re-exports: getAuthUser, withUser, session, totp
|
|
90
|
-
│ │ │ ├── context.ts ← getAuthUser, withUser (from current auth.ts)
|
|
91
|
-
│ │ │ ├── session.ts ← from spaces-teams/src/auth/session.ts
|
|
92
|
-
│ │ │ └── totp.ts ← from spaces-teams/src/auth/totp.ts
|
|
93
|
-
│ │ ├── admin/
|
|
94
|
-
│ │ │ ├── index.ts ← from spaces-teams/src/admin/index.ts
|
|
95
|
-
│ │ │ └── db.ts ← from spaces-teams/src/admin/db.ts
|
|
96
|
-
│ │ ├── collab/
|
|
97
|
-
│ │ │ ├── broker.js ← from spaces-teams/src/bus/broker.js (unchanged)
|
|
98
|
-
│ │ │ ├── queries.js ← from spaces-teams/src/db/queries.js
|
|
99
|
-
│ │ │ └── migrations.js ← from spaces-teams/src/db/migrations.js
|
|
100
|
-
│ │ ├── network/ ← from spaces-pro/src/network/ (whole dir)
|
|
101
|
-
│ │ │ ├── index.ts, identity.ts, auth.ts, db.ts, client.ts, aggregator.ts
|
|
102
|
-
│ │ │ └── api/ … ← the 18 API handler modules
|
|
103
|
-
│ │ ├── terminal/
|
|
104
|
-
│ │ │ └── collaboration.js ← from spaces-teams/src/terminal/collaboration.js
|
|
105
|
-
│ │ ├── flags.ts ← replaces tier.ts: single IS_MULTIUSER flag
|
|
106
|
-
│ │ ├── config.ts ← imports resolveShellUser from @/lib/admin
|
|
107
|
-
│ │ └── pro.ts, teams.ts ← DELETED
|
|
108
|
-
│ └── app/api/
|
|
109
|
-
│ ├── admin/*/route.ts ← calls @/lib/admin directly (no proxy)
|
|
110
|
-
│ ├── auth/*/route.ts ← calls @/lib/auth directly
|
|
111
|
-
│ ├── network/*/route.ts ← calls @/lib/network directly
|
|
112
|
-
│ └── workspaces/[id]/
|
|
113
|
-
│ ├── messages/*/route.ts ← calls @/lib/collab directly
|
|
114
|
-
│ └── context/*/route.ts ← calls @/lib/collab directly
|
|
115
|
-
└── bin/
|
|
116
|
-
├── spaces.js ← tier block deleted; always sets up secret + admin.db
|
|
117
|
-
├── spaces-install.js ← install/remove of @spaces/cortex only
|
|
118
|
-
├── spaces-msg.js ← from spaces-teams/bin/spaces-msg.js
|
|
119
|
-
├── spaces-mcp.js ← from spaces-teams/bin/mcp-server.js
|
|
120
|
-
├── spaces-hook.js ← from spaces-teams/bin/spaces-hook.js
|
|
121
|
-
└── lib/auto-setup.js ← runs unconditionally now
|
|
122
|
-
|
|
123
|
-
~/archive/
|
|
124
|
-
├── spaces-pro/ ← moved out of active dev tree
|
|
125
|
-
└── spaces-teams/
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
## Design decisions
|
|
129
|
-
|
|
130
|
-
### D1 — Desktop-vs-server flag
|
|
131
|
-
|
|
132
|
-
**Problem:** Today `HAS_AUTH` is derived from `TIER`. Folding teams in removes the tier concept but we still need the middleware to skip login for solo desktop users.
|
|
133
|
-
|
|
134
|
-
**Decision:** Replace `tier.ts` with `flags.ts` exposing a single `IS_MULTIUSER` flag (default `false`). The launcher (`bin/spaces.js`) leaves it unset for the desktop npm install; a server operator sets `SPACES_MULTIUSER=1` (or equivalent CLI flag) to enable login + admin UI.
|
|
135
|
-
|
|
136
|
-
**Federation is always on.** The network/federation routes (`/api/network/*`) are live regardless of mode — with no peer nodes configured, list endpoints just return empty arrays. There is no flag gate and no `IS_FEDERATION` constant. Rationale: the routes are harmless without configured nodes, and adding a gate adds friction for solo users who want to pair a second node later.
|
|
137
|
-
|
|
138
|
-
**Future (not in this plan):** eventually drop `SPACES_MULTIUSER` entirely and auto-detect multiuser mode from the presence of users in `admin.db`. Requires a different startup flow that bootstraps `admin.db` on first launch; deferred.
|
|
139
|
-
|
|
140
|
-
**Rationale:** Inverts current `HAS_AUTH` without changing the wire format of sessions, cookies, or APIs. One knob, one behavior.
|
|
141
|
-
|
|
142
|
-
**Impact on `middleware.ts`:**
|
|
143
|
-
```ts
|
|
144
|
-
// before
|
|
145
|
-
import { HAS_AUTH } from '@/lib/tier';
|
|
146
|
-
if (!HAS_AUTH) return NextResponse.next();
|
|
147
|
-
|
|
148
|
-
// after
|
|
149
|
-
import { IS_MULTIUSER } from '@/lib/flags';
|
|
150
|
-
if (!IS_MULTIUSER) return NextResponse.next();
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### D2 — Auth folder layout
|
|
154
|
-
|
|
155
|
-
**Problem:** `src/lib/auth.ts` already exists in spaces and is imported by ~25 files as `@/lib/auth`. It exports `getAuthUser`/`withUser`. Teams' auth code exports `issueSessionToken`/`verifySessionToken`/`setSessionCookie`/TOTP helpers.
|
|
156
|
-
|
|
157
|
-
**Decision:** Convert `src/lib/auth.ts` → `src/lib/auth/context.ts`, create `src/lib/auth/index.ts` that re-exports from `context.ts` + `session.ts` + `totp.ts`. Existing `from '@/lib/auth'` imports continue to resolve to the folder's index.ts — zero churn for consumers.
|
|
158
|
-
|
|
159
|
-
### D3 — Admin DB stays separate
|
|
160
|
-
|
|
161
|
-
**Problem:** Teams writes to `~/.spaces/admin.db`; spaces writes per-workspace to `~/.spaces/spaces.db` (or per-user). Should we merge?
|
|
162
|
-
|
|
163
|
-
**Decision:** Keep them separate. Admin DB is operator/account data (users, login events, session telemetry). Spaces DB is app data (workspaces, messages, context). Different lifecycle, different backup semantics. Merging would force a schema migration for existing installs with zero upside.
|
|
164
|
-
|
|
165
|
-
### D4 — `.js` files move as-is
|
|
166
|
-
|
|
167
|
-
**Problem:** Teams ships 9 JavaScript files (`bus/broker.js`, `db/{queries,migrations}.js`, `api/*.js`, `terminal/collaboration.js`) that could be converted to TS during the move.
|
|
168
|
-
|
|
169
|
-
**Decision:** Move as-is. Next.js build accepts `.js` and `.ts` side-by-side. Converting to TS during a move multiplies risk (move + type-fix in the same commit) and triggers a pile of type errors to triage. A follow-up plan can do the TS conversion module-by-module on a quiet week.
|
|
170
|
-
|
|
171
|
-
### D5 — Binary names
|
|
172
|
-
|
|
173
|
-
**Problem:** Teams exposes `spaces-msg` as a bin; `mcp-server.js` and `spaces-hook.js` are invoked via absolute path by agent configs. What do we publish from the combined package?
|
|
174
|
-
|
|
175
|
-
**Decision:**
|
|
176
|
-
- Expose `spaces-msg` as a bin in `package.json` (CLI users rely on it).
|
|
177
|
-
- Move `mcp-server.js` → `bin/spaces-mcp.js` (no bin entry; invoked via absolute path from MCP server configs that point at the file).
|
|
178
|
-
- Move `spaces-hook.js` → `bin/spaces-hook.js` (no bin entry; invoked via absolute path by Claude Code hook config).
|
|
179
|
-
|
|
180
|
-
### D6 — Cortex unchanged
|
|
181
|
-
|
|
182
|
-
The `src/lib/cortex/*` stub layer, the `@spaces/cortex` runtime loader, and the separate `spaces-cortex` / `spaces-cortex-gravity` repos all stay as-is. Cortex is excluded because:
|
|
183
|
-
- Install size: `@huggingface/transformers` + `@lancedb/lancedb` + `pdf-parse` push install footprint beyond what a baseline workspace manager should demand.
|
|
184
|
-
- Active divergence: `spaces-cortex-gravity` is a parallel line of development, suggesting cortex will keep evolving independently.
|
|
185
|
-
|
|
186
|
-
### D7 — `src/lib/config.ts#getUserPaths` shell-user resolution
|
|
187
|
-
|
|
188
|
-
**Problem:** `getUserPaths` calls `getTeams()?.admin.resolveShellUser(username)` under `HAS_MULTIUSER`. After fold-in, `resolveShellUser` lives at `@/lib/admin`.
|
|
189
|
-
|
|
190
|
-
**Decision:** Replace the `getTeams()?.admin.resolveShellUser(...)` call with a direct `import { resolveShellUser } from '@/lib/admin'` gated on `IS_MULTIUSER`.
|
|
191
|
-
|
|
192
|
-
## Phases
|
|
193
|
-
|
|
194
|
-
1. **A — Pro fold-in.** Lowest blast radius (federation is opt-in; breaking `/api/network/*` doesn't affect local workflow).
|
|
195
|
-
2. **B — Teams fold-in.** Higher risk; touches auth, middleware, config, bus.
|
|
196
|
-
3. **C — Flag + launcher simplification.** Renames `tier.ts` → `flags.ts`, cuts ~100 lines from `bin/spaces.js`.
|
|
197
|
-
4. **D — Deps, docs, archive.** Add npm deps, update README, move `spaces-pro`/`spaces-teams` to `~/archive/`.
|
|
198
|
-
5. **E — Smoke verification.** Run the app locally in both desktop and multiuser modes; exercise representative routes.
|
|
199
|
-
|
|
200
|
-
## Risks
|
|
201
|
-
|
|
202
|
-
| Risk | Mitigation |
|
|
203
|
-
|---|---|
|
|
204
|
-
| Existing server installs break when they `npm i -g @jlongo78/agent-spaces@0.10` because their `admin.db` schema or session format diverges | Keep admin DB path (`~/.spaces/admin.db`) and schema identical to teams package. Session token format is already identical (verified in design). |
|
|
205
|
-
| Hooks configured to absolute path `node_modules/@spaces/teams/bin/spaces-hook.js` stop working | Keep the teams package published for one more release cycle as a compatibility shim that just requires the new bin path. (Out of scope for this plan — only affects third-party consumers, of which there are none.) |
|
|
206
|
-
| `@spaces/teams` is imported from somewhere we missed | `grep -rE "@spaces/(pro\|teams)"` after each phase; CI build surfaces unresolved imports. |
|
|
207
|
-
| Folder rename `src/lib/auth.ts` → `src/lib/auth/` breaks partial-path imports | TS path `@/lib/auth` resolves to `src/lib/auth/index.ts` — same import specifier. Verified no deep imports (`@/lib/auth/...`) exist. |
|
|
208
|
-
|
|
209
|
-
## Open questions
|
|
210
|
-
|
|
211
|
-
- Should we publish `0.10.0` as a breaking release, or continue the `0.9.x` line with a note in the changelog? **Leaning breaking.**
|
|
212
|
-
- After fold-in, do we delete `spaces-pro`/`spaces-teams` from GitHub or archive the repos? **Archive, don't delete — git history matters.**
|