@jlongo78/agent-spaces 0.9.7 → 0.9.8
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 +1 -0
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/routes-manifest.json +6 -0
- 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 +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/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/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/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 +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/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 +1 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00e90fc6._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__01ab8675._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__03974f05._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__bb331da9._.js → [root-of-the-server]__046c9b91._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04ae6bf0._.js +98 -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]__186cd0bb._.js → [root-of-the-server]__0ac4ea3f._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b8e64cb._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__d95165f0._.js → [root-of-the-server]__0facd39e._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__69d315e5._.js → [root-of-the-server]__10bc76a3._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__9d68157b._.js → [root-of-the-server]__115f3934._.js} +2 -2
- 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 +22 -33
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__91e23c96._.js → [root-of-the-server]__17a3b966._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__277d9445._.js → [root-of-the-server]__17d3a2b2._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a86c055._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__d0125483._.js → [root-of-the-server]__20b5e9c4._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__35f8e77e._.js → [root-of-the-server]__28d6fbd8._.js} +3 -3
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__04f04898._.js → [root-of-the-server]__2a3f866b._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__a95bb38b._.js → [root-of-the-server]__316617e7._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__b689ff5e._.js → [root-of-the-server]__32ad8f71._.js} +3 -11
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__6fe5e6c8._.js → [root-of-the-server]__35457394._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1f054c65._.js → [root-of-the-server]__35de78e6._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2f452778._.js → [root-of-the-server]__3685ffcb._.js} +3 -3
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__614458b7._.js → [root-of-the-server]__38954988._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__426ad936._.js +106 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4985c034._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e6fd27f8._.js → [root-of-the-server]__5c6ce9ed._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5cebe58a._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d5e4789._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__74084e07._.js → [root-of-the-server]__65676930._.js} +2 -2
- 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 +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6c64af29._.js +131 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__d12644e7._.js → [root-of-the-server]__73aed9f5._.js} +3 -3
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__ac84b704._.js → [root-of-the-server]__79b6a9bb._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e56abacf._.js → [root-of-the-server]__7db704c6._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__812ca02b._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__821f50fa._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8716b86e._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__884ef754._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__88cdbd68._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__89d9aba9._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0903a426._.js → [root-of-the-server]__8d536cb5._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8df8c5d1._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2d7a454e._.js → [root-of-the-server]__8f2ccc41._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2a2c5fc5._.js → [root-of-the-server]__95c9d682._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e5d7774._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__cc6e2885._.js → [root-of-the-server]__9edcff87._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__feceb3e4._.js → [root-of-the-server]__a049dfc2._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a5b4bb9a._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__929ea03a._.js → [root-of-the-server]__a83262a1._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9cd1240._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2f300a68._.js → [root-of-the-server]__a9d7f822._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad08c221._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad585f2f._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__afcb8f7d._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__bc250d43._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__bce2a6e7._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__ad4346fa._.js → [root-of-the-server]__c011bf91._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0ac2895._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__563c0817._.js → [root-of-the-server]__c37d6380._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__4d5b78d2._.js → [root-of-the-server]__cae392eb._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__cc2616bb._.js +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d501fa9b._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__d0109b9b._.js → [root-of-the-server]__d59c6c15._.js} +3 -3
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__11c684b1._.js → [root-of-the-server]__d5c1db32._.js} +3 -3
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__b43306ee._.js → [root-of-the-server]__dba60c86._.js} +3 -3
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2384f98e._.js → [root-of-the-server]__de14b9ae._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__c1deb5f3._.js → [root-of-the-server]__e10643d1._.js} +3 -3
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__00fdfbda._.js → [root-of-the-server]__e2a996e5._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__4d903941._.js → [root-of-the-server]__e3477417._.js} +2 -2
- 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]__49e42a3a._.js → [root-of-the-server]__e4e70b86._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__ac39ecc7._.js → [root-of-the-server]__e54925af._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__a90729a1._.js → [root-of-the-server]__e8edc5b0._.js} +3 -3
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__eafd040b._.js → [root-of-the-server]__eab4d83b._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ead29015._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__194955d4._.js → [root-of-the-server]__f056fd83._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f0e99572._.js +98 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fe1e16d0._.js +98 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__c8a62f42._.js → [root-of-the-server]__ff9cd277._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ffaea2ce._.js +98 -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/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/_17b946fd._.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/_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)_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 +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/0852575eb90c1e8d.js +85 -0
- package/.next/standalone/.next/static/chunks/{74d0ac0b1d0a1b79.js → 10b00b4f66102dcf.js} +1 -1
- package/.next/standalone/.next/static/chunks/{16eb77953dee9ea3.js → 19c71a8376c23c58.js} +1 -1
- package/.next/standalone/.next/static/chunks/2b769d1597e4fc1c.css +3 -0
- package/.next/standalone/.next/static/chunks/{3e91fc608659c524.js → 350271fe79509caf.js} +1 -1
- package/.next/standalone/.next/static/chunks/{70423c7afd8abf5f.js → 597847c22200c212.js} +1 -1
- package/.next/standalone/.next/static/chunks/{fb0abd1933b2b2e1.js → 7f6a14f1849fa94d.js} +1 -1
- 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/{180c1b9ff31b979f.js → f7b34c807badf95d.js} +8 -6
- 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 +57 -23
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/src/app/(desktop)/terminal/page.tsx +44 -5
- package/.next/standalone/src/app/api/benchmark/run/route.ts +24 -3
- 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/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/hooks/use-benchmark.ts +1 -0
- package/.next/standalone/src/hooks/use-speech-recognition.ts +2 -1
- 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 +2 -89
- package/.next/standalone/src/lib/shell-user.ts +101 -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]__09e8ccc9._.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]__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]__283c890f._.js +0 -3
- 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]__54163e52._.js +0 -98
- 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]__71f29038._.js +0 -98
- 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]__7ebc4280._.js +0 -131
- 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]__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]__b0862d69._.js +0 -98
- 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]__cabaac2b._.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]__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]__d048ee6b._.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]__efb8251e._.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/ssr/[root-of-the-server]__843070a6._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_e84a0c06._.js +0 -3
- 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 → u1pHON3drz1mBi7owkbBP}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{0KefPNmR9NsrZHWWt9Xr7 → u1pHON3drz1mBi7owkbBP}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{0KefPNmR9NsrZHWWt9Xr7 → u1pHON3drz1mBi7owkbBP}/_ssgManifest.js +0 -0
|
@@ -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 { getSessions, getWorkspacesForSession } 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,25 +21,30 @@ 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
|
-
projectId: searchParams.get('projectId') || undefined,
|
|
27
|
-
projectPath: searchParams.get('projectPath') || undefined,
|
|
28
|
-
search: searchParams.get('search') || undefined,
|
|
29
|
-
sortBy: searchParams.get('sortBy') || 'modified',
|
|
30
|
-
sortDir: searchParams.get('sortDir') || 'DESC',
|
|
31
|
-
offset: parseInt(searchParams.get('offset') || '0', 10),
|
|
32
|
-
limit: parseInt(searchParams.get('limit') || '50', 10),
|
|
33
|
-
};
|
|
27
|
+
return withUser(keyUser, async () => {
|
|
28
|
+
await ensureInitialized();
|
|
34
29
|
|
|
35
|
-
|
|
30
|
+
const { searchParams } = req.nextUrl;
|
|
31
|
+
const params = {
|
|
32
|
+
projectId: searchParams.get('projectId') || undefined,
|
|
33
|
+
projectPath: searchParams.get('projectPath') || undefined,
|
|
34
|
+
search: searchParams.get('search') || undefined,
|
|
35
|
+
sortBy: searchParams.get('sortBy') || 'modified',
|
|
36
|
+
sortDir: searchParams.get('sortDir') || 'DESC',
|
|
37
|
+
offset: parseInt(searchParams.get('offset') || '0', 10),
|
|
38
|
+
limit: parseInt(searchParams.get('limit') || '50', 10),
|
|
39
|
+
};
|
|
36
40
|
|
|
37
|
-
|
|
38
|
-
...s,
|
|
39
|
-
workspaces: getWorkspacesForSession(s.id),
|
|
40
|
-
}));
|
|
41
|
+
const result = getSessions(params);
|
|
41
42
|
|
|
42
|
-
|
|
43
|
+
const sessions = result.sessions.map(s => ({
|
|
44
|
+
...s,
|
|
45
|
+
workspaces: getWorkspacesForSession(s.id),
|
|
46
|
+
}));
|
|
47
|
+
|
|
48
|
+
return Response.json({ sessions, total: result.total });
|
|
49
|
+
});
|
|
43
50
|
}
|
|
@@ -21,16 +21,15 @@ export async function GET(req: NextRequest, { params }: { params: Promise<{ id:
|
|
|
21
21
|
throw e;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
const { id } = await params;
|
|
25
24
|
const keyUser = keyRecord?.username;
|
|
25
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
26
26
|
|
|
27
|
-
const
|
|
27
|
+
const { id } = await params;
|
|
28
|
+
return withUser(keyUser, async () => {
|
|
28
29
|
await ensureInitialized();
|
|
29
30
|
const panes = getPanesByWorkspace(parseInt(id, 10));
|
|
30
31
|
return Response.json({ panes });
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
return keyUser ? withUser(keyUser, handler) : handler();
|
|
32
|
+
});
|
|
34
33
|
}
|
|
35
34
|
|
|
36
35
|
export async function PUT(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
|
|
@@ -45,11 +44,16 @@ export async function PUT(req: NextRequest, { params }: { params: Promise<{ id:
|
|
|
45
44
|
}
|
|
46
45
|
if (keyRecord?.permissions !== 'admin') return Response.json({ error: 'Admin permission required' }, { status: 403 });
|
|
47
46
|
|
|
47
|
+
const keyUser = keyRecord?.username;
|
|
48
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
49
|
+
|
|
48
50
|
const { id } = await params;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
return withUser(keyUser, async () => {
|
|
52
|
+
await ensureInitialized();
|
|
53
|
+
const body = await req.json();
|
|
54
|
+
updateWorkspace(parseInt(id, 10), body);
|
|
55
|
+
return Response.json({ success: true });
|
|
56
|
+
});
|
|
53
57
|
}
|
|
54
58
|
|
|
55
59
|
export async function DELETE(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
|
|
@@ -64,8 +68,13 @@ export async function DELETE(req: NextRequest, { params }: { params: Promise<{ i
|
|
|
64
68
|
}
|
|
65
69
|
if (keyRecord?.permissions !== 'admin') return Response.json({ error: 'Admin permission required' }, { status: 403 });
|
|
66
70
|
|
|
71
|
+
const keyUser = keyRecord?.username;
|
|
72
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
73
|
+
|
|
67
74
|
const { id } = await params;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
75
|
+
return withUser(keyUser, async () => {
|
|
76
|
+
await ensureInitialized();
|
|
77
|
+
deleteWorkspaceFull(parseInt(id, 10));
|
|
78
|
+
return Response.json({ success: true });
|
|
79
|
+
});
|
|
71
80
|
}
|
|
@@ -3,6 +3,7 @@ import { getPro } from '@/lib/pro';
|
|
|
3
3
|
import { ensureInitialized } from '@/lib/db/init';
|
|
4
4
|
import { getDb } from '@/lib/db/schema';
|
|
5
5
|
import { createWorkspace } 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 });
|
|
@@ -23,16 +24,12 @@ export async function GET(req: NextRequest) {
|
|
|
23
24
|
|
|
24
25
|
// Scope to the API key's user so remote access sees their workspaces, not the server admin's
|
|
25
26
|
const keyUser = keyRecord?.username;
|
|
26
|
-
if (keyUser) {
|
|
27
|
-
const { withUser } = await import('@/lib/auth');
|
|
28
|
-
return withUser(keyUser, async () => {
|
|
29
|
-
await ensureInitialized();
|
|
30
|
-
return buildWorkspaceResponse();
|
|
31
|
-
});
|
|
32
|
-
}
|
|
27
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
33
28
|
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
return withUser(keyUser, async () => {
|
|
30
|
+
await ensureInitialized();
|
|
31
|
+
return buildWorkspaceResponse();
|
|
32
|
+
});
|
|
36
33
|
}
|
|
37
34
|
|
|
38
35
|
export async function POST(req: NextRequest) {
|
|
@@ -50,12 +47,17 @@ export async function POST(req: NextRequest) {
|
|
|
50
47
|
return Response.json({ error: 'Admin permission required' }, { status: 403 });
|
|
51
48
|
}
|
|
52
49
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
const keyUser = keyRecord?.username;
|
|
51
|
+
if (!keyUser) return Response.json({ error: 'API key missing user binding' }, { status: 401 });
|
|
52
|
+
|
|
53
|
+
return withUser(keyUser, async () => {
|
|
54
|
+
await ensureInitialized();
|
|
55
|
+
const body = await req.json();
|
|
56
|
+
if (!body.name) return Response.json({ error: 'name is required' }, { status: 400 });
|
|
56
57
|
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
const workspace = createWorkspace(body.name, body.description, body.color);
|
|
59
|
+
return Response.json(workspace);
|
|
60
|
+
});
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
function buildWorkspaceResponse() {
|
|
@@ -1,27 +1,35 @@
|
|
|
1
1
|
import { NextResponse } from 'next/server';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import os from 'os';
|
|
4
5
|
|
|
5
6
|
export const dynamic = 'force-dynamic';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* GET /api/whisper/config — returns Groq/OpenAI key + endpoint for direct browser calls.
|
|
9
|
-
*
|
|
10
|
+
* Reads config.json directly (bypasses cortex addon to avoid stale require cache).
|
|
11
|
+
* Falls back to env vars.
|
|
10
12
|
*/
|
|
11
13
|
export async function GET() {
|
|
12
|
-
// Try cortex config first (user-configured keys in settings)
|
|
13
14
|
let configGroq = '';
|
|
14
15
|
let configOpenai = '';
|
|
16
|
+
|
|
17
|
+
// Read config.json directly instead of going through cortex addon
|
|
15
18
|
try {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
const configPath = path.join(os.homedir(), '.spaces', 'config.json');
|
|
20
|
+
if (fs.existsSync(configPath)) {
|
|
21
|
+
const raw = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
22
|
+
const cortex = raw.cortex || {};
|
|
23
|
+
configGroq = cortex.groq_api_key || '';
|
|
24
|
+
configOpenai = cortex.openai_api_key || '';
|
|
25
|
+
}
|
|
20
26
|
} catch {}
|
|
21
27
|
|
|
22
28
|
const groqKey = configGroq || process.env.GROQ_API_KEY;
|
|
23
29
|
const openaiKey = configOpenai || process.env.OPENAI_API_KEY;
|
|
24
30
|
|
|
31
|
+
console.log(`[Whisper Config] configGroq=${configGroq ? configGroq.slice(0, 8) + '...' : 'EMPTY'} configOpenai=${configOpenai ? configOpenai.slice(0, 8) + '...' : 'EMPTY'} envGroq=${process.env.GROQ_API_KEY ? 'SET' : 'UNSET'} envOpenai=${process.env.OPENAI_API_KEY ? 'SET' : 'UNSET'} → returning ${groqKey ? 'GROQ' : openaiKey ? 'OPENAI' : 'NONE'}`);
|
|
32
|
+
|
|
25
33
|
if (groqKey) {
|
|
26
34
|
return NextResponse.json({
|
|
27
35
|
apiKey: groqKey,
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
+
import { getAuthUser, withUser } from '@/lib/auth';
|
|
3
|
+
import { getUserPaths } from '@/lib/config';
|
|
4
|
+
|
|
5
|
+
export const dynamic = 'force-dynamic';
|
|
6
|
+
|
|
7
|
+
const SYSTEM_PROMPT = `You are a data visualization assistant. Your job: help the user design a chart from their data through conversation. Ask 1-2 questions at a time. Converge toward a concrete chart spec.
|
|
8
|
+
|
|
9
|
+
Supported chart types:
|
|
10
|
+
- bar: Vertical or horizontal bar chart
|
|
11
|
+
- line: Line chart with optional area fill
|
|
12
|
+
- pie: Pie or donut chart
|
|
13
|
+
- scatter: Scatter plot with optional trend line
|
|
14
|
+
- heatmap: Color-coded grid/matrix
|
|
15
|
+
- table: Formatted data table with highlights
|
|
16
|
+
|
|
17
|
+
After each exchange, output an updated chart spec as a JSON block.
|
|
18
|
+
|
|
19
|
+
For SINGLE-SERIES data (bar, pie, scatter, simple line), use this format:
|
|
20
|
+
|
|
21
|
+
\`\`\`json
|
|
22
|
+
{
|
|
23
|
+
"chart": { "title": "...", "type": "bar", "xAxis": "...", "yAxis": "...", "color": "#6366f1" },
|
|
24
|
+
"data": [
|
|
25
|
+
{ "label": "Q1", "value": 100 },
|
|
26
|
+
{ "label": "Q2", "value": 150 }
|
|
27
|
+
],
|
|
28
|
+
"options": { "showLegend": true, "stacked": false, "fillArea": false },
|
|
29
|
+
"summary": "One-line description"
|
|
30
|
+
}
|
|
31
|
+
\`\`\`
|
|
32
|
+
|
|
33
|
+
For MULTI-SERIES data (multiple lines, grouped comparison), use this format:
|
|
34
|
+
|
|
35
|
+
\`\`\`json
|
|
36
|
+
{
|
|
37
|
+
"chart": { "title": "...", "type": "line", "xAxis": "...", "yAxis": "...", "color": "#6366f1" },
|
|
38
|
+
"data": [],
|
|
39
|
+
"labels": ["Jan", "Feb", "Mar"],
|
|
40
|
+
"series": [
|
|
41
|
+
{ "name": "East", "color": "#6366f1", "values": [100, 120, 140] },
|
|
42
|
+
{ "name": "West", "color": "#22c55e", "values": [80, 95, 110] }
|
|
43
|
+
],
|
|
44
|
+
"options": { "showLegend": true, "stacked": false, "fillArea": false },
|
|
45
|
+
"summary": "One-line description"
|
|
46
|
+
}
|
|
47
|
+
\`\`\`
|
|
48
|
+
|
|
49
|
+
Available series colors: #6366f1, #22c55e, #f59e0b, #ef4444, #3b82f6, #ec4899, #14b8a6, #a855f7, #f97316
|
|
50
|
+
|
|
51
|
+
Guidelines:
|
|
52
|
+
- Ask about: what data they have, what story they want to tell, audience, preferred chart type
|
|
53
|
+
- Suggest chart types based on the data shape (categorical → bar/pie, time series → line, correlation → scatter)
|
|
54
|
+
- Use multi-series format when the user asks for multiple lines, regions, categories, or comparisons
|
|
55
|
+
- Generate sample data if the user describes their data verbally
|
|
56
|
+
- Keep it simple — one chart at a time
|
|
57
|
+
- When the spec looks solid, suggest the user review it`;
|
|
58
|
+
|
|
59
|
+
export async function POST(request: NextRequest) {
|
|
60
|
+
const user = getAuthUser(request);
|
|
61
|
+
return withUser(user, async () => {
|
|
62
|
+
const { configPath } = getUserPaths(user);
|
|
63
|
+
let config: any = {};
|
|
64
|
+
try {
|
|
65
|
+
const { readCortexConfig } = await import('@/lib/cortex/config');
|
|
66
|
+
config = readCortexConfig(configPath);
|
|
67
|
+
} catch {}
|
|
68
|
+
|
|
69
|
+
const anthropicKey = config.anthropic_api_key || process.env.ANTHROPIC_API_KEY;
|
|
70
|
+
if (!anthropicKey) {
|
|
71
|
+
return NextResponse.json(
|
|
72
|
+
{ error: 'No API key configured. Add your Anthropic key in Settings > Cortex.' },
|
|
73
|
+
{ status: 400 }
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const body = await request.json();
|
|
78
|
+
const { messages, currentSpec } = body;
|
|
79
|
+
|
|
80
|
+
const apiMessages = messages.map((m: any) => ({
|
|
81
|
+
role: m.role,
|
|
82
|
+
content: m.content,
|
|
83
|
+
}));
|
|
84
|
+
|
|
85
|
+
let systemPrompt = SYSTEM_PROMPT;
|
|
86
|
+
if (currentSpec) {
|
|
87
|
+
systemPrompt += `\n\nCurrent chart spec:\n\`\`\`json\n${JSON.stringify(currentSpec, null, 2)}\n\`\`\``;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
try {
|
|
91
|
+
const res = await fetch('https://api.anthropic.com/v1/messages', {
|
|
92
|
+
method: 'POST',
|
|
93
|
+
headers: {
|
|
94
|
+
'Content-Type': 'application/json',
|
|
95
|
+
'x-api-key': anthropicKey,
|
|
96
|
+
'anthropic-version': '2023-06-01',
|
|
97
|
+
},
|
|
98
|
+
body: JSON.stringify({
|
|
99
|
+
model: 'claude-haiku-4-5-20251001',
|
|
100
|
+
max_tokens: 2048,
|
|
101
|
+
system: systemPrompt,
|
|
102
|
+
messages: apiMessages,
|
|
103
|
+
}),
|
|
104
|
+
signal: AbortSignal.timeout(30000),
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
if (!res.ok) {
|
|
108
|
+
return NextResponse.json({ error: `API error: ${res.status}` }, { status: 502 });
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const data = await res.json();
|
|
112
|
+
const reply = data.content?.[0]?.text || '';
|
|
113
|
+
|
|
114
|
+
// Extract JSON spec from reply
|
|
115
|
+
let spec = currentSpec;
|
|
116
|
+
const jsonMatch = reply.match(/```json\s*([\s\S]*?)```/);
|
|
117
|
+
if (jsonMatch) {
|
|
118
|
+
try {
|
|
119
|
+
spec = JSON.parse(jsonMatch[1]);
|
|
120
|
+
} catch { /* keep current spec */ }
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const cleanReply = reply.replace(/```json[\s\S]*?```/g, '').trim();
|
|
124
|
+
return NextResponse.json({ reply: cleanReply, spec });
|
|
125
|
+
} catch (e: any) {
|
|
126
|
+
return NextResponse.json({ error: e.message }, { status: 500 });
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
@@ -310,6 +310,7 @@ function RunLauncher({ onRunComplete }: { onRunComplete: () => void }) {
|
|
|
310
310
|
const [selectedCategories, setSelectedCategories] = useState<string[]>([]);
|
|
311
311
|
const [customModel, setCustomModel] = useState('claude-haiku-4-5');
|
|
312
312
|
const [noJudge, setNoJudge] = useState(false);
|
|
313
|
+
const [concurrency, setConcurrency] = useState(1);
|
|
313
314
|
const [showCustom, setShowCustom] = useState(false);
|
|
314
315
|
|
|
315
316
|
const isRunning = status?.running === true;
|
|
@@ -333,6 +334,7 @@ function RunLauncher({ onRunComplete }: { onRunComplete: () => void }) {
|
|
|
333
334
|
categories: selectedCategories.length > 0 ? selectedCategories.join(',') : undefined,
|
|
334
335
|
noJudge,
|
|
335
336
|
model: customModel,
|
|
337
|
+
concurrency,
|
|
336
338
|
});
|
|
337
339
|
}
|
|
338
340
|
|
|
@@ -470,6 +472,18 @@ function RunLauncher({ onRunComplete }: { onRunComplete: () => void }) {
|
|
|
470
472
|
</select>
|
|
471
473
|
</div>
|
|
472
474
|
|
|
475
|
+
<div>
|
|
476
|
+
<div className="text-[10px] text-gray-600 uppercase tracking-wider mb-1">Concurrency</div>
|
|
477
|
+
<input
|
|
478
|
+
type="number"
|
|
479
|
+
min={1}
|
|
480
|
+
max={5}
|
|
481
|
+
value={concurrency}
|
|
482
|
+
onChange={e => setConcurrency(Math.min(5, Math.max(1, parseInt(e.target.value) || 1)))}
|
|
483
|
+
className="w-16 px-2.5 py-1 text-xs bg-white/5 border border-white/10 rounded-md text-gray-300 focus:outline-none focus:border-purple-500/50"
|
|
484
|
+
/>
|
|
485
|
+
</div>
|
|
486
|
+
|
|
473
487
|
<div className="flex items-center gap-2 mt-4">
|
|
474
488
|
<input
|
|
475
489
|
id="no-judge"
|
|
@@ -225,17 +225,33 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
|
|
|
225
225
|
resolve();
|
|
226
226
|
}));
|
|
227
227
|
|
|
228
|
-
// Ctrl-C
|
|
229
|
-
//
|
|
228
|
+
// Ctrl-C: when there's a selection, copy it to clipboard then clear selection.
|
|
229
|
+
// We return false to stop xterm sending ^C (SIGINT), and manually write to clipboard
|
|
230
|
+
// since xterm's selection isn't in the browser's native Selection API.
|
|
231
|
+
// Ctrl-V: return false WITHOUT preventDefault so browser fires its native paste event
|
|
232
|
+
// which xterm's paste handler picks up via onData.
|
|
230
233
|
term.attachCustomKeyEventHandler((ev: KeyboardEvent) => {
|
|
231
234
|
if (ev.type !== 'keydown') return true;
|
|
232
235
|
if (ev.ctrlKey && ev.key === 'c' && term.hasSelection()) {
|
|
233
|
-
|
|
236
|
+
const text = term.getSelection();
|
|
237
|
+
if (text && navigator.clipboard?.writeText) {
|
|
238
|
+
navigator.clipboard.writeText(text).catch(() => {
|
|
239
|
+
// Fallback: create a temporary textarea to copy
|
|
240
|
+
const ta = document.createElement('textarea');
|
|
241
|
+
ta.value = text;
|
|
242
|
+
ta.style.position = 'fixed';
|
|
243
|
+
ta.style.opacity = '0';
|
|
244
|
+
document.body.appendChild(ta);
|
|
245
|
+
ta.select();
|
|
246
|
+
document.execCommand('copy');
|
|
247
|
+
document.body.removeChild(ta);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
234
250
|
term.clearSelection();
|
|
235
251
|
return false;
|
|
236
252
|
}
|
|
237
253
|
if (ev.ctrlKey && ev.key === 'v') {
|
|
238
|
-
return false;
|
|
254
|
+
return false;
|
|
239
255
|
}
|
|
240
256
|
return true;
|
|
241
257
|
});
|
|
@@ -415,9 +431,22 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
|
|
|
415
431
|
};
|
|
416
432
|
|
|
417
433
|
// ─── Quest toolbar: send keystrokes to terminal ───
|
|
434
|
+
// Debug helper: always logs to console; writes to xterm only when enabled via
|
|
435
|
+
// localStorage.setItem('spaces-voice-debug', '1')
|
|
436
|
+
const debugVoice = (msg: string) => {
|
|
437
|
+
console.log('[Voice]', msg);
|
|
438
|
+
try {
|
|
439
|
+
if (localStorage.getItem('spaces-voice-debug') && xtermRef.current) {
|
|
440
|
+
xtermRef.current.write(`\r\n\x1b[93m[Voice] ${msg}\x1b[0m\r\n`);
|
|
441
|
+
}
|
|
442
|
+
} catch {}
|
|
443
|
+
};
|
|
444
|
+
|
|
418
445
|
const sendKey = (key: string) => {
|
|
419
446
|
if (wsRef.current?.readyState === WebSocket.OPEN) {
|
|
420
447
|
wsRef.current.send(JSON.stringify({ type: 'data', data: key }));
|
|
448
|
+
} else {
|
|
449
|
+
debugVoice(`sendKey failed: WebSocket state=${wsRef.current?.readyState}`);
|
|
421
450
|
}
|
|
422
451
|
};
|
|
423
452
|
|
|
@@ -427,6 +456,8 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
|
|
|
427
456
|
if (wsRef.current?.readyState === WebSocket.OPEN) {
|
|
428
457
|
const bracketed = `\x1b[200~${text}\x1b[201~`;
|
|
429
458
|
wsRef.current.send(JSON.stringify({ type: 'data', data: bracketed }));
|
|
459
|
+
} else {
|
|
460
|
+
debugVoice(`sendPaste failed: WebSocket state=${wsRef.current?.readyState}`);
|
|
430
461
|
}
|
|
431
462
|
};
|
|
432
463
|
|
|
@@ -475,6 +506,7 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
|
|
|
475
506
|
let text = '';
|
|
476
507
|
if (cfg?.apiKey) {
|
|
477
508
|
// Direct call to Groq/OpenAI — skip server proxy for speed
|
|
509
|
+
console.log('[Voice] Transcribing via', cfg.backend || 'direct');
|
|
478
510
|
const form = new FormData();
|
|
479
511
|
form.append('file', blob, 'audio.webm');
|
|
480
512
|
form.append('model', cfg.model);
|
|
@@ -488,21 +520,29 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
|
|
|
488
520
|
if (res.ok) {
|
|
489
521
|
const data = await res.json();
|
|
490
522
|
text = data.text || '';
|
|
523
|
+
} else {
|
|
524
|
+
console.error('[Voice] API error:', res.status, await res.text().catch(() => ''));
|
|
491
525
|
}
|
|
492
526
|
} else {
|
|
493
527
|
// Fallback to server proxy
|
|
528
|
+
console.log('[Voice] Transcribing via server proxy, cfg:', cfg);
|
|
494
529
|
const form = new FormData();
|
|
495
530
|
form.append('audio', blob, 'dictation.webm');
|
|
496
531
|
const res = await fetch('/api/whisper', { method: 'POST', body: form });
|
|
497
532
|
if (res.ok) {
|
|
498
533
|
const data = await res.json();
|
|
499
534
|
text = data.text || '';
|
|
535
|
+
} else {
|
|
536
|
+
console.error('[Voice] Server proxy error:', res.status, await res.text().catch(() => ''));
|
|
500
537
|
}
|
|
501
538
|
}
|
|
539
|
+
console.log('[Voice] Result:', JSON.stringify(text));
|
|
502
540
|
if (text.trim()) {
|
|
503
541
|
setQuestInput(prev => prev ? `${prev} ${text.trim()}` : text.trim());
|
|
504
542
|
}
|
|
505
|
-
} catch {
|
|
543
|
+
} catch (err) {
|
|
544
|
+
console.error('[Voice] Exception:', err);
|
|
545
|
+
}
|
|
506
546
|
setQuestMicStatus('off');
|
|
507
547
|
};
|
|
508
548
|
|
|
@@ -556,8 +596,14 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
|
|
|
556
596
|
try {
|
|
557
597
|
// Fetch config once, cache for subsequent cycles
|
|
558
598
|
if (!questWhisperCfgRef.current) {
|
|
599
|
+
debugVoice('Fetching whisper config...');
|
|
559
600
|
const cfgRes = await fetch('/api/whisper/config');
|
|
560
|
-
if (cfgRes.ok)
|
|
601
|
+
if (cfgRes.ok) {
|
|
602
|
+
questWhisperCfgRef.current = await cfgRes.json();
|
|
603
|
+
debugVoice(`Config: backend=${questWhisperCfgRef.current?.backend || 'none'} hasKey=${!!questWhisperCfgRef.current?.apiKey}`);
|
|
604
|
+
} else {
|
|
605
|
+
debugVoice(`Config fetch failed: ${cfgRes.status} ${await cfgRes.text().catch(() => '')}`);
|
|
606
|
+
}
|
|
561
607
|
}
|
|
562
608
|
if (!questImmersiveRef.current) return;
|
|
563
609
|
|
|
@@ -588,6 +634,7 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
|
|
|
588
634
|
|
|
589
635
|
// No speech — restart or clean up
|
|
590
636
|
if (!hasSpeech || chunks.length === 0) {
|
|
637
|
+
debugVoice(`No speech detected (hasSpeech=${hasSpeech} chunks=${chunks.length}) — restarting`);
|
|
591
638
|
questDrainingRef.current = false;
|
|
592
639
|
if (questImmersiveRef.current) setTimeout(startImmersiveCycle, 300);
|
|
593
640
|
else setQuestMicStatus('off');
|
|
@@ -595,13 +642,15 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
|
|
|
595
642
|
}
|
|
596
643
|
|
|
597
644
|
const blob = new Blob(chunks, { type: 'audio/webm' });
|
|
598
|
-
if (blob.size < 500) { setTimeout(startImmersiveCycle, 300); return; }
|
|
645
|
+
if (blob.size < 500) { debugVoice(`Blob too small (${blob.size}b) — restarting`); setTimeout(startImmersiveCycle, 300); return; }
|
|
599
646
|
|
|
600
647
|
setQuestMicStatus('transcribing');
|
|
601
648
|
const cfg = questWhisperCfgRef.current;
|
|
649
|
+
debugVoice(`Transcribing blob=${blob.size}b hasCfg=${!!cfg} hasKey=${!!cfg?.apiKey}`);
|
|
602
650
|
try {
|
|
603
651
|
let text = '';
|
|
604
652
|
if (cfg?.apiKey) {
|
|
653
|
+
debugVoice(`Calling ${cfg.backend}: ${cfg.apiUrl}`);
|
|
605
654
|
const form = new FormData();
|
|
606
655
|
form.append('file', blob, 'audio.webm');
|
|
607
656
|
form.append('model', cfg.model);
|
|
@@ -612,23 +661,39 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
|
|
|
612
661
|
headers: { 'Authorization': `Bearer ${cfg.apiKey}` },
|
|
613
662
|
body: form,
|
|
614
663
|
});
|
|
615
|
-
if (res.ok)
|
|
664
|
+
if (res.ok) {
|
|
665
|
+
text = (await res.json()).text || '';
|
|
666
|
+
debugVoice(`Transcribed: "${text}"`);
|
|
667
|
+
} else {
|
|
668
|
+
const errBody = await res.text().catch(() => '');
|
|
669
|
+
debugVoice(`API error: ${res.status} ${errBody.slice(0, 200)}`);
|
|
670
|
+
}
|
|
616
671
|
} else {
|
|
672
|
+
debugVoice('No API key — using server proxy /api/whisper');
|
|
617
673
|
const form = new FormData();
|
|
618
674
|
form.append('audio', blob, 'dictation.webm');
|
|
619
675
|
const res = await fetch('/api/whisper', { method: 'POST', body: form });
|
|
620
|
-
if (res.ok)
|
|
676
|
+
if (res.ok) {
|
|
677
|
+
text = (await res.json()).text || '';
|
|
678
|
+
debugVoice(`Transcribed: "${text}"`);
|
|
679
|
+
} else {
|
|
680
|
+
const errBody = await res.text().catch(() => '');
|
|
681
|
+
debugVoice(`Proxy error: ${res.status} ${errBody.slice(0, 200)}`);
|
|
682
|
+
}
|
|
621
683
|
}
|
|
684
|
+
debugVoice(`Result: "${text}" ws=${wsRef.current?.readyState} immersive=${questImmersiveRef.current} draining=${questDrainingRef.current}`);
|
|
622
685
|
if (text.trim() && (questImmersiveRef.current || questDrainingRef.current)) {
|
|
623
686
|
if (immersiveAutoSendRef.current) {
|
|
624
|
-
|
|
687
|
+
debugVoice(`Sending: "${text.trim()}" + Enter`);
|
|
625
688
|
sendKey(text.trim() + '\r');
|
|
626
689
|
} else {
|
|
627
|
-
|
|
690
|
+
debugVoice(`Putting in input: "${text.trim()}"`);
|
|
628
691
|
setQuestInput((prev) => prev ? prev + ' ' + text.trim() : text.trim());
|
|
629
692
|
}
|
|
630
693
|
}
|
|
631
|
-
} catch {
|
|
694
|
+
} catch (err: any) {
|
|
695
|
+
debugVoice(`Exception: ${err.message || err}`);
|
|
696
|
+
}
|
|
632
697
|
|
|
633
698
|
// Loop: restart listening if still immersive, or clean up if draining
|
|
634
699
|
questDrainingRef.current = false;
|
|
@@ -736,6 +801,7 @@ export function TerminalPane({ pane, onClose, onUpdate, isMaximized, onToggleMax
|
|
|
736
801
|
}
|
|
737
802
|
if (finalText.length > lastFinalLength) {
|
|
738
803
|
const newText = finalText.slice(lastFinalLength);
|
|
804
|
+
console.log('[Voice] recognized:', JSON.stringify(newText.trim()), 'autoSend:', autoSend, 'ws:', wsRef.current?.readyState);
|
|
739
805
|
if (autoSend && immersiveAutoSendRef.current) {
|
|
740
806
|
// Single write: text + Enter in one message (avoids race between split sends)
|
|
741
807
|
sendKey(newText.trim() + '\r');
|