User Story
As an OpenShell TUI user managing providers, I want to switch the active workspace while the Providers pane is focused, so that I can inspect and manage workspace-scoped providers without navigating to the Sandboxes pane first.
Problem Statement
The TUI has one dashboard-wide workspace selection, and changing it refreshes both providers and sandboxes. However, the w workspace shortcut is handled and advertised only while the Sandboxes pane has focus. The Providers pane has no visible workspace-switch action even though provider records are workspace-scoped.
This makes the provider UI appear gateway-global and obscures the isolation behavior implemented by #2243. Users must discover the non-obvious workaround of moving focus to Sandboxes, pressing w, and then returning to Providers.
Impact / Why This Matters
Providers contain workspace-owned credentials and may share the same name across workspaces. Hiding workspace selection from the Providers pane makes it difficult to understand which provider set is being displayed and increases the chance that users inspect or mutate the wrong workspace's provider.
The current workaround is insufficient because workspace is a dashboard-level scope, not a sandbox-only concept, and the title bar alone does not explain how to change it while working with providers.
Acceptance Criteria
Reproduction Steps
- Configure a gateway with at least two workspaces and providers in each workspace.
- Run
openshell term.
- Focus the Providers pane.
- Observe that the navigation bar does not advertise a workspace action and pressing
w has no effect.
- Move focus to Sandboxes and press
w.
- Observe that the dashboard workspace changes and both sandbox and provider rows refresh.
Environment
- OpenShell: current
main at 07453f29
- OS: all supported TUI platforms
- Runtime, deployment, or integration:
openshell term
Agent Investigation
The provider backend is already workspace-scoped. This issue is limited to TUI discoverability and input handling.
App::cycle_workspace changes the dashboard-wide scope, resets both sandbox and provider selection indices, and sets pending_workspace_refresh.
- The event loop responds by refreshing both providers and sandboxes.
refresh_providers sends either the selected workspace or all_workspaces = true to ListProviders.
handle_sandboxes_key maps w to cycle_workspace, but handle_providers_key has no equivalent mapping.
- The Sandboxes navigation bar advertises
[w] Workspace; the Providers navigation bar does not.
Relevant locations:
crates/openshell-tui/src/app.rs: cycle_workspace, handle_providers_key, handle_sandboxes_key
crates/openshell-tui/src/lib.rs: pending workspace refresh handling and refresh_providers
crates/openshell-tui/src/ui/mod.rs: dashboard navigation hints
Alternatives Considered
A separate provider-only workspace selector would create two competing scopes on the same dashboard and allow provider and sandbox panes to show different workspaces. Reusing the existing dashboard-wide workspace selection preserves the current model and requires only exposing the existing action consistently.
User Story
As an OpenShell TUI user managing providers, I want to switch the active workspace while the Providers pane is focused, so that I can inspect and manage workspace-scoped providers without navigating to the Sandboxes pane first.
Problem Statement
The TUI has one dashboard-wide workspace selection, and changing it refreshes both providers and sandboxes. However, the
wworkspace shortcut is handled and advertised only while the Sandboxes pane has focus. The Providers pane has no visible workspace-switch action even though provider records are workspace-scoped.This makes the provider UI appear gateway-global and obscures the isolation behavior implemented by #2243. Users must discover the non-obvious workaround of moving focus to Sandboxes, pressing
w, and then returning to Providers.Impact / Why This Matters
Providers contain workspace-owned credentials and may share the same name across workspaces. Hiding workspace selection from the Providers pane makes it difficult to understand which provider set is being displayed and increases the chance that users inspect or mutate the wrong workspace's provider.
The current workaround is insufficient because workspace is a dashboard-level scope, not a sandbox-only concept, and the title bar alone does not explain how to change it while working with providers.
Acceptance Criteria
wwhile the Providers pane is focused cycles the dashboard workspace using the same sequence and semantics as the Sandboxes pane.[w] Workspacewhen workspace switching is available.allworkspace view remains supported, and provider creation continues to require selecting a specific workspace.Reproduction Steps
openshell term.whas no effect.w.Environment
mainat07453f29openshell termAgent Investigation
The provider backend is already workspace-scoped. This issue is limited to TUI discoverability and input handling.
App::cycle_workspacechanges the dashboard-wide scope, resets both sandbox and provider selection indices, and setspending_workspace_refresh.refresh_providerssends either the selected workspace orall_workspaces = truetoListProviders.handle_sandboxes_keymapswtocycle_workspace, buthandle_providers_keyhas no equivalent mapping.[w] Workspace; the Providers navigation bar does not.Relevant locations:
crates/openshell-tui/src/app.rs:cycle_workspace,handle_providers_key,handle_sandboxes_keycrates/openshell-tui/src/lib.rs: pending workspace refresh handling andrefresh_providerscrates/openshell-tui/src/ui/mod.rs: dashboard navigation hintsAlternatives Considered
A separate provider-only workspace selector would create two competing scopes on the same dashboard and allow provider and sandbox panes to show different workspaces. Reusing the existing dashboard-wide workspace selection preserves the current model and requires only exposing the existing action consistently.