Skip to content

sessions: align bottom panel tabs with editor tabs - #341806

Merged
Sandeep Somavarapu (sandy081) merged 3 commits into
mainfrom
sandy081/agents/agents-window-tabs-ui-sync
Oct 15, 2026
Merged

Sandeep Somavarapu (sandy081) merged 3 commits into
mainfrom
sandy081/agents/agents-window-tabs-ui-sync

Conversation

@sandy081

Copy link
Copy Markdown
Member

Summary

  • Use the editor tab presentation for labeled bottom-panel tabs in the Agents window.
  • Match the labeled panel title height to the default and compact editor tab densities.
  • Keep trailing panel actions vertically centered and preserve the previous icon-only panel style.
  • Keep layout allocation and rendered title height synchronized as settings change.

Testing

  • npm run compile — passed
  • npm 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
  • Live Agents window validation covered default, compact, connected, and icon-only presentations.

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>
Copilot AI balanced review requested due to automatic review settings October 15, 2026 15:54
@sandy081 Sandeep Somavarapu (sandy081) added this to the 1.143.0 milestone Oct 15, 2026
@vs-code-engineering

Copy link
Copy Markdown
Contributor

📬 CODENOTIFY

The following users are being notified based on files changed in this PR:

Benjamin Christopher Simmonds (@benibenj)

Matched files:

  • src/vs/sessions/browser/parts/media/panelPart.css
  • src/vs/sessions/browser/parts/panelPart.ts

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Base: 922ce6a4 Current: 986515d6

No screenshot changes.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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>
@sandy081
Sandeep Somavarapu (sandy081) merged commit 54198f5 into main Oct 15, 2026
55 of 56 checks passed
@sandy081
Sandeep Somavarapu (sandy081) deleted the sandy081/agents/agents-window-tabs-ui-sync branch October 15, 2026 16:49
@rwoll

Copy link
Copy Markdown
Member

Heads-up Sandeep Somavarapu (@sandy081): Sessions - Panel Part / uses the editor tab presentation for bottom panel tabs fails in the full unit suites on main at b74b34d66ba638faf2ec709af138718c4fbc73d9 (Azure build 484806), and with the same diff after merging main into #341682. The isolated test passes locally, so this appears sensitive to full-suite CSS loading rather than platform precision. Actual title-actions heights are 32/28 versus expected 31/27; pill height is 32 versus 31, with corresponding center-offset differences. All three Electron-unit jobs and the browser jobs reproduce it. Public failure log: https://github.com/microsoft/vscode/actions/runs/38782860770/job/116587265188

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).

Ross Wollman (rwoll) added a commit that referenced this pull request Oct 15, 2026
<!-- 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.
Ross Wollman (rwoll) added a commit that referenced this pull request Oct 16, 2026
)

<!-- 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.*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants