Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
8ea0ece
Reorganize onboarding 'Build with AI agents' step into Chat modes vs …
eli-w-king Apr 20, 2026
8f29f9e
Align onboarding 'Build with AI agents' wording with docs
eli-w-king Apr 20, 2026
8d36495
Improves source map support
hediet Apr 22, 2026
6e04312
Add detailed diff output for blocks-ci screenshot mismatch errors
hediet Apr 22, 2026
715a174
Improved time travel scheduler for fixtures to avoid scroll bar flick…
hediet Apr 22, 2026
021452a
updates source-map-support
hediet Apr 22, 2026
b781308
fixes component fixture endless loop
hediet Apr 22, 2026
bca536f
Merge branch 'main' into eli/onboard-short
eli-w-king Apr 22, 2026
aa1b5f6
Refine 'Build with AI Agents' onboarding step and re-enable by default
eli-w-king Apr 22, 2026
8994398
Merge branch 'main' into eli/onboard-short
eli-w-king Apr 22, 2026
7125a12
Merge branch 'main' into eli/onboard-short
eli-w-king Apr 22, 2026
0b47e34
Update src/vs/workbench/contrib/welcomeOnboarding/browser/onboardingV…
eli-w-king Apr 22, 2026
4dca859
Update src/vs/workbench/contrib/welcomeOnboarding/browser/onboardingV…
eli-w-king Apr 22, 2026
12ea853
Update src/vs/workbench/contrib/welcomeOnboarding/browser/onboardingV…
eli-w-king Apr 22, 2026
061a14a
Merge branch 'main' into eli/onboard-short
eli-w-king Apr 22, 2026
9b56cf6
Dispose store on error
hediet Apr 23, 2026
997722d
Fixes CI
hediet Apr 23, 2026
ef34fe6
Handles failing tasks
hediet Apr 23, 2026
23bf8f6
Merge pull request #311958 from microsoft/hediet/b/educational-gayal
hediet Apr 23, 2026
50ae9e6
Agents app: keybindings to switch between sessions (Ctrl+1..9) (#310994)
Copilot Apr 23, 2026
c809950
Remember last active chat per session across restarts (#312108)
sandy081 Apr 23, 2026
053e4f4
fix view menu (#312116)
sandy081 Apr 23, 2026
18b4d8d
Agents - update list of files in the multi-file diff editor (#312112)
lszomoru Apr 23, 2026
32ca971
Keep active chat tab visible on resize and tab switch (#312124)
sandy081 Apr 23, 2026
e923ba6
Add telemetry for assignable users (#312104)
alexr00 Apr 23, 2026
b9e691a
inlineChat: remove hover renderMode experiment and InlineChatInputWidget
jrieken Apr 23, 2026
d580386
Merge pull request #311529 from microsoft/eli/onboard-short
eli-w-king Apr 23, 2026
ffb4db2
Agents - only show "Sync Pull Request" primary action if there are in…
lszomoru Apr 23, 2026
a425fe8
inlineChat: remove stale renderMode setting reference from sessions d…
jrieken Apr 23, 2026
f36a976
Fix padding for action list filter row in agent sessions workbench (#…
mrleemurray Apr 23, 2026
677ee01
Refactor chat session worktree handling and remove unused components …
DonJayamanne Apr 23, 2026
34aaaae
allow multiple slash commands of the same name but for different sess…
aeschli Apr 23, 2026
f84260a
Engineering - update product build schedule to add 2 additional build…
lszomoru Apr 23, 2026
fd6a746
Bump actions/cache from 4 to 5 (#312122)
dependabot[bot] Apr 23, 2026
d8ad65f
Merge pull request #312133 from microsoft/joh/inline-chat-cleanup-hov…
jrieken Apr 23, 2026
19d4617
chat: allow reading vscode-chat-response-resource resources in chat (…
connor4312 Apr 23, 2026
eab5ecc
SSO between Apps in Windows (#312144)
sandy081 Apr 23, 2026
d820bee
Agents - adjust auxiliarybar/editor default size (#312149)
lszomoru Apr 23, 2026
8bcec19
Bump fast-xml-parser from 5.5.7 to 5.7.1 in /extensions/copilot (#312…
dependabot[bot] Apr 23, 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
12 changes: 6 additions & 6 deletions .github/workflows/chat-perf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ jobs:
run: node build/lib/preLaunch.ts

- name: Cache Electron
uses: actions/cache/save@v4
uses: actions/cache/save@v5
with:
path: ~/.cache/electron
key: electron-${{ runner.os }}-${{ hashFiles('.nvmrc', 'package.json') }}
Expand All @@ -139,7 +139,7 @@ jobs:
run: npx playwright install chromium

- name: Cache Playwright
uses: actions/cache/save@v4
uses: actions/cache/save@v5
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ hashFiles('package.json') }}
Expand Down Expand Up @@ -220,7 +220,7 @@ jobs:
name: build-output

- name: Restore Electron cache
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
path: ~/.cache/electron
key: electron-${{ runner.os }}-${{ hashFiles('.nvmrc', 'package.json') }}
Expand All @@ -229,7 +229,7 @@ jobs:
run: node build/lib/preLaunch.ts

- name: Restore Playwright cache
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ hashFiles('package.json') }}
Expand Down Expand Up @@ -393,7 +393,7 @@ jobs:
name: build-output

- name: Restore Electron cache
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
path: ~/.cache/electron
key: electron-${{ runner.os }}-${{ hashFiles('.nvmrc', 'package.json') }}
Expand All @@ -402,7 +402,7 @@ jobs:
run: node build/lib/preLaunch.ts

- name: Restore Playwright cache
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ hashFiles('package.json') }}
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/screenshot-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,9 @@ jobs:
if: steps.blocks-ci.outputs.match == 'false'
run: |
echo "::error::blocks-ci screenshot hashes do not match committed file. See PR comment for updated content."
echo ""
echo "Diff between committed and expected blocks-ci-screenshots.md:"
diff -u test/componentFixtures/blocks-ci-screenshots.md /tmp/blocks-ci-updated.md || true
exit 1

# - name: Compare screenshots
Expand Down
14 changes: 12 additions & 2 deletions build/azure-pipelines/product-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,22 @@ pr: none

schedules:
- cron: "0 5 * * Mon-Fri"
displayName: Mon-Fri at 7:00
displayName: Mon-Fri at 5:00 UTC (build, publish and release)
branches:
include:
- main
- cron: "0 11 * * Mon-Fri"
displayName: Mon-Fri at 11:00 UTC (build, and publish)
branches:
include:
- main
- cron: "0 17 * * Mon-Fri"
displayName: Mon-Fri at 19:00
displayName: Mon-Fri at 17:00 UTC (build, publish, and release)
branches:
include:
- main
- cron: "0 23 * * Mon-Fri"
displayName: Mon-Fri at 23:00 UTC (build, and publish)
branches:
include:
- main
Expand Down
2 changes: 2 additions & 0 deletions build/azure-pipelines/product-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@ jobs:

- ${{ if and(in(parameters.VSCODE_QUALITY, 'insider', 'exploration'), eq(parameters.VSCODE_SCHEDULEDBUILD, true)) }}:
- script: node build/azure-pipelines/common/releaseBuild.ts
# Only release on the 05:00 and 17:00 UTC schedules (skip the 11:00 and 23:00 UTC schedules)
condition: and(succeeded(), or(eq(format('{0:HH}', pipeline.startTime), '05'), eq(format('{0:HH}', pipeline.startTime), '17')))
env:
PUBLISH_AUTH_TOKENS: "$(PUBLISH_AUTH_TOKENS)"
displayName: Release build
47 changes: 46 additions & 1 deletion build/rspack/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion build/rspack/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
"devDependencies": {
"@rspack/cli": "^1.3.18",
"@rspack/core": "^1.3.18",
"@vscode/esm-url-webpack-plugin": "^1.0.1-3"
"@vscode/esm-url-webpack-plugin": "^1.0.1-3",
"source-map-loader": "^5.0.0"
},
"dependencies": {
"@vscode/component-explorer": "^0.2.1-17",
Expand Down
19 changes: 19 additions & 0 deletions build/rspack/rspack.serve-out.config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export default {
context: repoRoot,
mode: 'development',
target: 'web',
devtool: 'source-map',
entry: {
workbench: path.join(repoRoot, 'out', 'vs', 'code', 'browser', 'workbench', 'workbench.js'),
},
Expand All @@ -38,12 +39,30 @@ export default {
assetModuleFilename: 'bundled/assets/[name][ext][query]',
publicPath: '/',
clean: true,
devtoolModuleFilenameTemplate: (info: { absoluteResourcePath: string }) => {
return `file:///${info.absoluteResourcePath.replace(/\\/g, '/')}`;
},
},
resolve: {
fallback: {
path: path.resolve(repoRoot, 'node_modules', 'path-browserify'),
fs: false,
module: false,
},
},
resolveLoader: {
modules: [path.join(__dirname, 'node_modules'), 'node_modules'],
},
experiments: {
css: true,
},
module: {
rules: [
{
test: /\.js$/,
enforce: 'pre',
use: ['source-map-loader'],
},
{
test: /\.css$/,
type: 'css',
Expand Down
44 changes: 29 additions & 15 deletions extensions/copilot/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion extensions/copilot/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5040,7 +5040,7 @@
},
{
"command": "github.copilot.chat.createPullRequestCopilotCLIAgentSession.updatePR",
"when": "chatSessionType == copilotcli && isSessionsWindow && sessions.isolationMode == worktree && sessions.hasGitRepository && sessions.hasGitHubRemote && sessions.hasPullRequest && sessions.hasOpenPullRequest",
"when": "chatSessionType == copilotcli && isSessionsWindow && sessions.isolationMode == worktree && sessions.hasGitRepository && sessions.hasGitHubRemote && sessions.hasPullRequest && sessions.hasOpenPullRequest && (sessions.hasIncomingChanges || sessions.hasOutgoingChanges || sessions.hasUncommittedChanges)",
"group": "pull_request@1"
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
*--------------------------------------------------------------------------------------------*/

import type * as vscode from 'vscode';
import type { Uri } from 'vscode';
import { createServiceIdentifier } from '../../../util/common/services';
import { ChatSessionWorktreeProperties } from './chatSessionWorktreeService';
import type { IWorkspaceInfo } from './workspaceInfo';
Expand Down Expand Up @@ -118,9 +117,7 @@ export interface IChatSessionMetadataStore {
storeWorkspaceFolderInfo(sessionId: string, entry: WorkspaceFolderEntry): Promise<void>;
storeRepositoryProperties(sessionId: string, properties: RepositoryProperties): Promise<void>;
getRepositoryProperties(sessionId: string): Promise<RepositoryProperties | undefined>;
getSessionIdForWorktree(folder: vscode.Uri): Promise<string | undefined>;
getWorktreeProperties(sessionId: string): Promise<ChatSessionWorktreeProperties | undefined>;
getWorktreeProperties(folder: Uri): Promise<ChatSessionWorktreeProperties | undefined>;
getSessionWorkspaceFolder(sessionId: string): Promise<vscode.Uri | undefined>;
getSessionWorkspaceFolderEntry(sessionId: string): Promise<WorkspaceFolderEntry | undefined>;
getAdditionalWorkspaces(sessionId: string): Promise<IWorkspaceInfo[]>;
Expand All @@ -147,4 +144,13 @@ export interface IChatSessionMetadataStore {
* on demand. Concurrent calls collapse: at most one in-flight + one pending.
*/
refresh(): Promise<void>;
/**
* Returns session IDs whose working directory (worktree path or workspace folder)
* matches the given folder URI.
*/
getSessionIdsForFolder(folder: vscode.Uri): string[];
/**
* Returns session IDs that have a worktree whose path matches the given folder URI.
*/
getWorktreeSessions(folder: vscode.Uri): string[];
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,13 @@ export interface IChatSessionWorktreeService {
createWorktree(repositoryPath: vscode.Uri, stream?: vscode.ChatResponseStream, baseBranch?: string, branchName?: string): Promise<ChatSessionWorktreeProperties | undefined>;

getWorktreeProperties(sessionId: string): Promise<ChatSessionWorktreeProperties | undefined>;
getWorktreeProperties(folder: vscode.Uri): Promise<ChatSessionWorktreeProperties | undefined>;
setWorktreeProperties(sessionId: string, properties: string | ChatSessionWorktreeProperties): Promise<void>;

getWorktreeRepository(sessionId: string): Promise<RepoContext | undefined>;
getWorktreePath(sessionId: string): Promise<vscode.Uri | undefined>;

applyWorktreeChanges(sessionId: string): Promise<void>;

getSessionIdForWorktree(folder: vscode.Uri): Promise<string | undefined>;

getWorktreeChanges(sessionId: string): Promise<readonly vscode.ChatSessionChangedFile[] | undefined>;

hasCachedChanges(sessionId: string): Promise<boolean>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,8 @@ export class MockChatSessionMetadataStore implements IChatSessionMetadataStore {
return undefined;
}

async getWorktreeProperties(sessionIdOrFolder: string | vscode.Uri): Promise<ChatSessionWorktreeProperties | undefined> {
if (typeof sessionIdOrFolder === 'string') {
return this._worktreeProperties.get(sessionIdOrFolder);
}
return undefined;
async getWorktreeProperties(sessionId: string): Promise<ChatSessionWorktreeProperties | undefined> {
return this._worktreeProperties.get(sessionId);
}

async getSessionWorkspaceFolder(_sessionId: string): Promise<vscode.Uri | undefined> {
Expand Down Expand Up @@ -155,4 +152,31 @@ export class MockChatSessionMetadataStore implements IChatSessionMetadataStore {
getSessionParentId(_sessionId: string): Promise<string | undefined> {
return Promise.resolve(undefined);
}

getSessionIdsForFolder(folder: vscode.Uri): string[] {
const folderPath = folder.fsPath;
const sessionIds: string[] = [];
for (const [sessionId, props] of this._worktreeProperties) {
if (props.worktreePath === folderPath) {
sessionIds.push(sessionId);
}
}
for (const [sessionId, entry] of this._workspaceFolders) {
if (entry.folderPath === folderPath && !sessionIds.includes(sessionId)) {
sessionIds.push(sessionId);
}
}
return sessionIds;
}

getWorktreeSessions(folder: vscode.Uri): string[] {
const folderPath = folder.fsPath;
const sessionIds: string[] = [];
for (const [sessionId, props] of this._worktreeProperties) {
if (props.worktreePath === folderPath) {
sessionIds.push(sessionId);
}
}
return sessionIds;
}
}
Loading
Loading