@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
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Workspace Todos — Design
|
|
2
|
+
|
|
3
|
+
**Status:** draft
|
|
4
|
+
**Owner:** jlongo
|
|
5
|
+
**Last updated:** 2026-04-21
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
A lightweight todo list attached to each Spaces workspace so a user can jot down reminders without breaking flow. Lives inline at the top of the `/terminal` page, always visible, scoped to the active workspace. Minimal: text + checkbox + delete. No priorities, due dates, assignees, or agent integration in v1.
|
|
10
|
+
|
|
11
|
+
**Explicitly not in scope (v1):**
|
|
12
|
+
- Agent read/write via MCP or CLI
|
|
13
|
+
- Drag-to-reorder
|
|
14
|
+
- Cross-workspace views or global todos
|
|
15
|
+
- Due dates, priorities, tags, notes
|
|
16
|
+
- Sharing across users (single-user repo instance assumed)
|
|
17
|
+
|
|
18
|
+
## User-facing behavior
|
|
19
|
+
|
|
20
|
+
- Navigate to `/terminal`. A compact todo bar sits above the pane grid.
|
|
21
|
+
- Empty state shows only the input: "Add todo…".
|
|
22
|
+
- Type text, press Enter → todo is added to the bottom of the uncompleted list. Input stays focused for rapid capture.
|
|
23
|
+
- Click a todo's checkbox → strike-through, row animates/sinks below all uncompleted items. Completed rows stack newest-first (most recently completed on top of the completed section).
|
|
24
|
+
- Click a todo's text → inline edit. Enter saves. Esc cancels.
|
|
25
|
+
- Click `×` → deletes the todo (no confirm for v1).
|
|
26
|
+
- "Show completed" toggle (default on) — when off, completed rows hide but are retained in the DB.
|
|
27
|
+
- Switching workspaces in the workspace chooser refetches the list.
|
|
28
|
+
- If the list exceeds ~40% of viewport height, the internal list scrolls; the input stays pinned.
|
|
29
|
+
|
|
30
|
+
No keyboard shortcut to focus the input in v1 (stretch: `Ctrl/Cmd+Shift+T`).
|
|
31
|
+
|
|
32
|
+
## Architecture
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
/terminal page (src/app/(desktop)/terminal/page.tsx)
|
|
36
|
+
├── <WorkspaceTodos workspaceId={activeWorkspaceId}/> (new)
|
|
37
|
+
│ └── GET/POST/PATCH/DELETE /api/workspaces/:id/todos[…]
|
|
38
|
+
└── pane grid (existing)
|
|
39
|
+
|
|
40
|
+
Server:
|
|
41
|
+
src/app/api/workspaces/[id]/todos/route.ts (GET, POST)
|
|
42
|
+
src/app/api/workspaces/[id]/todos/[todoId]/route.ts (PATCH, DELETE)
|
|
43
|
+
|
|
44
|
+
DB (SQLite, per-user):
|
|
45
|
+
workspace_todos table (schema migration appended to src/lib/db/schema.ts)
|
|
46
|
+
query helpers (src/lib/db/queries.ts — new functions)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Data flow: component mounts → `GET` todos for active workspace → render. Mutations are optimistic (update local state immediately, then fire the request; on failure, revert and show a toast using whatever toast infra already exists, or `console.error` for v1 if none).
|
|
50
|
+
|
|
51
|
+
## Key files
|
|
52
|
+
|
|
53
|
+
| Path | Role |
|
|
54
|
+
|---|---|
|
|
55
|
+
| `src/lib/db/schema.ts` | Append `workspace_todos` table + index to `initSchema()` |
|
|
56
|
+
| `src/lib/db/queries.ts` | New: `getWorkspaceTodos`, `addWorkspaceTodo`, `updateWorkspaceTodo`, `deleteWorkspaceTodo` |
|
|
57
|
+
| `src/app/api/workspaces/[id]/todos/route.ts` | New: `GET`, `POST` handlers |
|
|
58
|
+
| `src/app/api/workspaces/[id]/todos/[todoId]/route.ts` | New: `PATCH`, `DELETE` handlers |
|
|
59
|
+
| `src/components/workspace/workspace-todos.tsx` | New: the inline UI component |
|
|
60
|
+
| `src/app/(desktop)/terminal/page.tsx` | Mount `<WorkspaceTodos>` above the pane grid |
|
|
61
|
+
| `src/types/` or inline in component | `Todo` TypeScript type |
|
|
62
|
+
| `tests/db/workspace-todos.test.ts` | New: unit tests for query helpers |
|
|
63
|
+
| `tests/api/workspace-todos.test.ts` | New: happy-path tests for each route |
|
|
64
|
+
| `docs/features/workspace-todos.md` | New: feature doc per `FEATURE_DOC_GUIDE.md` |
|
|
65
|
+
|
|
66
|
+
## Data model
|
|
67
|
+
|
|
68
|
+
### Table: `workspace_todos`
|
|
69
|
+
|
|
70
|
+
```sql
|
|
71
|
+
CREATE TABLE IF NOT EXISTS workspace_todos (
|
|
72
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
73
|
+
workspace_id INTEGER NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
74
|
+
text TEXT NOT NULL,
|
|
75
|
+
completed INTEGER NOT NULL DEFAULT 0,
|
|
76
|
+
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
77
|
+
created TEXT NOT NULL DEFAULT (datetime('now')),
|
|
78
|
+
completed_at TEXT
|
|
79
|
+
);
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_workspace_todos_workspace
|
|
81
|
+
ON workspace_todos(workspace_id);
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Declared inside `initSchema()` in `src/lib/db/schema.ts` — same pattern as every other table in this file. No separate migration file.
|
|
85
|
+
|
|
86
|
+
### TypeScript type
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
export interface Todo {
|
|
90
|
+
id: number;
|
|
91
|
+
workspaceId: number;
|
|
92
|
+
text: string;
|
|
93
|
+
completed: boolean;
|
|
94
|
+
sortOrder: number;
|
|
95
|
+
created: string;
|
|
96
|
+
completedAt: string | null;
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Invariants
|
|
101
|
+
|
|
102
|
+
- `sort_order` is only meaningful among uncompleted rows. When adding a todo, `sort_order = max(sort_order for uncompleted rows in this workspace) + 1`.
|
|
103
|
+
- Listing order: `ORDER BY completed ASC, CASE WHEN completed = 0 THEN sort_order END ASC, completed_at DESC` — uncompleted first by sort_order, then completed newest-first.
|
|
104
|
+
- `completed_at` is set to `datetime('now')` when `completed` flips 0→1, cleared to `NULL` on 1→0.
|
|
105
|
+
- Workspace delete cascades and removes all associated todos (`ON DELETE CASCADE`).
|
|
106
|
+
|
|
107
|
+
## APIs / contracts
|
|
108
|
+
|
|
109
|
+
All routes live under `src/app/api/workspaces/[id]/todos/`. Auth piggybacks on whatever protects the rest of `/api/workspaces/*` — no new gate introduced.
|
|
110
|
+
|
|
111
|
+
### `GET /api/workspaces/:id/todos`
|
|
112
|
+
- **Returns:** `Todo[]` sorted per the invariant above.
|
|
113
|
+
- **Errors:** `404` if workspace does not exist.
|
|
114
|
+
|
|
115
|
+
### `POST /api/workspaces/:id/todos`
|
|
116
|
+
- **Body:** `{ text: string }` — trimmed server-side; reject empty after trim with `400`.
|
|
117
|
+
- **Returns:** the newly created `Todo`.
|
|
118
|
+
- **Errors:** `400` empty text, `404` workspace not found.
|
|
119
|
+
|
|
120
|
+
### `PATCH /api/workspaces/:id/todos/:todoId`
|
|
121
|
+
- **Body:** `{ text?: string, completed?: boolean }` — at least one field required.
|
|
122
|
+
- **Behavior:** if `completed` flips 0→1, server sets `completed_at = now()`; on 1→0, clears it. Text updates trim and reject empty.
|
|
123
|
+
- **Returns:** the updated `Todo`.
|
|
124
|
+
- **Errors:** `400` invalid body, `404` not found.
|
|
125
|
+
|
|
126
|
+
### `DELETE /api/workspaces/:id/todos/:todoId`
|
|
127
|
+
- **Returns:** `{ ok: true }`.
|
|
128
|
+
- **Errors:** `404` not found.
|
|
129
|
+
|
|
130
|
+
No bulk endpoints, no reorder endpoint in v1.
|
|
131
|
+
|
|
132
|
+
## Configuration & environment
|
|
133
|
+
|
|
134
|
+
None. No env vars, no feature flag, no tier gate — this is a Community-tier feature, always on.
|
|
135
|
+
|
|
136
|
+
## How to run / test locally
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# from repo root
|
|
140
|
+
npm install
|
|
141
|
+
npm run build
|
|
142
|
+
npm start
|
|
143
|
+
# visit http://localhost:3457/terminal
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Manual QA checklist:
|
|
147
|
+
1. Add 3 todos. Check order (newest at bottom of uncompleted).
|
|
148
|
+
2. Check the middle one → it strikes through and sinks below the uncompleted pair.
|
|
149
|
+
3. Toggle "show completed" off → the completed one hides.
|
|
150
|
+
4. Toggle it back on, uncheck the completed one → it returns to uncompleted.
|
|
151
|
+
5. Edit a todo's text via inline edit. Reload the page → change persisted.
|
|
152
|
+
6. Delete a todo → gone.
|
|
153
|
+
7. Switch workspaces in the workspace chooser → list swaps; original workspace's todos are still intact when you switch back.
|
|
154
|
+
8. Delete a workspace that has todos → no orphan rows remain (verify via SQLite CLI: `SELECT * FROM workspace_todos WHERE workspace_id = <deleted_id>;`).
|
|
155
|
+
|
|
156
|
+
Automated:
|
|
157
|
+
```bash
|
|
158
|
+
npm test -- tests/db/workspace-todos.test.ts
|
|
159
|
+
npm test -- tests/api/workspace-todos.test.ts
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Known quirks & decisions
|
|
163
|
+
|
|
164
|
+
- **No agent write access (v1).** A coworker's "pi /todos" plugin lets agents add todos from inside the session, which is genuinely powerful. Deferred because it requires a new MCP tool or CLI surface, and the user wants to ship the UI-only version first to validate the habit.
|
|
165
|
+
- **Schema lives in `initSchema()`, not a migration file.** Matches the existing convention in `src/lib/db/schema.ts` — no separate migration files exist in this repo.
|
|
166
|
+
- **No drag-to-reorder.** YAGNI. Adding at end is fine for short lists; revisit if users start making 20+ todo lists.
|
|
167
|
+
- **No confirm on delete.** Matches the minimal ethos; if users delete the wrong one, they re-add. Add a 3-second undo toast in a follow-up if this proves painful.
|
|
168
|
+
- **Optimistic updates without a toast library.** If the repo doesn't already have a toast system, v1 falls back to `console.error` on failure plus refetching state. This is acceptable for a local-only app.
|
|
169
|
+
- **Ship to `main` directly, no PR.** Per user preference for this repo.
|
|
170
|
+
|
|
171
|
+
## Open questions / TODOs
|
|
172
|
+
|
|
173
|
+
- [ ] Confirm the active-workspace hook/context already exposes `workspaceId` to the terminal page, or whether `<WorkspaceTodos>` needs to fetch it itself. Check `src/components/workspace/workspace-chooser.tsx` during implementation.
|
|
174
|
+
- [ ] Decide whether the "show completed" toggle state persists across reloads (localStorage) or is ephemeral. Default: ephemeral for v1.
|
|
175
|
+
- [ ] Stretch: keyboard shortcut to focus the add-todo input from anywhere on the terminal page.
|
|
176
|
+
- [ ] Stretch: agent write access via MCP tool once UI v1 proves out.
|
|
177
|
+
|
|
178
|
+
## Changelog
|
|
179
|
+
|
|
180
|
+
- 2026-04-21 — Initial design.
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# Claude Usage Display — Design
|
|
2
|
+
|
|
3
|
+
**Status:** draft
|
|
4
|
+
**Owner:** jlongo
|
|
5
|
+
**Last updated:** 2026-04-22
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
A compact global readout of Anthropic plan-usage rate limits (the same data Claude Code's `/usage` command shows), mounted in the terminal page header. Surfaces how much of the user's 5-hour and 7-day rate-limit windows has been consumed, so they can judge whether to launch another Claude pane or throttle back. Data is pulled from Anthropic's `/api/oauth/usage` endpoint using the OAuth access token that Claude Code has already stored on disk.
|
|
10
|
+
|
|
11
|
+
**Explicitly not in scope (v1):**
|
|
12
|
+
- OAuth token refresh (passive — if access token is expired, the widget shows a "sign in via Claude Code" hint).
|
|
13
|
+
- Per-pane / per-session usage breakdown (the Anthropic endpoint is account-wide).
|
|
14
|
+
- Historical usage graphs.
|
|
15
|
+
- Non-Claude-AI auth modes (API keys, Bedrock, Vertex). If the user isn't a Claude.ai subscriber with a local OAuth token, the widget hides.
|
|
16
|
+
|
|
17
|
+
## User-facing behavior
|
|
18
|
+
|
|
19
|
+
- Enter any workspace on `/terminal`.
|
|
20
|
+
- If at least one pane in the active workspace has `agentType === 'claude'`, a compact usage strip appears in the header, to the right of the workspace selector and pane-count text.
|
|
21
|
+
- The strip shows three thin progress bars side-by-side:
|
|
22
|
+
- **5h** — 5-hour rolling window (all models).
|
|
23
|
+
- **Opus** — 7-day Opus window.
|
|
24
|
+
- **Sonnet** — 7-day Sonnet window.
|
|
25
|
+
- Each bar fills left-to-right with a percent label. Color: green ≤ 70%, amber 70-90%, red > 90%.
|
|
26
|
+
- Hover any bar → tooltip `Resets in 2h 14m`.
|
|
27
|
+
- If `extra_usage.is_enabled` and `used_credits > 0`, a small `+$X overage` badge appears to the right.
|
|
28
|
+
- Click the strip → a popover expands showing all five rate-limit windows (5h, 7d overall, 7d Opus, 7d Sonnet, 7d OAuth-apps) plus the full overage block. Layout mirrors Claude Code's `/usage` settings tab. Click outside to dismiss.
|
|
29
|
+
- If the access token is missing or expired, the strip renders dimmed with a single label `sign in via Claude Code` and a subtle icon. No error toast.
|
|
30
|
+
- If the Anthropic endpoint returns 4xx/5xx or times out, the strip hides silently (no noisy failure).
|
|
31
|
+
|
|
32
|
+
## Architecture
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
UI (terminal page header)
|
|
36
|
+
└── <ClaudeUsageStrip /> (src/components/claude/claude-usage-strip.tsx)
|
|
37
|
+
└── useClaudeUsage() (polls /api/claude/usage every 60s)
|
|
38
|
+
└── GET /api/claude/usage (src/app/api/claude/usage/route.ts)
|
|
39
|
+
├── reads ~/.claude/.credentials.json (claudeAiOauth field)
|
|
40
|
+
├── checks expiresAt — returns 401 if expired
|
|
41
|
+
├── calls https://api.anthropic.com/api/oauth/usage
|
|
42
|
+
│ with Bearer <accessToken>, User-Agent "claude-code/<ver>"
|
|
43
|
+
└── caches 30s in-memory (keyed by accessToken prefix)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Data flow: every 60s the component calls the route; the route returns a cached `Utilization` object (30s TTL) or fetches fresh. Either way the component gets the same JSON shape and renders.
|
|
47
|
+
|
|
48
|
+
## Key files
|
|
49
|
+
|
|
50
|
+
| Path | Role |
|
|
51
|
+
|---|---|
|
|
52
|
+
| `src/lib/claude/credentials.ts` | New. Reads `~/.claude/.credentials.json` and extracts the `claudeAiOauth` tokens with an expiry check. |
|
|
53
|
+
| `src/lib/claude/usage.ts` | New. Thin wrapper: given an access token, calls Anthropic's `/api/oauth/usage` and returns `Utilization`. In-memory 30s cache. |
|
|
54
|
+
| `src/app/api/claude/usage/route.ts` | New. `GET` handler that wires credentials → usage → JSON response. Handles missing/expired token with structured error shapes. |
|
|
55
|
+
| `src/types/claude.ts` | Modify. Add `Utilization`, `RateLimit`, `ExtraUsage`, `UsageResponse` types. |
|
|
56
|
+
| `src/hooks/use-claude-usage.ts` | New. React hook — polls the route, exposes `{ data, error, loading }`. Skips polling when `enabled: false`. |
|
|
57
|
+
| `src/components/claude/claude-usage-strip.tsx` | New. The compact 3-bar strip + expanded popover. |
|
|
58
|
+
| `src/app/(desktop)/terminal/page.tsx` | Modify. Mount `<ClaudeUsageStrip />` in header; pass `hasClaudePane` flag so it only renders when relevant. |
|
|
59
|
+
| `docs/features/claude-usage.md` | New. Feature doc. |
|
|
60
|
+
|
|
61
|
+
## Data model
|
|
62
|
+
|
|
63
|
+
No DB changes. All transient state; no persistence beyond the in-memory cache in the API route.
|
|
64
|
+
|
|
65
|
+
### TypeScript types
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
// src/types/claude.ts (append)
|
|
69
|
+
|
|
70
|
+
export interface RateLimit {
|
|
71
|
+
utilization: number | null; // 0-100
|
|
72
|
+
resets_at: string | null; // ISO 8601
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface ExtraUsage {
|
|
76
|
+
is_enabled: boolean;
|
|
77
|
+
monthly_limit: number | null;
|
|
78
|
+
used_credits: number | null;
|
|
79
|
+
utilization: number | null;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface Utilization {
|
|
83
|
+
five_hour?: RateLimit | null;
|
|
84
|
+
seven_day?: RateLimit | null;
|
|
85
|
+
seven_day_oauth_apps?: RateLimit | null;
|
|
86
|
+
seven_day_opus?: RateLimit | null;
|
|
87
|
+
seven_day_sonnet?: RateLimit | null;
|
|
88
|
+
extra_usage?: ExtraUsage | null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export type UsageResponse =
|
|
92
|
+
| { status: 'ok'; data: Utilization }
|
|
93
|
+
| { status: 'unauthenticated' }
|
|
94
|
+
| { status: 'expired' }
|
|
95
|
+
| { status: 'upstream_error' };
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Credentials file shape (read-only, owned by Claude Code)
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"claudeAiOauth": {
|
|
103
|
+
"accessToken": "...",
|
|
104
|
+
"refreshToken": "...",
|
|
105
|
+
"expiresAt": 1735678800000,
|
|
106
|
+
"scopes": ["..."]
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Path: `$CLAUDE_CONFIG_DIR/.credentials.json` where `CLAUDE_CONFIG_DIR` defaults to `~/.claude`. Mode 0600. Spaces reads it with `fs.readFile`; if the file is missing, unreadable, or malformed, treat as unauthenticated.
|
|
112
|
+
|
|
113
|
+
## APIs / contracts
|
|
114
|
+
|
|
115
|
+
### Internal endpoint: `GET /api/claude/usage`
|
|
116
|
+
|
|
117
|
+
**Response shapes (all JSON, content-type `application/json`):**
|
|
118
|
+
|
|
119
|
+
- `200` `{ status: "ok", data: Utilization }` — happy path.
|
|
120
|
+
- `200` `{ status: "unauthenticated" }` — credentials file missing or no `claudeAiOauth` block. Not a 4xx because this is an expected state, not a client error.
|
|
121
|
+
- `200` `{ status: "expired" }` — access token is past `expiresAt`.
|
|
122
|
+
- `200` `{ status: "upstream_error" }` — Anthropic endpoint returned non-2xx or timed out.
|
|
123
|
+
|
|
124
|
+
Auth: piggybacks on `withUser`/`getAuthUser` like every other `/api/*` route. No new gate.
|
|
125
|
+
|
|
126
|
+
**Caching:** in-memory `Map<tokenPrefix, { fetchedAt, data }>`. Hit if `Date.now() - fetchedAt < 30_000`. `tokenPrefix` is the first 16 chars of `accessToken` (enough to distinguish, avoids holding full tokens in a non-secure cache). Cache is process-local; it resets on server restart.
|
|
127
|
+
|
|
128
|
+
**Upstream call:**
|
|
129
|
+
- Method: `GET`
|
|
130
|
+
- URL: `https://api.anthropic.com/api/oauth/usage`
|
|
131
|
+
- Headers: `Authorization: Bearer <accessToken>`, `Content-Type: application/json`, `User-Agent: claude-code/<version-from-package-json>` (Anthropic uses the UA to classify the client; mimicking Claude Code is intentional here since we're reading the same account data).
|
|
132
|
+
- Timeout: 5 seconds via `AbortController`.
|
|
133
|
+
|
|
134
|
+
### External call
|
|
135
|
+
|
|
136
|
+
- **Anthropic `/api/oauth/usage`** — see above. No secret of our own; we use the user's own OAuth access token.
|
|
137
|
+
|
|
138
|
+
## Configuration & environment
|
|
139
|
+
|
|
140
|
+
- `CLAUDE_CONFIG_DIR` — respected (defaults to `~/.claude`). Same env var Claude Code uses.
|
|
141
|
+
- No feature flag, no tier gate. Community-tier feature.
|
|
142
|
+
- No changes to env-var requirements for Spaces.
|
|
143
|
+
|
|
144
|
+
## How to run / test locally
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
npm install
|
|
148
|
+
npm run build
|
|
149
|
+
npm start
|
|
150
|
+
# visit http://localhost:3457/terminal, enter a workspace, add a Claude pane
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Manual QA:
|
|
154
|
+
|
|
155
|
+
1. With a valid OAuth session (you can run Claude Code once to produce `.credentials.json`): open a workspace, add a Claude pane, verify the usage strip appears in the header. Percentages should match what `/usage` shows inside Claude Code.
|
|
156
|
+
2. Hover each bar → tooltip shows `Resets in …` timing.
|
|
157
|
+
3. Click the strip → popover expands with all windows + overage block.
|
|
158
|
+
4. Delete the Claude pane (only shell panes left) → strip hides.
|
|
159
|
+
5. Expired token simulation: edit `.credentials.json` to set `claudeAiOauth.expiresAt` to a past timestamp; reload — strip shows "sign in via Claude Code".
|
|
160
|
+
6. Missing credentials: temporarily move `.credentials.json` aside; reload — strip hides (or shows sign-in hint per UI state).
|
|
161
|
+
7. Offline simulation: disconnect network; within a minute the strip should silently hide (`upstream_error` state), then reappear when connectivity returns.
|
|
162
|
+
|
|
163
|
+
Automated: none for v1. The behavior is I/O-heavy (file read + remote call) and doesn't benefit from unit tests; the repo convention is to skip route tests for this shape of work.
|
|
164
|
+
|
|
165
|
+
## Known quirks & decisions
|
|
166
|
+
|
|
167
|
+
- **Passive refresh.** We do not refresh the OAuth access token when it expires. Claude Code owns the refresh lifecycle and also writes to `.credentials.json`; duplicating that logic risks racing Claude Code over the same file. Users refresh by running any Claude Code command (or `/login`).
|
|
168
|
+
- **User-Agent mimicry.** The Anthropic endpoint expects a Claude-Code-shaped UA. We send `claude-code/<ver>` where `<ver>` comes from a constant in `src/lib/claude/usage.ts` (bumped manually if upstream ever changes expectations). This is not a secret; it's classification data.
|
|
169
|
+
- **Account-wide data, rendered once.** Even though the widget is UX-scoped to "when a Claude pane is present," the data is account-wide and identical across all panes. Rendering once in the header, not per-pane, is intentional honesty.
|
|
170
|
+
- **30s server cache + 60s client poll.** Means the UI can be up to 90s stale at the outer bound; acceptable for rate-limit windows that move in hours.
|
|
171
|
+
- **Token prefix as cache key.** Using a 16-char prefix of `accessToken` rather than a full hash because the user ID isn't handy in this path. Collisions are theoretically possible but effectively nil.
|
|
172
|
+
- **Graceful degradation.** Every failure mode (missing file, expired token, bad JSON, upstream error, timeout) resolves to one of four structured `UsageResponse` statuses — the UI renders accordingly. No exceptions bubble to the user.
|
|
173
|
+
- **Direct-to-main workflow.** Per repo convention.
|
|
174
|
+
|
|
175
|
+
## Open questions / TODOs
|
|
176
|
+
|
|
177
|
+
- [ ] Active refresh — mirror Claude Code's `/oauth/token` refresh dance to keep the widget live past access-token expiry. Deferred per v1 scope.
|
|
178
|
+
- [ ] Per-model detail on hover (messages/tokens sent toward each window) — Anthropic doesn't currently expose this via `/api/oauth/usage`, would need a different endpoint.
|
|
179
|
+
- [ ] Local-JSONL-based "session cost so far" complement — different data source, different feature. Could coexist.
|
|
180
|
+
|
|
181
|
+
## Changelog
|
|
182
|
+
|
|
183
|
+
- 2026-04-22 — Initial design.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jlongo78/agent-spaces",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.9",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@jlongo78/agent-spaces",
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.9",
|
|
10
10
|
"license": "AGPL-3.0-only",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@dnd-kit/core": "^6.3.1",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useState, useEffect, useRef } from 'react';
|
|
4
4
|
import { useSync } from '@/hooks/use-sessions';
|
|
5
|
-
import { Settings, RefreshCw, FolderOpen, Loader2, Shield, CheckCircle2, BarChart3, Plus, X, FolderCode } from 'lucide-react';
|
|
5
|
+
import { Settings, RefreshCw, FolderOpen, Loader2, Shield, CheckCircle2, BarChart3, Plus, X, FolderCode, ListTodo } from 'lucide-react';
|
|
6
6
|
import { api } from '@/lib/api';
|
|
7
7
|
import { track, setOptOut } from '@/lib/telemetry';
|
|
8
8
|
import { useTier } from '@/hooks/use-tier';
|
|
@@ -36,6 +36,9 @@ export default function SettingsPage() {
|
|
|
36
36
|
const [telemetryOptOut, setTelemetryOptOut] = useState(false);
|
|
37
37
|
const [telemetryLoading, setTelemetryLoading] = useState(true);
|
|
38
38
|
|
|
39
|
+
// Workspace todos toggle
|
|
40
|
+
const [todosEnabled, setTodosEnabled] = useState(false);
|
|
41
|
+
|
|
39
42
|
useEffect(() => {
|
|
40
43
|
if (!hasAuth) {
|
|
41
44
|
setTotpLoading(false);
|
|
@@ -70,11 +73,22 @@ export default function SettingsPage() {
|
|
|
70
73
|
.then(data => {
|
|
71
74
|
setTelemetryOptOut(data.telemetryOptOut);
|
|
72
75
|
setDevDirectories(data.devDirectories || []);
|
|
76
|
+
setTodosEnabled(!!data.todosEnabled);
|
|
73
77
|
setTelemetryLoading(false);
|
|
74
78
|
})
|
|
75
79
|
.catch(() => setTelemetryLoading(false));
|
|
76
80
|
}, []);
|
|
77
81
|
|
|
82
|
+
const handleTodosToggle = async () => {
|
|
83
|
+
const next = !todosEnabled;
|
|
84
|
+
setTodosEnabled(next);
|
|
85
|
+
await fetch(api('/api/config'), {
|
|
86
|
+
method: 'PUT',
|
|
87
|
+
headers: { 'Content-Type': 'application/json' },
|
|
88
|
+
body: JSON.stringify({ todosEnabled: next }),
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
|
|
78
92
|
const saveDevDirectories = async (dirs: string[]) => {
|
|
79
93
|
setDevDirectories(dirs);
|
|
80
94
|
await fetch(api('/api/config'), {
|
|
@@ -391,6 +405,31 @@ export default function SettingsPage() {
|
|
|
391
405
|
)}
|
|
392
406
|
</div>
|
|
393
407
|
|
|
408
|
+
{/* Experimental features */}
|
|
409
|
+
<div className="bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-lg p-5">
|
|
410
|
+
<h3 className="font-semibold flex items-center gap-2 mb-3">
|
|
411
|
+
<ListTodo className="w-4 h-4" />
|
|
412
|
+
Experimental
|
|
413
|
+
</h3>
|
|
414
|
+
<p className="text-sm text-muted-foreground mb-3">
|
|
415
|
+
Opt-in to features that are still being shaped.
|
|
416
|
+
</p>
|
|
417
|
+
<label className="flex items-start gap-3 cursor-pointer">
|
|
418
|
+
<input
|
|
419
|
+
type="checkbox"
|
|
420
|
+
checked={todosEnabled}
|
|
421
|
+
onChange={handleTodosToggle}
|
|
422
|
+
className="mt-0.5 w-4 h-4 rounded border-zinc-300 dark:border-zinc-700 text-indigo-500 focus:ring-indigo-500"
|
|
423
|
+
/>
|
|
424
|
+
<div>
|
|
425
|
+
<div className="text-sm">Workspace todos</div>
|
|
426
|
+
<div className="text-xs text-muted-foreground mt-0.5">
|
|
427
|
+
Show a horizontal row of todo chips above the pane grid in each workspace.
|
|
428
|
+
</div>
|
|
429
|
+
</div>
|
|
430
|
+
</label>
|
|
431
|
+
</div>
|
|
432
|
+
|
|
394
433
|
{/* Telemetry */}
|
|
395
434
|
<div className="bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-lg p-5">
|
|
396
435
|
<h3 className="font-semibold flex items-center gap-2 mb-3">
|