@jlongo78/agent-spaces 0.10.0-beta.2 → 0.10.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/admin/users/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/cortex/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/network/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/sessions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/terminal/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +2 -2
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/users.html +1 -1
- package/.next/standalone/.next/server/app/admin/users.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/analytics.html +1 -1
- package/.next/standalone/.next/server/app/analytics.rsc +2 -2
- package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin/analytics/route.js +4 -2
- package/.next/standalone/.next/server/app/api/admin/analytics/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin/users/[id]/route.js +4 -2
- package/.next/standalone/.next/server/app/api/admin/users/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin/users/route.js +4 -2
- package/.next/standalone/.next/server/app/api/admin/users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/analytics/overview/route.js +5 -4
- package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login/route.js +3 -2
- package/.next/standalone/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route.js +2 -2
- package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route.js +3 -2
- package/.next/standalone/.next/server/app/api/auth/me/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/totp/setup/route.js +2 -2
- package/.next/standalone/.next/server/app/api/auth/totp/setup/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/totp/status/route.js +2 -2
- package/.next/standalone/.next/server/app/api/auth/totp/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/totp/verify/route.js +3 -2
- package/.next/standalone/.next/server/app/api/auth/totp/verify/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js +4 -3
- package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/benchmark/run/route.js +4 -3
- package/.next/standalone/.next/server/app/api/benchmark/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js +4 -3
- package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/benchmark/runs/route.js +4 -3
- package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/benchmark/status/route.js +4 -3
- package/.next/standalone/.next/server/app/api/benchmark/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bulk/route.js +5 -4
- package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/chat/route.js +4 -2
- package/.next/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/claude/usage/route.js +5 -4
- package/.next/standalone/.next/server/app/api/claude/usage/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/config/route.js +3 -3
- package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/context/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/context/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/export/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/export/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/import/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/import/status/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/import/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/lobes/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/lobes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js +3 -3
- package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js +3 -3
- package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/search/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/settings/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/settings/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/status/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/timeline/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/timeline/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/usage/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/usage/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js +4 -3
- package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js +5 -3
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/files/route.js +3 -2
- package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/folders/route.js +3 -3
- package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/connect-callback/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/connect-callback/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/connect-request/[id]/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/connect-request/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/connect-request/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/connect-request/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/discovered/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/discovered/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/handshake/route.js +4 -3
- package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/health/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/health/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/identity/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/identity/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/keys/[id]/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/keys/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/keys/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/keys/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/nodes/[id]/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/nodes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/nodes/check/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/nodes/check/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/nodes/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/nodes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/panes/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/panes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/projects/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/proxy/[nodeId]/[...path]/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/proxy/[nodeId]/[...path]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/search/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/sessions/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/terminal/token/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/terminal/token/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/workspaces/route.js +6 -5
- package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js +5 -4
- package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/panes/[id]/route.js +5 -4
- package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/panes/route.js +5 -4
- package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/route.js +5 -4
- package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js +3 -3
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js +3 -3
- package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/search/route.js +6 -5
- package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/server-config/route.js +2 -2
- package/.next/standalone/.next/server/app/api/server-config/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js +5 -3
- package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js +5 -4
- package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[id]/route.js +5 -4
- package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/route.js +6 -5
- package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sync/route.js +4 -3
- package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tags/route.js +5 -4
- package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tier/route.js +4 -3
- package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/updates/route.js +2 -2
- package/.next/standalone/.next/server/app/api/updates/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/whisper/config/route.js +2 -2
- package/.next/standalone/.next/server/app/api/whisper/config/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/whisper/route.js +2 -2
- package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/wizard/chat/route.js +3 -3
- package/.next/standalone/.next/server/app/api/wizard/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js +5 -3
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js +5 -3
- package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js +5 -3
- package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js +5 -3
- package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js +5 -4
- package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js +5 -4
- package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js +5 -4
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js +5 -4
- package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/workspaces/route.js +6 -5
- package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/cortex.html +1 -1
- package/.next/standalone/.next/server/app/cortex.rsc +2 -2
- package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/cortex.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/cortex.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/cortex.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/cortex.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/icon.png/route.js +2 -2
- package/.next/standalone/.next/server/app/icon.png/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/projects.html +1 -1
- package/.next/standalone/.next/server/app/m/projects.rsc +2 -2
- package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/sessions.html +1 -1
- package/.next/standalone/.next/server/app/m/sessions.rsc +2 -2
- package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/settings.html +1 -1
- package/.next/standalone/.next/server/app/m/settings.rsc +2 -2
- package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/m/terminal.html +1 -1
- package/.next/standalone/.next/server/app/m/terminal.rsc +2 -2
- package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m.html +1 -1
- package/.next/standalone/.next/server/app/m.rsc +2 -2
- package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/network.html +1 -1
- package/.next/standalone/.next/server/app/network.rsc +2 -2
- package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/projects.html +1 -1
- package/.next/standalone/.next/server/app/projects.rsc +2 -2
- package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/sessions.html +1 -1
- package/.next/standalone/.next/server/app/sessions.rsc +2 -2
- package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/terminal.html +1 -1
- package/.next/standalone/.next/server/app/terminal.rsc +3 -3
- package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/vr/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/vr.html +1 -1
- package/.next/standalone/.next/server/app/vr.rsc +2 -2
- package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/vr.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/vr.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/vr.segments/vr.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.html +1 -1
- package/.next/standalone/.next/server/app/workspaces.rsc +2 -2
- package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cf5ebdb._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0f15af1e._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__107eab8a._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1094360c._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__118ea5e0._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__160e7c73._.js +5 -5
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__16d4da21._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1c542684._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f23bae4._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1faefa3e._.js +19 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2145098e._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2748c76c._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2c08d908._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2e29b4bd._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e3ecfd17._.js → [root-of-the-server]__34fd47d2._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__366b6cec._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4d51508f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5663673e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__57e0cc31._.js +133 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__57ebbe63._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d3345e4._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5ee7aa9d._.js +11 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__60caf825._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__65c9857f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__678f6823._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__685c95d8._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__41d4d426._.js → [root-of-the-server]__69568dc2._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6a0bc4ae._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6b876561._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6e89713c._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6f713737._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__725f10f4._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__785b0597._.js +38 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7c728bed._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7da958b5._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7daed406._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7f140e4b._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__80d826f7._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__83a3c97b._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__84c15a0e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__85c33341._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__88f3d920._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8c916e85._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8deb2ae3._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8df5a740._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8f238bd9._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__955ab668._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9a061e91._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a04a87d5._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a803051f._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac0a9b09._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac3e37b6._.js +13 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__96685488._.js → [root-of-the-server]__add9e50d._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b57f4274._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b84b3426._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba8224a1._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__bd1c1d0d._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c1442c38._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c18bdab2._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c1efc6a8._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c697b87e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c6dc43c6._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ccce7f4f._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d92f347c._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__dac9e21e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3f9ddbc._.js +78 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e66fc05f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e7add82c._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fa9a5ec0._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ff9f6af0._.js +42 -0
- package/.next/standalone/.next/server/chunks/_0142f96b._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0ebd30d3._.js +3 -0
- package/.next/standalone/.next/server/chunks/_19a59078._.js +3 -0
- package/.next/standalone/.next/server/chunks/_1bc02021._.js +11 -0
- package/.next/standalone/.next/server/chunks/_1e381a28._.js +3 -0
- package/.next/standalone/.next/server/chunks/_2699eda7._.js +3 -0
- package/.next/standalone/.next/server/chunks/_2fd02f70._.js +3 -0
- package/.next/standalone/.next/server/chunks/_373d522f._.js +3 -0
- package/.next/standalone/.next/server/chunks/_43fc1196._.js +3 -0
- package/.next/standalone/.next/server/chunks/_48ec4374._.js +3 -0
- package/.next/standalone/.next/server/chunks/_563d9ecc._.js +3 -0
- package/.next/standalone/.next/server/chunks/_583f9ae2._.js +3 -0
- package/.next/standalone/.next/server/chunks/_5a167705._.js +3 -0
- package/.next/standalone/.next/server/chunks/_5a8cc3a5._.js +3 -0
- package/.next/standalone/.next/server/chunks/_5d894fb4._.js +3 -0
- package/.next/standalone/.next/server/chunks/_6bbf8264._.js +3 -0
- package/.next/standalone/.next/server/chunks/_6c4bcec1._.js +3 -0
- package/.next/standalone/.next/server/chunks/_7a29d111._.js +3 -0
- package/.next/standalone/.next/server/chunks/_7d3bab25._.js +3 -0
- package/.next/standalone/.next/server/chunks/_7ed4d1a4._.js +3 -0
- package/.next/standalone/.next/server/chunks/_8072d20c._.js +3 -0
- package/.next/standalone/.next/server/chunks/_81b87c01._.js +3 -0
- package/.next/standalone/.next/server/chunks/_881b7b28._.js +3 -0
- package/.next/standalone/.next/server/chunks/_902a1d56._.js +3 -0
- package/.next/standalone/.next/server/chunks/_96258f1c._.js +3 -0
- package/.next/standalone/.next/server/chunks/_96f79f8f._.js +3 -0
- package/.next/standalone/.next/server/chunks/_a0379bc2._.js +3 -0
- package/.next/standalone/.next/server/chunks/_a0f604e8._.js +3 -0
- package/.next/standalone/.next/server/chunks/_a959b121._.js +3 -0
- package/.next/standalone/.next/server/chunks/_a975011f._.js +3 -0
- package/.next/standalone/.next/server/chunks/_aa956b66._.js +3 -0
- package/.next/standalone/.next/server/chunks/_ad7e7d57._.js +3 -0
- package/.next/standalone/.next/server/chunks/_aebf2285._.js +3 -0
- package/.next/standalone/.next/server/chunks/_b259dda0._.js +36 -0
- package/.next/standalone/.next/server/chunks/_b7c60fdc._.js +3 -0
- package/.next/standalone/.next/server/chunks/_bd23ddeb._.js +3 -0
- package/.next/standalone/.next/server/chunks/_cd02dfbe._.js +3 -0
- package/.next/standalone/.next/server/chunks/_d3ecca80._.js +3 -0
- package/.next/standalone/.next/server/chunks/_d48dfa43._.js +11 -0
- package/.next/standalone/.next/server/chunks/_dba648d6._.js +3 -0
- package/.next/standalone/.next/server/chunks/_df42ac6e._.js +3 -0
- package/.next/standalone/.next/server/chunks/_dfe0e460._.js +42 -0
- package/.next/standalone/.next/server/chunks/_ead2734e._.js +3 -0
- package/.next/standalone/.next/server/chunks/_eb4efd0a._.js +3 -0
- package/.next/standalone/.next/server/chunks/_eb66a871._.js +3 -0
- package/.next/standalone/.next/server/chunks/_ef715efd._.js +3 -0
- package/.next/standalone/.next/server/chunks/_f361a656._.js +3 -0
- package/.next/standalone/.next/server/chunks/_f54ddbf4._.js +3 -0
- package/.next/standalone/.next/server/chunks/_fe2866f2._.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_4c408326.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_5603adbc.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_7180f8ad.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_b6be66d9.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f7054fd7.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_terminal_page_tsx_de5e8d85._.js +1 -1
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__90eeddae._.js +1 -1
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__ca3f649e._.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +2 -2
- package/.next/standalone/.next/static/chunks/{732b7502f82e7c37.css → 044decb96250e420.css} +1 -1
- package/.next/standalone/.next/static/chunks/{23a9627a951672ed.js → 8b53c673e79b82f1.js} +3 -3
- package/.next/standalone/bin/scrub-standalone.js +5 -0
- package/.next/standalone/bin/spaces-dev.js +13 -3
- package/.next/standalone/bin/spaces.js +25 -4
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +3 -2
- package/.next/standalone/src/app/(desktop)/terminal/page.tsx +22 -1
- package/.next/standalone/src/app/api/network/discovered/route.ts +2 -2
- package/.next/standalone/src/app/api/network/nodes/check/route.ts +2 -2
- package/.next/standalone/src/app/api/network/nodes/route.ts +2 -2
- package/.next/standalone/src/app/api/server-config/route.ts +9 -18
- package/.next/standalone/src/lib/admin/api/analytics.ts +1 -8
- package/.next/standalone/src/lib/admin/api/users.ts +1 -8
- package/.next/standalone/src/lib/admin/api/usersById.ts +1 -8
- package/.next/standalone/src/lib/auth/guard.ts +46 -0
- package/.next/standalone/src/lib/auth/index.ts +1 -0
- package/.next/standalone/src/lib/db/queries.ts +11 -1
- package/.next/standalone/src/lib/network/api/discovered.ts +4 -1
- package/.next/standalone/src/lib/network/api/identity.ts +6 -0
- package/.next/standalone/src/lib/network/api/keys.ts +6 -0
- package/.next/standalone/src/lib/network/api/keysById.ts +3 -0
- package/.next/standalone/src/lib/network/api/nodes.ts +49 -3
- package/.next/standalone/src/lib/network/api/nodesById.ts +5 -0
- package/.next/standalone/src/lib/network/api/nodesCheck.ts +4 -1
- package/.next/standalone/src/lib/network/api/proxy.ts +5 -0
- package/.next/standalone/src/middleware.ts +24 -10
- package/.next/standalone/tsconfig.tsbuildinfo +1 -1
- package/bin/scrub-standalone.js +5 -0
- package/bin/spaces-dev.js +13 -3
- package/bin/spaces.js +25 -4
- package/package.json +3 -2
- package/.next/standalone/.next/server/chunks/[externals]_next_dist_b89b5a39._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0153ac12._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__01a4559c._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__029ab763._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__037992dc._.js +0 -141
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06bb204a._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fd17dcf._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__107439ea._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__12dff461._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__13eb511a._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__141c8d34._.js +0 -172
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__151efd48._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__16c141c2._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__17fee60c._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a525be8._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1aea45f5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1cb4ee6b._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1e25d3db._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f7566a3._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__20382bee._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2082a624._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2091a7ed._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__24525ae7._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__284b02fc._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2a1a1d0f._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2cf17888._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__323ae5c9._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__34db98f7._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__39efba69._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3aeedc57._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3bbe9d04._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3c2324ba._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__40df3f5d._.js +0 -172
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__42a3fe3c._.js +0 -141
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__42d5d5be._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__49821b61._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__49f58cee._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4b9c38dc._.js +0 -141
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4c0ee9c7._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__530862c6._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__55504160._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__599f26fe._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5efa69f5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__60483ece._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__61135659._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__66331034._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6887294d._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6b9396b4._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6cfd7062._.js +0 -166
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6e8d89e2._.js +0 -149
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6f5b3cfe._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__71d5b087._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__76434a8e._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__798bafa7._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7b873fdb._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7d73f791._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7dc76d0e._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__80a85d1f._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__81f2a9b7._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__82f11618._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__834efefe._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__853663ea._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__861f2472._.js +0 -172
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__882d0924._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__88959e7f._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8b6c05dc._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__912a22a4._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__93d21ad1._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__94532b09._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__97e87518._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9c13c8d0._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9cb13212._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9d315363._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9ec369db._.js +0 -13
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9f09ade5._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9f986ad2._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a35913cf._.js +0 -172
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a3641117._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a76c75a0._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a934c48d._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9431ac6._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__aa3381a4._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ab1cc16c._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ab22ca4f._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac20d518._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__aee3bf91._.js +0 -172
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b1114936._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b15ade1f._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b2bc7a81._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b51446e5._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba344563._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c3b2e20c._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ca93ae79._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf4a76c0._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d20bed9e._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d2d59054._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d4f1c0c0._.js +0 -38
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d6de7a45._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__da33b519._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__dc820e44._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e1058e69._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e1dfb4d4._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3606cd1._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e55b6fc5._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e6555dc3._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e65c3971._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ea9e2d75._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ec37cbee._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f3c19e4b._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f445bd01._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f7b0b4da._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fb4c016b._.js +0 -133
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fd86530e._.js +0 -78
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fef9b1ec._.js +0 -133
- package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-design.md +0 -133
- package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-plan.md +0 -959
- package/.next/standalone/docs/plans/2026-03-07-service-command-design.md +0 -146
- package/.next/standalone/docs/plans/2026-03-07-service-command-plan.md +0 -254
- package/.next/standalone/docs/plans/2026-04-23-consolidate-addons-design.md +0 -212
- package/.next/standalone/docs/plans/2026-04-23-consolidate-addons-plan.md +0 -1509
- package/.next/standalone/docs/superpowers/plans/2026-03-12-spaces-cortex.md +0 -5270
- package/.next/standalone/docs/superpowers/plans/2026-03-13-cortex-wiring.md +0 -1387
- package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-entity-graph.md +0 -1923
- package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-knowledge-evolution.md +0 -1113
- package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-boundary-engine.md +0 -853
- package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-context-engine.md +0 -1274
- package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-signal-ingestion.md +0 -933
- package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-lobes.md +0 -1080
- package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-gravity-system.md +0 -768
- package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-ui.md +0 -1108
- package/.next/standalone/docs/superpowers/plans/2026-03-18-cortex-ui-integration.md +0 -1846
- package/.next/standalone/docs/superpowers/plans/2026-03-19-vr-phase1-shell.md +0 -1639
- package/.next/standalone/docs/superpowers/plans/2026-03-27-dockview-pane-layout.md +0 -98
- package/.next/standalone/docs/superpowers/plans/2026-04-21-workspace-todos.md +0 -1097
- package/.next/standalone/docs/superpowers/plans/2026-04-22-claude-usage-display.md +0 -749
- package/.next/standalone/docs/superpowers/specs/2026-03-11-universe-view-design.md +0 -320
- package/.next/standalone/docs/superpowers/specs/2026-03-12-spaces-brain-design.md +0 -720
- package/.next/standalone/docs/superpowers/specs/2026-03-13-cortex-wiring-design.md +0 -268
- package/.next/standalone/docs/superpowers/specs/2026-03-14-cortex-v2-design.md +0 -623
- package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-lobes-design.md +0 -263
- package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-v2-ui-design.md +0 -240
- package/.next/standalone/docs/superpowers/specs/2026-03-16-pane-ux-design.md +0 -77
- package/.next/standalone/docs/superpowers/specs/2026-03-18-cortex-ui-integration-design.md +0 -341
- package/.next/standalone/docs/superpowers/specs/2026-03-19-vr-phase1-shell-design.md +0 -288
- package/.next/standalone/docs/superpowers/specs/2026-03-27-pane-diff-review-and-project-wizard-design.md +0 -322
- package/.next/standalone/docs/superpowers/specs/2026-04-21-workspace-todos-design.md +0 -180
- package/.next/standalone/docs/superpowers/specs/2026-04-22-claude-usage-display-design.md +0 -183
- /package/.next/standalone/.next/static/{Y9EeSGuSi-8qpkLvIBy0a → mimGB6C_ZmJMiVnOe9tqZ}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{Y9EeSGuSi-8qpkLvIBy0a → mimGB6C_ZmJMiVnOe9tqZ}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{Y9EeSGuSi-8qpkLvIBy0a → mimGB6C_ZmJMiVnOe9tqZ}/_ssgManifest.js +0 -0
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
# Pane Diff Review & Project Creation Wizard — Design Spec
|
|
2
|
-
|
|
3
|
-
**Date**: 2026-03-27
|
|
4
|
-
**Status**: Draft
|
|
5
|
-
**Features**: Two independent features inspired by Cline Kanban, adapted for Spaces
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Feature 1: Pane Diff Review
|
|
10
|
-
|
|
11
|
-
### Overview
|
|
12
|
-
|
|
13
|
-
A "Review Changes" button in each pane's header that shows a clean git diff of everything that changed since the pane was created (or since the user last reviewed). The diff renders inline within the pane with an option to pop it out to a separate window.
|
|
14
|
-
|
|
15
|
-
### Data Model
|
|
16
|
-
|
|
17
|
-
Add one column to the `panes` table:
|
|
18
|
-
|
|
19
|
-
```sql
|
|
20
|
-
ALTER TABLE panes ADD COLUMN diff_baseline_sha TEXT;
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
- `diff_baseline_sha` — the git commit SHA captured when the pane is created. Updated when the user clicks "Reset Baseline" (mark as reviewed).
|
|
24
|
-
- The diff itself is never stored — computed on demand.
|
|
25
|
-
|
|
26
|
-
On pane creation, the API runs `git rev-parse HEAD` from the pane's `cwd` and stores the result as `diff_baseline_sha`. If the directory is not a git repo, the field is left null.
|
|
27
|
-
|
|
28
|
-
### API
|
|
29
|
-
|
|
30
|
-
**`GET /api/panes/[id]/diff`**
|
|
31
|
-
|
|
32
|
-
Reads the pane's `cwd` and `diff_baseline_sha`. Runs from that directory:
|
|
33
|
-
|
|
34
|
-
- `git diff <baseline_sha> HEAD` — committed changes since baseline
|
|
35
|
-
- `git diff` — unstaged changes
|
|
36
|
-
- `git diff --cached` — staged changes
|
|
37
|
-
- `git status --porcelain` — new untracked files
|
|
38
|
-
|
|
39
|
-
Returns:
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
interface PaneDiffResponse {
|
|
43
|
-
baselineSha: string;
|
|
44
|
-
currentSha: string;
|
|
45
|
-
files: Array<{
|
|
46
|
-
path: string;
|
|
47
|
-
status: 'added' | 'modified' | 'deleted' | 'renamed';
|
|
48
|
-
additions: number;
|
|
49
|
-
deletions: number;
|
|
50
|
-
}>;
|
|
51
|
-
diff: string; // unified diff text (all changes combined)
|
|
52
|
-
untracked: string[]; // new files not yet tracked by git
|
|
53
|
-
}
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Error cases:
|
|
57
|
-
- Pane `cwd` is not a git repo → 400 `{ error: "Not a git repository" }`
|
|
58
|
-
- `diff_baseline_sha` is null → 400 `{ error: "No baseline set" }`
|
|
59
|
-
- Pane not found → 404
|
|
60
|
-
|
|
61
|
-
**`POST /api/panes/[id]/diff/reset`**
|
|
62
|
-
|
|
63
|
-
Updates `diff_baseline_sha` to current HEAD (`git rev-parse HEAD` from pane's `cwd`). Returns the new SHA. This is the "mark as reviewed" action — subsequent diffs only show changes after this point.
|
|
64
|
-
|
|
65
|
-
### Frontend — Inline Diff Panel
|
|
66
|
-
|
|
67
|
-
**Pane header button**: A `GitCompareArrows` (lucide) icon button added to the pane title bar, next to existing buttons (minimize, maximize, popout, close). Only visible when `diff_baseline_sha` is not null (i.e., pane's cwd is a git repo).
|
|
68
|
-
|
|
69
|
-
**Changed file badge**: A small count badge on the button showing the number of changed files. Fetched via `GET /api/panes/[id]/diff?countOnly=true` on pane focus and every 30 seconds while the pane is visible. The `countOnly` query param returns only `{ fileCount: number }` instead of the full diff — fast enough for polling.
|
|
70
|
-
|
|
71
|
-
**Diff panel**: Toggling the button splits the pane vertically — terminal on top, diff panel below. The divider is resizable via drag.
|
|
72
|
-
|
|
73
|
-
**Diff panel contents**:
|
|
74
|
-
- **File list sidebar** (left): Clickable list of changed files with status icons (green +, red -, blue ~). Clicking a file scrolls the diff view to that file.
|
|
75
|
-
- **Diff view** (right): Unified diff with syntax highlighting. Green backgrounds for additions, red for deletions. Line numbers shown.
|
|
76
|
-
- **Toolbar**:
|
|
77
|
-
- "Reset Baseline" button — calls `POST /api/panes/[id]/diff/reset`, clears the diff panel
|
|
78
|
-
- "Pop Out" button — opens diff in a new window
|
|
79
|
-
- "Copy Diff" button — copies raw unified diff to clipboard
|
|
80
|
-
- "Collapse" button — closes the diff panel
|
|
81
|
-
|
|
82
|
-
**Component**: `src/components/terminal/pane-diff-panel.tsx`
|
|
83
|
-
|
|
84
|
-
### Popout
|
|
85
|
-
|
|
86
|
-
Clicking "Pop Out" opens a new window via `window.open()` pointing to `/terminal/pane/[id]/diff`. This route renders the diff viewer at full window size, identical to the inline version but without the terminal above it. Reuses the existing popout window infrastructure (BroadcastChannel sync, window geometry tracking).
|
|
87
|
-
|
|
88
|
-
**Route**: `src/app/(desktop)/terminal/pane/[id]/diff/page.tsx`
|
|
89
|
-
|
|
90
|
-
### Edge Cases
|
|
91
|
-
|
|
92
|
-
- **Non-git directory**: Button hidden. Tooltip on hover: "Not a git repository"
|
|
93
|
-
- **No changes**: Empty state in panel: "No changes since baseline"
|
|
94
|
-
- **Large diffs**: Truncate at 500KB with a "Show full diff" link that fetches without limit
|
|
95
|
-
- **Binary files**: Show "Binary file changed" placeholder per file
|
|
96
|
-
- **Pane cwd changed after creation**: Baseline SHA may not exist in new repo. Detect this (`git cat-file -t <sha>` fails) and prompt user to reset baseline.
|
|
97
|
-
- **Detached HEAD / no commits**: If repo has no commits, disable the button with tooltip "No commits in repository"
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## Feature 2: Project Creation Wizard
|
|
102
|
-
|
|
103
|
-
### Overview
|
|
104
|
-
|
|
105
|
-
A guided project creation flow accessible from the workspace chooser. The user describes a project in a chat interface, has back-and-forth with an LLM to refine the plan, then hits "Go" to automatically create a fully configured workspace with the right agents, panes, and initial prompts.
|
|
106
|
-
|
|
107
|
-
### Entry Point
|
|
108
|
-
|
|
109
|
-
A "Plan a Project" button in the WorkspaceChooser component, alongside the existing "New Space" button. Uses a distinctive icon (e.g., `Wand2` or `Sparkles` from lucide) to signal the AI-assisted path. Clicking opens a full-screen modal overlay.
|
|
110
|
-
|
|
111
|
-
### Wizard Modal — Layout
|
|
112
|
-
|
|
113
|
-
```
|
|
114
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
115
|
-
│ Plan a Project [X Close]│
|
|
116
|
-
├──────────────────────────────┬──────────────────────────────┤
|
|
117
|
-
│ │ │
|
|
118
|
-
│ Chat Interface │ Live Project Plan │
|
|
119
|
-
│ │ │
|
|
120
|
-
│ [LLM messages] │ Workspace: "My Project" │
|
|
121
|
-
│ [User messages] │ Description: "..." │
|
|
122
|
-
│ │ │
|
|
123
|
-
│ │ Panes: │
|
|
124
|
-
│ │ 1. Research (Claude Code) │
|
|
125
|
-
│ │ 2. Backend (Claude Code) │
|
|
126
|
-
│ │ 3. Tests (Codex) │
|
|
127
|
-
│ │ │
|
|
128
|
-
│ ┌────────────────────┐ │ │
|
|
129
|
-
│ │ Type a message... │ │ │
|
|
130
|
-
│ └────────────────────┘ │ [Review Plan] │
|
|
131
|
-
│ │ │
|
|
132
|
-
└──────────────────────────────┴──────────────────────────────┘
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
**Left panel**: Chat interface. Standard chat UX — user messages right-aligned, LLM messages left-aligned. Text input at bottom with send button.
|
|
136
|
-
|
|
137
|
-
**Right panel**: Live-updating project plan summary. Rebuilt after each LLM response. Shows workspace config and pane list as structured cards. "Review Plan" button at bottom becomes active once the plan has at least one pane defined.
|
|
138
|
-
|
|
139
|
-
### Chat Interface
|
|
140
|
-
|
|
141
|
-
**Component**: `src/components/wizard/wizard-chat.tsx`
|
|
142
|
-
|
|
143
|
-
Standard chat component with:
|
|
144
|
-
- Message list (scrollable, auto-scroll to bottom)
|
|
145
|
-
- Text input with send button (Enter to send, Shift+Enter for newline)
|
|
146
|
-
- Loading indicator while LLM responds
|
|
147
|
-
- No file upload, no voice — text only for v1
|
|
148
|
-
|
|
149
|
-
### LLM Integration
|
|
150
|
-
|
|
151
|
-
**API endpoint**: `POST /api/wizard/chat`
|
|
152
|
-
|
|
153
|
-
Request:
|
|
154
|
-
```typescript
|
|
155
|
-
interface WizardChatRequest {
|
|
156
|
-
messages: Array<{ role: 'user' | 'assistant'; content: string }>;
|
|
157
|
-
currentPlan: ProjectPlan | null;
|
|
158
|
-
}
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
Response:
|
|
162
|
-
```typescript
|
|
163
|
-
interface WizardChatResponse {
|
|
164
|
-
reply: string;
|
|
165
|
-
plan: ProjectPlan;
|
|
166
|
-
}
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
The endpoint:
|
|
170
|
-
1. Reads the user's API key from `~/.spaces/config.json` (field: `anthropic_api_key` or `openai_api_key`, with Anthropic preferred)
|
|
171
|
-
2. Constructs a system prompt (see below) with the current plan as context
|
|
172
|
-
3. Calls the Claude API directly (`POST https://api.anthropic.com/v1/messages`)
|
|
173
|
-
4. Parses the response to extract both the conversational reply and the updated plan JSON
|
|
174
|
-
5. Returns both to the frontend
|
|
175
|
-
|
|
176
|
-
**No Cortex dependency.** This is a direct API call.
|
|
177
|
-
|
|
178
|
-
**System prompt** instructs the LLM to:
|
|
179
|
-
- Act as a project planning assistant for Spaces
|
|
180
|
-
- Ask about: project purpose, tech stack, scope, working directory, what agents would help
|
|
181
|
-
- Ask 1-2 questions at a time, not a wall of questions
|
|
182
|
-
- After each exchange, output an updated `ProjectPlan` JSON block alongside the conversational reply
|
|
183
|
-
- Know the available agent types: Claude Code, Codex, Gemini, Aider, Shell, Custom
|
|
184
|
-
- Suggest agent configurations based on the project description
|
|
185
|
-
- Converge toward a concrete plan, then suggest the user review it
|
|
186
|
-
|
|
187
|
-
**API key validation**: If no API key is configured, the wizard shows a message directing the user to Settings to add one. The chat is disabled until a key is present.
|
|
188
|
-
|
|
189
|
-
### ProjectPlan Schema
|
|
190
|
-
|
|
191
|
-
```typescript
|
|
192
|
-
interface ProjectPlan {
|
|
193
|
-
workspace: {
|
|
194
|
-
name: string;
|
|
195
|
-
description: string;
|
|
196
|
-
color: string; // hex color, LLM can suggest or default to #6366f1
|
|
197
|
-
};
|
|
198
|
-
panes: Array<{
|
|
199
|
-
title: string;
|
|
200
|
-
agentType: 'claude' | 'codex' | 'gemini' | 'aider' | 'shell' | 'custom';
|
|
201
|
-
cwd: string;
|
|
202
|
-
initialPrompt?: string; // injected as first input when agent starts
|
|
203
|
-
customCommand?: string; // for 'custom' agent type
|
|
204
|
-
description: string; // human-readable purpose (shown in plan review)
|
|
205
|
-
}>;
|
|
206
|
-
summary: string; // one-paragraph project summary
|
|
207
|
-
}
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### Plan Review Step
|
|
211
|
-
|
|
212
|
-
Clicking "Review Plan" transitions the modal from chat+summary layout to a full-width review view.
|
|
213
|
-
|
|
214
|
-
**Review view contents**:
|
|
215
|
-
- **Workspace section**: Name, description, color — all editable inline (text inputs, color picker)
|
|
216
|
-
- **Panes list**: Each pane shown as an editable card:
|
|
217
|
-
- Title (text input)
|
|
218
|
-
- Agent type (dropdown matching existing agent type selector)
|
|
219
|
-
- Working directory (text input with browse/validate)
|
|
220
|
-
- Initial prompt (expandable textarea)
|
|
221
|
-
- Description (text, read-only context)
|
|
222
|
-
- Delete button (remove pane from plan)
|
|
223
|
-
- **Add Pane button**: Manually add a pane with blank fields
|
|
224
|
-
- **"Back to Chat" button**: Returns to chat layout to refine further with the LLM
|
|
225
|
-
- **"Launch Space" button**: Executes the plan
|
|
226
|
-
|
|
227
|
-
**Validation before launch**:
|
|
228
|
-
- Workspace name is not empty
|
|
229
|
-
- At least one pane exists
|
|
230
|
-
- All pane cwds are non-empty
|
|
231
|
-
- Cwds are validated against the filesystem (show warning if directory doesn't exist, with option to create it)
|
|
232
|
-
|
|
233
|
-
### Launch Sequence
|
|
234
|
-
|
|
235
|
-
When user clicks "Launch Space":
|
|
236
|
-
|
|
237
|
-
1. `POST /api/workspaces` — create workspace with name, description, color
|
|
238
|
-
2. For each pane in order: `POST /api/panes` — create pane with title, agentType, cwd, customCommand, assigned to new workspace
|
|
239
|
-
3. `PUT /api/workspaces/active` — switch to the new workspace (via `switchWorkspace()`)
|
|
240
|
-
4. Close the wizard modal
|
|
241
|
-
5. Terminal page loads the new workspace's panes, agents start up
|
|
242
|
-
|
|
243
|
-
**Initial prompt injection**: For panes with `initialPrompt`, the terminal server writes the prompt text to the pty's stdin after detecting the agent is ready. Readiness is determined by watching for the agent's prompt indicator in stdout (e.g., Claude Code's `>` prompt). Fallback: a 2-second delay after process spawn if no prompt indicator is detected. The `initialPrompt` field is stored on the pane record and consumed once on first connection — the terminal server deletes it from the pane after injection so it doesn't re-fire on reconnect.
|
|
244
|
-
|
|
245
|
-
**Component**: `src/components/wizard/wizard-launch.ts` (logic) — calls existing API endpoints, no new backend needed for launch itself.
|
|
246
|
-
|
|
247
|
-
### Plan Persistence
|
|
248
|
-
|
|
249
|
-
The `ProjectPlan` JSON is saved to the workspace record after creation. Uses the existing `lobe_config` column (JSON field) with a `wizardPlan` key:
|
|
250
|
-
|
|
251
|
-
```typescript
|
|
252
|
-
// stored in workspaces.lobe_config
|
|
253
|
-
{
|
|
254
|
-
...existingLobeConfig,
|
|
255
|
-
wizardPlan: ProjectPlan
|
|
256
|
-
}
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
This allows:
|
|
260
|
-
- Viewing the original plan later (potential future "Plan" tab in workspace settings)
|
|
261
|
-
- Re-launching or modifying the plan
|
|
262
|
-
- Understanding what a workspace was created for
|
|
263
|
-
|
|
264
|
-
### Draft Persistence
|
|
265
|
-
|
|
266
|
-
If the user closes the wizard mid-conversation, prompt: "Discard this plan?" with options:
|
|
267
|
-
- **Save Draft** — stores the current messages and plan in `localStorage` under key `spaces-wizard-draft`. Next time the wizard opens, it offers to resume.
|
|
268
|
-
- **Discard** — clears everything, closes modal.
|
|
269
|
-
|
|
270
|
-
Only one draft at a time. Starting a new wizard session while a draft exists prompts: "Resume previous draft or start fresh?"
|
|
271
|
-
|
|
272
|
-
### Edge Cases
|
|
273
|
-
|
|
274
|
-
- **No API key**: Wizard opens but chat is disabled. Banner: "Configure your API key in Settings to use the project wizard."
|
|
275
|
-
- **LLM returns malformed plan JSON**: Use the last valid plan. Show the conversational reply normally. Log the parse error.
|
|
276
|
-
- **LLM fails (network error, rate limit)**: Show error inline in chat: "Failed to get response. Try again." with retry button.
|
|
277
|
-
- **Empty plan at review**: "Review Plan" button disabled with tooltip: "Describe your project first"
|
|
278
|
-
- **Very large plan (20+ panes)**: No hard limit, but warn: "This will create X panes. Continue?"
|
|
279
|
-
- **Invalid cwd at launch**: Show validation errors on the review screen. Highlight panes with issues. Block launch until resolved or user confirms directory creation.
|
|
280
|
-
|
|
281
|
-
---
|
|
282
|
-
|
|
283
|
-
## New Files Summary
|
|
284
|
-
|
|
285
|
-
### Feature 1: Pane Diff Review
|
|
286
|
-
- `src/app/api/panes/[id]/diff/route.ts` — GET diff, POST reset baseline
|
|
287
|
-
- `src/components/terminal/pane-diff-panel.tsx` — inline diff viewer component
|
|
288
|
-
- `src/app/(desktop)/terminal/pane/[id]/diff/page.tsx` — popout diff page
|
|
289
|
-
|
|
290
|
-
### Feature 2: Project Creation Wizard
|
|
291
|
-
- `src/app/api/wizard/chat/route.ts` — LLM chat endpoint
|
|
292
|
-
- `src/components/wizard/project-wizard.tsx` — main wizard modal
|
|
293
|
-
- `src/components/wizard/wizard-chat.tsx` — chat interface component
|
|
294
|
-
- `src/components/wizard/wizard-plan-summary.tsx` — live plan summary panel
|
|
295
|
-
- `src/components/wizard/wizard-review.tsx` — plan review/edit view
|
|
296
|
-
- `src/components/wizard/wizard-launch.ts` — launch sequence logic
|
|
297
|
-
|
|
298
|
-
### Modified Files
|
|
299
|
-
- `src/lib/db/schema.ts` — add `diff_baseline_sha` column to panes table
|
|
300
|
-
- `src/lib/db/queries.ts` — update pane creation to capture baseline SHA, add diff queries
|
|
301
|
-
- `src/components/terminal/terminal-pane.tsx` — add diff button to header, inline panel toggle
|
|
302
|
-
- `src/components/workspace/workspace-chooser.tsx` — add "Plan a Project" button
|
|
303
|
-
|
|
304
|
-
---
|
|
305
|
-
|
|
306
|
-
## Dependencies
|
|
307
|
-
|
|
308
|
-
### Feature 1
|
|
309
|
-
- No new npm dependencies required. Git commands run via `child_process.execSync` (or `execFile` for safety) server-side. Diff rendering uses simple React components with CSS for syntax highlighting (green/red backgrounds, monospace font). No need for a heavy diff library.
|
|
310
|
-
|
|
311
|
-
### Feature 2
|
|
312
|
-
- No new npm dependencies required. Direct `fetch()` to Claude API. Chat UI is custom React components. No external chat library needed.
|
|
313
|
-
|
|
314
|
-
---
|
|
315
|
-
|
|
316
|
-
## Out of Scope (Future)
|
|
317
|
-
|
|
318
|
-
- **Pane dependency chains**: Linking panes so one auto-triggers when another finishes. Natural extension but not part of this spec.
|
|
319
|
-
- **Plan templates**: Pre-built project plans (e.g., "Full-stack app", "API service"). Could be added to the wizard later.
|
|
320
|
-
- **Agent auto-detection**: Wizard suggesting agents based on repo analysis (package.json, file structure). v1 relies on the LLM's suggestions based on the conversation.
|
|
321
|
-
- **Collaborative wizard**: Multiple users planning together. Single-user for v1.
|
|
322
|
-
- **VR wizard**: Running the wizard in VR mode. Desktop/browser only for v1.
|
|
@@ -1,180 +0,0 @@
|
|
|
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.
|