Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
756bc9c
Codex agent in agent type picker
benibenj Jan 20, 2026
01b1e5e
Merge pull request #289060 from microsoft/benibenj/head-dove
benibenj Jan 20, 2026
9aaa385
Automatic activation event for chat context provider (#280677)
vedbhadani Jan 20, 2026
672e797
style: add right margin to interactive item container for improved la…
mrleemurray Jan 20, 2026
05279bc
Merge pull request #289068 from microsoft/revert-285906-avoid_editcon…
alexdima Jan 20, 2026
b7b1562
Better activation info for chat context provider (#289069)
alexr00 Jan 20, 2026
fd3c340
Speed up code block rendering
alexdima Jan 20, 2026
a0d653a
Merge pull request #289072 from microsoft/mrleemurray/passing-mouse-plum
mrleemurray Jan 20, 2026
a5c7fde
Fix comment collapse keybinding (#289073)
alexr00 Jan 20, 2026
90901bd
update color theme settings for improved UI consistency in light and …
mrleemurray Jan 20, 2026
d346fdc
make small ghosttext suggestions more visible
benibenj Jan 20, 2026
bb885af
Add telemetry for tools picker
benibenj Jan 20, 2026
7e2b9dd
Merge pull request #289079 from microsoft/alexd/excessive-rooster
alexdima Jan 20, 2026
d2049e8
Git - tweak how files are being copied to the worktree (#289065)
lszomoru Jan 20, 2026
66b43c3
making the getViewportViewLineRenderingData return the correct hasFon…
aiday-mar Jan 20, 2026
8757118
Merge pull request #289084 from microsoft/benibenj/rival-wildfowl
benibenj Jan 20, 2026
6283f18
Merge pull request #289086 from microsoft/benibenj/growing-ostrich
benibenj Jan 20, 2026
e28cce4
adding the line height into the model decorations returned by font to…
aiday-mar Jan 20, 2026
225d729
Integrated browser focus fixes (#287907)
kycutler Jan 20, 2026
6611b47
fix #288864 (#289087)
sandy081 Jan 20, 2026
0ea07d5
agent sessions - tweaks to time display (#289115)
bpasero Jan 20, 2026
33e2f28
refactor theme styles for improved UI consistency and add new styles …
mrleemurray Jan 20, 2026
9d2710f
Add "collapse visible comments" keybinding (#289116)
alexr00 Jan 20, 2026
ebaa450
Chat - auto-accept external edits (#288933)
lszomoru Jan 20, 2026
eeb23eb
agent sessions - focus chat if session opened from stacked view (#289…
bpasero Jan 20, 2026
b345708
chat.tools still show the old runSubagent tool (#289125)
aeschli Jan 20, 2026
1f607af
enable manage models entry in the model picker for pro and biz users …
sandy081 Jan 20, 2026
1c03cca
Merge pull request #289121 from microsoft/mrleemurray/graceful-mastod…
mrleemurray Jan 20, 2026
fe035e1
remove unused experimentan (#289061)
sandy081 Jan 20, 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
54 changes: 43 additions & 11 deletions extensions/git/src/repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1127,6 +1127,11 @@ export class Repository implements Disposable {
return undefined;
}

// Since we are inspecting the resource groups
// we have to ensure that the repository state
// is up to date
// await this.status();

// Ignore path that is inside a merge group
if (this.mergeGroup.resourceStates.some(r => pathEquals(r.resourceUri.fsPath, uri.fsPath))) {
this.logger.trace(`[Repository][provideOriginalResource] Resource is part of a merge group: ${uri.toString()}`);
Expand Down Expand Up @@ -1888,7 +1893,7 @@ export class Repository implements Disposable {
});
}

private async _getWorktreeIncludeFiles(): Promise<Set<string>> {
private async _getWorktreeIncludePaths(): Promise<Set<string>> {
const config = workspace.getConfiguration('git', Uri.file(this.root));
const worktreeIncludeFiles = config.get<string[]>('worktreeIncludeFiles', ['**/node_modules/**']);

Expand Down Expand Up @@ -1917,48 +1922,70 @@ export class Repository implements Disposable {
gitIgnoredFiles.delete(uri.fsPath);
}

return gitIgnoredFiles;
// Add the folder paths for git ignored files
const gitIgnoredPaths = new Set(gitIgnoredFiles);

for (const filePath of gitIgnoredFiles) {
let dir = path.dirname(filePath);
while (dir !== this.root && !gitIgnoredFiles.has(dir)) {
gitIgnoredPaths.add(dir);
dir = path.dirname(dir);
}
}

return gitIgnoredPaths;
}

private async _copyWorktreeIncludeFiles(worktreePath: string): Promise<void> {
const ignoredFiles = await this._getWorktreeIncludeFiles();
if (ignoredFiles.size === 0) {
const gitIgnoredPaths = await this._getWorktreeIncludePaths();
if (gitIgnoredPaths.size === 0) {
return;
}

try {
// Copy files
// Find minimal set of paths (folders and files) to copy.
// The goal is to reduce the number of copy operations
// needed.
const pathsToCopy = new Set<string>();
for (const filePath of gitIgnoredPaths) {
const relativePath = path.relative(this.root, filePath);
const firstSegment = relativePath.split(path.sep)[0];
pathsToCopy.add(path.join(this.root, firstSegment));
}

const startTime = Date.now();
const limiter = new Limiter<void>(15);
const files = Array.from(ignoredFiles);
const files = Array.from(pathsToCopy);

// Copy files
const results = await Promise.allSettled(files.map(sourceFile =>
limiter.queue(async () => {
const targetFile = path.join(worktreePath, relativePath(this.root, sourceFile));
await fsPromises.mkdir(path.dirname(targetFile), { recursive: true });
await fsPromises.cp(sourceFile, targetFile, {
filter: src => gitIgnoredPaths.has(src),
force: true,
mode: fs.constants.COPYFILE_FICLONE,
recursive: false,
recursive: true,
verbatimSymlinks: true
});
})
));

// Log any failed operations
const failedOperations = results.filter(r => r.status === 'rejected');
this.logger.info(`[Repository][_copyWorktreeIncludeFiles] Copied ${files.length - failedOperations.length} files to worktree. Failed to copy ${failedOperations.length} files. [${Date.now() - startTime}ms]`);
this.logger.info(`[Repository][_copyWorktreeIncludeFiles] Copied ${files.length - failedOperations.length}/${files.length} folder(s)/file(s) to worktree. [${Date.now() - startTime}ms]`);

if (failedOperations.length > 0) {
window.showWarningMessage(l10n.t('Failed to copy {0} files to the worktree.', failedOperations.length));
window.showWarningMessage(l10n.t('Failed to copy {0} folder(s)/file(s) to the worktree.', failedOperations.length));

this.logger.warn(`[Repository][_copyWorktreeIncludeFiles] Failed to copy ${failedOperations.length} files to worktree.`);
this.logger.warn(`[Repository][_copyWorktreeIncludeFiles] Failed to copy ${failedOperations.length} folder(s)/file(s) to worktree.`);
for (const error of failedOperations) {
this.logger.warn(` - ${(error as PromiseRejectedResult).reason}`);
}
}
} catch (err) {
this.logger.warn(`[Repository][_copyWorktreeIncludeFiles] Failed to copy files to worktree: ${err}`);
this.logger.warn(`[Repository][_copyWorktreeIncludeFiles] Failed to copy folder(s)/file(s) to worktree: ${err}`);
}
}

Expand Down Expand Up @@ -3273,6 +3300,11 @@ export class StagedResourceQuickDiffProvider implements QuickDiffProvider {
return undefined;
}

// Since we are inspecting the resource groups
// we have to ensure that the repository state
// is up to date
// await this._repository.status();

// Ignore resources that are not in the index group
if (!this._repository.indexGroup.resourceStates.some(r => pathEquals(r.resourceUri.fsPath, uri.fsPath))) {
this.logger.trace(`[StagedResourceQuickDiffProvider][provideOriginalResource] Resource is not part of a index group: ${uri.toString()}`);
Expand Down
2 changes: 1 addition & 1 deletion extensions/theme-2026/themes/2026-dark.json
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@
"statusBar.debuggingForeground": "#FFFFFF",
"statusBar.noFolderBackground": "#191B1D",
"statusBar.noFolderForeground": "#bfbfbf",
"statusBarItem.activeBackground": "#498FAE",
"statusBarItem.activeBackground": "#4A4D4F",
"statusBarItem.hoverBackground": "#252829",
"statusBarItem.focusBorder": "#498FADB3",
"statusBarItem.prominentBackground": "#498FAE",
Expand Down
108 changes: 54 additions & 54 deletions extensions/theme-2026/themes/2026-light.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,22 @@
"descriptionForeground": "#666666",
"icon.foreground": "#666666",
"focusBorder": "#4466CCFF",
"textBlockQuote.background": "#E9E9E9",
"textBlockQuote.border": "#EEEEEE00",
"textCodeBlock.background": "#E9E9E9",
"textBlockQuote.background": "#EDEDED",
"textBlockQuote.border": "#ECEDEEFF",
"textCodeBlock.background": "#EDEDED",
"textLink.foreground": "#3457C0",
"textLink.activeForeground": "#395DC9",
"textLink.activeForeground": "#3355BA",
"textPreformat.foreground": "#666666",
"textSeparator.foreground": "#EEEEEE00",
"textSeparator.foreground": "#EEEEEEFF",
"button.background": "#4466CC",
"button.foreground": "#FFFFFF",
"button.hoverBackground": "#4F6FCF",
"button.border": "#EEEEEE00",
"button.secondaryBackground": "#E9E9E9",
"button.hoverBackground": "#3E61CA",
"button.border": "#ECEDEEFF",
"button.secondaryBackground": "#EDEDED",
"button.secondaryForeground": "#202020",
"button.secondaryHoverBackground": "#F5F5F5",
"checkbox.background": "#E9E9E9",
"checkbox.border": "#EEEEEE00",
"button.secondaryHoverBackground": "#E6E6E6",
"checkbox.background": "#EDEDED",
"checkbox.border": "#ECEDEEFF",
"checkbox.foreground": "#202020",
"dropdown.background": "#F9F9F9",
"dropdown.border": "#D6D7D8",
Expand All @@ -36,15 +36,15 @@
"input.placeholderForeground": "#999999",
"inputOption.activeBackground": "#4466CC33",
"inputOption.activeForeground": "#202020",
"inputOption.activeBorder": "#EEEEEE00",
"inputOption.activeBorder": "#ECEDEEFF",
"inputValidation.errorBackground": "#F9F9F9",
"inputValidation.errorBorder": "#EEEEEE00",
"inputValidation.errorBorder": "#ECEDEEFF",
"inputValidation.errorForeground": "#202020",
"inputValidation.infoBackground": "#F9F9F9",
"inputValidation.infoBorder": "#EEEEEE00",
"inputValidation.infoBorder": "#ECEDEEFF",
"inputValidation.infoForeground": "#202020",
"inputValidation.warningBackground": "#F9F9F9",
"inputValidation.warningBorder": "#EEEEEE00",
"inputValidation.warningBorder": "#ECEDEEFF",
"inputValidation.warningForeground": "#202020",
"scrollbar.shadow": "#F5F6F84D",
"scrollbarSlider.background": "#4466CC33",
Expand All @@ -55,9 +55,9 @@
"progressBar.background": "#666666",
"list.activeSelectionBackground": "#4466CC26",
"list.activeSelectionForeground": "#202020",
"list.inactiveSelectionBackground": "#E9E9E9",
"list.inactiveSelectionBackground": "#EDEDED",
"list.inactiveSelectionForeground": "#202020",
"list.hoverBackground": "#FFFFFF",
"list.hoverBackground": "#F2F2F2",
"list.hoverForeground": "#202020",
"list.dropBackground": "#4466CC1A",
"list.focusBackground": "#4466CC26",
Expand All @@ -70,109 +70,109 @@
"activityBar.background": "#F9F9F9",
"activityBar.foreground": "#202020",
"activityBar.inactiveForeground": "#666666",
"activityBar.border": "#EEEEEE00",
"activityBar.activeBorder": "#EEEEEE00",
"activityBar.border": "#ECEDEEFF",
"activityBar.activeBorder": "#ECEDEEFF",
"activityBar.activeFocusBorder": "#4466CCFF",
"activityBarBadge.background": "#4466CC",
"activityBarBadge.foreground": "#FFFFFF",
"sideBar.background": "#F9F9F9",
"sideBar.foreground": "#202020",
"sideBar.border": "#EEEEEE00",
"sideBar.border": "#ECEDEEFF",
"sideBarTitle.foreground": "#202020",
"sideBarSectionHeader.background": "#F9F9F9",
"sideBarSectionHeader.foreground": "#202020",
"sideBarSectionHeader.border": "#EEEEEE00",
"sideBarSectionHeader.border": "#ECEDEEFF",
"titleBar.activeBackground": "#F9F9F9",
"titleBar.activeForeground": "#424242",
"titleBar.inactiveBackground": "#F9F9F9",
"titleBar.inactiveForeground": "#666666",
"titleBar.border": "#EEEEEE00",
"menubar.selectionBackground": "#E9E9E9",
"titleBar.border": "#ECEDEEFF",
"menubar.selectionBackground": "#EDEDED",
"menubar.selectionForeground": "#202020",
"menu.background": "#FCFCFC",
"menu.foreground": "#202020",
"menu.selectionBackground": "#4466CC26",
"menu.selectionForeground": "#202020",
"menu.separatorBackground": "#F4F4F4",
"menu.border": "#EEEEEE00",
"menu.border": "#ECEDEEFF",
"commandCenter.foreground": "#202020",
"commandCenter.activeForeground": "#202020",
"commandCenter.background": "#F9F9F9",
"commandCenter.activeBackground": "#FFFFFF",
"commandCenter.activeBackground": "#F2F2F2",
"commandCenter.border": "#D6D7D880",
"editor.background": "#FDFDFD",
"editor.foreground": "#202123",
"editorLineNumber.foreground": "#656668",
"editorLineNumber.activeForeground": "#202123",
"editorCursor.foreground": "#202123",
"editor.selectionBackground": "#4466CC26",
"editor.inactiveSelectionBackground": "#4466CC80",
"editor.inactiveSelectionBackground": "#4466CC26",
"editor.selectionHighlightBackground": "#4466CC1A",
"editor.wordHighlightBackground": "#4466CC33",
"editor.wordHighlightStrongBackground": "#4466CC33",
"editor.findMatchBackground": "#4466CC4D",
"editor.findMatchHighlightBackground": "#4466CC26",
"editor.findRangeHighlightBackground": "#E9E9E9",
"editor.hoverHighlightBackground": "#E9E9E9",
"editor.lineHighlightBackground": "#E9E9E9",
"editor.rangeHighlightBackground": "#E9E9E9",
"editor.findRangeHighlightBackground": "#EDEDED",
"editor.hoverHighlightBackground": "#EDEDED",
"editor.lineHighlightBackground": "#EDEDED55",
"editor.rangeHighlightBackground": "#EDEDED",
"editorLink.activeForeground": "#4466CC",
"editorWhitespace.foreground": "#6666664D",
"editorIndentGuide.background": "#F4F4F44D",
"editorIndentGuide.activeBackground": "#F4F4F4",
"editorRuler.foreground": "#F4F4F4",
"editorCodeLens.foreground": "#666666",
"editorBracketMatch.background": "#4466CC55",
"editorBracketMatch.border": "#EEEEEE00",
"editorBracketMatch.border": "#ECEDEEFF",
"editorWidget.background": "#FCFCFC",
"editorWidget.border": "#EEEEEE00",
"editorWidget.border": "#ECEDEEFF",
"editorWidget.foreground": "#202020",
"editorSuggestWidget.background": "#FCFCFC",
"editorSuggestWidget.border": "#EEEEEE00",
"editorSuggestWidget.border": "#ECEDEEFF",
"editorSuggestWidget.foreground": "#202020",
"editorSuggestWidget.highlightForeground": "#202020",
"editorSuggestWidget.selectedBackground": "#4466CC26",
"editorHoverWidget.background": "#FCFCFC",
"editorHoverWidget.border": "#EEEEEE00",
"peekView.border": "#EEEEEE00",
"editorHoverWidget.background": "#FCFCFC55",
"editorHoverWidget.border": "#ECEDEEFF",
"peekView.border": "#ECEDEEFF",
"peekViewEditor.background": "#F9F9F9",
"peekViewEditor.matchHighlightBackground": "#4466CC33",
"peekViewResult.background": "#E9E9E9",
"peekViewResult.background": "#EDEDED",
"peekViewResult.fileForeground": "#202020",
"peekViewResult.lineForeground": "#666666",
"peekViewResult.matchHighlightBackground": "#4466CC33",
"peekViewResult.selectionBackground": "#4466CC26",
"peekViewResult.selectionForeground": "#202020",
"peekViewTitle.background": "#E9E9E9",
"peekViewTitle.background": "#EDEDED",
"peekViewTitleDescription.foreground": "#666666",
"peekViewTitleLabel.foreground": "#202020",
"editorGutter.background": "#FDFDFD",
"editorGutter.addedBackground": "#587c0c",
"editorGutter.deletedBackground": "#ad0707",
"diffEditor.insertedTextBackground": "#587c0c26",
"diffEditor.removedTextBackground": "#ad070726",
"editorOverviewRuler.border": "#EEEEEE00",
"editorOverviewRuler.border": "#ECEDEEFF",
"editorOverviewRuler.findMatchForeground": "#4466CC99",
"editorOverviewRuler.modifiedForeground": "#007acc",
"editorOverviewRuler.addedForeground": "#587c0c",
"editorOverviewRuler.deletedForeground": "#ad0707",
"editorOverviewRuler.errorForeground": "#ad0707",
"editorOverviewRuler.warningForeground": "#667309",
"panel.background": "#F9F9F9",
"panel.border": "#EEEEEE00",
"panel.border": "#ECEDEEFF",
"panelTitle.activeBorder": "#4466CC",
"panelTitle.activeForeground": "#202020",
"panelTitle.inactiveForeground": "#666666",
"statusBar.background": "#F9F9F9",
"statusBar.foreground": "#202020",
"statusBar.border": "#EEEEEE00",
"statusBar.border": "#ECEDEEFF",
"statusBar.focusBorder": "#4466CCFF",
"statusBar.debuggingBackground": "#4466CC",
"statusBar.debuggingForeground": "#FFFFFF",
"statusBar.noFolderBackground": "#F9F9F9",
"statusBar.noFolderForeground": "#202020",
"statusBarItem.activeBackground": "#4466CC",
"statusBarItem.hoverBackground": "#FFFFFF",
"statusBarItem.activeBackground": "#E0E0E0",
"statusBarItem.hoverBackground": "#F2F2F2",
"statusBarItem.focusBorder": "#4466CCFF",
"statusBarItem.prominentBackground": "#4466CC",
"statusBarItem.prominentForeground": "#FFFFFF",
Expand All @@ -181,41 +181,41 @@
"tab.activeForeground": "#202020",
"tab.inactiveBackground": "#F9F9F9",
"tab.inactiveForeground": "#666666",
"tab.border": "#EEEEEE00",
"tab.lastPinnedBorder": "#EEEEEE00",
"tab.border": "#ECEDEEFF",
"tab.lastPinnedBorder": "#ECEDEEFF",
"tab.activeBorder": "#FBFBFD",
"tab.hoverBackground": "#FFFFFF",
"tab.hoverBackground": "#F2F2F2",
"tab.hoverForeground": "#202020",
"tab.unfocusedActiveBackground": "#FDFDFD",
"tab.unfocusedActiveForeground": "#666666",
"tab.unfocusedInactiveBackground": "#F9F9F9",
"tab.unfocusedInactiveForeground": "#BBBBBB",
"editorGroupHeader.tabsBackground": "#F9F9F9",
"editorGroupHeader.tabsBorder": "#EEEEEE00",
"editorGroupHeader.tabsBorder": "#ECEDEEFF",
"breadcrumb.foreground": "#666666",
"breadcrumb.background": "#FDFDFD",
"breadcrumb.focusForeground": "#202020",
"breadcrumb.activeSelectionForeground": "#202020",
"breadcrumbPicker.background": "#FCFCFC",
"notificationCenter.border": "#EEEEEE00",
"notificationCenter.border": "#ECEDEEFF",
"notificationCenterHeader.foreground": "#202020",
"notificationCenterHeader.background": "#E9E9E9",
"notificationToast.border": "#EEEEEE00",
"notificationCenterHeader.background": "#EDEDED",
"notificationToast.border": "#ECEDEEFF",
"notifications.foreground": "#202020",
"notifications.background": "#FCFCFC",
"notifications.border": "#EEEEEE00",
"notifications.border": "#ECEDEEFF",
"notificationLink.foreground": "#4466CC",
"extensionButton.prominentBackground": "#4466CC",
"extensionButton.prominentForeground": "#FFFFFF",
"extensionButton.prominentHoverBackground": "#4F6FCF",
"pickerGroup.border": "#EEEEEE00",
"extensionButton.prominentHoverBackground": "#3E61CA",
"pickerGroup.border": "#ECEDEEFF",
"pickerGroup.foreground": "#202020",
"quickInput.background": "#FCFCFC",
"quickInput.foreground": "#202020",
"quickInputList.focusBackground": "#4466CC26",
"quickInputList.focusForeground": "#202020",
"quickInputList.focusIconForeground": "#202020",
"quickInputList.hoverBackground": "#FAFAFA",
"quickInputList.hoverBackground": "#E7E7E7",
"terminal.selectionBackground": "#4466CC33",
"terminalCursor.foreground": "#202020",
"terminalCursor.background": "#F9F9F9",
Expand Down
Loading
Loading