conductor-oss 0.7.1 → 0.9.0
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/README.md +173 -134
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +18 -2
- package/dist/backend.js.map +1 -1
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +13 -7
- package/dist/commands/dashboard.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/config.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/config.js +6 -1
- package/node_modules/@conductor-oss/core/dist/config.js.map +1 -1
- package/package.json +8 -6
- package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/packages/web/.next/app-path-routes-manifest.json +2 -0
- package/web/.next/standalone/packages/web/.next/build-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/packages/web/.next/routes-manifest.json +44 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error/page/build-manifest.json +5 -5
- package/web/.next/standalone/packages/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.rsc +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page/build-manifest.json +5 -5
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.rsc +11 -11
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +11 -11
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_index.segment.rsc +6 -6
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/remote-access/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/remote-access/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route.js +10 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route.js +10 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/page/build-manifest.json +5 -5
- package/web/.next/standalone/packages/web/.next/server/app/page/react-loadable-manifest.json +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/page.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/build-manifest.json +5 -5
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/build-manifest.json +5 -5
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page/build-manifest.json +5 -5
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app-paths-manifest.json +2 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/26076_server_app_api_sessions_[id]_terminal_connection_route_actions_46c114ee.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/26076_server_app_api_sessions_[id]_terminal_snapshot_route_actions_cfb4de43.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/730ea_web__next-internal_server_app_api_sessions_[id]_restore_route_actions_41a4c356.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__b716459f._.js → [root-of-the-server]__08556fc3._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__624bcdc9._.js → [root-of-the-server]__0e496df1._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__9bf61231._.js → [root-of-the-server]__115b433b._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__70929198._.js → [root-of-the-server]__120a0868._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__17d710ef._.js → [root-of-the-server]__1a623333._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__262e987e._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__31053ac2._.js → [root-of-the-server]__2713bac9._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__8c576b6a._.js → [root-of-the-server]__2798ac7c._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__747e6415._.js → [root-of-the-server]__27b2bd14._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__a4b1a94c._.js → [root-of-the-server]__29d94573._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__732fc06e._.js → [root-of-the-server]__2b59cba9._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2ce39d51._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__3e507276._.js → [root-of-the-server]__2fea4a4c._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__59635ca5._.js → [root-of-the-server]__36559d88._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__f0ec1021._.js → [root-of-the-server]__4117784b._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__543bc377._.js → [root-of-the-server]__43b35d39._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__ba70a88e._.js → [root-of-the-server]__444bf146._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__fd0a681b._.js → [root-of-the-server]__45483f4b._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__98f4a7bd._.js → [root-of-the-server]__4644a89e._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4c78886c._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__e7aaee2d._.js → [root-of-the-server]__4cea5dca._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__33494588._.js → [root-of-the-server]__575c7392._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__eae97345._.js → [root-of-the-server]__57605af7._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__be233a9f._.js → [root-of-the-server]__57c8ca1a._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5e2b35cd._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__8ace49d1._.js → [root-of-the-server]__5f5433df._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6313c91e._.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__3dc4c761._.js → [root-of-the-server]__6a8b5dc7._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__3318d8a1._.js → [root-of-the-server]__717081d9._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__ae73aa49._.js → [root-of-the-server]__75668566._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__b4039db5._.js → [root-of-the-server]__7a6210dc._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__34e636e5._.js → [root-of-the-server]__7ca5b93b._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__b53b70e7._.js → [root-of-the-server]__8462ddf1._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__3937a996._.js → [root-of-the-server]__9e363e9c._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__4c5f7cab._.js → [root-of-the-server]__a0467c5b._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__9576223c._.js → [root-of-the-server]__a8d68307._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__82e86bb6._.js → [root-of-the-server]__ac79a67b._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__bcd0c846._.js → [root-of-the-server]__af5be1d9._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b3cd93ca._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__540ebc7f._.js → [root-of-the-server]__b7314f2a._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__bb2675cd._.js → [root-of-the-server]__bcbc6330._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__fe4c1384._.js → [root-of-the-server]__bfbdd808._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__b00db558._.js → [root-of-the-server]__c205eff4._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__c455995a._.js → [root-of-the-server]__c39ceb71._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c9cb9ac6._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cff9ddef._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__7c87a52f._.js → [root-of-the-server]__d65b8403._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__eb6e6bb9._.js → [root-of-the-server]__d7b9cb55._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__53daf5c6._.js → [root-of-the-server]__df103a4a._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ea845f9f._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__8ee7749b._.js → [root-of-the-server]__f5a16619._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__9940de77._.js → [root-of-the-server]__f62d8a1f._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__5df70a62._.js → [root-of-the-server]__f7c7ed71._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__520aa408._.js → [root-of-the-server]__fa5bbdc8._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__e385846c._.js → [root-of-the-server]__fed9223f._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/_2c837d66._.js +5 -5
- package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_eaad1f33.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__000b8c99._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__4f387f9d._.js → [root-of-the-server]__10a850c6._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__7829c78d._.js → [root-of-the-server]__17f5cb6a._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__29d8d063._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__3ea76517._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__99387ae7._.js → [root-of-the-server]__6647f7ec._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__a509d17d._.js → [root-of-the-server]__9f45b36b._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__bc8d015f._.js → [root-of-the-server]__f8f50c0b._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_0e1412de._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_230c0c14._.js +4 -4
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_2b5578a1._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{_b6d31783._.js → _532f707d._.js} +3 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_5571204d._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_69e05fca._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_6cfd06c2._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_80efe193._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{_a4a4deb7._.js → _9e7585e3._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b214b154._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b8358e63._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_c0f0e227._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{_8982bbf3._.js → _de3b7194._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_f36ddaa9._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{node_modules_@clerk_nextjs_dist_esm_app-router_743f164d._.js → node_modules_@clerk_nextjs_dist_esm_app-router_a9e633d8._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_f33d83e6._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@radix-ui_d03fdd57._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@xterm_addon-fit_lib_addon-fit_mjs_9b7cb17b._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@xterm_addon-search_lib_addon-search_mjs_8d69d9d7._.js +11 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@xterm_xterm_lib_xterm_mjs_a1a7b9e9._.js +20 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_afb6e107._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_refresh-cw_50f1c1e7.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_dist_2df23979._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_cd51dad4.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_board_WorkspaceKanban_tsx_735b7999._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_sessions_SessionDetail_tsx_5fcad270._.js +6 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_features_dashboard_DashboardClient_tsx_81ae42b0._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/functions-config-manifest.json +3 -1
- package/web/.next/standalone/packages/web/.next/server/middleware-build-manifest.js +5 -5
- package/web/.next/standalone/packages/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +15 -15
- package/web/.next/standalone/packages/web/.next/static/chunks/07be250784a6a689.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/0866f5c380851a16.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/0cdc18649f440c71.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/0f7eb6d5a59ee3ae.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/144b356fe7daff8d.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/{c4c79d5d0b280aeb.js → 2f236954d6a65e12.js} +1 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/3cdf839644f79d43.js +18 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/5a4c4d4d5f30829b.css +3 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/6850a6cda159c98d.js +1 -0
- package/web/.next/{static/chunks/06bdd070b8d25946.js → standalone/packages/web/.next/static/chunks/69be39811437728d.js} +1 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/6cec31da5f555e99.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/70d1e7a526f0f4e2.js +9 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/{ba2aa8b54e912820.js → 723acbe92d3f9e7e.js} +1 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/739c6f71243d76d8.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/a6ec1ab37eb7b410.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/af8bfb72187b7cbf.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/b86b8884ddf84717.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/c1b8a2d2c623a0dc.js +6 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/c993a1a4204fce88.js +4 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/ca3e38b4495a3d39.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/{45bd2451c2b0790c.js → caf02f8136b16992.js} +2 -2
- package/web/.next/standalone/packages/web/.next/static/chunks/d4269c59429734ad.js +1 -0
- package/web/.next/{static/chunks/28eac764d6544827.js → standalone/packages/web/.next/static/chunks/e5bcec03f80af56a.js} +1 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/{turbopack-49f4119854e8206e.js → turbopack-26870d017b23fcf0.js} +1 -1
- package/web/.next/standalone/packages/web/next.config.ts +16 -0
- package/web/.next/standalone/packages/web/package.json +3 -1
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/terminal/connection/route.ts +64 -0
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/terminal/snapshot/route.ts +14 -0
- package/web/.next/standalone/packages/web/src/app/globals.css +12 -4
- package/web/.next/standalone/packages/web/src/components/Dashboard.tsx +1 -5
- package/web/.next/standalone/packages/web/src/components/TerminalView.tsx +528 -100
- package/web/.next/standalone/packages/web/src/components/board/WorkspaceKanban.tsx +3 -3
- package/web/.next/standalone/packages/web/src/components/layout/AppShell.tsx +3 -3
- package/web/.next/standalone/packages/web/src/components/layout/Sidebar.tsx +29 -18
- package/web/.next/standalone/packages/web/src/components/layout/TopBar.tsx +3 -3
- package/web/.next/standalone/packages/web/src/components/sessions/ChatPanel.tsx +61 -5
- package/web/.next/standalone/packages/web/src/components/sessions/SessionDetail.tsx +99 -46
- package/web/.next/standalone/packages/web/src/components/sessions/SessionPreview.tsx +231 -233
- package/web/.next/standalone/packages/web/src/components/sessions/SessionTerminal.tsx +1212 -0
- package/web/.next/standalone/packages/web/src/components/sessions/terminalInsert.ts +6 -0
- package/web/.next/standalone/packages/web/src/components/terminal/xtermTheme.ts +70 -0
- package/web/.next/standalone/packages/web/src/components/ui/Tabs.tsx +2 -2
- package/web/.next/standalone/packages/web/src/features/dashboard/DashboardClient.tsx +104 -31
- package/web/.next/standalone/packages/web/src/features/sessions/SessionPageClient.tsx +2 -2
- package/web/.next/standalone/packages/web/src/lib/devPreviewBrowser.ts +15 -3
- package/web/.next/static/chunks/07be250784a6a689.js +1 -0
- package/web/.next/static/chunks/0866f5c380851a16.js +1 -0
- package/web/.next/static/chunks/0cdc18649f440c71.js +1 -0
- package/web/.next/static/chunks/0f7eb6d5a59ee3ae.js +1 -0
- package/web/.next/static/chunks/144b356fe7daff8d.js +1 -0
- package/web/.next/static/chunks/{c4c79d5d0b280aeb.js → 2f236954d6a65e12.js} +1 -1
- package/web/.next/static/chunks/3cdf839644f79d43.js +18 -0
- package/web/.next/static/chunks/5a4c4d4d5f30829b.css +3 -0
- package/web/.next/static/chunks/6850a6cda159c98d.js +1 -0
- package/web/.next/{standalone/packages/web/.next/static/chunks/06bdd070b8d25946.js → static/chunks/69be39811437728d.js} +1 -1
- package/web/.next/static/chunks/6cec31da5f555e99.js +1 -0
- package/web/.next/static/chunks/70d1e7a526f0f4e2.js +9 -0
- package/web/.next/static/chunks/{ba2aa8b54e912820.js → 723acbe92d3f9e7e.js} +1 -1
- package/web/.next/static/chunks/739c6f71243d76d8.js +1 -0
- package/web/.next/static/chunks/a6ec1ab37eb7b410.js +1 -0
- package/web/.next/static/chunks/af8bfb72187b7cbf.js +1 -0
- package/web/.next/static/chunks/b86b8884ddf84717.js +1 -0
- package/web/.next/static/chunks/c1b8a2d2c623a0dc.js +6 -0
- package/web/.next/static/chunks/c993a1a4204fce88.js +4 -0
- package/web/.next/static/chunks/ca3e38b4495a3d39.js +1 -0
- package/web/.next/static/chunks/{45bd2451c2b0790c.js → caf02f8136b16992.js} +2 -2
- package/web/.next/static/chunks/d4269c59429734ad.js +1 -0
- package/web/.next/{standalone/packages/web/.next/static/chunks/28eac764d6544827.js → static/chunks/e5bcec03f80af56a.js} +1 -1
- package/web/.next/static/chunks/{turbopack-49f4119854e8206e.js → turbopack-26870d017b23fcf0.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__29091976._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__784e6aef._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__b388693f._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__d1efcbf0._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_e1c18705._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_2a090a71._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@radix-ui_02f0d3f0._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_message-square_2e76b8d9.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_ui_Tooltip_tsx_6becc8ca._.js +0 -3
- package/web/.next/standalone/packages/web/.next/static/chunks/07f3b9a104ce0ff4.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/1004422d31074d62.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/25afa19789883705.js +0 -6
- package/web/.next/standalone/packages/web/.next/static/chunks/2bc11b604b131190.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/30ababddac1b82dc.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/64f0033534ca1ad3.css +0 -3
- package/web/.next/standalone/packages/web/.next/static/chunks/902a6ba5837e1e57.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/a28bcda8dd6b68ee.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/aabc80195233b4da.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/b6069d0eb07a978f.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/c2caa064748bb0b5.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/c5f8e486166298c2.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/d6a81d2f8b98b4be.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/dfa8ef24e636ca14.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/e9d0e95bbaa0f4fb.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/ebaa0c535c4135f1.js +0 -1
- package/web/.next/static/chunks/07f3b9a104ce0ff4.js +0 -1
- package/web/.next/static/chunks/1004422d31074d62.js +0 -1
- package/web/.next/static/chunks/25afa19789883705.js +0 -6
- package/web/.next/static/chunks/2bc11b604b131190.js +0 -1
- package/web/.next/static/chunks/30ababddac1b82dc.js +0 -1
- package/web/.next/static/chunks/64f0033534ca1ad3.css +0 -3
- package/web/.next/static/chunks/902a6ba5837e1e57.js +0 -1
- package/web/.next/static/chunks/a28bcda8dd6b68ee.js +0 -1
- package/web/.next/static/chunks/aabc80195233b4da.js +0 -1
- package/web/.next/static/chunks/b6069d0eb07a978f.js +0 -1
- package/web/.next/static/chunks/c2caa064748bb0b5.js +0 -1
- package/web/.next/static/chunks/c5f8e486166298c2.js +0 -1
- package/web/.next/static/chunks/d6a81d2f8b98b4be.js +0 -1
- package/web/.next/static/chunks/dfa8ef24e636ca14.js +0 -1
- package/web/.next/static/chunks/e9d0e95bbaa0f4fb.js +0 -1
- package/web/.next/static/chunks/ebaa0c535c4135f1.js +0 -1
- /package/web/.next/standalone/packages/web/.next/static/{EKHFeqSnbpFbCnV8AGVjm → dzgjDKuem6HLwWyK0KMG4}/_buildManifest.js +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{EKHFeqSnbpFbCnV8AGVjm → dzgjDKuem6HLwWyK0KMG4}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{EKHFeqSnbpFbCnV8AGVjm → dzgjDKuem6HLwWyK0KMG4}/_ssgManifest.js +0 -0
- /package/web/.next/static/{EKHFeqSnbpFbCnV8AGVjm → dzgjDKuem6HLwWyK0KMG4}/_buildManifest.js +0 -0
- /package/web/.next/static/{EKHFeqSnbpFbCnV8AGVjm → dzgjDKuem6HLwWyK0KMG4}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{EKHFeqSnbpFbCnV8AGVjm → dzgjDKuem6HLwWyK0KMG4}/_ssgManifest.js +0 -0
|
@@ -1865,7 +1865,7 @@ export function WorkspaceKanban({
|
|
|
1865
1865
|
router.push(
|
|
1866
1866
|
`/sessions/${encodeURIComponent(
|
|
1867
1867
|
primaryLinkedSession.id
|
|
1868
|
-
)}
|
|
1868
|
+
)}`
|
|
1869
1869
|
)
|
|
1870
1870
|
}
|
|
1871
1871
|
className="flex w-full items-center justify-between gap-2 rounded-[3px] border border-[rgba(255,255,255,0.05)] bg-[rgba(255,255,255,0.03)] px-2 py-1.5 text-left hover:bg-[var(--vk-bg-hover)]"
|
|
@@ -1921,7 +1921,7 @@ export function WorkspaceKanban({
|
|
|
1921
1921
|
router.push(
|
|
1922
1922
|
`/sessions/${encodeURIComponent(
|
|
1923
1923
|
session.id
|
|
1924
|
-
)}
|
|
1924
|
+
)}`
|
|
1925
1925
|
)
|
|
1926
1926
|
}
|
|
1927
1927
|
className="flex w-full items-center justify-between gap-2 rounded-[3px] px-2 py-1.5 text-left hover:bg-[var(--vk-bg-hover)]"
|
|
@@ -1962,7 +1962,7 @@ export function WorkspaceKanban({
|
|
|
1962
1962
|
router.push(
|
|
1963
1963
|
`/sessions/${encodeURIComponent(
|
|
1964
1964
|
unresolvedPrimaryLink
|
|
1965
|
-
)}
|
|
1965
|
+
)}`
|
|
1966
1966
|
)
|
|
1967
1967
|
}
|
|
1968
1968
|
className="flex w-full items-center justify-between gap-2 rounded-[3px] px-2 py-1.5 text-left hover:bg-[var(--vk-bg-hover)]"
|
|
@@ -75,7 +75,7 @@ export function AppShell({
|
|
|
75
75
|
return (
|
|
76
76
|
<div
|
|
77
77
|
style={shellStyle}
|
|
78
|
-
className="relative flex h-dvh min-h-[100dvh] w-full max-w-full overflow-hidden bg-[var(--vk-bg-main)] text-[var(--vk-text-normal)]"
|
|
78
|
+
className="relative flex h-dvh min-h-[100dvh] w-full max-w-full overflow-hidden bg-[var(--vk-bg-main)] text-[var(--vk-text-normal)] [padding-top:env(safe-area-inset-top)] [padding-bottom:env(safe-area-inset-bottom)]"
|
|
79
79
|
>
|
|
80
80
|
{mobileSidebarOpen && (
|
|
81
81
|
<button
|
|
@@ -88,7 +88,7 @@ export function AppShell({
|
|
|
88
88
|
|
|
89
89
|
<aside
|
|
90
90
|
className={cn(
|
|
91
|
-
"absolute inset-y-0 left-0 z-30 flex h-full w-
|
|
91
|
+
"absolute inset-y-0 left-0 z-30 flex h-full w-full max-w-none flex-col border-r border-[var(--vk-border)] bg-[var(--vk-bg-panel)] transition-[transform,width] duration-200 sm:w-[min(90vw,var(--workspace-sidebar-width))] sm:max-w-[28rem]",
|
|
92
92
|
mobileSidebarOpen ? "translate-x-0" : "-translate-x-full",
|
|
93
93
|
desktopSidebarOpen
|
|
94
94
|
? "lg:w-[var(--workspace-sidebar-width)]"
|
|
@@ -125,7 +125,7 @@ export function AppShell({
|
|
|
125
125
|
<button
|
|
126
126
|
type="button"
|
|
127
127
|
onClick={onToggleSidebar}
|
|
128
|
-
className="absolute left-2 top-2 z-40 inline-flex h-
|
|
128
|
+
className="absolute left-2 top-2 z-40 inline-flex h-8 w-8 items-center justify-center rounded-[6px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] text-[var(--vk-text-muted)] shadow-[0_10px_24px_rgba(0,0,0,0.28)] hover:bg-[var(--vk-bg-hover)] lg:hidden"
|
|
129
129
|
aria-label="Open workspace panel"
|
|
130
130
|
>
|
|
131
131
|
<PanelLeftOpen className="h-5 w-5" />
|
|
@@ -218,11 +218,11 @@ function SessionDiffBadge({
|
|
|
218
218
|
return (
|
|
219
219
|
<span
|
|
220
220
|
className={cn(
|
|
221
|
-
"shrink-0 rounded-[10px] px-3 py-1.5 font-mono text-[12px] leading-none tabular-nums",
|
|
221
|
+
"inline-flex shrink-0 items-center rounded-[10px] px-3 py-1.5 font-mono text-[12px] leading-none tabular-nums",
|
|
222
222
|
isSelected ? "bg-[rgba(255,255,255,0.1)]" : "bg-[rgba(255,255,255,0.06)]",
|
|
223
223
|
)}
|
|
224
224
|
>
|
|
225
|
-
<span className="flex items-center gap-3">
|
|
225
|
+
<span className="inline-flex items-center gap-3">
|
|
226
226
|
<span className="text-[#18c58f]">+{additions}</span>
|
|
227
227
|
<span className="text-[#f26d6d]">−{deletions}</span>
|
|
228
228
|
</span>
|
|
@@ -296,36 +296,35 @@ export function Sidebar({
|
|
|
296
296
|
}, [filtered]);
|
|
297
297
|
|
|
298
298
|
useEffect(() => {
|
|
299
|
-
|
|
299
|
+
let cancelled = false;
|
|
300
300
|
const sessionsToFetch = orderedSessions.filter((session) => {
|
|
301
301
|
const cacheKey = getSessionDiffCacheKey(session);
|
|
302
302
|
return diffStatsBySessionId[session.id]?.key !== cacheKey;
|
|
303
303
|
});
|
|
304
304
|
|
|
305
305
|
if (sessionsToFetch.length === 0) {
|
|
306
|
-
return () =>
|
|
306
|
+
return () => {
|
|
307
|
+
cancelled = true;
|
|
308
|
+
};
|
|
307
309
|
}
|
|
308
310
|
|
|
309
311
|
void Promise.all(
|
|
310
312
|
sessionsToFetch.map(async (session) => {
|
|
311
313
|
const cacheKey = getSessionDiffCacheKey(session);
|
|
312
314
|
try {
|
|
313
|
-
const response = await fetch(`/api/sessions/${encodeURIComponent(session.id)}/diff
|
|
314
|
-
signal: controller.signal,
|
|
315
|
-
});
|
|
315
|
+
const response = await fetch(`/api/sessions/${encodeURIComponent(session.id)}/diff`);
|
|
316
316
|
if (!response.ok) {
|
|
317
317
|
return [session.id, { key: cacheKey, stats: null }] as const;
|
|
318
318
|
}
|
|
319
319
|
const payload = await response.json();
|
|
320
320
|
return [session.id, { key: cacheKey, stats: parseSessionDiffPayload(payload) }] as const;
|
|
321
321
|
} catch (error) {
|
|
322
|
-
|
|
323
|
-
return null;
|
|
324
|
-
}
|
|
322
|
+
console.error("Failed to load session diff stats", error);
|
|
325
323
|
return [session.id, { key: cacheKey, stats: null }] as const;
|
|
326
324
|
}
|
|
327
325
|
}),
|
|
328
326
|
).then((entries) => {
|
|
327
|
+
if (cancelled) return;
|
|
329
328
|
const resolvedEntries = entries.filter((entry): entry is readonly [string, SessionDiffStatsCacheEntry] => entry !== null);
|
|
330
329
|
if (resolvedEntries.length === 0) return;
|
|
331
330
|
setDiffStatsBySessionId((current) => {
|
|
@@ -337,7 +336,9 @@ export function Sidebar({
|
|
|
337
336
|
});
|
|
338
337
|
});
|
|
339
338
|
|
|
340
|
-
return () =>
|
|
339
|
+
return () => {
|
|
340
|
+
cancelled = true;
|
|
341
|
+
};
|
|
341
342
|
}, [diffStatsBySessionId, orderedSessions]);
|
|
342
343
|
|
|
343
344
|
return (
|
|
@@ -381,7 +382,10 @@ export function Sidebar({
|
|
|
381
382
|
const statusBadge = getStatusBadge(session, level);
|
|
382
383
|
const sessionAgent = getSessionAgent(session);
|
|
383
384
|
const isSelected = session.id === selectedId;
|
|
384
|
-
const isRunning =
|
|
385
|
+
const isRunning = session.activity === "active"
|
|
386
|
+
|| session.status === "spawning"
|
|
387
|
+
|| session.status === "running"
|
|
388
|
+
|| session.status === "working";
|
|
385
389
|
const isArchiving = archivingId === session.id;
|
|
386
390
|
const hasArchiveError = archiveError === session.id;
|
|
387
391
|
|
|
@@ -402,7 +406,7 @@ export function Sidebar({
|
|
|
402
406
|
<SessionRuntimeIcon running={isRunning} />
|
|
403
407
|
|
|
404
408
|
<span className="min-w-0 flex-1">
|
|
405
|
-
<span className="flex items-start gap-2">
|
|
409
|
+
<span className="flex min-w-0 items-start gap-2">
|
|
406
410
|
<span className="min-w-0 flex flex-1 items-center gap-2">
|
|
407
411
|
{sessionAgent ? (
|
|
408
412
|
<span
|
|
@@ -418,11 +422,18 @@ export function Sidebar({
|
|
|
418
422
|
</span>
|
|
419
423
|
</span>
|
|
420
424
|
{diffStats ? (
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
425
|
+
<>
|
|
426
|
+
<span className="hidden shrink-0 sm:block">
|
|
427
|
+
<SessionDiffBadge
|
|
428
|
+
additions={diffStats.additions}
|
|
429
|
+
deletions={diffStats.deletions}
|
|
430
|
+
isSelected={isSelected}
|
|
431
|
+
/>
|
|
432
|
+
</span>
|
|
433
|
+
<span className="shrink-0 rounded-[8px] bg-[rgba(255,255,255,0.06)] px-2.5 py-1 text-[11px] font-medium sm:hidden">
|
|
434
|
+
<span className={statusBadge.className}>{statusBadge.label}</span>
|
|
435
|
+
</span>
|
|
436
|
+
</>
|
|
426
437
|
) : (
|
|
427
438
|
<span className="shrink-0 rounded-[8px] bg-[rgba(255,255,255,0.06)] px-2.5 py-1 text-[11px] font-medium">
|
|
428
439
|
<span className={statusBadge.className}>{statusBadge.label}</span>
|
|
@@ -10,8 +10,8 @@ interface TopBarProps {
|
|
|
10
10
|
|
|
11
11
|
export const TopBar = memo(function TopBar({ title, onOpenPreferences }: TopBarProps) {
|
|
12
12
|
return (
|
|
13
|
-
<header className="flex h-
|
|
14
|
-
<div className="min-w-0 flex-1 text-center">
|
|
13
|
+
<header className="flex h-11 items-center border-b border-[var(--vk-border)] bg-[var(--vk-bg-panel)] pl-12 pr-3 text-[13px] text-[var(--vk-text-muted)] sm:h-14 sm:px-5 sm:text-[14px]">
|
|
14
|
+
<div className="min-w-0 flex-1 text-left sm:text-center">
|
|
15
15
|
<span className="block truncate font-medium tracking-[0.01em] text-[var(--vk-text-normal)]">
|
|
16
16
|
{title ?? "All Projects"}
|
|
17
17
|
</span>
|
|
@@ -21,7 +21,7 @@ export const TopBar = memo(function TopBar({ title, onOpenPreferences }: TopBarP
|
|
|
21
21
|
<button
|
|
22
22
|
type="button"
|
|
23
23
|
onClick={onOpenPreferences}
|
|
24
|
-
className="inline-flex h-
|
|
24
|
+
className="inline-flex h-9 w-9 items-center justify-center rounded-[6px] text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)] hover:text-[var(--vk-text-normal)]"
|
|
25
25
|
aria-label="Open preferences"
|
|
26
26
|
title="Preferences"
|
|
27
27
|
>
|
|
@@ -4,6 +4,7 @@ import { useRouter } from "next/navigation";
|
|
|
4
4
|
import {
|
|
5
5
|
useCallback,
|
|
6
6
|
useEffect,
|
|
7
|
+
useLayoutEffect,
|
|
7
8
|
useMemo,
|
|
8
9
|
useRef,
|
|
9
10
|
useState,
|
|
@@ -1347,10 +1348,12 @@ export function ChatPanel({
|
|
|
1347
1348
|
|
|
1348
1349
|
const endRef = useRef<HTMLDivElement | null>(null);
|
|
1349
1350
|
const scrollContainerRef = useRef<HTMLDivElement | null>(null);
|
|
1351
|
+
const composerRef = useRef<HTMLTextAreaElement | null>(null);
|
|
1350
1352
|
const fileInputRef = useRef<HTMLInputElement | null>(null);
|
|
1351
1353
|
const modelMenuRef = useRef<HTMLDivElement | null>(null);
|
|
1352
1354
|
const reasoningMenuRef = useRef<HTMLDivElement | null>(null);
|
|
1353
1355
|
const shouldStickToBottomRef = useRef(true);
|
|
1356
|
+
const previousScrollTopRef = useRef(0);
|
|
1354
1357
|
const normalizedAgentName = agentName?.trim() || "";
|
|
1355
1358
|
const normalizedSessionStatus = sessionStatus?.trim().toLowerCase() ?? "";
|
|
1356
1359
|
const runtimeCatalog = useMemo(
|
|
@@ -1466,6 +1469,10 @@ export function ChatPanel({
|
|
|
1466
1469
|
[displayEntries],
|
|
1467
1470
|
);
|
|
1468
1471
|
|
|
1472
|
+
const normalizeWhitespaceOnlyDraft = useCallback(() => {
|
|
1473
|
+
setMessage((current) => (current.trim().length === 0 ? "" : current));
|
|
1474
|
+
}, []);
|
|
1475
|
+
|
|
1469
1476
|
const updateBottomStickiness = useCallback(() => {
|
|
1470
1477
|
const container = scrollContainerRef.current;
|
|
1471
1478
|
if (!container) {
|
|
@@ -1473,26 +1480,66 @@ export function ChatPanel({
|
|
|
1473
1480
|
return;
|
|
1474
1481
|
}
|
|
1475
1482
|
|
|
1483
|
+
previousScrollTopRef.current = container.scrollTop;
|
|
1476
1484
|
const distanceFromBottom = container.scrollHeight - container.scrollTop - container.clientHeight;
|
|
1477
|
-
shouldStickToBottomRef.current = distanceFromBottom <=
|
|
1485
|
+
shouldStickToBottomRef.current = distanceFromBottom <= 16;
|
|
1478
1486
|
}, []);
|
|
1479
1487
|
|
|
1480
1488
|
const scrollToBottom = useCallback((behavior: ScrollBehavior) => {
|
|
1481
1489
|
shouldStickToBottomRef.current = true;
|
|
1482
|
-
|
|
1490
|
+
const container = scrollContainerRef.current;
|
|
1491
|
+
if (!container) {
|
|
1483
1492
|
endRef.current?.scrollIntoView({ behavior, block: "end" });
|
|
1484
1493
|
return;
|
|
1485
1494
|
}
|
|
1486
1495
|
|
|
1487
1496
|
window.requestAnimationFrame(() => {
|
|
1488
|
-
|
|
1497
|
+
container.scrollTo({
|
|
1498
|
+
top: container.scrollHeight,
|
|
1499
|
+
behavior,
|
|
1500
|
+
});
|
|
1489
1501
|
});
|
|
1490
1502
|
}, []);
|
|
1491
1503
|
|
|
1492
1504
|
useEffect(() => {
|
|
1493
1505
|
shouldStickToBottomRef.current = true;
|
|
1506
|
+
previousScrollTopRef.current = 0;
|
|
1494
1507
|
}, [sessionId]);
|
|
1495
1508
|
|
|
1509
|
+
useLayoutEffect(() => {
|
|
1510
|
+
const container = scrollContainerRef.current;
|
|
1511
|
+
if (!container) {
|
|
1512
|
+
return;
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1515
|
+
if (shouldStickToBottomRef.current) {
|
|
1516
|
+
previousScrollTopRef.current = container.scrollTop;
|
|
1517
|
+
return;
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1520
|
+
container.scrollTop = previousScrollTopRef.current;
|
|
1521
|
+
}, [feedItems, hasStreamingEntry, parserState, runtimeStatus, sending]);
|
|
1522
|
+
|
|
1523
|
+
useEffect(() => {
|
|
1524
|
+
const handleVisibilityChange = () => {
|
|
1525
|
+
if (document.hidden) {
|
|
1526
|
+
return;
|
|
1527
|
+
}
|
|
1528
|
+
normalizeWhitespaceOnlyDraft();
|
|
1529
|
+
};
|
|
1530
|
+
|
|
1531
|
+
const handleWindowFocus = () => {
|
|
1532
|
+
normalizeWhitespaceOnlyDraft();
|
|
1533
|
+
};
|
|
1534
|
+
|
|
1535
|
+
document.addEventListener("visibilitychange", handleVisibilityChange);
|
|
1536
|
+
window.addEventListener("focus", handleWindowFocus);
|
|
1537
|
+
return () => {
|
|
1538
|
+
document.removeEventListener("visibilitychange", handleVisibilityChange);
|
|
1539
|
+
window.removeEventListener("focus", handleWindowFocus);
|
|
1540
|
+
};
|
|
1541
|
+
}, [normalizeWhitespaceOnlyDraft]);
|
|
1542
|
+
|
|
1496
1543
|
const prevEntryCountRef = useRef(0);
|
|
1497
1544
|
useEffect(() => {
|
|
1498
1545
|
const count = displayEntries.length;
|
|
@@ -1606,7 +1653,7 @@ export function ChatPanel({
|
|
|
1606
1653
|
setMessage("");
|
|
1607
1654
|
setAttachments([]);
|
|
1608
1655
|
if (data?.sessionId && data.sessionId !== sessionId) {
|
|
1609
|
-
router.push(`/sessions/${encodeURIComponent(data.sessionId)}
|
|
1656
|
+
router.push(`/sessions/${encodeURIComponent(data.sessionId)}`);
|
|
1610
1657
|
return;
|
|
1611
1658
|
}
|
|
1612
1659
|
await refresh();
|
|
@@ -1733,7 +1780,12 @@ export function ChatPanel({
|
|
|
1733
1780
|
<div
|
|
1734
1781
|
ref={scrollContainerRef}
|
|
1735
1782
|
onScroll={updateBottomStickiness}
|
|
1736
|
-
|
|
1783
|
+
onWheelCapture={(event) => {
|
|
1784
|
+
if (event.deltaY < 0) {
|
|
1785
|
+
shouldStickToBottomRef.current = false;
|
|
1786
|
+
}
|
|
1787
|
+
}}
|
|
1788
|
+
className="flex-1 overflow-y-auto px-3 pt-3 sm:px-4 [overflow-anchor:none]"
|
|
1737
1789
|
>
|
|
1738
1790
|
<div className="mx-auto flex w-full max-w-[768px] flex-col gap-5 pb-6">
|
|
1739
1791
|
{loading && displayEntries.length === 0 ? (
|
|
@@ -1955,8 +2007,12 @@ export function ChatPanel({
|
|
|
1955
2007
|
|
|
1956
2008
|
<div className="px-2 py-2">
|
|
1957
2009
|
<textarea
|
|
2010
|
+
ref={composerRef}
|
|
1958
2011
|
value={message}
|
|
1959
2012
|
onChange={(event) => setMessage(event.target.value)}
|
|
2013
|
+
onFocus={() => {
|
|
2014
|
+
normalizeWhitespaceOnlyDraft();
|
|
2015
|
+
}}
|
|
1960
2016
|
onKeyDown={handleComposerKeyDown}
|
|
1961
2017
|
placeholder="Continue working on this task..."
|
|
1962
2018
|
rows={1}
|
|
@@ -1,37 +1,51 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useMemo } from "react";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { usePathname, useRouter, useSearchParams } from "next/navigation";
|
|
5
5
|
import {
|
|
6
6
|
FileCode,
|
|
7
7
|
Globe,
|
|
8
8
|
LayoutDashboard,
|
|
9
|
-
|
|
9
|
+
SquareTerminal,
|
|
10
10
|
} from "lucide-react";
|
|
11
11
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/Tabs";
|
|
12
12
|
import { Card, CardContent } from "@/components/ui/Card";
|
|
13
13
|
import { Badge } from "@/components/ui/Badge";
|
|
14
14
|
import { useSession } from "@/hooks/useSession";
|
|
15
|
-
import { AgentTileIcon } from "@/components/AgentTileIcon";
|
|
16
15
|
import { SessionOverview } from "./SessionOverview";
|
|
17
16
|
import { SessionDiff } from "./SessionDiff";
|
|
18
|
-
import { ChatPanel } from "./ChatPanel";
|
|
19
17
|
import { SessionPreview } from "./SessionPreview";
|
|
18
|
+
import { SessionTerminal } from "./SessionTerminal";
|
|
19
|
+
import type { TerminalInsertRequest } from "./terminalInsert";
|
|
20
20
|
|
|
21
21
|
interface SessionDetailProps {
|
|
22
22
|
sessionId: string;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
type SessionTab = "overview" | "
|
|
25
|
+
type SessionTab = "overview" | "terminal" | "diff" | "preview";
|
|
26
26
|
|
|
27
27
|
function resolveSessionTab(value: string | null): SessionTab {
|
|
28
|
-
if (value === "overview" || value === "
|
|
28
|
+
if (value === "overview" || value === "terminal" || value === "diff" || value === "preview") {
|
|
29
29
|
return value;
|
|
30
30
|
}
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
return "terminal";
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function getCompactSessionStatusLabel(status: string): string {
|
|
35
|
+
switch (status) {
|
|
36
|
+
case "needs_input":
|
|
37
|
+
return "input";
|
|
38
|
+
case "working":
|
|
39
|
+
return "working";
|
|
40
|
+
case "running":
|
|
41
|
+
return "running";
|
|
42
|
+
case "spawning":
|
|
43
|
+
return "spawn";
|
|
44
|
+
case "queued":
|
|
45
|
+
return "queued";
|
|
46
|
+
default:
|
|
47
|
+
return status.replace(/[_-]+/g, " ");
|
|
33
48
|
}
|
|
34
|
-
return "chat";
|
|
35
49
|
}
|
|
36
50
|
|
|
37
51
|
export function SessionDetail({ sessionId }: SessionDetailProps) {
|
|
@@ -39,6 +53,9 @@ export function SessionDetail({ sessionId }: SessionDetailProps) {
|
|
|
39
53
|
const router = useRouter();
|
|
40
54
|
const searchParams = useSearchParams();
|
|
41
55
|
const { session, loading, error } = useSession(sessionId);
|
|
56
|
+
const terminalInsertNonceRef = useRef(0);
|
|
57
|
+
const autoPreviewOpenedRef = useRef(false);
|
|
58
|
+
const [pendingTerminalInsert, setPendingTerminalInsert] = useState<TerminalInsertRequest | null>(null);
|
|
42
59
|
const activeTab = useMemo(
|
|
43
60
|
() => resolveSessionTab(searchParams.get("tab")),
|
|
44
61
|
[searchParams],
|
|
@@ -46,7 +63,7 @@ export function SessionDetail({ sessionId }: SessionDetailProps) {
|
|
|
46
63
|
const handleTabChange = useCallback((value: string) => {
|
|
47
64
|
const nextTab = resolveSessionTab(value);
|
|
48
65
|
const params = new URLSearchParams(searchParams.toString());
|
|
49
|
-
if (nextTab === "
|
|
66
|
+
if (nextTab === "terminal") {
|
|
50
67
|
params.delete("tab");
|
|
51
68
|
} else {
|
|
52
69
|
params.set("tab", nextTab);
|
|
@@ -55,6 +72,25 @@ export function SessionDetail({ sessionId }: SessionDetailProps) {
|
|
|
55
72
|
const nextUrl = nextQuery.length > 0 ? `${pathname}?${nextQuery}` : pathname;
|
|
56
73
|
router.replace(nextUrl, { scroll: false });
|
|
57
74
|
}, [pathname, router, searchParams]);
|
|
75
|
+
const queueTerminalInsert = useCallback((request: Omit<TerminalInsertRequest, "nonce">) => {
|
|
76
|
+
terminalInsertNonceRef.current += 1;
|
|
77
|
+
setPendingTerminalInsert({
|
|
78
|
+
nonce: terminalInsertNonceRef.current,
|
|
79
|
+
...request,
|
|
80
|
+
});
|
|
81
|
+
}, []);
|
|
82
|
+
useEffect(() => {
|
|
83
|
+
autoPreviewOpenedRef.current = false;
|
|
84
|
+
terminalInsertNonceRef.current = 0;
|
|
85
|
+
setPendingTerminalInsert(null);
|
|
86
|
+
}, [sessionId]);
|
|
87
|
+
const handlePreviewConnectionChange = useCallback((connected: boolean) => {
|
|
88
|
+
if (!connected || activeTab !== "terminal" || autoPreviewOpenedRef.current) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
autoPreviewOpenedRef.current = true;
|
|
92
|
+
handleTabChange("preview");
|
|
93
|
+
}, [activeTab, handleTabChange]);
|
|
58
94
|
|
|
59
95
|
if (loading) {
|
|
60
96
|
return (
|
|
@@ -96,63 +132,80 @@ export function SessionDetail({ sessionId }: SessionDetailProps) {
|
|
|
96
132
|
const agentName = session.metadata["agent"]?.trim() ?? "";
|
|
97
133
|
const sessionModel = session.metadata["model"]?.trim() ?? "";
|
|
98
134
|
const sessionReasoningEffort = session.metadata["reasoningEffort"]?.trim() ?? "";
|
|
135
|
+
const compactStatusLabel = getCompactSessionStatusLabel(status);
|
|
99
136
|
|
|
100
137
|
return (
|
|
101
138
|
<div className="flex h-full min-h-0 flex-col">
|
|
102
|
-
<Tabs value={activeTab} onValueChange={handleTabChange} className="flex min-h-0 flex-1 flex-col gap-
|
|
103
|
-
<div className="flex min-w-0 flex-col gap-
|
|
104
|
-
<TabsList className="w-full sm:w-fit">
|
|
105
|
-
<TabsTrigger value="overview">
|
|
139
|
+
<Tabs key={sessionId} value={activeTab} onValueChange={handleTabChange} className="flex min-h-0 flex-1 flex-col gap-1.5 p-1.5 sm:gap-2 sm:p-3">
|
|
140
|
+
<div className="flex min-w-0 flex-col gap-1.5 sm:gap-2">
|
|
141
|
+
<TabsList className="grid w-full grid-cols-4 sm:w-fit sm:inline-flex">
|
|
142
|
+
<TabsTrigger value="overview" className="justify-center px-2 text-[11px] sm:px-2.5 sm:text-[12px]">
|
|
106
143
|
<LayoutDashboard className="h-3.5 w-3.5" />
|
|
107
144
|
Overview
|
|
108
145
|
</TabsTrigger>
|
|
109
|
-
<TabsTrigger value="
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
: <MessageSquare className="h-3.5 w-3.5" />}
|
|
113
|
-
Chat
|
|
146
|
+
<TabsTrigger value="terminal" className="justify-center px-2 text-[11px] sm:px-2.5 sm:text-[12px]">
|
|
147
|
+
<SquareTerminal className="h-3.5 w-3.5" />
|
|
148
|
+
Terminal
|
|
114
149
|
</TabsTrigger>
|
|
115
|
-
<TabsTrigger value="preview">
|
|
150
|
+
<TabsTrigger value="preview" className="justify-center px-2 text-[11px] sm:px-2.5 sm:text-[12px]">
|
|
116
151
|
<Globe className="h-3.5 w-3.5" />
|
|
117
152
|
Preview
|
|
118
153
|
</TabsTrigger>
|
|
119
|
-
<TabsTrigger value="diff">
|
|
154
|
+
<TabsTrigger value="diff" className="justify-center px-2 text-[11px] sm:px-2.5 sm:text-[12px]">
|
|
120
155
|
<FileCode className="h-3.5 w-3.5" />
|
|
121
156
|
Diff
|
|
122
157
|
</TabsTrigger>
|
|
123
158
|
</TabsList>
|
|
124
|
-
<div className="flex min-w-0 items-center gap-2">
|
|
125
|
-
<Badge variant="outline" className="h-[23px]">
|
|
126
|
-
{
|
|
159
|
+
<div className="flex min-w-0 items-center justify-between gap-2">
|
|
160
|
+
<Badge variant="outline" className="h-[23px] max-w-full">
|
|
161
|
+
<span className="sm:hidden">{compactStatusLabel}</span>
|
|
162
|
+
<span className="hidden sm:inline">{status}</span>
|
|
127
163
|
</Badge>
|
|
128
|
-
<span className="
|
|
164
|
+
<span className="font-mono text-[10px] text-[var(--vk-text-muted)] sm:hidden">{sessionId.slice(0, 6)}</span>
|
|
165
|
+
<span className="hidden min-w-0 truncate font-mono text-[10px] text-[var(--vk-text-muted)] sm:block">{sessionId}</span>
|
|
129
166
|
</div>
|
|
130
167
|
</div>
|
|
131
168
|
|
|
132
|
-
<
|
|
133
|
-
<
|
|
134
|
-
|
|
169
|
+
<div className="relative min-h-0 flex-1">
|
|
170
|
+
<TabsContent value="overview" className="min-h-0 h-full overflow-auto">
|
|
171
|
+
<SessionOverview key={sessionId} session={session} />
|
|
172
|
+
</TabsContent>
|
|
135
173
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
174
|
+
<TabsContent
|
|
175
|
+
value="terminal"
|
|
176
|
+
forceMount
|
|
177
|
+
className="min-h-0 h-full overflow-hidden rounded-[3px] border border-[var(--vk-border)] bg-[#212121] focus-visible:outline-none [&[hidden]]:block data-[state=inactive]:pointer-events-none data-[state=inactive]:absolute data-[state=inactive]:inset-0 data-[state=inactive]:invisible data-[state=inactive]:opacity-0"
|
|
178
|
+
>
|
|
179
|
+
<SessionTerminal
|
|
180
|
+
key={sessionId}
|
|
181
|
+
sessionId={sessionId}
|
|
182
|
+
agentName={agentName}
|
|
183
|
+
projectId={session.projectId}
|
|
184
|
+
sessionModel={sessionModel}
|
|
185
|
+
sessionReasoningEffort={sessionReasoningEffort}
|
|
186
|
+
sessionState={status}
|
|
187
|
+
active={activeTab === "terminal"}
|
|
188
|
+
pendingInsert={pendingTerminalInsert}
|
|
189
|
+
/>
|
|
190
|
+
</TabsContent>
|
|
145
191
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
192
|
+
<TabsContent
|
|
193
|
+
value="preview"
|
|
194
|
+
forceMount
|
|
195
|
+
className="min-h-0 h-full overflow-auto focus-visible:outline-none [&[hidden]]:block data-[state=inactive]:pointer-events-none data-[state=inactive]:absolute data-[state=inactive]:inset-0 data-[state=inactive]:invisible data-[state=inactive]:opacity-0"
|
|
196
|
+
>
|
|
197
|
+
<SessionPreview
|
|
198
|
+
key={sessionId}
|
|
199
|
+
sessionId={sessionId}
|
|
200
|
+
onQueueTerminalInsert={queueTerminalInsert}
|
|
201
|
+
onConnectionChange={handlePreviewConnectionChange}
|
|
202
|
+
/>
|
|
203
|
+
</TabsContent>
|
|
152
204
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
205
|
+
<TabsContent value="diff" className="min-h-0 h-full overflow-auto">
|
|
206
|
+
<SessionDiff key={sessionId} sessionId={sessionId} />
|
|
207
|
+
</TabsContent>
|
|
208
|
+
</div>
|
|
156
209
|
</Tabs>
|
|
157
210
|
</div>
|
|
158
211
|
);
|