@jlongo78/agent-spaces 0.9.7 → 0.9.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.claude/settings.local.json +17 -4
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +4 -0
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/routes-manifest.json +29 -0
- package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page.js.nft.json +1 -1
- 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.js.nft.json +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.js.nft.json +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 +3 -3
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +3 -3
- 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/analytics/overview/route.js +1 -1
- package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/claude/usage/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/claude/usage/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/claude/usage/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/claude/usage/route.js +8 -0
- package/.next/standalone/.next/server/app/api/claude/usage/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/claude/usage/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/claude/usage/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/config/route.js +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/files/route.js +1 -1
- package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/folders/route.js +1 -1
- package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/handshake/route.js +1 -1
- package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/panes/route.js +1 -1
- package/.next/standalone/.next/server/app/api/network/panes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/projects/route.js +1 -1
- package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/search/route.js +1 -1
- package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/workspaces/route.js +1 -1
- package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js +1 -1
- package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/panes/[id]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/panes/route.js +1 -1
- package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/search/route.js +2 -2
- package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/route.js +2 -2
- package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sync/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tags/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tier/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/whisper/config/route.js +1 -1
- 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.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/wizard/chart/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/wizard/chart/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/wizard/chart/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/wizard/chart/route.js +7 -0
- package/.next/standalone/.next/server/app/api/wizard/chart/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/wizard/chart/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/wizard/chart/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/wizard/chat/route.js +1 -1
- package/.next/standalone/.next/server/app/api/wizard/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js +8 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js +8 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/workspaces/route.js +2 -2
- package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/cortex.html +1 -1
- package/.next/standalone/.next/server/app/cortex.rsc +3 -3
- package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +2 -2
- 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 +3 -3
- 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/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.js.nft.json +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 +3 -3
- package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +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 +3 -3
- package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +3 -3
- 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/react-loadable-manifest.json +1 -1
- 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 +3 -3
- package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- 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/app-paths-manifest.json +4 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00e90fc6._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__01ab8675._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__03974f05._.js +111 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__bb331da9._.js → [root-of-the-server]__046c9b91._.js} +16 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04ae6bf0._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__056fa416._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ac4ea3f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b8e64cb._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0facd39e._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__10bc76a3._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__115f3934._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__11f155f1._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__160e7c73._.js +50 -33
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__17a3b966._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__17d3a2b2._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a86c055._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__20b5e9c4._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__28d6fbd8._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2a3f866b._.js +119 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__a95bb38b._.js → [root-of-the-server]__316617e7._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__32ad8f71._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__35457394._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__35de78e6._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3685ffcb._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__38954988._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3a32b624._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__426ad936._.js +119 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4985c034._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c6ce9ed._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5cebe58a._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d5e4789._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__65676930._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__67cab326._.js +58 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__698c6f01._.js +111 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__7ebc4280._.js → [root-of-the-server]__6c64af29._.js} +22 -9
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__73aed9f5._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__79b6a9bb._.js +111 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e56abacf._.js → [root-of-the-server]__7db704c6._.js} +18 -5
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__812ca02b._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__821f50fa._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8716b86e._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__884ef754._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__88cdbd68._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__89d9aba9._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8c2e1260._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8d536cb5._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8df8c5d1._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8f2ccc41._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__95c9d682._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e5d7774._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9edcff87._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a049dfc2._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a5b4bb9a._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a83262a1._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9cd1240._.js +111 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__efb8251e._.js → [root-of-the-server]__a9d7f822._.js} +16 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad08c221._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad585f2f._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__afcb8f7d._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__bc250d43._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__bce2a6e7._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c011bf91._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0ac2895._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c37d6380._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__cae392eb._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__cc2616bb._.js +16 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d501fa9b._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d59c6c15._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d5c1db32._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__dba60c86._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__de14b9ae._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e10643d1._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e2a996e5._.js +127 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3477417._.js +111 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__32dc5513._.js → [root-of-the-server]__e4db362e._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e4e70b86._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e54925af._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e8cbeaca._.js +111 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__cabaac2b._.js → [root-of-the-server]__e8edc5b0._.js} +16 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__eab4d83b._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ead29015._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f056fd83._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f0e99572._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fe1e16d0._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ff9cd277._.js +111 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ffaea2ce._.js +111 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_claude_usage_route_actions_fe002ec1.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_wizard_chart_route_actions_888e2ec1.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_workspaces_[id]_todos_route_actions_0d4ffac5.js +3 -0
- package/.next/standalone/.next/server/chunks/ce889_server_app_api_workspaces_[id]_todos_[todoId]_route_actions_754fe6b9.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__2cffc362._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__f1050870._.js → [root-of-the-server]__47c97637._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_20c2cf3a._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_2a1d79e7._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_5c3c4cfa._.js +7 -5
- package/.next/standalone/.next/server/chunks/ssr/_5f55bf8f._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_ba432382._.js +7 -5
- package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_cortex_page_tsx_0f33d8b3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_settings_page_tsx_f74824b3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_terminal_page_tsx_de5e8d85._.js +4 -4
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__90eeddae._.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +2 -2
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/{74d0ac0b1d0a1b79.js → 10b00b4f66102dcf.js} +1 -1
- package/.next/standalone/.next/static/chunks/14216197f9dcbe5b.css +3 -0
- package/.next/standalone/.next/static/chunks/{16eb77953dee9ea3.js → 19c71a8376c23c58.js} +1 -1
- package/.next/standalone/.next/static/chunks/{3e91fc608659c524.js → 350271fe79509caf.js} +1 -1
- package/.next/standalone/.next/static/chunks/4c9fb0a38f041a3d.js +85 -0
- package/.next/standalone/.next/static/chunks/{70423c7afd8abf5f.js → 597847c22200c212.js} +1 -1
- package/.next/standalone/.next/static/chunks/8f6f93ab45a5ff5b.js +1 -0
- package/.next/standalone/.next/static/chunks/{7ecd9bbb0ce4d68a.js → b7c8fe9b7275a84f.js} +1 -1
- package/.next/standalone/.next/static/chunks/{6245135a7afb8c7b.js → c9b10fc55516d142.js} +8 -6
- package/.next/standalone/.next/static/chunks/d0065f48eab94944.js +1 -0
- package/.next/standalone/.next/static/chunks/{e62bb488d02db247.js → d2566c2dcf53fef3.js} +1 -1
- package/.next/standalone/.next/static/chunks/{180c1b9ff31b979f.js → f7b34c807badf95d.js} +8 -6
- package/.next/standalone/.next/static/chunks/{fb0abd1933b2b2e1.js → ff7d85dade44d1f3.js} +1 -1
- package/.next/standalone/.spaces/cortex-context.md +35 -129
- package/.next/standalone/bin/spaces.js +7 -4
- package/.next/standalone/bin/terminal-server.js +48 -10
- package/.next/standalone/cortex-hook-debug.log +118 -23
- package/.next/standalone/docs/features/claude-usage.md +105 -0
- package/.next/standalone/docs/features/workspace-todos.md +127 -0
- package/.next/standalone/docs/superpowers/plans/2026-04-21-workspace-todos.md +1097 -0
- package/.next/standalone/docs/superpowers/plans/2026-04-22-claude-usage-display.md +749 -0
- package/.next/standalone/docs/superpowers/specs/2026-04-21-workspace-todos-design.md +180 -0
- package/.next/standalone/docs/superpowers/specs/2026-04-22-claude-usage-display-design.md +183 -0
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/src/app/(desktop)/settings/page.tsx +40 -1
- package/.next/standalone/src/app/(desktop)/terminal/page.tsx +98 -7
- package/.next/standalone/src/app/api/benchmark/run/route.ts +24 -3
- package/.next/standalone/src/app/api/claude/usage/route.ts +33 -0
- package/.next/standalone/src/app/api/config/route.ts +3 -0
- package/.next/standalone/src/app/api/cortex/context/route.ts +1 -1
- package/.next/standalone/src/app/api/cortex/knowledge/route.ts +1 -1
- package/.next/standalone/src/app/api/cortex/search/route.ts +14 -2
- package/.next/standalone/src/app/api/folders/route.ts +16 -6
- package/.next/standalone/src/app/api/network/panes/[id]/route.ts +27 -11
- package/.next/standalone/src/app/api/network/panes/route.ts +25 -14
- package/.next/standalone/src/app/api/network/projects/route.ts +11 -4
- package/.next/standalone/src/app/api/network/search/route.ts +21 -14
- package/.next/standalone/src/app/api/network/sessions/[id]/messages/route.ts +18 -11
- package/.next/standalone/src/app/api/network/sessions/[id]/route.ts +16 -9
- package/.next/standalone/src/app/api/network/sessions/route.ts +25 -18
- package/.next/standalone/src/app/api/network/workspaces/[id]/route.ts +21 -12
- package/.next/standalone/src/app/api/network/workspaces/route.ts +16 -14
- package/.next/standalone/src/app/api/whisper/config/route.ts +16 -8
- package/.next/standalone/src/app/api/wizard/chart/route.ts +129 -0
- package/.next/standalone/src/app/api/workspaces/[id]/todos/[todoId]/route.ts +55 -0
- package/.next/standalone/src/app/api/workspaces/[id]/todos/route.ts +43 -0
- package/.next/standalone/src/components/claude/claude-usage-strip.tsx +175 -0
- package/.next/standalone/src/components/cortex/benchmark-tab.tsx +14 -0
- package/.next/standalone/src/components/terminal/terminal-pane.tsx +78 -12
- package/.next/standalone/src/components/wizard/chart-wizard.tsx +405 -0
- package/.next/standalone/src/components/workspace/workspace-todos.tsx +265 -0
- package/.next/standalone/src/hooks/use-benchmark.ts +1 -0
- package/.next/standalone/src/hooks/use-claude-usage.ts +66 -0
- package/.next/standalone/src/hooks/use-speech-recognition.ts +2 -1
- package/.next/standalone/src/lib/claude/credentials.ts +36 -0
- package/.next/standalone/src/lib/claude/usage.ts +69 -0
- package/.next/standalone/src/lib/config.ts +3 -0
- package/.next/standalone/src/lib/cortex/benchmark.ts +17 -1
- package/.next/standalone/src/lib/cortex/index.ts +54 -1
- package/.next/standalone/src/lib/db/queries.ts +105 -90
- package/.next/standalone/src/lib/db/schema.ts +18 -0
- package/.next/standalone/src/lib/shell-user.ts +101 -0
- package/.next/standalone/src/types/claude.ts +39 -0
- package/.next/standalone/tests/db/workspace-todos.test.ts +156 -0
- package/bin/spaces.js +7 -4
- package/bin/terminal-server.js +48 -10
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00fdfbda._.js +0 -114
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04f04898._.js +0 -106
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0903a426._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__09e8ccc9._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__11c684b1._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1572d4ef._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__186cd0bb._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__194955d4._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f054c65._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__212760e6._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__228595ec._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2384f98e._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__277d9445._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__283c890f._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2a2c5fc5._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2d7a454e._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2f300a68._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2f452778._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__35f8e77e._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__379fc2e9._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3b40d79f._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3d3dca2b._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__49e42a3a._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4d5b78d2._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4d903941._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__54163e52._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__563c0817._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5812f90a._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c5e87f5._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__60d15b16._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__614458b7._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__69d315e5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6fe5e6c8._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__71f29038._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__74084e07._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7921aa80._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7e077dd8._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__857c60bb._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__874fe565._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8e2171f7._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__91e23c96._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__929ea03a._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__95659b2d._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9679b91e._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9d68157b._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a90729a1._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac39ecc7._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac84b704._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad4346fa._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b0862d69._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b43306ee._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b689ff5e._.js +0 -106
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba87daaa._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0461005._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c1deb5f3._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c8a62f42._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__cb027619._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__cc6e2885._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf608218._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__cfc1290d._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d0109b9b._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d0125483._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d048ee6b._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d12644e7._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d95165f0._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3cc946c._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e6fd27f8._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__eafd040b._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f44c6882._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f85283de._.js +0 -98
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__feceb3e4._.js +0 -98
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__843070a6._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_3ba93bdd._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_e84a0c06._.js +0 -3
- package/.next/standalone/.next/static/chunks/074df89a63b6a854.js +0 -1
- package/.next/standalone/.next/static/chunks/9d4164833c2c1fd6.js +0 -85
- package/.next/standalone/.next/static/chunks/bffaf378f7745d59.css +0 -3
- package/.next/standalone/.next/static/chunks/f091f4bf8d80fd07.js +0 -1
- /package/.next/standalone/.next/static/{0KefPNmR9NsrZHWWt9Xr7 → bAQs2gDlFrq3e8w9ni9tr}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{0KefPNmR9NsrZHWWt9Xr7 → bAQs2gDlFrq3e8w9ni9tr}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{0KefPNmR9NsrZHWWt9Xr7 → bAQs2gDlFrq3e8w9ni9tr}/_ssgManifest.js +0 -0
|
@@ -4,7 +4,7 @@ import React, { useState, useEffect, useCallback, useRef } from 'react';
|
|
|
4
4
|
import {
|
|
5
5
|
Plus, Loader2, Terminal, Search, MessageSquare, FolderOpen,
|
|
6
6
|
Clock, ChevronDown, ChevronRight, Save, FolderInput, Trash2, Pencil, Check, X,
|
|
7
|
-
Layers, Copy, Home, XCircle, ArrowLeftToLine, Globe, AlertCircle, Users, Brain, Maximize2,
|
|
7
|
+
Layers, Copy, Home, XCircle, ArrowLeftToLine, Globe, AlertCircle, Users, Brain, Maximize2, Wand2,
|
|
8
8
|
} from 'lucide-react';
|
|
9
9
|
import { useRouter } from 'next/navigation';
|
|
10
10
|
import { TerminalPane } from '@/components/terminal/terminal-pane';
|
|
@@ -27,6 +27,9 @@ import { track } from '@/lib/telemetry';
|
|
|
27
27
|
import { LobeSettings } from '@/components/cortex/lobe-settings';
|
|
28
28
|
import { FileExplorer } from '@/components/files/file-explorer';
|
|
29
29
|
import { useTier } from '@/hooks/use-tier';
|
|
30
|
+
import { ProjectWizard } from '@/components/wizard/project-wizard';
|
|
31
|
+
import { WorkspaceTodos } from '@/components/workspace/workspace-todos';
|
|
32
|
+
import { ClaudeUsageStrip } from '@/components/claude/claude-usage-strip';
|
|
30
33
|
|
|
31
34
|
function ResizablePaneGrid({ panes, renderPane }: {
|
|
32
35
|
panes: PaneData[];
|
|
@@ -134,15 +137,27 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
134
137
|
// SSE bus events for real-time updates
|
|
135
138
|
useSSEBusEvents();
|
|
136
139
|
|
|
140
|
+
// Experimental feature toggles (read-once on mount)
|
|
141
|
+
const [todosEnabled, setTodosEnabled] = useState(false);
|
|
142
|
+
useEffect(() => {
|
|
143
|
+
fetch(api('/api/config'))
|
|
144
|
+
.then(r => r.json())
|
|
145
|
+
.then(data => setTodosEnabled(!!data.todosEnabled))
|
|
146
|
+
.catch(() => {});
|
|
147
|
+
}, []);
|
|
148
|
+
|
|
137
149
|
// Workspace state
|
|
138
150
|
const [workspaces, setWorkspaces] = useState<Workspace[]>([]);
|
|
139
151
|
const [activeWorkspace, setActiveWorkspace] = useState<Workspace | null>(null);
|
|
140
152
|
const [showWsPicker, setShowWsPicker] = useState(false);
|
|
141
153
|
const [showSaveAs, setShowSaveAs] = useState(false);
|
|
154
|
+
const [showWizard, setShowWizard] = useState(false);
|
|
142
155
|
const [saveAsName, setSaveAsName] = useState('');
|
|
143
156
|
const [saveAsColor, setSaveAsColor] = useState('#6366f1');
|
|
144
157
|
const [editingWs, setEditingWs] = useState<number | null>(null);
|
|
145
158
|
const [editWsName, setEditWsName] = useState('');
|
|
159
|
+
const [colorPickerWs, setColorPickerWs] = useState<number | null>(null);
|
|
160
|
+
const colorPickerRef = useRef<HTMLDivElement>(null);
|
|
146
161
|
const [lobeOpenWs, setLobeOpenWs] = useState<number | null>(null);
|
|
147
162
|
const [showFiles, setShowFiles] = useState(false);
|
|
148
163
|
const [browseTarget, setBrowseTarget] = useState<string | null>(null);
|
|
@@ -296,6 +311,9 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
296
311
|
if (wsPickerRef.current && !wsPickerRef.current.contains(e.target as Node)) {
|
|
297
312
|
setShowWsPicker(false);
|
|
298
313
|
}
|
|
314
|
+
if (colorPickerRef.current && !colorPickerRef.current.contains(e.target as Node)) {
|
|
315
|
+
setColorPickerWs(null);
|
|
316
|
+
}
|
|
299
317
|
}
|
|
300
318
|
document.addEventListener('mousedown', handleClick);
|
|
301
319
|
return () => document.removeEventListener('mousedown', handleClick);
|
|
@@ -541,6 +559,16 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
541
559
|
await loadWorkspaces();
|
|
542
560
|
}, [loadWorkspaces]);
|
|
543
561
|
|
|
562
|
+
const changeWorkspaceColor = useCallback(async (wsId: number, color: string) => {
|
|
563
|
+
await fetch(api(`/api/workspaces/${wsId}`), {
|
|
564
|
+
method: 'PUT',
|
|
565
|
+
headers: { 'Content-Type': 'application/json' },
|
|
566
|
+
body: JSON.stringify({ color }),
|
|
567
|
+
});
|
|
568
|
+
setColorPickerWs(null);
|
|
569
|
+
await loadWorkspaces();
|
|
570
|
+
}, [loadWorkspaces]);
|
|
571
|
+
|
|
544
572
|
// ─── Render ────────────────────────────────────────────────
|
|
545
573
|
|
|
546
574
|
const visiblePanes = panes.filter(p => !poppedOut.has(p.id) && !minimized.has(p.id));
|
|
@@ -620,7 +648,7 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
620
648
|
))}
|
|
621
649
|
</div>
|
|
622
650
|
|
|
623
|
-
<div className="flex justify-center">
|
|
651
|
+
<div className="flex justify-center gap-3">
|
|
624
652
|
<button
|
|
625
653
|
onClick={createNewWorkspace}
|
|
626
654
|
className="flex items-center gap-2 px-4 py-2.5 text-sm border border-zinc-700 text-zinc-400 rounded-lg hover:text-white hover:border-zinc-500 transition-colors"
|
|
@@ -628,6 +656,13 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
628
656
|
<Plus className="w-4 h-4" />
|
|
629
657
|
New Workspace
|
|
630
658
|
</button>
|
|
659
|
+
<button
|
|
660
|
+
onClick={() => setShowWizard(true)}
|
|
661
|
+
className="flex items-center gap-2 px-4 py-2.5 text-sm border border-dashed border-indigo-500/50 text-indigo-400 rounded-lg hover:text-indigo-300 hover:border-indigo-400 hover:bg-indigo-500/10 transition-colors"
|
|
662
|
+
>
|
|
663
|
+
<Wand2 className="w-4 h-4" />
|
|
664
|
+
Plan a Project
|
|
665
|
+
</button>
|
|
631
666
|
</div>
|
|
632
667
|
|
|
633
668
|
{/* Remote workspaces from network nodes */}
|
|
@@ -708,6 +743,15 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
708
743
|
)}
|
|
709
744
|
</div>
|
|
710
745
|
</div>
|
|
746
|
+
|
|
747
|
+
<ProjectWizard
|
|
748
|
+
isOpen={showWizard}
|
|
749
|
+
onClose={() => setShowWizard(false)}
|
|
750
|
+
onLaunch={(wsId) => {
|
|
751
|
+
setShowWizard(false);
|
|
752
|
+
switchWorkspace(wsId);
|
|
753
|
+
}}
|
|
754
|
+
/>
|
|
711
755
|
</div>
|
|
712
756
|
);
|
|
713
757
|
}
|
|
@@ -774,11 +818,33 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
774
818
|
</div>
|
|
775
819
|
) : (
|
|
776
820
|
<>
|
|
821
|
+
<div className="relative pl-3">
|
|
822
|
+
<button
|
|
823
|
+
onClick={(e) => {
|
|
824
|
+
e.stopPropagation();
|
|
825
|
+
setColorPickerWs(colorPickerWs === ws.id ? null : ws.id);
|
|
826
|
+
}}
|
|
827
|
+
className="w-2.5 h-2.5 rounded-full flex-shrink-0 hover:ring-2 hover:ring-zinc-500/50 transition-all"
|
|
828
|
+
style={{ backgroundColor: ws.color }}
|
|
829
|
+
title="Change color"
|
|
830
|
+
/>
|
|
831
|
+
{colorPickerWs === ws.id && (
|
|
832
|
+
<div
|
|
833
|
+
ref={colorPickerRef}
|
|
834
|
+
className="absolute z-50 top-full left-0 mt-1.5 p-2 bg-zinc-800 border border-zinc-700 rounded-md shadow-xl"
|
|
835
|
+
onClick={(e) => e.stopPropagation()}
|
|
836
|
+
>
|
|
837
|
+
<ColorPicker
|
|
838
|
+
value={ws.color}
|
|
839
|
+
onChange={(c) => changeWorkspaceColor(ws.id, c)}
|
|
840
|
+
/>
|
|
841
|
+
</div>
|
|
842
|
+
)}
|
|
843
|
+
</div>
|
|
777
844
|
<button
|
|
778
845
|
onClick={() => switchWorkspace(ws.id)}
|
|
779
|
-
className="flex items-center gap-2 flex-1
|
|
846
|
+
className="flex items-center gap-2 flex-1 py-2 pr-3 text-left"
|
|
780
847
|
>
|
|
781
|
-
<span className="w-2.5 h-2.5 rounded-full flex-shrink-0" style={{ backgroundColor: ws.color }} />
|
|
782
848
|
<span className="text-xs text-white truncate flex-1">{ws.name}</span>
|
|
783
849
|
<span className="text-[10px] text-zinc-500">{ws.paneCount || 0} panes</span>
|
|
784
850
|
{ws.isActive && <span className="text-[10px] text-indigo-400">active</span>}
|
|
@@ -819,11 +885,17 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
819
885
|
>
|
|
820
886
|
<Plus className="w-3 h-3" /> New Empty
|
|
821
887
|
</button>
|
|
888
|
+
<button
|
|
889
|
+
onClick={() => { setShowWizard(true); setShowWsPicker(false); }}
|
|
890
|
+
className="flex items-center gap-1.5 px-2.5 py-1.5 text-[11px] text-indigo-400 hover:text-indigo-300 hover:bg-indigo-500/10 rounded transition-colors flex-1"
|
|
891
|
+
>
|
|
892
|
+
<Wand2 className="w-3 h-3" /> Plan Project
|
|
893
|
+
</button>
|
|
822
894
|
<button
|
|
823
895
|
onClick={() => { setShowSaveAs(true); setShowWsPicker(false); }}
|
|
824
896
|
className="flex items-center gap-1.5 px-2.5 py-1.5 text-[11px] text-zinc-400 hover:text-white hover:bg-zinc-700 rounded transition-colors flex-1"
|
|
825
897
|
>
|
|
826
|
-
<Copy className="w-3 h-3" /> Duplicate
|
|
898
|
+
<Copy className="w-3 h-3" /> Duplicate
|
|
827
899
|
</button>
|
|
828
900
|
</div>
|
|
829
901
|
</div>
|
|
@@ -837,6 +909,7 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
837
909
|
</div>
|
|
838
910
|
|
|
839
911
|
<div className="flex items-center gap-2">
|
|
912
|
+
<ClaudeUsageStrip enabled={panes.some(p => p.agentType === 'claude' && !poppedOut.has(p.id))} />
|
|
840
913
|
<button
|
|
841
914
|
onClick={() => setShowFiles(!showFiles)}
|
|
842
915
|
className={`flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md border transition-colors ${
|
|
@@ -1193,6 +1266,9 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
1193
1266
|
</div>
|
|
1194
1267
|
)}
|
|
1195
1268
|
|
|
1269
|
+
{/* Workspace todos */}
|
|
1270
|
+
{todosEnabled && <WorkspaceTodos workspace={activeWorkspace} />}
|
|
1271
|
+
|
|
1196
1272
|
{/* File Explorer + Terminal grid + Activity Panel */}
|
|
1197
1273
|
<div className="flex-1 flex overflow-hidden min-h-0">
|
|
1198
1274
|
{showFiles && (
|
|
@@ -1203,7 +1279,7 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
1203
1279
|
/>
|
|
1204
1280
|
</div>
|
|
1205
1281
|
)}
|
|
1206
|
-
{visiblePanes.length === 0 && poppedOut.size === 0 ? (
|
|
1282
|
+
{visiblePanes.length === 0 && poppedOut.size === 0 && minimized.size === 0 ? (
|
|
1207
1283
|
<div className="flex-1 flex items-center justify-center">
|
|
1208
1284
|
<div className="text-center space-y-3">
|
|
1209
1285
|
{/* eslint-disable-next-line @next/next/no-img-element */}
|
|
@@ -1222,7 +1298,13 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
1222
1298
|
) : visiblePanes.length === 0 ? (
|
|
1223
1299
|
<div className="flex-1 flex items-center justify-center">
|
|
1224
1300
|
<div className="text-center space-y-2">
|
|
1225
|
-
<p className="text-zinc-500 text-sm">
|
|
1301
|
+
<p className="text-zinc-500 text-sm">
|
|
1302
|
+
{minimized.size > 0 && poppedOut.size > 0
|
|
1303
|
+
? 'All panes are minimized or popped out.'
|
|
1304
|
+
: minimized.size > 0
|
|
1305
|
+
? `All panes are minimized. Use the toolbar to restore them.`
|
|
1306
|
+
: 'All panes are popped out to separate windows.'}
|
|
1307
|
+
</p>
|
|
1226
1308
|
<button
|
|
1227
1309
|
onClick={() => setShowAdd(true)}
|
|
1228
1310
|
className="px-3 py-1.5 text-xs text-zinc-400 hover:text-white border border-zinc-700 rounded-md hover:border-zinc-600 inline-flex items-center gap-1.5"
|
|
@@ -1286,6 +1368,15 @@ function TerminalPageInner({ terminalToken }: { terminalToken: string }) {
|
|
|
1286
1368
|
/>
|
|
1287
1369
|
)}
|
|
1288
1370
|
</div>
|
|
1371
|
+
|
|
1372
|
+
<ProjectWizard
|
|
1373
|
+
isOpen={showWizard}
|
|
1374
|
+
onClose={() => setShowWizard(false)}
|
|
1375
|
+
onLaunch={(wsId) => {
|
|
1376
|
+
setShowWizard(false);
|
|
1377
|
+
switchWorkspace(wsId);
|
|
1378
|
+
}}
|
|
1379
|
+
/>
|
|
1289
1380
|
</div>
|
|
1290
1381
|
);
|
|
1291
1382
|
}
|
|
@@ -22,6 +22,7 @@ export async function POST(request: NextRequest) {
|
|
|
22
22
|
categories,
|
|
23
23
|
noJudge = false,
|
|
24
24
|
model = 'claude-haiku-4-5',
|
|
25
|
+
concurrency,
|
|
25
26
|
} = body;
|
|
26
27
|
|
|
27
28
|
// Build args for the benchmark CLI
|
|
@@ -30,6 +31,10 @@ export async function POST(request: NextRequest) {
|
|
|
30
31
|
if (categories) args.push('--category', categories);
|
|
31
32
|
if (noJudge) args.push('--no-judge');
|
|
32
33
|
args.push('--models', model);
|
|
34
|
+
if (concurrency != null) {
|
|
35
|
+
const clamped = Math.min(5, Math.max(1, Math.floor(Number(concurrency)) || 1));
|
|
36
|
+
args.push('--concurrency', String(clamped));
|
|
37
|
+
}
|
|
33
38
|
|
|
34
39
|
// Find the cortex repo
|
|
35
40
|
const cortexDir = findCortexDir();
|
|
@@ -77,14 +82,30 @@ export async function POST(request: NextRequest) {
|
|
|
77
82
|
}
|
|
78
83
|
|
|
79
84
|
function findCortexDir(): string | null {
|
|
80
|
-
const candidates = [
|
|
85
|
+
const candidates: string[] = [];
|
|
86
|
+
|
|
87
|
+
// Primary: resolve the addon's package location via NODE_PATH — this tracks
|
|
88
|
+
// however the host actually loaded @spaces/cortex at runtime (managed
|
|
89
|
+
// install under ~/.spaces/packages, symlink, global, etc.).
|
|
90
|
+
try {
|
|
91
|
+
const { createRequire } = require('module') as typeof import('module');
|
|
92
|
+
const req = createRequire(path.join(process.cwd(), 'package.json'));
|
|
93
|
+
candidates.push(path.dirname(req.resolve('@spaces/cortex/package.json')));
|
|
94
|
+
} catch { /* addon not resolvable from this process */ }
|
|
95
|
+
|
|
96
|
+
// Fallbacks: managed install location and local sibling checkouts.
|
|
97
|
+
if (process.env.HOME) {
|
|
98
|
+
candidates.push(path.join(process.env.HOME, '.spaces', 'packages', 'cortex'));
|
|
99
|
+
}
|
|
100
|
+
candidates.push(
|
|
81
101
|
path.resolve(process.cwd(), '../spaces-cortex'),
|
|
82
102
|
path.resolve(process.cwd(), '../../spaces-cortex'),
|
|
83
103
|
'C:\\projects\\spaces-cortex',
|
|
84
104
|
'/c/projects/spaces-cortex',
|
|
85
|
-
|
|
105
|
+
);
|
|
106
|
+
|
|
86
107
|
for (const dir of candidates) {
|
|
87
|
-
if (fs.existsSync(path.join(dir, 'tests', 'benchmark', 'index.ts'))) {
|
|
108
|
+
if (dir && fs.existsSync(path.join(dir, 'tests', 'benchmark', 'index.ts'))) {
|
|
88
109
|
return dir;
|
|
89
110
|
}
|
|
90
111
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
+
import { getAuthUser, withUser } from '@/lib/auth';
|
|
3
|
+
import { ensureInitialized } from '@/lib/db/init';
|
|
4
|
+
import { readClaudeAiOauthTokens, isTokenExpired } from '@/lib/claude/credentials';
|
|
5
|
+
import { fetchUtilization } from '@/lib/claude/usage';
|
|
6
|
+
import type { UsageResponse } from '@/types/claude';
|
|
7
|
+
|
|
8
|
+
export async function GET(request: NextRequest) {
|
|
9
|
+
const user = getAuthUser(request);
|
|
10
|
+
return withUser(user, async () => {
|
|
11
|
+
await ensureInitialized();
|
|
12
|
+
|
|
13
|
+
const tokens = await readClaudeAiOauthTokens();
|
|
14
|
+
if (!tokens) {
|
|
15
|
+
const body: UsageResponse = { status: 'unauthenticated' };
|
|
16
|
+
return NextResponse.json(body);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (isTokenExpired(tokens)) {
|
|
20
|
+
const body: UsageResponse = { status: 'expired' };
|
|
21
|
+
return NextResponse.json(body);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const outcome = await fetchUtilization(tokens.accessToken);
|
|
25
|
+
if (!outcome.ok) {
|
|
26
|
+
const body: UsageResponse = { status: 'upstream_error' };
|
|
27
|
+
return NextResponse.json(body);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const body: UsageResponse = { status: 'ok', data: outcome.data };
|
|
31
|
+
return NextResponse.json(body);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -24,6 +24,9 @@ export async function PUT(request: NextRequest) {
|
|
|
24
24
|
.filter((d: unknown) => typeof d === 'string' && isAbsolute(d))
|
|
25
25
|
.map((d: string) => resolve(d));
|
|
26
26
|
}
|
|
27
|
+
if (typeof body.todosEnabled === 'boolean') {
|
|
28
|
+
updates.todosEnabled = body.todosEnabled;
|
|
29
|
+
}
|
|
27
30
|
const config = writeConfig(user, updates);
|
|
28
31
|
return NextResponse.json(config);
|
|
29
32
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NextResponse } from 'next/server';
|
|
2
2
|
import type { NextRequest } from 'next/server';
|
|
3
3
|
import { getAuthUser, withUser } from '@/lib/auth';
|
|
4
|
-
import { getCortex, isCortexAvailable } from '@/lib/cortex';
|
|
4
|
+
import { getCortex, isCortexAvailable, getCortexClient } from '@/lib/cortex';
|
|
5
5
|
import { ContextEngine } from '@/lib/cortex/retrieval/context-engine';
|
|
6
6
|
import { EntityResolver } from '@/lib/cortex/graph/resolver';
|
|
7
7
|
import { slugify } from '@/lib/cortex/graph/types';
|
|
@@ -2,7 +2,7 @@ import { NextResponse } from 'next/server';
|
|
|
2
2
|
import type { NextRequest } from 'next/server';
|
|
3
3
|
import crypto from 'crypto';
|
|
4
4
|
import { getAuthUser, withUser } from '@/lib/auth';
|
|
5
|
-
import { isCortexAvailable, getCortex } from '@/lib/cortex';
|
|
5
|
+
import { isCortexAvailable, getCortex, getCortexClient } from '@/lib/cortex';
|
|
6
6
|
import { isValidKnowledgeType, isValidLayer, getConfidenceBase } from '@/lib/cortex/knowledge/types';
|
|
7
7
|
import { layerToScope, scopeToLayer, scopeToLayerKey } from '@/lib/cortex/knowledge/compat';
|
|
8
8
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NextResponse } from 'next/server';
|
|
2
2
|
import type { NextRequest } from 'next/server';
|
|
3
3
|
import { getAuthUser, withUser } from '@/lib/auth';
|
|
4
|
-
import { isCortexAvailable, getCortex } from '@/lib/cortex';
|
|
4
|
+
import { isCortexAvailable, getCortex, getCortexClient } from '@/lib/cortex';
|
|
5
5
|
|
|
6
6
|
export async function GET(request: NextRequest) {
|
|
7
7
|
const user = getAuthUser(request);
|
|
@@ -19,7 +19,7 @@ export async function GET(request: NextRequest) {
|
|
|
19
19
|
const layer = url.searchParams.get('layer') as 'personal' | 'workspace' | 'team' | null;
|
|
20
20
|
const limit = parseInt(url.searchParams.get('limit') || '5', 10);
|
|
21
21
|
|
|
22
|
-
// Browse mode: return recent knowledge without a search query
|
|
22
|
+
// Browse mode: return recent knowledge without a search query (local engine only)
|
|
23
23
|
if (!query) {
|
|
24
24
|
const layers = layer ? [layer] : (['personal', 'workspace', 'team'] as const);
|
|
25
25
|
const results: any[] = [];
|
|
@@ -30,6 +30,18 @@ export async function GET(request: NextRequest) {
|
|
|
30
30
|
return NextResponse.json({ results: results.slice(0, limit) });
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
// Use client for search (fans out to all connected servers)
|
|
34
|
+
const client = await getCortexClient();
|
|
35
|
+
if (client) {
|
|
36
|
+
const results = await client.search(query, {
|
|
37
|
+
limit,
|
|
38
|
+
layers: layer ? [layer] : undefined,
|
|
39
|
+
});
|
|
40
|
+
console.log(`[Cortex Search] q="${query.slice(0, 60)}" → ${results.length} results (multi-server)`);
|
|
41
|
+
return NextResponse.json({ results });
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Fallback to direct engine search
|
|
33
45
|
const [queryVector] = await cortex.embedding.embed([query]);
|
|
34
46
|
|
|
35
47
|
const results = await cortex.search.search(queryVector, {
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { NextRequest, NextResponse } from 'next/server';
|
|
2
2
|
import { getAuthUser } from '@/lib/auth';
|
|
3
3
|
import { readConfig } from '@/lib/config';
|
|
4
|
+
import { lookupShellUser, resolveHome, execAsUser } from '@/lib/shell-user';
|
|
4
5
|
import fs from 'fs';
|
|
5
6
|
import path from 'path';
|
|
6
7
|
|
|
7
8
|
export async function GET(request: NextRequest) {
|
|
8
9
|
const user = getAuthUser(request);
|
|
9
|
-
const
|
|
10
|
+
const shellUser = lookupShellUser(user);
|
|
11
|
+
const userHome = resolveHome(shellUser);
|
|
10
12
|
const config = readConfig(user);
|
|
11
13
|
const devDirs = (config.devDirectories.length > 0 ? config.devDirectories : [userHome])
|
|
12
14
|
.map(d => path.resolve(d));
|
|
@@ -52,8 +54,9 @@ export async function GET(request: NextRequest) {
|
|
|
52
54
|
|
|
53
55
|
export async function POST(request: NextRequest) {
|
|
54
56
|
const user = getAuthUser(request);
|
|
57
|
+
const shellUser = lookupShellUser(user);
|
|
58
|
+
const userHome = resolveHome(shellUser);
|
|
55
59
|
const config = readConfig(user);
|
|
56
|
-
const userHome = require('os').homedir();
|
|
57
60
|
const devDirs = (config.devDirectories.length > 0 ? config.devDirectories : [userHome])
|
|
58
61
|
.map((d: string) => path.resolve(d));
|
|
59
62
|
|
|
@@ -83,15 +86,22 @@ export async function POST(request: NextRequest) {
|
|
|
83
86
|
|
|
84
87
|
const newPath = path.join(resolvedParent, name);
|
|
85
88
|
|
|
86
|
-
// Check if already exists
|
|
87
89
|
if (fs.existsSync(newPath)) {
|
|
88
90
|
return NextResponse.json({ error: 'Folder already exists' }, { status: 409 });
|
|
89
91
|
}
|
|
90
92
|
|
|
91
|
-
|
|
93
|
+
// Create the directory as the authenticated shell user, not as the server process user.
|
|
94
|
+
// Otherwise a mkdir inside another user's home fails with EACCES.
|
|
95
|
+
const result = execAsUser(shellUser, ['mkdir', '--', newPath]);
|
|
96
|
+
if (result.status !== 0) {
|
|
97
|
+
const msg = (result.stderr || '').trim() || 'Failed to create folder';
|
|
98
|
+
const status = /exists/i.test(msg) ? 409 : /permission|denied/i.test(msg) ? 403 : 500;
|
|
99
|
+
return NextResponse.json({ error: msg }, { status });
|
|
100
|
+
}
|
|
92
101
|
|
|
93
102
|
return NextResponse.json({ path: newPath }, { status: 201 });
|
|
94
|
-
} catch {
|
|
95
|
-
|
|
103
|
+
} catch (e) {
|
|
104
|
+
const msg = e instanceof Error ? e.message : 'Failed to create folder';
|
|
105
|
+
return NextResponse.json({ error: msg }, { status: 500 });
|
|
96
106
|
}
|
|
97
107
|
}
|
|
@@ -2,6 +2,7 @@ import { NextRequest } from 'next/server';
|
|
|
2
2
|
import { getPro } from '@/lib/pro';
|
|
3
3
|
import { ensureInitialized } from '@/lib/db/init';
|
|
4
4
|
import { getPaneById, updatePane, deletePane } from '@/lib/db/queries';
|
|
5
|
+
import { withUser } from '@/lib/auth';
|
|
5
6
|
|
|
6
7
|
const notAvailable = () =>
|
|
7
8
|
Response.json({ error: 'Requires @spaces/pro' }, { status: 404 });
|
|
@@ -17,11 +18,16 @@ export async function GET(req: NextRequest, { params }: { params: Promise<{ id:
|
|
|
17
18
|
throw e;
|
|
18
19
|
}
|
|
19
20
|
|
|
21
|
+
const keyUser = keyRecord?.username;
|
|
22
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
23
|
+
|
|
20
24
|
const { id } = await params;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
return withUser(keyUser, async () => {
|
|
26
|
+
await ensureInitialized();
|
|
27
|
+
const pane = getPaneById(id);
|
|
28
|
+
if (!pane) return Response.json({ error: 'Pane not found' }, { status: 404 });
|
|
29
|
+
return Response.json(pane);
|
|
30
|
+
});
|
|
25
31
|
}
|
|
26
32
|
|
|
27
33
|
export async function PUT(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
|
|
@@ -36,11 +42,16 @@ export async function PUT(req: NextRequest, { params }: { params: Promise<{ id:
|
|
|
36
42
|
}
|
|
37
43
|
if (keyRecord?.permissions !== 'admin') return Response.json({ error: 'Admin permission required' }, { status: 403 });
|
|
38
44
|
|
|
45
|
+
const keyUser = keyRecord?.username;
|
|
46
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
47
|
+
|
|
39
48
|
const { id } = await params;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
return withUser(keyUser, async () => {
|
|
50
|
+
await ensureInitialized();
|
|
51
|
+
const body = await req.json();
|
|
52
|
+
updatePane(id, body);
|
|
53
|
+
return Response.json({ success: true });
|
|
54
|
+
});
|
|
44
55
|
}
|
|
45
56
|
|
|
46
57
|
export async function DELETE(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
|
|
@@ -55,8 +66,13 @@ export async function DELETE(req: NextRequest, { params }: { params: Promise<{ i
|
|
|
55
66
|
}
|
|
56
67
|
if (keyRecord?.permissions !== 'admin') return Response.json({ error: 'Admin permission required' }, { status: 403 });
|
|
57
68
|
|
|
69
|
+
const keyUser = keyRecord?.username;
|
|
70
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
71
|
+
|
|
58
72
|
const { id } = await params;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
73
|
+
return withUser(keyUser, async () => {
|
|
74
|
+
await ensureInitialized();
|
|
75
|
+
deletePane(id);
|
|
76
|
+
return Response.json({ success: true });
|
|
77
|
+
});
|
|
62
78
|
}
|
|
@@ -3,6 +3,7 @@ import { randomUUID } from 'crypto';
|
|
|
3
3
|
import { getPro } from '@/lib/pro';
|
|
4
4
|
import { ensureInitialized } from '@/lib/db/init';
|
|
5
5
|
import { getPanesByWorkspace, getActivePanes, createPane } from '@/lib/db/queries';
|
|
6
|
+
import { withUser } from '@/lib/auth';
|
|
6
7
|
|
|
7
8
|
const notAvailable = () =>
|
|
8
9
|
Response.json({ error: 'Requires @spaces/pro' }, { status: 404 });
|
|
@@ -18,10 +19,15 @@ export async function GET(req: NextRequest) {
|
|
|
18
19
|
throw e;
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return
|
|
22
|
+
const keyUser = keyRecord?.username;
|
|
23
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
24
|
+
|
|
25
|
+
return withUser(keyUser, async () => {
|
|
26
|
+
await ensureInitialized();
|
|
27
|
+
const wsId = req.nextUrl.searchParams.get('workspace_id');
|
|
28
|
+
const panes = wsId ? getPanesByWorkspace(parseInt(wsId, 10)) : getActivePanes();
|
|
29
|
+
return Response.json({ panes });
|
|
30
|
+
});
|
|
25
31
|
}
|
|
26
32
|
|
|
27
33
|
export async function POST(req: NextRequest) {
|
|
@@ -36,15 +42,20 @@ export async function POST(req: NextRequest) {
|
|
|
36
42
|
}
|
|
37
43
|
if (keyRecord?.permissions !== 'admin') return Response.json({ error: 'Admin permission required' }, { status: 403 });
|
|
38
44
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
const keyUser = keyRecord?.username;
|
|
46
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
47
|
+
|
|
48
|
+
return withUser(keyUser, async () => {
|
|
49
|
+
await ensureInitialized();
|
|
50
|
+
const body = await req.json();
|
|
51
|
+
const pane = createPane({
|
|
52
|
+
id: body.id || randomUUID(),
|
|
53
|
+
title: body.title || 'Terminal',
|
|
54
|
+
color: body.color || '#6366f1',
|
|
55
|
+
cwd: body.cwd || '~',
|
|
56
|
+
agentType: body.agentType || 'shell',
|
|
57
|
+
workspaceId: body.workspaceId,
|
|
58
|
+
});
|
|
59
|
+
return Response.json(pane);
|
|
48
60
|
});
|
|
49
|
-
return Response.json(pane);
|
|
50
61
|
}
|
|
@@ -2,6 +2,7 @@ import { NextRequest } from 'next/server';
|
|
|
2
2
|
import { getPro } from '@/lib/pro';
|
|
3
3
|
import { ensureInitialized } from '@/lib/db/init';
|
|
4
4
|
import { getAllProjects } from '@/lib/db/queries';
|
|
5
|
+
import { withUser } from '@/lib/auth';
|
|
5
6
|
|
|
6
7
|
const notAvailable = () =>
|
|
7
8
|
Response.json({ error: 'Requires @spaces/pro' }, { status: 404 });
|
|
@@ -10,8 +11,9 @@ export async function GET(req: NextRequest) {
|
|
|
10
11
|
const pro = getPro();
|
|
11
12
|
if (!pro) return notAvailable();
|
|
12
13
|
|
|
14
|
+
let keyRecord;
|
|
13
15
|
try {
|
|
14
|
-
pro.network.requireNetworkAuth(req);
|
|
16
|
+
keyRecord = pro.network.requireNetworkAuth(req);
|
|
15
17
|
} catch (e: any) {
|
|
16
18
|
if (e.name === 'NetworkAuthError') {
|
|
17
19
|
return Response.json({ error: e.message }, { status: 401 });
|
|
@@ -19,7 +21,12 @@ export async function GET(req: NextRequest) {
|
|
|
19
21
|
throw e;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
const keyUser = keyRecord?.username;
|
|
25
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
26
|
+
|
|
27
|
+
return withUser(keyUser, async () => {
|
|
28
|
+
await ensureInitialized();
|
|
29
|
+
const projects = getAllProjects();
|
|
30
|
+
return Response.json(projects);
|
|
31
|
+
});
|
|
25
32
|
}
|
|
@@ -2,6 +2,7 @@ import { NextRequest } from 'next/server';
|
|
|
2
2
|
import { getPro } from '@/lib/pro';
|
|
3
3
|
import { ensureInitialized } from '@/lib/db/init';
|
|
4
4
|
import { searchSessions } from '@/lib/db/queries';
|
|
5
|
+
import { withUser } from '@/lib/auth';
|
|
5
6
|
|
|
6
7
|
const notAvailable = () =>
|
|
7
8
|
Response.json({ error: 'Requires @spaces/pro' }, { status: 404 });
|
|
@@ -10,8 +11,9 @@ export async function GET(req: NextRequest) {
|
|
|
10
11
|
const pro = getPro();
|
|
11
12
|
if (!pro) return notAvailable();
|
|
12
13
|
|
|
14
|
+
let keyRecord;
|
|
13
15
|
try {
|
|
14
|
-
pro.network.requireNetworkAuth(req);
|
|
16
|
+
keyRecord = pro.network.requireNetworkAuth(req);
|
|
15
17
|
} catch (e: any) {
|
|
16
18
|
if (e.name === 'NetworkAuthError') {
|
|
17
19
|
return Response.json({ error: e.message }, { status: 401 });
|
|
@@ -19,20 +21,25 @@ export async function GET(req: NextRequest) {
|
|
|
19
21
|
throw e;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
const keyUser = keyRecord?.username;
|
|
25
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
23
26
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
return withUser(keyUser, async () => {
|
|
28
|
+
await ensureInitialized();
|
|
29
|
+
|
|
30
|
+
const { searchParams } = req.nextUrl;
|
|
31
|
+
const query = searchParams.get('q') || '';
|
|
32
|
+
if (!query) {
|
|
33
|
+
return Response.json({ results: [], query: '' });
|
|
34
|
+
}
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
const params = {
|
|
37
|
+
projectId: searchParams.get('projectId') || undefined,
|
|
38
|
+
limit: parseInt(searchParams.get('limit') || '20', 10),
|
|
39
|
+
offset: parseInt(searchParams.get('offset') || '0', 10),
|
|
40
|
+
};
|
|
35
41
|
|
|
36
|
-
|
|
37
|
-
|
|
42
|
+
const results = searchSessions(query, params);
|
|
43
|
+
return Response.json({ results, query });
|
|
44
|
+
});
|
|
38
45
|
}
|