Skip to content

[pull] main from microsoft:main#1178

Merged
pull[bot] merged 60 commits intocode:mainfrom
microsoft:main
Apr 24, 2026
Merged

[pull] main from microsoft:main#1178
pull[bot] merged 60 commits intocode:mainfrom
microsoft:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Apr 24, 2026

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

jrieken and others added 30 commits April 23, 2026 17:43
Set ExplicitBucketBoundaries advisory parameters on gen_ai.client.operation.duration
and gen_ai.client.token.usage histograms per the OpenTelemetry GenAI semantic
conventions, instead of relying on SDK default buckets.

Fixes #311905
…12231)

* SSH: fall back to default identity files when agent lacks the key

Switch SSH auth to ssh2's authHandler callback, walking an ordered queue
of attempts: explicit privateKeyPath -> agent (if SSH_AUTH_SOCK) -> each
existing default identity file. Mirrors OpenSSH client behavior so a
host that accepts ~/.ssh/id_rsa still connects when the agent doesn't
have it loaded, without needing an explicit IdentityFile in ssh config.

Also import proper ConnectConfig typings from ssh2 instead of using
Record<string, unknown>.

(Written by Copilot)

* Address Copilot review: agent forwarding socket, methodsLeft mapping, KeyFile fail-fast

- _connectSSH: when agentForward is enabled, also set connectConfig.agent
  to SSH_AUTH_SOCK so ssh2 actually has a socket to forward to. Warn when
  forwarding is requested without an agent available.
- makeAuthHandler: map 'agent' to 'publickey' for the methodsLeft filter,
  since SSH servers advertise 'publickey' (agent is just a publickey-flavored
  method at the protocol level). Tightened types to ssh2's
  AuthenticationType / AnyAuthMethod so this is enforced by the compiler.
- _buildAuthAttempts (KeyFile mode): fail fast with a localized error if
  privateKeyPath is missing or unreadable, instead of silently falling
  through to a generic auth failure.
- Added 3 unit tests covering the new behaviors.

(Written by Copilot)
…2199)

* agentHost: resolve user shell environment for agent host process

Spawn the agent host with the user's resolved shell environment merged
in (PATH and friends from the login shell), matching what other VS Code
processes do via getResolvedShellEnv. Without this, tools and terminals
launched by the agent host on macOS/Linux GUI launches don't see the
user's PATH.

Both ElectronAgentHostStarter and NodeAgentHostStarter now resolve the
shell env before spawning. IAgentHostStarter.start() is now async; the
process managers await it and guard against being disposed mid-await.

In the Electron starter, the renderer's createMessageChannel request
could race ahead of the now-async start() and call utilityProcess.connect()
before utilityProcess.start() had run, silently dropping the MessagePort
and leaving the renderer with no agents. _onWindowConnection now awaits
a DeferredPromise that completes once the utility process has actually
been spawned.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* agentHost: address Copilot review feedback

- ElectronAgentHostStarter: spread shellEnv after process.env so the
  resolved login shell PATH actually wins over the GUI-launched env.
  (NodeAgentHostStarter is fine as-is: ipc.cp.Client merges process.env
  before the options env, so shellEnv there already wins.)
- AgentHostProcessManager._start / ServerAgentHostManager._start: wrap
  the body in try/catch so a rejection from starter.start() doesn't
  surface as an unhandled promise rejection. Reset state on failure so
  future starts can retry. Server manager applies the same MaxRestarts
  policy as the unexpected-exit path.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
…s-error

Suppress rate-limit/quota-exceeded errors from chatAgentError telemetry
Improve workspace picker: flat recency order, grouped browse actions, right-aligned descriptions

- Remove source grouping from workspace picker; show a flat recency-sorted list
- Browse actions grouped by 'group' property instead of label comparison
- When multiple providers share a group, show a single entry with a submenu
- Each browse action carries an optional description (Local, GitHub, provider name)
- Browse action descriptions shown right-aligned using group title in inline-description mode
- ActionList: submenu items use action icon via group.icon
- ActionList: fix group-title right-alignment in inline-description mode (margin-left: auto)
- ActionList: remove fixedWidth option (no remaining consumers)
- ISessionWorkspaceBrowseAction: add optional description and group fields

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: add tip banner for sub-session creation

Shows a dismissable tip above the chat input when a new sub-session is
created, explaining what a sub-session is and how to use it. The tip
uses the same visual pattern as the core chat tip widget and persists
dismissal to the user's profile storage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* address PR feedback: accessibility and touch support

- Use native <button> instead of <a> with role=button for dismiss control
- Add Gesture.addTarget and TouchEventType.Tap listener for iOS/touch
- Add touch-action: manipulation and reset native button styles in CSS

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: use DisposableStore instead of Disposable.from

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…312248)

Renames `sessions.chatSessions.claude.enabled` to `sessions.chat.claudeAgent.enabled`
to align with the `github.copilot.chat.claudeAgent.enabled` convention. Enables the
setting by default and removes the experimental tag and warning text from the
description. Updates tests to reflect the new default.
…isory-swallow

Revert "Use main eslint config for copilot extension too"
Use stable group key for SubmenuAction id and fix group doc comment

- SubmenuAction id uses the non-localized group key from browseByGroup map
  instead of the localized label to ensure stable ids across locales
- Update ISessionWorkspaceBrowseAction.group JSDoc to clarify it is a
  non-localized key, not a display label

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fix markdown preview scroll feedback loop (#303765)
fix: use GenAI semconv explicit bucket boundaries for OTEL histograms
…12246)

agents: add 'Debug Local Agent Host Process In Dev Tools' command

Adds a Developer command, available in both VS Code and the Agents app,
that opens a Chrome DevTools window attached to the local agent host
utility  analogous to the existing 'Debug Extension Host Inprocess
Dev Tools' command.

The agent host process enables its inspector live via node:inspector
on demand, so no restart is required. The renderer reaches the
inspector URL through the existing agent-host IPC channel.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…12018)

* fix: exclude synthetic user messages from chat history processing

Co-authored-by: Copilot <copilot@github.com>

* fixes

---------

Co-authored-by: Copilot <copilot@github.com>
When a tool call produces file edits, the onFileEdits callback already
hydrates edit pills into the chat response. However, the tool invocation
widget was also remaining visible, leading to duplicate UI.

- Set presentation to Hidden on tool invocations that complete
  successfully with file edits in finalizeToolInvocation
- Move file edit extraction before didExecuteTool so the presentation
  is set before the completion state transition triggers re-render
- Add handling for ToolInvocationPresentation.Hidden in the render
  function of ChatToolInvocationPart (previously only checked
  HiddenAfterComplete)

(Commit message generated by Copilot)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This should be good to use now and also lets use benefit from incremental builds

Co-authored-by: Copilot <copilot@github.com>
pierceboggan and others added 27 commits April 24, 2026 02:26
* Fix Copilot CLI mission control remote flows

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Refine mission control remote events

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
This triggers our watcher scripts, causing an extra recompile

Co-authored-by: Copilot <copilot@github.com>
* Move files into Copilot CLI specific folders

Co-authored-by: Copilot <copilot@github.com>

* Fixes

* Fixes

* Fix tests

---------

Co-authored-by: Copilot <copilot@github.com>
* feat: load deferred repo hooks after session creation in CopilotCLISessionService

Co-authored-by: Copilot <copilot@github.com>

* Fix tests

---------

Co-authored-by: Copilot <copilot@github.com>
Don't emit extensionsApiProposals if it has not changed
Switch to esbuild's native watcher for building extensions
* Add event emitters for workspace folder and worktree changes; improve cache management

Co-authored-by: Copilot <copilot@github.com>

* Update extensions/copilot/src/extension/chatSessions/common/chatSessionWorktreeService.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update extensions/copilot/src/extension/chatSessions/vscode-node/copilotCLIChatSessions.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Enhance chat session item handling by eagerly including changes for refreshed sessions to improve UX

Co-authored-by: Copilot <copilot@github.com>

* Change defaults

* Fixes

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Add a sendEnhancedGHTelemetryEvent call (automode.routerDecisionRestricted)
alongside the existing unrestricted routerDecision event. The restricted
event includes:

- hydraScores: JSON-encoded 4-dim capability scores
- binaryScores: JSON-encoded binary classifier scores
- chosenModel, candidateModels, chosenShortfall, stickyOverride
- Per-class scores (scoreNeedsReasoning, scoreNoReasoning)
- All fields from the existing unrestricted event
…d-telemetry

copilot: emit router decision to restricted telemetry with prompt and full scores
…ol names (#312285)

* fix: expand Chronicle session_files/refs tracking to match VS Code tool names

* address review: add create_directory with dirPath extraction
) (#312310)

* [Unhandled Error] command 'github.copilot.signIn' not found (fix #301205)

* remove more traces
Update distro commit to 0ba0ea82

Co-authored-by: vs-code-engineering[bot] <122617954+vs-code-engineering[bot]@users.noreply.github.com>
fix: open in vscode actioon for agents app

--open-url short-circuits both the first-launch path
and the second-instance path, preventing --folder-uri
from being processed. This resulted in a blank window with no workspace.

Replace --open-url with a new --open-chat-session <uri> CLI arg that
flows through the normal window opening pipeline. After the folder is
opened, windowsMainService forwards the session via IPC.
* cli plan widget improvements

* address some comments and tests

* address more comments
…l text (#312173)

* test: add failing test for missing separator between phase commentary and final text

When the Responses API streams a commentary message item followed by a
final message item, the text from both items gets directly concatenated
in the textAccumulator without any separator, producing e.g.
'Commentary text.Final text.' instead of properly separated text.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: insert separator between output items in Responses API stream

When the Responses API streams multiple message output items (e.g.
commentary followed by final), their text deltas were all accumulated
into a single textAccumulator without any separator. This caused text
like 'Commentary text.Final text.' instead of properly separated
paragraphs.

Track the output_index of the last text delta and emit a paragraph
break (\n\n) when text arrives from a different output item.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test: use last accumulated text instead of brittle index-from-end

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
copilot: remove InlineDocIntent and /doc command
Co-authored-by: Copilot <copilot@github.com>
@pull pull Bot locked and limited conversation to collaborators Apr 24, 2026
@pull pull Bot added the ⤵️ pull label Apr 24, 2026
@pull pull Bot merged commit d1ffb7c into code:main Apr 24, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.