Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
530a134
Add right click visibility toggle for sign in button
cwebster-99 May 7, 2026
b8a2c96
local session type for agents window
alexdima May 8, 2026
f7b5b61
Merge remote-tracking branch 'origin/main' into alexd/local-harness-a…
alexdima May 8, 2026
d2425f7
Potential fix for pull request finding
alexdima May 8, 2026
8972c3a
update unit test
alexdima May 8, 2026
03949ed
Allow running the local harness in the agents window (missing testing…
alexdima May 8, 2026
0790cc2
Include userSelectedTools when sending first local session chat
alexdima May 8, 2026
7170033
Persist workingDirectory across reload for local sessions
alexdima May 8, 2026
5618f96
Move details to hover (#315215)
chrmarti May 8, 2026
25350af
remove gradient background as it doesn't work on windows/linux
benibenj May 8, 2026
e6f0055
Enable window commands in Agents window (#315258)
sandy081 May 8, 2026
56fe2c3
Makes random deterministic in fixtures
hediet May 8, 2026
155aa2e
issue: indicate agents window in issue reporter body (#315261)
sandy081 May 8, 2026
ed8c515
Adds fixture for https://github.com/microsoft/vscode/issues/309796
hediet May 8, 2026
929ff04
Merge pull request #315262 from microsoft/benibenj/similar-reindeer
benibenj May 8, 2026
27ecfb1
Thread session workingDirectory through tools, prompts, and confirmat…
alexdima May 8, 2026
385d350
sessions: mark background sessions as unread when turn completes (#31…
sandy081 May 8, 2026
ca4058a
Add Ctrl+R keybinding for sessions picker in agents window (#315259)
sandy081 May 8, 2026
17d62bd
Agents - refactor pull request actions (#315266)
lszomoru May 8, 2026
d239dac
Address review feedback
alexdima May 8, 2026
50b89bf
More review feedback
alexdima May 8, 2026
f9760df
Add unit tests
alexdima May 8, 2026
7fadeba
Address review feedback
alexdima May 8, 2026
41b2ab0
extensions: rename `supportSessionsWindow` setting to `supportAgentsW…
benibenj May 8, 2026
cefcfa0
Limit error message header to first line
hediet May 8, 2026
389e051
Agents - show outgoing changes while action is running (#315274)
lszomoru May 8, 2026
2e7c5fd
Merge pull request #315201 from microsoft/alexd/local-harness-agents-…
alexdima May 8, 2026
cc7bc15
Address code review comments
cwebster-99 May 8, 2026
95ad92d
Use SVG icon instead of codicon in Open in Agents titlebar widget (#3…
sandy081 May 8, 2026
7aefe37
Merge pull request #315022 from microsoft/different-landfowl
cwebster-99 May 8, 2026
4b27aff
Remove unused export const (#315244)
Tyriar May 8, 2026
615782e
Approval telemetry (#315215)
chrmarti May 8, 2026
152ffe5
agentHost: support image and blob user-message attachments
connor4312 May 8, 2026
3b8129f
Strip codicons from terminal quickpick filter matching (#313197)
yogeshwaran-c May 8, 2026
6471ef7
Escapes model id in chatEditHunk event
hediet May 8, 2026
d1ace9a
Fixes tests
hediet May 8, 2026
b72c91b
agentHost: rewrite Resource attachments and omit undefined fields
connor4312 May 8, 2026
10e5df7
Merge remote-tracking branch 'origin/main' into connor4312/315137
connor4312 May 8, 2026
0c161d3
sessions: fix Customizations single-entry width overflow (#315125)
joshspicer May 8, 2026
5c97d33
agentHost: revert undefined-field omission, update tests instead
connor4312 May 8, 2026
1a8d9d0
Add proposal for custom editor diff/merge priority
mjbvz May 8, 2026
79b6fb7
chat: remove 'Bridged' badge from MCP servers in AI Customizations UI…
joshspicer May 8, 2026
dd3ad60
Replace "Agents app" with "Agents window" in user-facing strings (#31…
sandy081 May 8, 2026
1242adc
sessions: restore last active session on reload (#315312)
sandy081 May 8, 2026
25035fb
fixes https://github.com/microsoft/vscode/issues/291188 (#314713)
Larsjep May 8, 2026
b0e2250
chat: hide plugin actions for synced customization items (#315320)
joshspicer May 8, 2026
56edb5e
Merge pull request #315321 from mjbvz/dev/mjbvz/grieving-toad
mjbvz May 8, 2026
e1106b6
agentHost: support image and blob user-message attachments (#315311)
connor4312 May 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion build/lib/screenshotDiffReport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,8 @@ function generateMarkdown(
for (let i = 0; i < errored.length; i++) {
const entry = errored[i];
const open = i < EXPAND_FIRST_N ? ' open' : '';
const header = `<details${open}><summary><code>${entry.fixtureId}</code> — ${escapeMarkdown(entry.errorMessage)}</summary>`;
const headerMessage = entry.errorMessage.split('\n').map(l => l.trim()).find(l => l.length > 0) ?? entry.errorMessage;
const header = `<details${open}><summary><code>${entry.fixtureId}</code> — ${escapeMarkdown(headerMessage)}</summary>`;
const fullStack = entry.errorStack ?? entry.errorMessage;
const fullBlock = `${header}\n\n\`\`\`\n${fullStack}\n\`\`\`\n\n</details>\n`;

Expand Down
44 changes: 14 additions & 30 deletions extensions/copilot/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2838,50 +2838,43 @@
{
"command": "github.copilot.sessions.commit",
"title": "%github.copilot.command.sessions.commit%",
"enablement": "!sessions.hasGitOperationInProgress",
"enablement": "!chatSessionRequestInProgress && !sessions.hasGitOperationInProgress",
"icon": "$(git-commit)",
"category": "GitHub Copilot"
},
{
"command": "github.copilot.sessions.commitAndSync",
"title": "%github.copilot.command.sessions.commitAndSync%",
"enablement": "!sessions.hasGitOperationInProgress",
"enablement": "!chatSessionRequestInProgress && !sessions.hasGitOperationInProgress",
"icon": "$(sync)",
"category": "GitHub Copilot"
},
{
"command": "github.copilot.sessions.sync",
"title": "%github.copilot.command.sessions.sync%",
"enablement": "!sessions.hasGitOperationInProgress",
"enablement": "!chatSessionRequestInProgress && !sessions.hasGitOperationInProgress",
"icon": "$(sync)",
"category": "GitHub Copilot"
},
{
"command": "github.copilot.sessions.discardChanges",
"title": "%github.copilot.command.sessions.discardChanges%",
"enablement": "!chatSessionRequestInProgress",
"icon": "$(discard)",
"category": "GitHub Copilot"
},
{
"command": "github.copilot.chat.createPullRequestCopilotCLIAgentSession.createPR",
"title": "%github.copilot.chat.createPullRequestCopilotCLIAgentSession.createPR%",
"enablement": "!chatSessionRequestInProgress",
"enablement": "!chatSessionRequestInProgress && !sessions.hasGitOperationInProgress",
"icon": "$(git-pull-request-create)",
"category": "GitHub Copilot"
},
{
"command": "github.copilot.chat.createPullRequestCopilotCLIAgentSession.updatePR",
"title": "%github.copilot.chat.createPullRequestCopilotCLIAgentSession.updatePR%",
"enablement": "!chatSessionRequestInProgress",
"icon": "$(sync)",
"command": "github.copilot.chat.createDraftPullRequestCopilotCLIAgentSession.createDraftPR",
"title": "%github.copilot.chat.createDraftPullRequestCopilotCLIAgentSession.createDraftPR%",
"enablement": "!chatSessionRequestInProgress && !sessions.hasGitOperationInProgress",
"icon": "$(git-pull-request-draft)",
"category": "GitHub Copilot"
},
{
"command": "github.copilot.chat.createDraftPullRequestCopilotCLIAgentSession.createDraftPR",
"title": "%github.copilot.chat.createDraftPullRequestCopilotCLIAgentSession.createDraftPR%",
"command": "github.copilot.sessions.discardChanges",
"title": "%github.copilot.command.sessions.discardChanges%",
"enablement": "!chatSessionRequestInProgress",
"icon": "$(git-pull-request-draft)",
"icon": "$(discard)",
"category": "GitHub Copilot"
},
{
Expand Down Expand Up @@ -5166,19 +5159,14 @@
},
{
"command": "github.copilot.chat.createPullRequestCopilotCLIAgentSession.createPR",
"when": "chatSessionType == copilotcli && isSessionsWindow && sessions.isolationMode == worktree && sessions.hasGitRepository && sessions.hasGitHubRemote && !sessions.hasPullRequest && (sessions.hasUncommittedChanges || sessions.hasOutgoingChanges) && !sessions.isAgentHostSession",
"when": "chatSessionType == copilotcli && isSessionsWindow && sessions.isolationMode == worktree && sessions.hasGitRepository && sessions.hasGitHubRemote && !sessions.hasPullRequest && !sessions.isAgentHostSession",
"group": "2_pull_request@1"
},
{
"command": "github.copilot.chat.createDraftPullRequestCopilotCLIAgentSession.createDraftPR",
"when": "chatSessionType == copilotcli && isSessionsWindow && sessions.isolationMode == worktree && sessions.hasGitRepository && sessions.hasGitHubRemote && !sessions.hasPullRequest && (sessions.hasUncommittedChanges || sessions.hasOutgoingChanges) && !sessions.isAgentHostSession",
"when": "chatSessionType == copilotcli && isSessionsWindow && sessions.isolationMode == worktree && sessions.hasGitRepository && sessions.hasGitHubRemote && !sessions.hasPullRequest && !sessions.isAgentHostSession",
"group": "2_pull_request@2"
},
{
"command": "github.copilot.chat.createPullRequestCopilotCLIAgentSession.updatePR",
"when": "chatSessionType == copilotcli && isSessionsWindow && sessions.isolationMode == worktree && sessions.hasGitRepository && sessions.hasGitHubRemote && sessions.hasPullRequest && sessions.hasOpenPullRequest && !sessions.isAgentHostSession && (sessions.hasIncomingChanges || sessions.hasOutgoingChanges || sessions.hasUncommittedChanges)",
"group": "2_pull_request@3"
},
{
"command": "github.copilot.sessions.commit",
"when": "chatSessionType == copilotcli && isSessionsWindow && sessions.hasGitRepository && sessions.hasUncommittedChanges && !sessions.isAgentHostSession",
Expand All @@ -5191,7 +5179,7 @@
},
{
"command": "github.copilot.sessions.sync",
"when": "chatSessionType == copilotcli && isSessionsWindow && sessions.isolationMode == workspace && sessions.hasGitRepository && sessions.hasUpstream && !sessions.hasUncommittedChanges && (sessions.hasIncomingChanges || sessions.hasOutgoingChanges) && !sessions.isAgentHostSession",
"when": "chatSessionType == copilotcli && isSessionsWindow && sessions.hasGitRepository && sessions.hasUpstream && !sessions.hasUncommittedChanges && (sessions.hasIncomingChanges || sessions.hasOutgoingChanges) && !sessions.isAgentHostSession",
"group": "4_sync@1"
},
{
Expand Down Expand Up @@ -5517,10 +5505,6 @@
"command": "github.copilot.chat.createPullRequestCopilotCLIAgentSession.createPR",
"when": "false"
},
{
"command": "github.copilot.chat.createPullRequestCopilotCLIAgentSession.updatePR",
"when": "false"
},
{
"command": "github.copilot.chat.createDraftPullRequestCopilotCLIAgentSession.createDraftPR",
"when": "false"
Expand Down
1 change: 0 additions & 1 deletion extensions/copilot/package.nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,6 @@
"github.copilot.chat.mergeCopilotCLIAgentSessionChanges.merge": "Merge Changes",
"github.copilot.chat.mergeCopilotCLIAgentSessionChanges.mergeAndSync": "Merge Changes & Sync",
"github.copilot.chat.createPullRequestCopilotCLIAgentSession.createPR": "Create Pull Request",
"github.copilot.chat.createPullRequestCopilotCLIAgentSession.updatePR": "Sync Pull Request",
"github.copilot.chat.createDraftPullRequestCopilotCLIAgentSession.createDraftPR": "Create Draft Pull Request",
"github.copilot.command.checkoutPullRequestReroute.title": "Checkout",
"github.copilot.command.cloudSessions.openRepository.title": "Browse repositories...",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export class MockOctoKitService implements IOctoKitService {
addPullRequestComment = async () => null;
getAllOpenSessions = async () => [];
getAllSessions = async () => [];
createPullRequest = async () => ({ number: 0, url: '' });
getPullRequestFromGlobalId = async () => null;
getPullRequestFiles = async () => [];
closePullRequest = async () => false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ import { CopilotCLITerminalIntegration, ICopilotCLITerminalIntegration } from '.
import { CopilotCloudSessionsProvider } from './copilotCloudSessionsProvider';
import { ClaudeFolderRepositoryManager, CopilotCLIFolderRepositoryManager } from './folderRepositoryManagerImpl';
import { PRContentProvider } from './prContentProvider';
import { IPullRequestCreationService, PullRequestCreationService } from './pullRequestCreationService';
import { IPullRequestDetectionService, PullRequestDetectionService } from './pullRequestDetectionService';
import { IPullRequestFileChangesService, PullRequestFileChangesService } from './pullRequestFileChangesService';
import { ISessionOptionGroupBuilder, SessionOptionGroupBuilder } from './sessionOptionGroupBuilder';
Expand Down Expand Up @@ -191,6 +192,7 @@ export class ChatSessionsContrib extends Disposable implements IExtensionContrib
[ICopilotCLISkills, new SyncDescriptor(CopilotCLISkills)],
[IChatSessionMetadataStore, new SyncDescriptor(ChatSessionMetadataStore)],
[IChatFolderMruService, new SyncDescriptor(CopilotCLIFolderMruService)],
[IPullRequestCreationService, new SyncDescriptor(PullRequestCreationService)],
[IPullRequestDetectionService, new SyncDescriptor(PullRequestDetectionService)],
[ISessionOptionGroupBuilder, new SyncDescriptor(SessionOptionGroupBuilder)],
[ISessionRequestLifecycle, new SyncDescriptor(SessionRequestLifecycle)],
Expand Down Expand Up @@ -225,6 +227,7 @@ export class ChatSessionsContrib extends Disposable implements IExtensionContrib
const fileSystemService = copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(IFileSystemService));
const copilotModels = copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(ICopilotCLIModels));
const copilotCLIFolderMruService = copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(IChatFolderMruService));
const pullRequestCreationService = copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(IPullRequestCreationService));

this._register(copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(ICopilotCLISessionTracker)));
this._register(copilotcliAgentInstaService.createInstance(CopilotCLIContrib));
Expand All @@ -235,7 +238,7 @@ export class ChatSessionsContrib extends Disposable implements IExtensionContrib
this._register(vscode.chat.registerChatSessionContentProvider(this.copilotcliSessionType, copilotcliChatSessionContentProvider, copilotcliParticipant));
const copilotcliCustomizationProvider = this._register(copilotcliAgentInstaService.createInstance(CopilotCLICustomizationProvider));
this._register(vscode.chat.registerChatSessionCustomizationProvider(this.copilotcliSessionType, CopilotCLICustomizationProvider.metadata, copilotcliCustomizationProvider));
this._register(registerCLIChatCommands(copilotCLISessionService, copilotCLIWorktreeManagerService, gitService, gitCommitMessageService, copilotCLIWorkspaceFolderSessions, copilotcliChatSessionContentProvider, folderRepositoryManager, copilotCLIFolderMruService, nativeEnvService, fileSystemService, sessionTracker, terminalIntegration, logService));
this._register(registerCLIChatCommands(copilotCLISessionService, copilotCLIWorktreeManagerService, gitService, gitCommitMessageService, copilotCLIWorkspaceFolderSessions, copilotcliChatSessionContentProvider, folderRepositoryManager, copilotCLIFolderMruService, nativeEnvService, fileSystemService, sessionTracker, terminalIntegration, pullRequestCreationService, logService));
// #endregion

const sessionMetadata = copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(IChatSessionMetadataStore));
Expand Down Expand Up @@ -265,6 +268,7 @@ export class ChatSessionsContrib extends Disposable implements IExtensionContrib
[ICopilotCLISkills, new SyncDescriptor(CopilotCLISkills)],
[IChatSessionMetadataStore, new SyncDescriptor(ChatSessionMetadataStore)],
[IChatFolderMruService, new SyncDescriptor(CopilotCLIFolderMruService)],
[IPullRequestCreationService, new SyncDescriptor(PullRequestCreationService)],
...getServices()
));

Expand Down Expand Up @@ -326,6 +330,7 @@ export class ChatSessionsContrib extends Disposable implements IExtensionContrib
const fileSystemService = copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(IFileSystemService));
const copilotModels = copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(ICopilotCLIModels));
const copilotFolderMruService = copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(IChatFolderMruService));
const pullRequestCreationService = copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(IPullRequestCreationService));

this._register(copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(ICopilotCLISessionTracker)));
this._register(copilotcliAgentInstaService.createInstance(CopilotCLIContrib));
Expand All @@ -336,7 +341,7 @@ export class ChatSessionsContrib extends Disposable implements IExtensionContrib
this._register(vscode.chat.registerChatSessionContentProvider(this.copilotcliSessionType, copilotcliChatSessionContentProvider, copilotcliParticipant));
const copilotcliCustomizationProvider = this._register(copilotcliAgentInstaService.createInstance(CopilotCLICustomizationProvider));
this._register(vscode.chat.registerChatSessionCustomizationProvider(this.copilotcliSessionType, CopilotCLICustomizationProvider.metadata, copilotcliCustomizationProvider));
this._register(registerCLIChatCommandsV1(copilotcliSessionItemProvider, copilotCLISessionService, copilotCLIWorktreeManagerService, gitService, gitCommitMessageService, gitExtensionService, toolsService, copilotCLIWorkspaceFolderSessions, copilotcliChatSessionContentProvider, folderRepositoryManager, copilotFolderMruService, nativeEnvService, fileSystemService, logService));
this._register(registerCLIChatCommandsV1(copilotcliSessionItemProvider, copilotCLISessionService, copilotCLIWorktreeManagerService, gitService, gitCommitMessageService, gitExtensionService, toolsService, copilotCLIWorkspaceFolderSessions, copilotcliChatSessionContentProvider, folderRepositoryManager, copilotFolderMruService, nativeEnvService, fileSystemService, pullRequestCreationService, logService));
// #endregion

const sessionMetadata = copilotcliAgentInstaService.invokeFunction(accessor => accessor.get(IChatSessionMetadataStore));
Expand Down
Loading
Loading