Add sidebar tabs and nonblocking side-chat creation (#59767)

## Why

Starting a side chat waits for fork and setup requests. Keep the workspace responsive during those requests and let users return to an existing side chat through the sidebar chooser.

## What changed

- Add a clickable `Side chat` tab and `+` chooser, plus the configurable `focus_sidebar_tabs` action bound to `leader t` by default.
- Create workspace side chats in the background, showing loading and failure states with `Enter` to retry and `Esc` to go back. Preserve opening prompts and avoid taking focus when the user has moved away.
- Retain inherited permission profiles and defer startup notifications until the side chat is registered on its owning backend.
- Quiet the parent composer while the chooser has focus and prevent completion popups or repeated activation keys from consuming chooser input.

## Testing

Extend tests and snapshots for loading and failure states, returning to an existing chat, draft preservation, inherited permissions, focus transitions, and deferred MCP startup notifications.

GitOrigin-RevId: 244bcd3f170819e2260f21dc1041cf8899fe048c
This commit is contained in:
Felipe Coury
2026-11-06 00:21:16 +00:00
committed by copyberry
parent b3c5a49458
commit 9df200a068
39 changed files with 1085 additions and 222 deletions
+10
View File
@@ -5327,6 +5327,7 @@
"focus_pane_left": null,
"focus_pane_right": null,
"focus_sidebar_content": null,
"focus_sidebar_tabs": null,
"hide_pane": null,
"leader": null,
"maximize_pane_width": null,
@@ -6211,6 +6212,14 @@
],
"description": "Focus the side conversation, or hide it when already focused."
},
"focus_sidebar_tabs": {
"allOf": [
{
"$ref": "#/definitions/KeybindingsSpec"
}
],
"description": "Open the sidebar tab chooser."
},
"hide_pane": {
"allOf": [
{
@@ -6485,6 +6494,7 @@
"focus_pane_left": null,
"focus_pane_right": null,
"focus_sidebar_content": null,
"focus_sidebar_tabs": null,
"hide_pane": null,
"leader": null,
"maximize_pane_width": null,