feat(desktop): cloud workspaces in the sidebar, a single-indicator row, and environments that set themselves up
Summary
Cloud workspaces become ordinary sidebar rows, the workspace row gets a quieter single-indicator design, and creating a cloud workspace no longer needs an environment set up first.
Rollout. The new sidebar is on when cloud-workspaces is on and either the sidebar-inline-cloud-workspaces flag is on or the person turned on Settings → Experimental → New sidebar. The setting follows the flag until someone sets it; then their choice wins. With it off, the sidebar is exactly today's: the separate Cloud section and the current row (kept as DashboardSidebarLegacyExpandedWorkspaceRow until the flag goes).
Cloud workspaces in projects (new sidebar)
- Each cloud workspace files under the project of its primary GitHub repo; a repo with no local checkout gets a stand-in project.
- Cloud rows are placed like worktrees, so they drag, pin and join groups alongside local rows. A repo that resolves later moves the row to the real project without touching order or pin; a new workspace files under its repo at once.
- "Show" filter in the Projects sort menu: all, local, cloud.
Row design (new sidebar)
- One leading glyph by precedence: sandbox state (failed dot, creating wave), live agent state, then the PR icon by state, else a small idle dot. The slot stays a PR button whenever the row has one.
- Trailing: queued badge, then a host glyph on cloud and remote rows; the ports chip sits at the far right of the title line. Hover swaps in the shortcut and ✕/Archive. Cloud rows archive instead of delete.
Creating a cloud workspace (behind cloud-workspaces, as today)
- The new-workspace screen shows the project picker on Cloud too, and the environment picker starts on Default: the project's environment for its repo, or one the API makes on first use.
cloudWorkspace.createtakesrepositoryIdas an alternative toenvironmentId(additive);ensureDefaultEnvironmentreuses the oldest environment carrying the repo or records one named after it, org-wide, in the caller's nearest region. - The environment list is scoped to the project's repo; "New environment" opens the editor prefilled from the project.
- Environment editor: Name, then repositories as removable chips with an Add list that opens below; region, visibility and opening repo under Advanced. When the project's repo isn't visible to the org's GitHub App, a notice says why and offers Configure GitHub App, which opens the installation's settings; the list refetches when the window regains focus.
integration.github.getInstallationalso returns the installation id (additive). - Picker menus use a step smaller type and rounded highlights; environments get a container icon; the sidebar and host picker share one cloud glyph.
Design pages: https://app.superset.sh/page/cloud-sidebar-design-alignment-18wszt and https://app.superset.sh/page/cloud-environment-picker-options-67bk74
Test plan
Verified in the running desktop app over CDP (dark theme):
- New sidebar on: cloud rows under their repo's project; drag within a project and past local rows; pin/unpin; Show filter all/local/cloud
- New sidebar off (flag overridden): today's row and the separate Cloud section
- Experimental → New sidebar: appears with cloud workspaces on, follows the flag until set, records on/off
- Default environment end to end: a project whose repo had no environment created one on submit, the workspace recorded the repo, and the row filed under that project
- Environment editor prefilled from the project; Add list opens below; missing-repo notice with Configure GitHub App for a repo on another GitHub account
-
tscclean for desktop and trpc; biome clean on the 82 changed files;check:i18nclean, new strings translated in all 16 locales - Tests: sidebar, new-workspace modal, settings and persisted-key suites (592 pass); trpc environment, cloud-workspace and integration suites (47 pass). The one local failure, main's
useComposerDictationtest, fails only under Bun 1.3.14 and passes under the repo's 1.4.2.
For a reviewer:
- Light theme and the collapsed icon rail (the rail keeps the previous icon)
- Dropping a cloud row into a tag-backed folder is a deliberate no-op (membership there is a host tag); legacy folders work
- Cloud provisioning itself can't run in the local dev stack (placeholder sandbox credentials), so created workspaces there end as failed rows
Not in this PR: deleting the old Cloud section and the legacy row (with the flag), creating a cloud workspace from a project's "+", sandbox state in the hover card, environment setup scripts.
Summary by cubic
Cloud workspaces now render as ordinary sidebar rows under the project of the GitHub repo they were created from, each row gets a single-indicator design with a quieter trailing cluster, and creating a cloud workspace no longer needs an environment set up first. The new sidebar needs cloud-workspaces plus either the sidebar-inline-cloud-workspaces flag or the Experimental → New sidebar switch (which follows the flag until set); with it off, the row and the separate Cloud section stay today's.
New sidebar
- A repo with no local checkout gets a stand-in project that collapses, hides, orders, drags, pins, and groups like local rows; a repo that resolves later moves the row to the real project without touching order or pin, and a new workspace files under its repo at once. Hiding a project hides its cloud rows too, its + button opens the cloud form on that repository, and cloud rows stay out of drag and bulk selection; a cloud row's menu lists only the older folders it can join, and dropping one into a tag-backed folder never writes to its sandbox.
- The Projects sort menu gains a persisted "Show" filter (all, local, cloud), offered only while cloud rows are inline; it covers Pinned and Sessions, and Local keeps projects with no workspaces.
- One lead glyph by precedence: sandbox state, then live agent state, then PR icon, else a quiet dot; the slot stays a PR button when the row has one, and its tooltip names the PR and live state.
- Trailing cluster: queued badge, ports button, muted host glyph on cloud and remote rows; hover swaps in the shortcut and ✕/Archive. Cloud rows Archive instead of ✕, and renames of a provisioning or failed cloud workspace go to the API; diff stats move into the hover card; the ports and agents hover cards get a safe triangle.
Creating cloud workspaces
- The project picker shows on Cloud too, with a From GitHub group for the App's repositories — a repo no project checks out becomes a stand-in project — and Configure GitHub App or Connect GitHub in its footer; picking a repository never replaces the device's last project. The environment picker starts on Default — the project's environment for its repo, or one the API makes on first use.
cloudWorkspace.createtakesrepositoryIdas an alternative toenvironmentId; the environment list keeps only environments that open on the project's repo, submit is blocked while the lists load, and two first workspaces share one default environment. - Only projects with a GitHub repository are offered on Cloud; a named environment must still open on the chosen repository at submit, else submit falls back to the repository target. With No project on Cloud, only Default is offered and Create is blocked.
- "New environment" opens the editor prefilled from the project; repositories are removable chips with an Add list; region, visibility and the opening repo sit under Advanced; a repo the GitHub App can't see shows a notice that offers Configure GitHub App, opening the installation's settings.
Summary by CodeRabbit
- New Features
- The dashboard sidebar can display cloud workspaces under their GitHub repositories, with filters for all, local, or cloud workspaces.
- Workspace rows show host and status indicators, with cloud-specific archive actions and context menus.
- Create cloud workspaces from GitHub repositories, select or create environments, and get guidance when repository access is unavailable.
- Enable or disable the new sidebar in experimental settings.
- Updates
- Environment setup and workspace creation menus have refreshed layouts and clearer selection states.
- Cloud workspace creation can use a repository directly when no suitable environment is selected.