Commit Graph
21688 Commits
Author SHA1 Message Date
Zhichao Li 52947bbc19 OTel: replace string literals with typed constants
- Add GenAiProviderName.GEMINI; switch geminiNativeProvider, anthropicProvider, copilotcliSession to use GenAiProviderName.* constants
- Add CopilotChatAttr.HOOK_TYPE/HOOK_INPUT/HOOK_OUTPUT/HOOK_RESULT_KIND, MODE_NAME, TOTAL_COST_USD; switch chatHookService, claudeMessageDispatch, copilotCliBridgeSpanProcessor, chatDebugFileLoggerService, otelSpanToChatDebugEvent, toolCallingLoop, claudeOTelTracker to use the new constants
- Add CopilotCliSdkAttr group for SDK-emitted hook attribute keys (github.copilot.hook.*); switch consumers in copilotCliBridgeSpanProcessor and otelSpanToChatDebugEvent
- Replace magic-number SpanStatusCode casts in copilotCliBridgeSpanProcessor with the enum members
- Expand otel barrel index.ts to re-export CopilotCliSdkAttr and previously-missing event helpers (emitEditFeedbackEvent, emitEditHunkActionEvent, emitInlineDoneEvent, emitEditSurvivalEvent, emitUserFeedbackEvent, emitCloudSessionInvokeEvent)

No behavior change.
2026-04-29 16:37:36 -07:00
Justin Chen 06d480b4f9 ask question tool in autopilot always returns user unavailable message (#313331) 2026-04-29 22:03:05 +00:00
Martin AeschlimannandCopilot 44dda2c61e add enabled property to ICustomAgent (#313328)
* add enabled property to ICustomAgent

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

* update

* update

---------

Co-authored-by: Copilot <copilot@github.com>
2026-04-29 14:58:40 -07:00
Rob LourensandCopilot 9cd698c36b Sync built-in skills to agent hosts and add skill buttons (#313277)
* Sync built-in skills + add skill buttons for agent-host sessions

Brings back the UX from #311815 for the Agents window:

- Sync built-in prompts (e.g. /merge, /create-pr) into the local
  agent-host customization bundle so agent-host sessions can run
  the same slash commands as the Copilot CLI extension. The
  enumeration helper now reads the BUILTIN_STORAGE bucket from
  IPromptsService and includes those entries in the bundle pushed
  to the harness, alongside workspace, user, and extension prompts.
- Add four skill buttons to the changes view of agent-host sessions:
  Merge Changes, Create Pull Request, Create Draft Pull Request, and
  Sync Pull Request. Each button dispatches the matching slash
  command to the active session via IChatService, scoped to git +
  GitHub state context keys so the right buttons appear at the right
  time. The first registered button is hoisted as the primary blue
  toolbar button; the rest live in the apply submenu.
- Suppress the duplicate Copilot CLI extension buttons (Commit, Sync,
  Create PR, etc.) when the active session is an agent-host session,
  clause in extensions/copilot/package.json. The check only narrows
  the chatSessionType==copilotcli rows; claude-code rows are
  unchanged.
- Mark the agent-host chat contribution supportsPromptAttachments so
  /create-pr and friends parse as slash commands in the chat input.

Tests:
- agentHostSkillButtons.test.ts: action registration, context key
  reactivity, when-clause coverage.
- enumerateLocalCustomizationsForHarness.test.ts: built-in skill
  enumeration is folded into the bundle with BUILTIN_STORAGE.
- resolveCustomizationRefs.test.ts: built-in entries are resolvable
  through the existing ref resolution path.

End-to-end verified manually: clicking 'Merge Changes' on a
debug-test agent-host session dispatches '/merge', the agent host
receives the slash command, expands the merge skill, and runs its
tool steps. Copilot CLI extension buttons are not visible on
agent-host sessions.

(Written by Copilot)

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

* agent-host: read git.branchProtection in repo scope

The git.branchProtection setting is resource-scoped, so its value can
differ per workspace folder. Reading it without an override picked up
the host window's active workspace value instead of the session's own
repository value, which made the agent host show a Merge Changes button
for sessions whose repo had a protected main branch.

Pass the session's project URI as the resource override so we read the
setting in the scope of that folder.

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

* agent-host: register skill buttons from sessions main, drop stale comment

Move the skillButtons import to sessions.desktop.main.ts and
sessions.web.main.ts so it is wired in both desktop and web sessions
windows, instead of from the local-only contribution.

Drop the now-redundant comment on supportsPromptAttachments in the chat
session contribution registration.

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

* agent-host: register client filesystem provider for local in-process agent host

Previously, `vscode-agent-client://` was only registered for WebSocket
agent host transports (dynamic and env-var driven). The local in-process
utility-process agent host had no provider, so plugin syncs from the
renderer (used by `/create-pr`, `/merge` and other built-in skills) failed
with `ENOPRO`.

This wires the same reverse-RPC pattern over the existing MessagePort IPC:

* Renderer registers an `AgentHostClientResourceChannel` (server channel)
  on its `MessagePortClient`, wrapping the renderer's `IFileService`.
* The renderer's clientId is now used as the IPC ctx so the agent host can
  route reverse calls to a specific client.
* Agent host hoists `AgentHostClientFileSystemProvider` to a single shared
  instance and, for utility-process IPC connections, registers an authority
  per connection backed by the new channel.

Result: `vscode-agent-client://` URIs resolve identically for local and
remote agent hosts, the in-memory `vscode-synced-customization://` bundle
is reachable from the agent-host process, and built-in skills sync.

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

* agent-host: address Copilot review comments and fix branchProtection resource scope

- resourceList now throws when target URI is not a directory
- wrap BUILTIN_STORAGE listPromptFilesForStorage in try/catch so regular
  workbench prompts service (which throws on unknown storage) is handled
- update test to model the throw case for regression coverage
- use workingDirectory ?? project.uri as resource for git.branchProtection
  config lookup so worktree paths resolve the per-folder setting correctly

(Written by Copilot)

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-29 21:36:05 +00:00
Matt Bierner af74f12920 Merge pull request #313329 from microsoft/dev/mjbvz/arbitrary-ant
Revert to previous vscode-markdown-languageserver
2026-04-29 14:29:44 -07:00
Tyler James Leonhardt f5e05a0253 chore: migrate agent-browser to @playwright/cli (#313316)
* chore: migrate agent-browser to @playwright/cli

Replace all uses of the `agent-browser` automation tool with `@playwright/cli`,
which supports `npx @playwright/cli attach --cdp=<port>` for connecting to
Electron/Chromium apps via CDP.

- Rewrite launch SKILL.md files (Code OSS and Copilot variants) with new
  command mappings: attach --cdp, tab-list, snapshot, screenshot --filename,
  fill, press
- Update auto-perf-optimize and chat-customizations-editor skills with
  @playwright/cli commands; fix eval blocks to use IIFE syntax required by
  the new tool
- Migrate testRemoteAgentHost.sh: connect→attach --cdp, snapshot -i→snapshot,
  screenshot path→screenshot --filename=path; verified end-to-end with --skip-message
- Remove agent-browser from extensions/copilot/package.json (covered by root
  devDependency); bump @playwright/cli to ^0.1.9 in root package.json

* fix: add @types/ws as explicit devDependency in copilot extension

Previously pulled in transitively via agent-browser -> webdriver.
Now that agent-browser is removed, @types/ws must be declared directly.
2026-04-29 20:55:11 +00:00
Matt Bierner 7317d8ad1a Merge pull request #313308 from microsoft/dev/mjbvz/equal-cougar
Enable external ingest for non-file resources too
2026-04-29 13:42:19 -07:00
Matt Bierner e35f3c6e4d Merge branch 'main' into dev/mjbvz/arbitrary-ant 2026-04-29 13:41:38 -07:00
Matt Bierner b8598f90cb Merge pull request #313311 from mjbvz/dev/mjbvz/main-quail
Include the `isAvailable` check in the codebase timeout
2026-04-29 13:41:24 -07:00
Matt Bierner 3b7dc50c85 use null 2026-04-29 12:31:51 -07:00
Matt Bierner d3119d4419 Include the isAvailable check in the codebase timeout 2026-04-29 12:06:32 -07:00
Christof Marti 6691e81993 Add modeChanged to request telemetry (#312554) 2026-04-29 21:06:17 +02:00
Matt Bierner 3cb650cc2d Enable external ingest for non-file resources too
Fixes #313281

Gate was mainly to help reduce noise on initial rollout
2026-04-29 12:04:15 -07:00
Aashna Garg 8ee6428137 Merge pull request #313132 from microsoft/aashnagarg/router-restricted-telemetry
Add availableModels to routerDecisionRestricted telemetry
2026-04-29 11:29:00 -07:00
Matt Bierner dfbb962031 Merge pull request #313272 from mjbvz/dev/mjbvz/yeasty-whitefish
Make sure we get files in stable order for external ingest checkpoint
2026-04-29 11:14:35 -07:00
Connor Peet 1321b30541 Merge pull request #313266 from microsoft/connor4312/state-cleanup
agentHost: drop the agent event abstraction
2026-04-29 10:51:59 -07:00
Matt Bierner 8b4ca97442 Merge pull request #313269 from mjbvz/dev/mjbvz/latin-wildebeest
Reuse existing ingest operation if files haven't changed
2026-04-29 10:36:40 -07:00
Matt BiernerandCopilot 230f242a9c Make sure we get files in stable order for external ingest checkpoint
We should make this explicit

Co-authored-by: Copilot <copilot@github.com>
2026-04-29 10:26:27 -07:00
Matt BiernerandCopilot 003f366336 Simplify
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 10:11:36 -07:00
Matt BiernerandCopilot 1257035bb1 Reuse existing ingest operation if files haven't changed
We already handled the case where an ingest had completed. This makes it so that any ongoing ingests also should reuse the existing operation

Co-authored-by: Copilot <copilot@github.com>
2026-04-29 10:06:12 -07:00
Matt Bierner 9b74dd466c Merge pull request #313133 from microsoft/dev/mjbvz/copilot-eslint-unify
Use root eslint for copilot
2026-04-29 09:55:27 -07:00
Connor Peet 52333822f6 Merge remote-tracking branch 'origin/main' into connor4312/state-cleanup 2026-04-29 09:55:20 -07:00
Matt Bierner a8ed6f83b7 Revert to previous vscode-markdown-languageserver
This new version causes issues in the production build only. Fix is in https://github.com/microsoft/vscode-markdown-languageserver/pull/18 but reverting for now
2026-04-29 09:48:37 -07:00
Matt Bierner 1c4bbc26c1 Re-run npm i 2026-04-29 09:05:44 -07:00
Megan Rogge 21b99b6c8a Resolve parent directory when realpath fails with ENOENT in edit confirmation (#313252) 2026-04-29 16:04:41 +00:00
Harald KirschnerandCopilot 380d7101a2 telemetry: add workspaceChunkSearch.tryInit event for cold-init tracking (#313127)
* telemetry: add workspaceChunkSearch.tryInit event for cold-init tracking

Adds telemetry to track duration and outcome of workspace chunk search
cold initialization (getPreferredType + service creation). Records
success, noEmbeddingType, alreadyInitialized, or error outcomes.
Not fired for fast paths (no auth, already initialized).

Related: microsoft/vscode#313070

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

* fix: type outcome as string literal union per review

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-29 09:02:07 -07:00
Matt Bierner b14478b0fe npm i 2026-04-29 08:51:36 -07:00
Tyler James LeonhardtandCopilot 8244e9b00c Refactor Claude Agent core code (#313163)
* handle steering the way the SDK wants it (via priority)
* pass along properties via the queued request (rather than setting them when we get the message) so that we can set them when the message is to be yielded to the SDK
* Tons of code simplification

There's still more simplification to do... but this is getting unwieldy so let's start here.

Co-authored-by: Copilot <copilot@github.com>
2026-04-29 08:45:44 -07:00
Martin AeschlimannandCopilot 21ef72b45b add pluginUri and extensionId to ICustomizationItem: fix slash command qualification (#313217)
* add pluginUri and  extensionId to ICustomizationItem: fix slash command qualification

* Update src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostLocalCustomizations.ts

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

* update

* update

* update

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-29 15:35:37 +00:00
Johannes Rieken cf647dbc0e chore: move inline chat stuff around (#313242)
feat: add inline chat progress messages and prompts for user feedback
2026-04-29 17:14:52 +02:00
Matt Bierner 75d676cce9 Merge branch 'main' into dev/mjbvz/copilot-eslint-unify 2026-04-29 08:00:31 -07:00
Henning Dieterichs 19b3119b33 Pin @github/copilot to exact 1.0.34 and regenerate lockfiles
The previous reverts only changed the spec to ^1.0.34, but the resolved entries in the lockfiles still pointed at 1.0.38 (with 1.0.38 tarballs and integrity hashes). Since ^1.0.34 satisfies 1.0.38, npm ci would still install the broken version. Pin to exact 1.0.34 in all three package.json files and regenerate the lockfiles.
2026-04-29 16:46:30 +02:00
Peng LyuandCopilot f2cc84be85 Revert Copilot CLI version 1.0.34 (#313125)
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 16:46:30 +02:00
Ulugbek Abdullaev 344028732a nes: feat: ghost-text-like behavior (#313206)
* nes: feat: ghost-text-like behavior

* adddresss review
2026-04-29 15:35:21 +02:00
Johannes RiekenandCopilot c76e907f98 make v2 default mode for inline chat (#313184)
* remove old inline chat from extension

* refactor: remove deprecated inline chat V2 configuration and related checks

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

* refactor: update context keys for inline chat and clean up unused variables

* address copilot review: fix typo and rename forInlineAndInlineChatIntent

---------

Co-authored-by: Copilot <copilot@github.com>
2026-04-29 12:50:58 +02:00
shaypetandAlex Ross 0e01add334 Add compareBranch to TitleAndDescriptionProvider for enhanced PR context (#312326)
* feat: add compareBranch to TitleAndDescriptionProvider for enhanced PR context

* feat: enhance PR description to include escaped compare branch name

* Update extensions/copilot/src/extension/prompts/node/github/pullRequestDescriptionPrompt.tsx

Co-authored-by: Alex Ross <38270282+alexr00@users.noreply.github.com>

* feat: update pull request user message to include escaped compare branch name

---------

Co-authored-by: Alex Ross <38270282+alexr00@users.noreply.github.com>
2026-04-29 12:23:45 +02:00
Bhavya U 224020150a Filter non-deferred tools from Responses tool search output (#313169) 2026-04-29 07:41:50 +00:00
Johannes Rieken 40b9c37eef Merge pull request #312688 from microsoft/joh/following-crayfish
refactor: improve formatting verification and update lint-staged commands
2026-04-29 09:38:31 +02:00
Zhichao Li b1c43e9589 Merge pull request #313138 from microsoft/zhichli/otel-tool-definitions
OTel: include tool parameters and emit tool definitions on child chat spans
2026-04-28 19:28:08 -07:00
Paul 161a11c507 Update style for chat input notification to latest design (#313137) 2026-04-29 01:14:41 +00:00
Zhichao Li c78e55e3a4 Address review: truncate tool definitions and clarify normalizer JSDoc
- Wrap GenAiAttr.TOOL_DEFINITIONS / tools_available toolDefinitions in truncateForOTel to avoid exceeding the 64KB OTel attribute cap with large tool catalogs.

- Drop misleading tool_search variant from toToolDefinitions JSDoc; the implementation requires a name and emits type:'function', so OpenAI client-side tool_search entries are intentionally skipped.
2026-04-28 17:07:57 -07:00
Aashna Garg 12b11d299c Add availableModels to routerDecisionRestricted telemetry
The router decision restricted event logs candidateModels (router
output) but not the input model pool sent to the router. Without
this field we cannot determine whether per-SKU CoGS differences
come from different input pools vs different routing decisions.

Add availableModels as a JSON-stringified array of the model
identifiers passed in the available_models request body field.
2026-04-28 15:45:47 -07:00
Matt Bierner eed2fb43ec Merge pull request #313102 from microsoft/dev/mjbvz/alive-whale
Bump dom purify in extensions
2026-04-28 15:38:59 -07:00
Matt Bierner e8291e3676 Merge pull request #313123 from mjbvz/dev/mjbvz/remaining-spider
Fix circular import in terminal suggest
2026-04-28 15:33:36 -07:00
Matt Bierner 371c4a0a73 Use root eslint for copilot 2026-04-28 15:20:59 -07:00
dileepyavan b5f0a81fbb On agent mode change, ignore stateful marker (#312951)
* on agent mode change, ignore stateful marker

* updates to modechange
2026-04-28 15:19:22 -07:00
Zhichao Li b1206355fa fix: include tool parameters and emit tool definitions on chat spans
- toolCallingLoop emits tool definitions with parameters (tool inputSchema) on the agent span and tools_available event, per OTel GenAI semantic conventions (fixes #300318).

- chatMLFetcher and BYOK providers (anthropic, gemini) now also set gen_ai.tool.definitions on each chat {model} child span so trace viewers can render the tool catalog per LLM call (fixes #299934).

- toToolDefinitions normalizer extended to handle OpenAI Responses API, Anthropic input_schema, and VS Code inputSchema shapes.
2026-04-28 15:13:21 -07:00
Matt Bierner c9dedcf8eb Fix circular import in terminal suggest
Found while trying to switch us to use esbuild for extension emit
2026-04-28 15:12:15 -07:00
Matt Bierner 1bc2aba0c4 Merge pull request #313088 from microsoft/dev/mjbvz/pale-ant
Pick up latest md lang server
2026-04-28 14:18:45 -07:00
Justin Chen 4d6223ba24 disable ask questions tool for autopilot (#313090) 2026-04-28 14:14:58 -07:00