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>
R
Rob Lourens committed
9cd698c36bfc43d51a2879e4772b76ced430671e
Parent: af74f12
Committed by GitHub <noreply@github.com>
on 4/29/2026, 9:36:05 PM