Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
7b62f31
show manageModels action in editor window agent host model picker
vritant24 Jul 6, 2026
9d65f09
Add defaultMaxResults parameter to FindTextInFilesTool options (#324733)
dbaeumer Jul 7, 2026
4700614
[cherry-pick] Revert placeholder foreground colors in input fields fo…
vs-code-engineering[bot] Jul 7, 2026
03687d9
Refactor gettingStarted.css to use CSS variables (#324729)
mrleemurray Jul 7, 2026
4e6a20c
Source turn status pills from the session output stream (#324719)
benibenj Jul 7, 2026
dd766a8
Refactor font size and weight tokens for consistency (#324738)
mrleemurray Jul 7, 2026
af65f4c
NES: report per-section token counts in telemetry and log context (#3…
ulugbekna Jul 7, 2026
2ee9d8e
Unstick a pinned tab dragged to the start of the unpinned row (#324734)
dobbydobap Jul 7, 2026
9f5fa1e
Merge pull request #324737 from microsoft/cherry-pick/324735
Giuspepe Jul 7, 2026
f2972e6
Refactor CSS for bookmarks and getting started components (#324747)
mrleemurray Jul 7, 2026
135caaa
Agents - show blocked sessions widget regardless of sidebar and hide …
benibenj Jul 7, 2026
87b6a1a
feat(chat): Enhance chat session management and user preferences (#32…
DonJayamanne Jul 7, 2026
6a321ce
sessions: default CI checks pane to at most a third of changes view h…
benibenj Jul 7, 2026
3d1ff13
Refactor agent sessions header actions layout (#324761)
mrleemurray Jul 7, 2026
9ec3f79
sessions: hide changes and workspace pills in quick chat session head…
sandy081 Jul 7, 2026
b08e380
fix: make sure register handler when ipc emitter add listener (#323663)
theanarkh Jul 7, 2026
6a2163b
sessions: persist workspaceless tag in agent host session cache (#324…
sandy081 Jul 7, 2026
2368071
Merge pull request #324768 from microsoft/agents/manage-models-agent-…
vritant24 Jul 7, 2026
4fbcfed
Agents - add Open File action to session changes diff editor (#324771)
sandy081 Jul 7, 2026
1c2dde9
Use AnimatedCounterWidget for the changes pill above chat input (#324…
benibenj Jul 7, 2026
caf9a8d
Voice Mode: warn when microphone is hardware-muted (#324776)
meganrogge Jul 7, 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
52 changes: 34 additions & 18 deletions .github/instructions/design-tokens.instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,16 +76,32 @@ of a shorthand is checked independently (`0 5px → 0 6px`). `auto`, `%`,

## Font size — `font-size`

Generic UI chrome (fixed px):
Generic UI ramp — pair a **size** token with a **weight** token; "Strong"
reuses the matching size token + `fontWeight.semiBold`, **never** a separate
"strong" size:

| px | Variable |
|----|----------|
| 13 | `--vscode-bodyFontSize` (base) |
| 12 | `--vscode-bodyFontSize-small` |
| 11 | `--vscode-bodyFontSize-xSmall` |

Agents window ramp (`src/vs/sessions/**`) — pair size with a weight token,
**never** add a separate "strong" size:
| px | Size var | Weight |
|----|----------|--------|
| 26 | `--vscode-fontSize-heading1` | semiBold |
| 18 | `--vscode-fontSize-heading2` | semiBold |
| 13 | `--vscode-fontSize-heading3` | semiBold |
| 13 | `--vscode-fontSize-body1` | regular |
| 11 | `--vscode-fontSize-body2` | regular |
| 12 | `--vscode-fontSize-label1` | regular |
| 11 | `--vscode-fontSize-label2` | regular |
| 10 | `--vscode-fontSize-label3` | regular |

**Deprecated** — the legacy `--vscode-bodyFontSize*` tokens are deprecated. Use
the generic ramp above instead:

| Deprecated | px | Use instead |
|------------|----|-------------|
| `--vscode-bodyFontSize` | 13 | `--vscode-fontSize-body1` |
| `--vscode-bodyFontSize-small` | 12 | `--vscode-fontSize-label1` |
| `--vscode-bodyFontSize-xSmall` | 11 | `--vscode-fontSize-body2` |

Agents window ramp (`src/vs/sessions/**`) — identical values, `agents-`-prefixed
(pair size with a weight token, **never** add a separate "strong" size):

| px | Size var | Weight |
|----|----------|--------|
Expand All @@ -105,26 +121,26 @@ is no medium (500). "Strong" = same size token + `semiBold`. See

## Font weight — `font-weight`

The agents window uses a **two-weight ramp** — there are no other weights.
Pair every text style with one of these:
Both the generic and agents ramps use a **two-weight ramp** — there are no other
weights. Pair every text style with one of these:

| weight | Variable | Use |
|--------|----------|-----|
| 400 | `--vscode-agents-fontWeight-regular` | body, labels, metadata |
| 600 | `--vscode-agents-fontWeight-semiBold` | headings, "strong" emphasis |
| weight | Generic var | Agents var | Use |
|--------|-------------|------------|-----|
| 400 | `--vscode-fontWeight-regular` | `--vscode-agents-fontWeight-regular` | body, labels, metadata |
| 600 | `--vscode-fontWeight-semiBold` | `--vscode-agents-fontWeight-semiBold` | headings, "strong" emphasis |

- **No medium (500).** `font-weight: 500` is **off the ramp** — snap it to
`semiBold` (600). The same goes for `700`/`bold` and any other numeric weight:
round to the nearer of 400/600.
- **"Strong" is not a separate size.** A "Body 1 Strong" / "Label 2 Strong"
style reuses the matching `--vscode-agents-fontSize-*` token paired with
`semiBold`. Never introduce a separate strong *size* token.
style reuses the matching `--vscode-fontSize-*` (or `--vscode-agents-fontSize-*`)
token paired with `semiBold`. Never introduce a separate strong *size* token.
- `normal` ≡ 400 → `regular`. **Leave untouched:** `inherit`, `lighter`,
`bolder`, and any `var()`/`calc()` expression. Preserve `!important`.

```css
/* avoid */ font-weight: 500; /* not on the 400/600 ramp */
/* prefer */ font-weight: var(--vscode-agents-fontWeight-semiBold);
/* prefer */ font-weight: var(--vscode-fontWeight-semiBold);
```

## Codicon size — icon `font-size`
Expand Down
34 changes: 26 additions & 8 deletions .github/skills/ux-css-layout/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -297,11 +297,28 @@ scale value, **ties round up** (`5px → 6px`, `3px → 4px`, `1px → 2px`,

### Font size & weight

Generic UI chrome (fixed px): `13 → --vscode-bodyFontSize` (base),
`12 → --vscode-bodyFontSize-small`, `11 → --vscode-bodyFontSize-xSmall`.
Generic UI ramp — pair a **size** token with a **weight** token (mirrors the
agents ramp; "Strong" = matching size token + `semiBold`, never a separate size):

Agents window (`src/vs/sessions/**`) ramp — pair a **size** token with a
**weight** token:
| px | Size var | Weight |
|----|----------|--------|
| 26 | `--vscode-fontSize-heading1` | semiBold |
| 18 | `--vscode-fontSize-heading2` | semiBold |
| 13 | `--vscode-fontSize-heading3` | semiBold |
| 13 | `--vscode-fontSize-body1` | regular |
| 11 | `--vscode-fontSize-body2` | regular |
| 12 | `--vscode-fontSize-label1` | regular |
| 11 | `--vscode-fontSize-label2` | regular |
| 10 | `--vscode-fontSize-label3` | regular |

Generic weights: `--vscode-fontWeight-regular` (400),
`--vscode-fontWeight-semiBold` (600).

**Deprecated** — `--vscode-bodyFontSize` (13) → `--vscode-fontSize-body1`,
`--vscode-bodyFontSize-small` (12) → `--vscode-fontSize-label1`,
`--vscode-bodyFontSize-xSmall` (11) → `--vscode-fontSize-body2`.

Agents window (`src/vs/sessions/**`) ramp — identical values, `agents-`-prefixed:

| px | Size var | Weight |
|----|----------|--------|
Expand All @@ -314,14 +331,15 @@ Agents window (`src/vs/sessions/**`) ramp — pair a **size** token with a
| 11 | `--vscode-agents-fontSize-label2` | regular |
| 10 | `--vscode-agents-fontSize-label3` | regular |

The agents weight ramp is **two weights only**:
`--vscode-agents-fontWeight-regular` (400) and
`--vscode-agents-fontWeight-semiBold` (600).
Both weight ramps are **two weights only**: `regular` (400) and
`semiBold` (600) — generic `--vscode-fontWeight-*`, agents
`--vscode-agents-fontWeight-*`.

- **No medium (500).** `font-weight: 500` is off the ramp — snap to `semiBold`.
Likewise `700`/`bold` → round to the nearer of 400/600.
- **"Strong" is not a separate size.** "Body 1 Strong" = the matching
`--vscode-agents-fontSize-*` size token + `semiBold`. Never add a strong *size*.
`--vscode-fontSize-*` (or `--vscode-agents-fontSize-*`) size token + `semiBold`.
Never add a strong *size*.
- `normal` ≡ 400 → `regular`. Leave `inherit`, `lighter`, `bolder`,
`var()`/`calc()` untouched.

Expand Down
4 changes: 2 additions & 2 deletions .github/skills/ux-theming/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,8 @@ Reviewers will always flag hardcoded colors, shadows, sizes that should use them
| `border: 1px solid …` (width) | `var(--vscode-strokeThickness)` for the 1px width |
| `border-radius: 6px` | `var(--vscode-cornerRadius-medium)` (radius ramp) |
| `padding: 8px 12px` (off-scale) | spacing ramp (`--vscode-spacing-size*`) |
| `font-size: 14px` (arbitrary) | size ramp (`--vscode-bodyFontSize`, agents `--vscode-agents-fontSize-*`) |
| `font-weight: 500` | agents `--vscode-agents-fontWeight-semiBold` (no 500) |
| `font-size: 14px` (arbitrary) | size ramp (`--vscode-fontSize-*`, agents `--vscode-agents-fontSize-*`) |
| `font-weight: 500` | `--vscode-fontWeight-semiBold` (agents `--vscode-agents-fontWeight-semiBold`; no 500) |
| codicon `font-size: 14px` | `--vscode-codiconFontSize` (16) / `-compact` (12) |

**Rule:** If a value relates to color, shadow, or border — it must come from a CSS variable or registered color token. The only exception is `0` (zero) values and purely structural measurements like `100%`.
Expand Down
10 changes: 10 additions & 0 deletions build/lib/stylelint/vscode-known-variables.json
Original file line number Diff line number Diff line change
Expand Up @@ -1113,6 +1113,16 @@
"--vscode-cornerRadius-small",
"--vscode-cornerRadius-xLarge",
"--vscode-cornerRadius-xSmall",
"--vscode-fontSize-body1",
"--vscode-fontSize-body2",
"--vscode-fontSize-heading1",
"--vscode-fontSize-heading2",
"--vscode-fontSize-heading3",
"--vscode-fontSize-label1",
"--vscode-fontSize-label2",
"--vscode-fontSize-label3",
"--vscode-fontWeight-regular",
"--vscode-fontWeight-semiBold",
"--vscode-keyboard-height",
"--vscode-spacing-sizeNone",
"--vscode-spacing-size20",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1141,7 +1141,20 @@ export class TelemetrySender implements IDisposable {
"promptLineCount": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Number of lines in the prompt", "isMeasurement": true },
"promptCharCount": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Number of characters in the prompt", "isMeasurement": true },
"nDiffsInPrompt": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Number of diffs included in the prompt", "isMeasurement": true },
"diffTokensInPrompt": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Number of tokens consumed by diffs in the prompt", "isMeasurement": true },
"promptSectionTokensSystemPrompt": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the system prompt section", "isMeasurement": true, "owner": "ulugbekna" },
"promptSectionTokensRecentlyViewed": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the recently-viewed code snippets section of the user prompt", "isMeasurement": true, "owner": "ulugbekna" },
"promptSubsectionTokensRecentlyViewedFiles": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the recently-viewed/edited files (from xtab history) subsection of the recently-viewed section; does not sum exactly to promptSectionTokensRecentlyViewed because of the section tags and inter-snippet newline glue", "isMeasurement": true, "owner": "ulugbekna" },
"promptSubsectionTokensLanguageContext": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the language-context snippets subsection of the recently-viewed section (Snippet-kind items from the language server; distinct from the related-information traits section)", "isMeasurement": true, "owner": "ulugbekna" },
"promptSubsectionTokensNeighborFiles": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the neighbor (similar) files subsection of the recently-viewed section", "isMeasurement": true, "owner": "ulugbekna" },
"promptSectionTokensCurrentFile": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the current-file section of the user prompt", "isMeasurement": true, "owner": "ulugbekna" },
"promptSectionTokensLintErrors": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the lint-errors section of the user prompt", "isMeasurement": true, "owner": "ulugbekna" },
"promptSectionTokensEditHistory": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the rendered edit-diff-history section of the user prompt (including its section tags)", "isMeasurement": true, "owner": "ulugbekna" },
"promptSectionTokensAreaAroundCodeToEdit": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the area-around-code-to-edit section of the user prompt (0 when absent for the strategy)", "isMeasurement": true, "owner": "ulugbekna" },
"promptSectionTokensCursorLocation": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the cursor-location section of the user prompt (0 when absent for the strategy)", "isMeasurement": true, "owner": "ulugbekna" },
"promptSectionTokensRelatedInformation": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the related-information (language traits) section of the user prompt", "isMeasurement": true, "owner": "ulugbekna" },
"promptSectionTokensPostScript": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the post-script section of the user prompt", "isMeasurement": true, "owner": "ulugbekna" },
"userPromptOverheadTokens": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of user-prompt formatting glue not attributed to a section (joining newlines, backtick fences, trim); userPromptTotalTokens minus the sum of the section counts", "isMeasurement": true, "owner": "ulugbekna" },
"userPromptTotalTokens": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Approximate (char/4) token count of the whole trimmed user prompt (summary total, not a section)", "isMeasurement": true, "owner": "ulugbekna" },
"nNeighborSnippetsComputed": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Total number of neighbor (similar files) snippets computed before budget filtering", "isMeasurement": true },
"nNeighborSnippetsInPrompt": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Number of neighbor (similar files) snippets actually included in the prompt", "isMeasurement": true },
"neighborSnippetIndicesInPrompt": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "JSON-encoded array of original input indices (ascending) of neighbor snippets included in the prompt" },
Expand Down Expand Up @@ -1268,7 +1281,20 @@ export class TelemetrySender implements IDisposable {
nextCursorLineDistance: telemetry.nextCursorPrediction?.nextCursorLineDistance,
xtabUserHappinessScore,
nDiffsInPrompt: telemetry.nDiffsInPrompt,
diffTokensInPrompt: telemetry.diffTokensInPrompt,
promptSectionTokensSystemPrompt: telemetry.promptSectionTokens?.systemPrompt,
promptSectionTokensRecentlyViewed: telemetry.promptSectionTokens?.recentlyViewed,
promptSubsectionTokensRecentlyViewedFiles: telemetry.promptSectionTokens?.recentlyViewedSubsections.recentlyViewedFiles,
promptSubsectionTokensLanguageContext: telemetry.promptSectionTokens?.recentlyViewedSubsections.languageContext,
promptSubsectionTokensNeighborFiles: telemetry.promptSectionTokens?.recentlyViewedSubsections.neighborFiles,
promptSectionTokensCurrentFile: telemetry.promptSectionTokens?.currentFile,
promptSectionTokensLintErrors: telemetry.promptSectionTokens?.lintErrors,
promptSectionTokensEditHistory: telemetry.promptSectionTokens?.editHistory,
promptSectionTokensAreaAroundCodeToEdit: telemetry.promptSectionTokens?.areaAroundCodeToEdit,
promptSectionTokensCursorLocation: telemetry.promptSectionTokens?.cursorLocation,
promptSectionTokensRelatedInformation: telemetry.promptSectionTokens?.relatedInformation,
promptSectionTokensPostScript: telemetry.promptSectionTokens?.postScript,
userPromptOverheadTokens: telemetry.promptSectionTokens?.overhead,
userPromptTotalTokens: telemetry.promptSectionTokens?.userPromptTotal,
nNeighborSnippetsComputed: telemetry.nNeighborSnippetsComputed,
nNeighborSnippetsInPrompt: telemetry.nNeighborSnippetsInPrompt,
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ describe('TelemetrySender', () => {
cursorJumpPrompt: undefined,
cursorJumpResponse: undefined,
nDiffsInPrompt: undefined,
diffTokensInPrompt: undefined,
promptSectionTokens: undefined,
nNeighborSnippetsComputed: undefined,
nNeighborSnippetsInPrompt: undefined,
neighborSnippetIndicesInPrompt: undefined,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ interface IFindTextInFilesToolParams {
isRegexp?: boolean;
includePattern?: string;
maxResults?: number;
defaultMaxResults?: number;
/** Whether to include files that would normally be ignored according to .gitignore, other ignore files and `files.exclude` and `search.exclude` settings. */
includeIgnoredFiles?: boolean;
}
Expand Down Expand Up @@ -100,7 +101,7 @@ export class FindTextInFilesTool implements ICopilotTool<IFindTextInFilesToolPar

checkCancellation(token);
const askedForTooManyResults = options.input.maxResults && options.input.maxResults > maxResultsCap;
const maxResults = Math.min(options.input.maxResults ?? defaultMaxResults, maxResultsCap);
const maxResults = Math.min(options.input.maxResults ?? options.input.defaultMaxResults ?? defaultMaxResults, maxResultsCap);
const isRegExp = options.input.isRegexp ?? true;
const queryIsValidRegex = this.isValidRegex(options.input.query);
const includeIgnoredFiles = options.input.includeIgnoredFiles ?? false;
Expand Down Expand Up @@ -448,7 +449,7 @@ Then if you want to include those files you can call the tool again by setting "
}

return {
maxResults: mode === CopilotToolMode.FullContext ? this.getMaxResultsCap() : this.getDefaultMaxResults(),
defaultMaxResults: mode === CopilotToolMode.FullContext ? this.getMaxResultsCap() : this.getDefaultMaxResults(),
...input,
includePattern,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ current-file clip:
neighborSnippetsResult, // unchanged telemetry payload
editDiffHistory,
nDiffsInPrompt,
diffTokensInPrompt,
subsections, // recentlyViewed/langCtx/neighbor strings, for per-subsection token reporting
finalSurplus, // end-of-loop surplus, reused by the current-file clip
}
```
Expand Down
Loading
Loading