Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
2d9e484
Switch most remaining extensions to use esbuild
mjbvz Feb 19, 2026
b93c593
Update extensions/ipynb/tsconfig.browser.json
mjbvz Feb 19, 2026
2402f6c
Update extensions/microsoft-authentication/esbuild.mts
mjbvz Feb 19, 2026
3af2059
fix link, remove lightbulb icon
isidorn Feb 20, 2026
7986e4b
fix errors
isidorn Feb 20, 2026
a2860d1
Merge pull request #296546 from microsoft/isidorn/total-weasel
isidorn Feb 20, 2026
5ba9ca4
Add accessible label to workbench progress bar (#296533)
Copilot Feb 20, 2026
ffa43b7
extend chat OS notifications to enable them to play when the window i…
meganrogge Feb 20, 2026
a915fed
modal - support icons and label format (#296542)
bpasero Feb 20, 2026
009cde0
add `chatTip` telemetry (#296564)
meganrogge Feb 20, 2026
9a3a7aa
Move mode badge and timestamp to bottom row in session list items (#2…
daviddossett Feb 20, 2026
4eb8f16
Update chat input: hide attachments bar, move/restyle context window …
daviddossett Feb 20, 2026
f433494
Refer to ripgrep thats already included in the node modules. (#296335)
dileepyavan Feb 20, 2026
7c127d9
Git - wire-up git repository state (#296563)
lszomoru Feb 20, 2026
2751fb4
adds component explorer
hediet Feb 20, 2026
424ea5b
fixes ci
hediet Feb 20, 2026
54abd99
fixes lockfile
hediet Feb 20, 2026
669def0
update
hediet Feb 20, 2026
a74a86e
fix: rm stale lockfile for build/vite in CI (platform-specific bindings)
hediet Feb 20, 2026
1cc58eb
update screenshot baselines from CI
hediet Feb 20, 2026
c25dec9
Removes animated progress bar
hediet Feb 20, 2026
5719a9a
fixes ci
hediet Feb 20, 2026
e8f4c46
updates screenshot-test.yml
hediet Feb 20, 2026
a9c01a0
updates github action check
hediet Feb 20, 2026
f186967
Browser: Make toolbar icons align (#296454)
jruales Feb 20, 2026
daddf4f
Feat: Show branch picker in core (#296559)
sandy081 Feb 20, 2026
3458c32
Fix model picker in welcome view
osortega Feb 20, 2026
0057411
Hide ChatModelStore.acquire()
mjbvz Feb 20, 2026
73e3dbe
sessions - adopt modal editor support from core (#296585)
bpasero Feb 20, 2026
15914a3
sessions - show title actions only in main window (#296592)
bpasero Feb 20, 2026
4b6f798
Merge pull request #296593 from microsoft/osortega/level-earwig
osortega Feb 20, 2026
f4e07fd
Merge pull request #296340 from microsoft/dev/mjbvz/esbuild-most-rema…
mjbvz Feb 20, 2026
2df0c0e
do not show add models and handle anonymous users (#296603)
sandy081 Feb 20, 2026
bf4419c
Merge pull request #296595 from mjbvz/dev/mjbvz/administrative-gecko
mjbvz Feb 20, 2026
35c9204
Fix configure tools code lens action in prompt files (#296584)
pwang347 Feb 20, 2026
dea3ecf
Sessions - select the active branch in the branch picker (#296606)
lszomoru Feb 20, 2026
80eaba3
Bump xterm for kitty image updates (#296577)
anthonykim1 Feb 20, 2026
a3dddab
Fix welcome view sessions grid layout after item height change (#296600)
daviddossett Feb 20, 2026
8801c3f
Use markdown icons for prompt markdown files (#296602)
pwang347 Feb 20, 2026
dac39ff
don't play chat request sounds on `/agents` entered in chat input (#2…
meganrogge Feb 20, 2026
6955692
Raise keybinding precedence for chat question carousel and confirmati…
Copilot Feb 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
1 change: 1 addition & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ function f(x: number, y: string): void { }
- Do not duplicate code. Always look for existing utility functions, helpers, or patterns in the codebase before implementing new functionality. Reuse and extend existing code whenever possible.
- You MUST deal with disposables by registering them immediately after creation for later disposal. Use helpers such as `DisposableStore`, `MutableDisposable` or `DisposableMap`. Do NOT register a disposable to the containing class if the object is created within a method that is called repeadedly to avoid leaks. Instead, return a `IDisposable` from such method and let the caller register it.
- You MUST NOT use storage keys of another component only to make changes to that component. You MUST come up with proper API to change another component.
- Use `IEditorService` to open editors instead of `IEditorGroupsService.activeGroup.openEditor` to ensure that the editor opening logic is properly followed and to avoid bypassing important features such as `revealIfOpened` or `preserveFocus`.

## Learnings
- Minimize the amount of assertions in tests. Prefer one snapshot-style `assert.deepStrictEqual` over multiple precise assertions, as they are much more difficult to understand and to update.
3 changes: 1 addition & 2 deletions .github/skills/agent-sessions-layout/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ When proposing or implementing changes, follow these rules from the spec:
| `sessions/browser/style.css` | Layout-specific styles |
| `sessions/browser/parts/` | Agent session part implementations |
| `sessions/browser/parts/titlebarPart.ts` | Titlebar part, MainTitlebarPart, AuxiliaryTitlebarPart, TitleService |
| `sessions/browser/parts/editorModal.ts` | Editor modal overlay |
| `sessions/browser/parts/sidebarPart.ts` | Sidebar part (with footer) |
| `sessions/browser/parts/chatBarPart.ts` | Chat Bar part |
| `sessions/browser/widget/` | Agent sessions chat widget |
Expand All @@ -76,5 +75,5 @@ After modifying layout code:
1. Verify the build compiles without errors via the `VS Code - Build` task
2. Ensure the grid structure matches the spec's visual representation
3. Confirm part visibility toggling works correctly (show/hide/maximize)
4. Test the editor modal opens/closes properly on editor events
4. Test that editors open in the `ModalEditorPart` overlay and that it closes properly
5. Verify sidebar footer renders with account widget
5 changes: 2 additions & 3 deletions .github/skills/sessions/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,6 @@ src/vs/sessions/
│ ├── auxiliaryBarPart.ts # Auxiliary Bar (with run script dropdown)
│ ├── panelPart.ts # Panel (terminal, output, etc.)
│ ├── projectBarPart.ts # Project bar (folder entries)
│ ├── editorModal.ts # Editor modal overlay
│ ├── agentSessionsChatInputPart.ts # Chat input part adapter
│ ├── agentSessionsChatWelcomePart.ts # Welcome view (mascot + target buttons + pickers)
│ └── media/ # Part CSS files
Expand Down Expand Up @@ -134,13 +133,13 @@ Use the `agent-sessions-layout` skill for detailed guidance on the layout. Key p
| Chat Bar | Visible | Primary chat widget |
| Auxiliary Bar | Visible | Changes view, etc. |
| Panel | Hidden | Terminal, output |
| Editor | Hidden | Modal overlay, auto-shows on editor open |
| Editor | Hidden | Main part hidden; editors open via `MODAL_GROUP` into `ModalEditorPart` |

**Not included:** Activity Bar, Status Bar, Banner.

### 4.3 Editor Modal

Editors appear as modal overlays (80% of workbench, min 400×300, max 1200×900). The modal auto-shows when an editor opens and auto-hides when all editors close. Click backdrop, press Escape, or click X to dismiss.
The main editor part is hidden (`display:none`). All editors open via `MODAL_GROUP` into the standard `ModalEditorPart` overlay (created on-demand by `EditorParts.createModalEditorPart`). The sessions configuration sets `workbench.editor.useModal` to `'on'`, which causes `findGroup()` to redirect all editor opens to the modal. Click backdrop or press Escape to dismiss.

## 5. Chat Widget

Expand Down
87 changes: 87 additions & 0 deletions .github/skills/update-screenshots/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
name: update-screenshots
description: Download screenshot baselines from the latest CI run and commit them. Use when asked to update, accept, or refresh component screenshot baselines from CI, or after the screenshot-test GitHub Action reports differences. This skill should be run as a subagent.
---

# Update Component Screenshots from CI

When asked to update, accept, or refresh screenshot baselines from CI — or when the `Screenshot Tests` GitHub Action has failed with screenshot differences — follow this procedure to download the CI-generated screenshots and commit them as the new baselines.

## Why CI Screenshots?

Screenshots captured locally may differ from CI due to platform differences (fonts, rendering, DPI). The CI (Linux, ubuntu-latest) is the source of truth. This skill downloads the CI-produced screenshots and commits them as baselines.

## Prerequisites

- The `gh` CLI must be authenticated (`gh auth status`).
- The `Screenshot Tests` GitHub Action must have run and produced a `screenshot-diff` artifact.

## Procedure

### 1. Find the latest screenshot artifact

If the user provides a specific run ID or PR number, use that. Otherwise, find the latest run:

```bash
# For a specific PR:
gh run list --workflow screenshot-test.yml --branch <branch> --limit 5 --json databaseId,status,conclusion,headBranch

# For the current branch:
gh run list --workflow screenshot-test.yml --branch $(git branch --show-current) --limit 5 --json databaseId,status,conclusion
```

Pick the most recent run that has a `screenshot-diff` artifact (runs where screenshots matched won't have one).

### 2. Download the artifact

```bash
gh run download <run-id> --name screenshot-diff --dir .tmp/screenshot-diff
```

This downloads:
- `test/componentFixtures/.screenshots/current/` — the CI-captured screenshots
- `test/componentFixtures/.screenshots/report.json` — structured diff report
- `test/componentFixtures/.screenshots/report.md` — human-readable diff report

### 3. Review the changes

Show the user what changed by reading the markdown report:

```bash
cat .tmp/screenshot-diff/test/componentFixtures/.screenshots/report.md
```

### 4. Copy CI screenshots to baseline

```bash
# Remove old baselines and replace with CI screenshots
rm -rf test/componentFixtures/.screenshots/baseline/
cp -r .tmp/screenshot-diff/test/componentFixtures/.screenshots/current/ test/componentFixtures/.screenshots/baseline/
```

### 5. Clean up

```bash
rm -rf .tmp/screenshot-diff
```

### 6. Stage and commit

```bash
git add test/componentFixtures/.screenshots/baseline/
git commit -m "update screenshot baselines from CI"
```

### 7. Verify

Confirm the baselines are updated by listing the files:

```bash
git diff --stat HEAD~1
```

## Notes

- If no `screenshot-diff` artifact exists, the screenshots already match the baselines — no update needed.
- The `--filter` option on the CLI can be used to selectively accept only some fixtures if needed.
- After committing updated baselines, the next CI run should pass the screenshot comparison.
125 changes: 125 additions & 0 deletions .github/workflows/screenshot-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: Screenshot Tests

on:
push:
branches: [main]
pull_request:
branches:
- main
- 'release/*'

permissions:
contents: read
pull-requests: write
checks: write

concurrency:
group: screenshots-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true

jobs:
screenshots:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: .nvmrc

- name: Install dependencies
run: npm ci --ignore-scripts
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Install build/vite dependencies
run: rm -f package-lock.json && npm install
working-directory: build/vite

- name: Install Playwright Chromium
run: npx playwright install chromium

- name: Capture screenshots
run: npx component-explorer screenshot --project ./test/componentFixtures/component-explorer.json

- name: Compare screenshots
id: compare
run: |
npx component-explorer screenshot:compare \
--project ./test/componentFixtures \
--report ./test/componentFixtures/.screenshots/report.json \
--report-markdown ./test/componentFixtures/.screenshots/report.md
continue-on-error: true

- name: Upload screenshot report
if: steps.compare.outcome == 'failure'
uses: actions/upload-artifact@v4
with:
name: screenshot-diff
path: |
test/componentFixtures/.screenshots/current/
test/componentFixtures/.screenshots/report.json
test/componentFixtures/.screenshots/report.md

- name: Set check title
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
REPORT="test/componentFixtures/.screenshots/report.json"
if [ -f "$REPORT" ]; then
CHANGED=$(node -e "const r = require('./$REPORT'); console.log(r.summary.added + r.summary.removed + r.summary.changed)")
TITLE="${CHANGED} screenshots changed"
else
TITLE="Screenshots match"
fi

SHA="${{ github.event.pull_request.head.sha || github.sha }}"
CHECK_RUN_ID=$(gh api "repos/${{ github.repository }}/commits/$SHA/check-runs" \
--jq '.check_runs[] | select(.name == "screenshots") | .id')

if [ -n "$CHECK_RUN_ID" ]; then
gh api "repos/${{ github.repository }}/check-runs/$CHECK_RUN_ID" \
-X PATCH --input - <<EOF
{"output":{"title":"$TITLE","summary":"$TITLE"}}
EOF
fi

- name: Post summary
run: |
if [ -f test/componentFixtures/.screenshots/report.md ]; then
cat test/componentFixtures/.screenshots/report.md >> $GITHUB_STEP_SUMMARY
else
echo "## Screenshots ✅" >> $GITHUB_STEP_SUMMARY
echo "No visual changes detected." >> $GITHUB_STEP_SUMMARY
fi

# - name: Post PR comment
# if: github.event_name == 'pull_request'
# env:
# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# run: |
# COMMENT_MARKER="<!-- screenshot-report -->"
# BODY="$COMMENT_MARKER"$'\n'
#
# if [ -f test/componentFixtures/.screenshots/report.md ]; then
# BODY+=$(cat test/componentFixtures/.screenshots/report.md)
# BODY+=$'\n\n'
# BODY+="📦 [Download the \`screenshot-diff\` artifact](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) to review images."
# else
# BODY+="## Screenshots ✅"$'\n\n'
# BODY+="No visual changes detected."
# fi
#
# # Find existing comment
# EXISTING=$(gh api "repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" \
# --paginate --jq ".[] | select(.body | startswith(\"$COMMENT_MARKER\")) | .id" | head -1)
#
# if [ -n "$EXISTING" ]; then
# gh api "repos/${{ github.repository }}/issues/comments/$EXISTING" -X PATCH -f body="$BODY"
# else
# gh pr comment "${{ github.event.pull_request.number }}" --body "$BODY"
# fi
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,5 @@ product.overrides.json
.vscode-test
vscode-telemetry-docs/
test-output.json
test/componentFixtures/.screenshots/*
!test/componentFixtures/.screenshots/baseline/
Loading
Loading