Repository navigation
sessions: align bottom panel tabs with editor tabs - #341806
Sandeep Somavarapu (sandy081) merged 3 commits into
Conversation
Use the editor-style connected tab presentation when panel labels are enabled while preserving the existing icon-only appearance. Add focused coverage for both modes and their shared panel edge. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use the editor tab density for labeled panel titles while preserving the legacy icon-only height. Keep the layout allocation, rendered title, and trailing actions aligned across density changes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
📬 CODENOTIFYThe following users are being notified based on files changed in this PR: Benjamin Christopher Simmonds (@benibenj)Matched files:
|
|
Base:
|
There was a problem hiding this comment.
🟡 Changes recommended
Connected-tab styling obscures selected-tab badges and suppresses part of the curved border.
2 open findings
What changed in this PR
Aligns labeled bottom-panel tabs in the Agents window with editor tab styling and density.
Changes:
- Adds configurable title heights and relayout on settings changes.
- Introduces pill and connected-tab styling while preserving icon-only presentation.
- Adds layout and presentation tests.
| File | Description |
|---|---|
| src/vs/workbench/test/browser/part.test.ts | Tests custom title heights and fallback. |
| src/vs/workbench/browser/part.ts | Supports optional title-height overrides. |
| src/vs/sessions/test/browser/parts/panelPart.test.ts | Tests panel density and tab presentation. |
| src/vs/sessions/browser/parts/panelPart.ts | Synchronizes title styling and layout with settings. |
| src/vs/sessions/browser/parts/media/panelPart.css | Styles labeled tabs and centers trailing actions. |
🧠 Review effort: Balanced
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Keep activity badges above the connected tab surface and restore the leading shoulder for selected unfocused tabs. Add focused CSS regression coverage for both states.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Heads-up Sandeep Somavarapu (@sandy081): Flagging the upstream blocker rather than weakening the assertions in the unrelated managed-model PR. 🤖 Authored with GitHub Copilot on behalf of Ross Wollman (@rwoll). |
<!-- Thank you for submitting a Pull Request. Please: * Read our Pull Request guidelines: https://github.com/microsoft/vscode/wiki/How-to-Contribute#pull-requests * Associate an issue with the Pull Request. * Ensure that the code is up-to-date with the `main` branch. * Include a description of the proposed changes and how to test them. --> Fixes the full-suite regression introduced by #341806 and reported in #341806 (comment). The Agents panel rule that removes the classic top title border had the same specificity as the shared panel rule that adds it. As a result, stylesheet load order changed the available content height between focused and full-suite runs. This makes the Agents override explicitly more specific and updates the regression expectations to the intended full-height, vertically centered geometry. ### Validation - `npm run build-fast -- --client-only` — passed. - `./scripts/test.sh --run src/vs/sessions/test/browser/parts/panelPart.test.ts --reporter dot` — passed, 5 tests. - `./scripts/test.sh --run src/vs/sessions/test/browser/parts/panelPart.test.ts --run src/vs/sessions/contrib/terminal/test/browser/terminalTabsStyles.test.ts --reporter dot` — passed, 14 tests after rebasing onto current `main`. - `npm run stylelint -- src/vs/sessions/browser/parts/media/panelPart.css` — passed. - `npm run eslint -- src/vs/sessions/test/browser/parts/panelPart.test.ts` — passed. - `npm run typecheck-client` — passed. - `git diff --check` — passed. - `./scripts/test.sh --reporter dot` — the affected panel test passed in the full-suite CSS loading environment; 55,880 tests passed and 23 unrelated tests failed because local home paths resolved to `/Users/sandy081` instead of their expected `/home/...` fixtures.
) <!-- Thank you for submitting a Pull Request. Please: * Read our Pull Request guidelines: https://github.com/microsoft/vscode/wiki/How-to-Contribute#pull-requests * Associate an issue with the Pull Request. * Ensure that the code is up-to-date with the `main` branch. * Include a description of the proposed changes and how to test them. --> # agentHost: apply managed model defaults without locking choices Expose the runtime's `model`, `autoTier`, `effortLevel`, and `contextTier` startup defaults in the Copilot Agent Host picker. Managed defaults take precedence over inherited personal preferences in new chats, while explicit current-chat choices and existing conversations retain their configuration. Use `enableManagedSettings` without the separate `enforceManagedModelDefaults` opt-in. A server-normalized scalar is not evidence of a user lock. Permission/sandbox enforcement and genuinely read-only options advertised by other hosts are unchanged. Ensemble managed-settings integration is out of scope. ## Scenarios and Precedence | Scenario | Expected Behavior | | --- | --- | | New chat, supported managed default, conflicting saved preference | Managed startup default wins. Auto / Intelligence wins over saved Efficiency; no fresh profile is required. | | User changes model, tier, effort, or context in this chat | Explicit current-chat choice wins, including edits after draft initialization and before the first send. Notification actions use the same scoped configuration as the picker. | | Return to a chat with an available attached model | Preserve its model and applied configuration, including previously implicit defaults. Validate restored choices against that chat's schema. | | Existing chat's model is conclusively unavailable | Use an available managed model default; do not copy the old model's effort/context options to its replacement. A pending catalog is not proof of unavailability. | | Automation template explicitly references an unavailable model | Preserve the template and unavailable selection until the user chooses another model. | | No applicable managed default | Use saved personal preferences, then built-in defaults. Existing `chat.defaultModel` behavior remains the model-selection fallback. A scoped report without managed defaults does not inherit root managed keys. | | Managed model or option is unavailable / unsupported | Do not invent a picker choice or project options onto an unrelated model. Runtime resolution remains authoritative; see the unsupported-effort caveat below. | | Managed default is removed | New chats can use saved personal preferences again. Untouched managed defaults are not persisted as personal choices; existing chats keep their own configuration. | | Reset with both read-only and editable options | Reset only editable properties; retain host-owned values and write protection. | Reports are exact-chat-scoped, coalesced, and asynchronous: readback does not block a completed model change. Catalog refreshes update live reports rather than retaining launch-time choices. ## Manual Validation The maintainer reports that manual testing works in the freshly built Code OSS preview at head `bd6fe32086d1f5b44298c7e32fa9d2a63dc44e42`. Individual cases were not enumerated, so this is a successful user-reported smoke test, not a claim that every scenario below was independently verified. Use plain, server-shaped payloads with the native test rig. Restart Agent Host after changing policy. Test both a fresh profile and an existing profile with a conflicting saved preference. ```json { "model": "auto", "autoTier": "intelligence" } ``` Start a new chat with saved Efficiency: expect editable Auto / Intelligence. Choose Balance or Efficiency, send a short prompt, and verify the choice does not snap back. Another model remains selectable. ```json { "model": "gpt-5", "effortLevel": "high", "contextTier": "long_context" } ``` Replace `gpt-5` with an available model offering both options. Expect editable High effort and long context. After draft initialization, change both and send: the edited values must remain selected. Switch between two chats and reload: each retains its configuration. Remove policy with `{}` and restart: new chats use personal preferences rather than retaining an untouched managed default. ## Validation and Readiness Head `bd6fe32086d1f5b44298c7e32fa9d2a63dc44e42` includes main through `b74b34d66ba638faf2ec709af138718c4fbc73d9` and fixes for all seven review threads. - Passed: 2,168 affected unit tests (1 pending), 25 native SDK/schema tests, 268 deterministic Copilot replay tests (24 pending), client type-check, and hygiene/ESLint across 54 changed TypeScript files. - Passed: full product fast build and maintainer-reported manual smoke testing. - Current CI blockers: the full-suite panel-layout assertion also fails on unmodified main at `b74b34d66ba638faf2ec709af138718c4fbc73d9`; reported on [#341806](#341806 (comment)). Compile & Hygiene exited 137 during ESLint after type-check passed, without a lint diagnostic. Neither failure is represented as a passing check. - The macOS CI failure asserted an order between concurrent policy queries. The test now checks the exact arguments and counts without requiring an order. - The Linux Remote startup hang passed an isolated rerun on the unchanged previous head (job `116578942501`). - Azure definition 111 validation is running twice on this exact head: [484823](https://dev.azure.com/monacotools/Monaco/_build/results?buildId=484823) and [484824](https://dev.azure.com/monacotools/Monaco/_build/results?buildId=484824), with publishing/release disabled. The current CI template uses Windows/Linux x64 and macOS arm64 regardless of the macOS product-architecture flags; no macOS x64 test coverage is claimed. Maintainer review is requested, and current-head sign-off plus final CI results remain outstanding. - No further manually queued CI runs or reruns will be triggered; only PR-automatic CI is permitted going forward. <details> <summary>Executed Validation Commands</summary> ```bash # Passed fnm exec --using 24.18.0 npm run build-fast fnm exec --using 24.18.0 npm run build-fast -- --client-only fnm exec --using 24.18.0 npm run typecheck-client git diff --name-only --diff-filter=ACM -z origin/main -- '*.ts' | xargs -0 fnm exec --using 24.18.0 node --experimental-strip-types build/hygiene.ts # Passed: 2,168 tests, 1 pending env -u COPILOT_HOME -u COPILOT_CACHE_HOME fnm exec --using 24.18.0 ./scripts/test.sh \ --run src/vs/platform/agentHost/test/node/copilotAgent.test.ts \ --run src/vs/platform/agentHost/test/node/copilotAgentSession.test.ts \ --run src/vs/platform/agentHost/test/node/copilotSessionLauncher.test.ts \ --run src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelConfigurationStore.test.ts \ --run src/vs/workbench/contrib/chat/test/browser/widget/input/modelPicker/modelPickerCard.test.ts \ --run src/vs/sessions/contrib/chat/test/browser/newChatInput.test.ts --reporter dot # Passed: 25 tests env -u COPILOT_HOME -u COPILOT_CACHE_HOME fnm exec --using 24.18.0 ./scripts/test-integration.sh \ --run src/vs/platform/agentHost/test/node/providerIntegration/copilotAutoTier.integrationTest.ts \ --run src/vs/platform/agentHost/test/node/copilotSdkManagedSettings.integrationTest.ts --reporter dot # Passed: 268 tests, 24 pending; Git override applies only to disposable test repositories env -u COPILOT_HOME -u COPILOT_CACHE_HOME GIT_CONFIG_GLOBAL=/dev/null GIT_CONFIG_NOSYSTEM=1 \ GIT_AUTHOR_NAME=Test GIT_AUTHOR_EMAIL=test@example.com GIT_COMMITTER_NAME=Test GIT_COMMITTER_EMAIL=test@example.com \ fnm exec --using 24.18.0 ./scripts/test-integration.sh \ --run src/vs/platform/agentHost/test/node/e2e/providers/copilotAgentHostE2E.integrationTest.ts --reporter dot ``` </details> The SDK suite rejects conflicting native model/permission policy before testing synthetic server settings. An isolated home alone does not isolate machine-wide device policy; unrelated device controls do not block these scenarios. ## Runtime Caveats - [github/copilot-agent-runtime#26681](github/copilot-agent-runtime#26681): unsupported effort still reaches inference in the bundled runtime's default-only mode. Its characterization test reproduces the limitation; it is not a fix. Use supported model/effort combinations. - [github/copilot-agent-runtime#26739](github/copilot-agent-runtime#26739): conflicting-lock resume belongs to the separate strict SDK mode, not enabled here. Default-only resume has independent coverage. - Upstream picker normalization can move HydraFusion to Ensemble High when `intelligenceUsesHydraFusion` is false. This predates this PR and is separate from managed-default precedence. A general GPT/Claude-to-Ensemble reset has not been reproduced. *🤖 Authored with GitHub Copilot on behalf of @rwoll.*

Summary
Testing
npm run compile— passednpm run hygiene— passed./scripts/test.sh --run src/vs/workbench/test/browser/part.test.ts --run src/vs/sessions/test/browser/parts/panelPart.test.ts— 10 tests passed