[pull] main from microsoft:main - #1664
Merged
Merged
Conversation
Match the session header's default and compact heights and separator gutter to the chat tab strip while preserving its content alignment. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use native headings for shared Sessions and Browser empty states while preserving their visual spacing. Exercise the production Browser renderer in the styling regression test. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use the contrast border for the single-chat header in high-contrast themes and cover it alongside the current header geometry. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* voice: preserve mode when creating agent sessions Route voice-requested new sessions through the active host so the Agents window can create a provider-backed draft without disconnecting Voice Mode. Preserve the existing local Chat fallback and report host preparation failures honestly.\n\nFixes #334059\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * voice: send new agent session requests directly Avoid racing the newly mounted composer after creating a provider-backed session. Create and send through the sessions service as one awaited operation, and report preparation failures without falling back to another session. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * voice: use the new-session send lifecycle Send the first voice request through the draft-session API so the provider creates and graduates the session before routing subsequent requests.\n\nFixes #334059\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * voice: preserve active controls after session creation Keep the segmented Voice Mode controls bound to a pinned session target when the new-session composer is replaced and focus is temporarily cleared. Fixes #334059 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * voice: harden new session preparation Restore prior routing when host preparation fails, distinguish voice-initiated composer transitions from draft ownership, and prevent registered host failures from falling back to local Chat. Fixes #334059 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * voice: refresh controls when sessions materialize Observe Chat widget view-model changes so Voice Mode controls recompute when a draft becomes the pinned provider session. Fixes #334059 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…4301) The Agents Window sometimes showed an empty changeset for the last turn. Agent Merge posts status notices ("Agent Merge is enabled for `x`") as complete, hidden turns via `_writeAgentMergeNotice`. These never reach the provider and never capture a checkpoint, but both last-turn resolvers took `turns.at(-1)`, so the notice became "the last turn" and its empty changeset replaced the real one. Because the notice's request row is hidden, the transcript still ended on the user's turn, so the UI looked correct. The same notice also displaced the session changeset's git fast path: `_latestTurnIdAcrossChats` found no checkpoint for it and fell back to the edit tracker, which cannot see terminal-tool edits. Add `isHostNoticeTurn` / `lastAttributableTurnId` and use them in both resolvers. Visible system notifications (background-agent completions, Agent Merge repair prompts) are real turns and are deliberately not matched. Also make empty per-turn changesets diagnosable: every path in `_computeSingleFolderTurnDiffs` that can return an empty list now logs why, and `showBlob` logs the real git failure instead of discarding it, so a timeout or pruned ref no longer surfaces only as "git blob not found". Its budget goes to 15s, since a timeout there drops a diff's original side. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…hat-header-height sessions: align single-chat header with tab strip
fix: refine CSS selectors for chat agent merge components Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Do not reject a parent turn when restored subagent history is temporarily unavailable during duplicate turn-id validation. Keep the child resolver retryable and preserve strict validation for other peer-chat failures.\n\nAdd unit and whole-host E2E coverage for the recovery path, plus a gated test for the Copilot runtime custom-agent displayName contract mismatch.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep the fixed application menu viewport-positioned while centering the floating activity rail, and align its control geometry and states with neighboring activity targets. Add regression coverage for fixed overlays escaping the rail. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2c456dcf-e2d8-4cbe-9678-c0c0f25e3ccb
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2c456dcf-e2d8-4cbe-9678-c0c0f25e3ccb
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2c456dcf-e2d8-4cbe-9678-c0c0f25e3ccb
…4311) `errorResult('')` left `toolResultError` falsy, so `toolResultToProtocol` serialized the call as `success: true` while the completed row still read "Browser action failed". Both `new Error()` and `throw ''` reach it as an empty string, from `playwrightInvoke` and two other call sites. Fall back to the failure label for the error and the content part, as the conversion above already does for `result.error`. Also corrects the comment on `failedMessage`. These tools do not all declare only an `invocationMessage`; the screenshot tool prepares a past-tense one, and that prepared label is what survives when a result carries no `toolResultMessage`.
* Add node paths to the region for telemetry purpose * Address CCRs
…334322) * feat(layout): add layout density options for modern UI * layout: add icons for default and compact layout density options --------- Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Include the leading inset in the menubar's measured height, use the standard codicon size, and cover shared focus/open styles in normal and high-contrast themes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: ce266339-31ab-4cfb-a049-5b65fea0c7c8
* Agent Host changes for agents/editor-chat-panel-pills-enhancement * chat: scope pill resize observer to host window Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 44dd6d62-f5b5-4039-8c99-7cd70e43d9a3 * chat: collapse status pills only on overflow Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 44dd6d62-f5b5-4039-8c99-7cd70e43d9a3 * chat: address pill review feedback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 44dd6d62-f5b5-4039-8c99-7cd70e43d9a3 * chat: include subagent browsers in status pills Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 44dd6d62-f5b5-4039-8c99-7cd70e43d9a3 * chat: keep session input pills Agent Host-only Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 44dd6d62-f5b5-4039-8c99-7cd70e43d9a3 * agentHost: share session resolution policy Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 44dd6d62-f5b5-4039-8c99-7cd70e43d9a3 * chat: unify session input pills Route Agents Window and Agent Host editor/panel pills through one shared controller and canonical source builder. Remove the obsolete SessionHeaderMeta pill implementation, preserve live GitHub state through shared presentation models, and stabilize dropdown, focus, compact-layout, and changeset lifecycles to avoid flicker. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 44dd6d62-f5b5-4039-8c99-7cd70e43d9a3 * chat: fix session pill fixture services Allow production chat widget fixtures to register feature-specific services, and reuse one session-pill service bundle for isolated and full-chat fixtures. This restores the strict Component Explorer renders without duplicating mocks. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 44dd6d62-f5b5-4039-8c99-7cd70e43d9a3 * bring back rich pill hovers --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: BeniBenj <besimmonds@microsoft.com> Copilot-Session: 44dd6d62-f5b5-4039-8c99-7cd70e43d9a3
…le-empty-state-headings sessions: add accessible empty-state headings
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* test: stabilize empty Agent Host changesets Wait for the expected empty changeset notification instead of accepting an earlier transient recompute. This prevents the conformance test from observing a file between its restore write and the final checkpoint-backed refresh.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: fence empty changeset refreshes Subscribe to empty branch changesets only after the local turn completes. The resulting refresh is queued after stale setup recomputes, so the test observes a filesystem state that is causally after the restore.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…responsive-activity-bar-icon workbench: Fix compact activity menu in Modern UI
* Run provider shutdown alongside auth replay (Written by Copilot) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix stale provider references after merge (Written by Copilot) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Finalize providers after auth replay (Written by Copilot) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ure-width Fix remote host empty state fixture width
make consolidated remote workspaces experimental Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Encode launched session titles for command safety Pass the originating session title as URL-safe Base64 so chat-derived cmd metacharacters never cross the Windows launcher shell boundary as raw text. Decode the value only inside the native workbench environment.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Terminate Node option parsing for session titles Prevent dash-prefixed session titles from being interpreted as Node options by the launch-time Base64URL encoder.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use consistent body text, base icon sizing, and tokenized spacing across new-session pills and their dropdowns. Fixes #333887. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Dispose the intentionally unloaded archived session directly after verifying persistence. This prevents generic cleanup from cold-restoring it under the five-second subscribe deadline.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…334338) * agent host: stop chat queues from wedging on a non-settling SDK RPC All chat operations for one chat serialize on a single per-chat sequencer. A control-plane RPC in that queue had no timeout, so an RPC that never settled kept the queue head forever. Every later send, model change, and abort stayed queued and never ran. The client showed a turn that stayed active with no response and no error. Abort shared the same queue, so Cancel could not recover the chat. - Bounds the short SDK control-plane RPCs at 30 seconds through a new `_awaitControlPlaneRpc` helper. This covers `session.setModel`, `rpc.agent.select`, `rpc.agent.deselect`, and `rpc.history.truncate`. A timeout now rejects the operation and lets the queue continue. Turn delivery through `session.send` stays unbounded, because a turn can correctly run for a long time. - Removes abort from the per-chat queue. Abort must interrupt a blocked queue, so it cannot wait behind the task it must cancel. - Adds an operation name to each `_queueChat` call and logs a warning if a queue task runs for more than 60 seconds. The warning names the operation that holds the queue. - Adds regression tests for the timeout, for a queued send that continues after a timeout, and for an abort that completes while a queue task is blocked. Fixes #334159 (Commit message generated by Copilot) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agent host: address review feedback on the chat queue wedge fix Three follow-ups from review of the queue-wedge fix: Taking abort off the chat queue meant an abort arriving while a chat was still materializing found no target and silently succeeded, so a Cancel during that window was lost and the queued send still dispatched. Aborts with no live session now record a pending intent (only while work is actually queued for that chat), and the send honours and clears it before dispatching. Timing out a control-plane RPC abandons the await but cannot cancel the in-flight request, so the SDK's model/agent/history state may no longer match what the session believes it applied. A timed-out session is now marked for resync and the next send discards and resumes it, so a late-settling request cannot mutate state a later operation depends on. The stall warning wrapped the whole sendMessage task, including the intentionally unbounded provider call, so any turn over 60s was reported as a stalled queue. Tasks now cancel the warning when they reach a legitimately unbounded phase, leaving it to cover only bounded setup and control-plane work. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…333663) * Agent Host changes for sbatten/agents/subagent-default-auto-setting * Fix subagent Auto model selection Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add subagent model selection telemetry Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Change subAgentInvocationId check to undefined Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: bhavyaus <bhavyau@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* policy: disable custom terminal tool under managed settings Force the Agent Host custom terminal tool setting off whenever any Copilot managed-settings channel is active, while preserving the user setting for ungoverned accounts. Export the policy catalog and cover the shared policy callback. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * policy: enforce terminal override for raw managed settings Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* agentHost: remove redundant picker tab stop Keep picker action wrappers out of the tab order and delegate toolbar focus to the first real control inside the picker. Add regression coverage for the wrapper and inner-control focus behavior.\n\nFixes #333924\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agentHost: complete picker focus delegation Restore the BaseActionViewItem setFocusable signature, clear focused descendants on blur, and exercise nested focus traversal in the regression test. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: update agent input screenshot hashes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agentHost: keep async picker wrapper out of tab order Keep the composite action wrapper non-focusable when its controls render after the toolbar initializes, and cover the delayed-render sequence. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: cf6761b4-5164-41c7-8123-5da286a9798a
* Initial plan * Fix BAT comment spacing Co-authored-by: aeschli <6461412+aeschli@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: aeschli <6461412+aeschli@users.noreply.github.com>
* sessions: Add no-workspace option to new session picker Offer a workspace-less quick chat from the Agents Window workspace picker when consolidated remote workspaces are enabled, while preserving the existing picker presentation and safely cancelling pending workspace drafts.\n\nFixes #334345\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: Gate no-workspace option on quick chat support Keep the option available for an existing workspace-less draft, but do not offer it when no provider can create quick chats.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: Fix no-workspace test on web Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: Scope picker visibility to no-workspace choice Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chat: Select primary dictation cleanup models Resolve the configured Luna and Nano cleanup choices directly through their Copilot model IDs instead of utility aliases. Log model selection and successful application so the cleanup path can be verified without recording transcript content. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chat: Remove unavailable Nano cleanup option Keep the experimental cleanup model setting limited to the available Luna primary model and the utility fallback. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add experimental tabbed model picker Redesigns the chat model picker behind `chat.experimentalModelPicker` (off by default) so the new and old designs can be compared side by side. The separate model, context, and thinking effort pickers become one surface: a tabbed list with a detail card that shows thinking effort, context, and pricing that updates as those change. Destinations are capped at two, built-in and user-provided, since almost no one has more than one BYOK provider. Sections are Pinned, a short suggested list, and the rest folded away. Also adds a shared Switch widget and a segmented control, both reused by the picker and the customizations UI, and support in the action list for tab bar actions, icon-only tabs, footers, welcome bodies, and in-place item updates. Includes an unrelated fix for the DOM sanitizer, which now replaces its Trusted Types policy when the realm that created it goes away. * Fix some small issues with the new model picker * Model picker * Review feedback * Fix Monaco editor build for the sanitizer policy replacement The stale-policy replacement was cast to the global `TrustedTypePolicy`, but dompurify's config types that property with the `TrustedTypePolicy` imported from `trusted-types/lib/index.js`. The two normally unify, so the regular build accepts it. The editor tree shaker compiles against a synthetic root where `trusted-types` resolves through both a relative and an absolute path, leaving two declarations whose private `brand` makes them nominally incompatible, and `editor-distro` failed to compile. Name the property's own type instead, so only one declaration is involved however `trusted-types` resolves. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address feedback and fix tests * Fix provider icons * Fix ResizeObserver loop in the model picker chip `_renderLabel` runs from a resize-driven autorun. Measuring the chip there cleared `minWidth`, read `scrollWidth`, then wrote `minWidth` again, so every ResizeObserver pass dirtied layout twice and never settled. The NewSessionCompactAutoModel fixture failed to render with "ResizeObserver loop completed with undelivered notifications". Take the fixed widths from main instead, including the narrower floor for the Auto label that #334128 added alongside that fixture. This resolves the merge conflict in this hunk the other way; the measured floor read better in the abstract, but it cannot be computed from inside the resize callback. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Restore MCP server switch styling The plugin list moved to the shared `Switch` widget and the hand-rolled `.plugin-enable-switch` CSS was deleted with it, but the MCP server list still built that markup by hand. With no rules left to match, its switches rendered as bare unstyled buttons: the McpServersTab fixture lost the filled pill and its thumb entirely. Move the MCP list onto `Switch` too, so both lists share one control. This is what the screenshot diff on this PR was reporting; accepting those hashes would have pinned the unstyled rendering as the baseline. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ort (#334348) * Agent Host: stop the reconnecting banner nagging on a flapping transport A tunnel relay that drops and restores the transport every few seconds made the banner appear on a session that worked fine throughout. Two causes. The outage start time lived in a cached derived. While the host is connected nothing reads the reconnecting state, so that derived lost its observers while its cache survived them; the next outage on the same session inherited the previous outage's start time and showed the banner immediately. It is now an explicit value maintained by an autorun, which runs whether or not anything is rendering the reconnecting state. The delay before the banner appears was also shorter than a routine self-healed reconnect. Such a reconnect preserves session state and the user would not otherwise notice it, so the threshold now outlasts one. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Keep the outage-start derived alive instead of hand-maintaining it recomputeInitiallyAndOnChange keeps the cached derived observed, so it recomputes when the host reconnects rather than retaining a start time nothing was left to invalidate. Restores the session keying and drops the autorun that replaced it. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Initial implementation of the operation * Fix condition to check session state and draft usage Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Refactor operation key and lane handling Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )