* implements rich link presentation in chats
* Allows settings to be set by experiments
* Fix rich link CI configuration
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b8949987-7bbf-43c2-a7bb-ee6450ac74c7
---------
Copilot-Session: b8949987-7bbf-43c2-a7bb-ee6450ac74c7
* theme: update agent panel border colors and styles across themes
* theme: update border colors for agents in various themes
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* fix(theme): update agentsPanel.border to transparent
* fix(theme): set agentsPanel.border to transparent
* fix(screenshots): update image links for agent host and user data migration
---------
Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Make the chat input seam structural instead of per-surface offsets
A widget docked above the chat input has a square bottom edge while the
input has rounded top corners, so sitting them flush left gaps at the
corners. Every surface hid this itself by pulling the next one up, which
is why the offset differed everywhere (-8 to +16px) and why five presence
checks were needed to decide whose corners to square.
The offset is a property of the stack, not of any member. This adds one:
producers report what their slot is showing (Empty, Docked or Standalone)
and the stack derives which surfaces continue a run, squaring their top
corners through a CSS custom property.
A scan rather than a CSS sibling selector, because what matters is the
nearest non-empty slot above and `~` matches any of them. Splitting that
across rules ties on specificity, which broke two earlier attempts.
Removes 11 negative margins across 7 stylesheets, a 5-selector `:has()`
block, a 4-selector adjacency block, 4 `!important` adjacency rules and 7
ad-hoc marker classes, plus the dead `chat-input-widgets-container` and
`chat-status-widget` rules. Visibility now follows from the same slot
state, so producers no longer keep it in a second marker class.
Fixes https://github.com/microsoft/vscode/issues/330483
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 75e74c0f-da44-4bf3-ae37-c329ae674109
* Report the input's frame state to the stack instead of reading it back
The notification matched the input's focus ring with `:has()`. The stack is
an ancestor of every surface above the input - notices, todos, artifacts -
so that selector is re-evaluated on any mutation in the subtree where all
of them render, far more often than the state actually changes.
The input now reports focused and working to the stack, so the rules select
that state directly. Focus and progress are tracked in different places, so
each reports its own bit and neither has to know the other's value.
Also narrows the `--chat-input-stack-radius-top` comment: outside a stack a
notice keeps its own rounding, not a full frame - it leaves its bottom edge
open either way.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Split the input state report into one function per fact
`focused` and `working` are tracked in different places - the input part and
the widget - and no caller sets both. Modelling them as an optional pair
meant two `undefined` branches, a guard, and a comment explaining why
partial application is safe, all to support a call that never happens.
Two functions taking a boolean say the same thing structurally: independent
facts with separate owners. The shared `closest` lookup moves to a private
helper.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 75e74c0f-da44-4bf3-ae37-c329ae674109
* style: enhance modern UI tab theming with legacy color support
Co-authored-by: Copilot <copilot@github.com>
* style: enhance modern UI tab theming with legacy color support
* style: reorder imports and enhance tab action background handling
* style: update tab action background handling and improve color customization resolution
* test: add test for deriving inactive tab foreground from legacy active foreground customization
Co-authored-by: Copilot <copilot@github.com>
---------
Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
* Unify above the chat input notifications
* Build notice actions on ActionBar
Addresses PR review feedback: the notice actions were a hand-rolled
div with button semantics, its own click/tap/keydown listeners and its
own hover and focus styling. They are now Action items pushed onto an
ActionBar, so keyboard handling, touch, focus management and theming
come from the shared action infrastructure rather than being
re-implemented here.
The producer's class is passed through the action's cssClass so it
lands on the button itself - what is clicked, focused and styled -
rather than on the housing around it.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3c35355f-4d36-46e5-8d7a-cb0bc7207449
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3c35355f-4d36-46e5-8d7a-cb0bc7207449
Validate Azure node_modules caches against the host platform packages installed by npm. This restores the guard without reintroducing target-architecture overrides in cross-build jobs.
* feat: add modern tab colors and update styles for improved UI theming
Co-authored-by: Copilot <copilot@github.com>
* feat: enhance modern UI with updated tab backgrounds and improved activity indicators
Co-authored-by: Copilot <copilot@github.com>
* feat: add modern activity bar colors and update styles for improved UI theming
Co-authored-by: Copilot <copilot@github.com>
* feat: enhance modern UI with new foreground colors for activity bar and tabs
Co-authored-by: Copilot <copilot@github.com>
* feat: update modern activity bar colors for improved UI consistency
* feat: enhance modern UI theming with updated color definitions and improved tab styles
Co-authored-by: Copilot <copilot@github.com>
* feat: add modern tab action background colors for improved UI theming
Co-authored-by: Copilot <copilot@github.com>
* feat: update modern activity bar colors across themes for improved UI consistency
* feat: enhance modern UI theming with new selected action background for tabs and session view
Co-authored-by: Copilot <copilot@github.com>
* fix: add missing newline at end of sessionBarStyles test file
---------
Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
* Agent Host changes for osortega/agents/ctrl-f-find-widget-support
* chat: address Find review feedback and scope down transcript search
Fix three bounded-work bugs found in review:
- Enforce the global match cap per segment, so two large segments can no
longer expose roughly twice MAX_FIND_MATCHES.
- Count code-block matches toward the highlight cap; previously an
all-code result set left both range arrays empty and rescanned every
match on each repaint.
- Repaint after the debounced recompute. The row rerender lands before
the 200ms pass, so streamed matches were counted but not highlighted.
Scope Find down to content it can actually reveal. Reasoning bodies are
built lazily by ChatCollapsibleContentPart on first expansion and are not
<details> elements, so a match inside collapsed reasoning could be counted
but never revealed. Reasoning is now excluded from the index and the help
text, Find help dialog and SESSIONS.md no longer promise it. The remaining
gaps (a typed expansion API, and extraction for warning/info/confirmation
and other rendered kinds) are documented for a follow-up.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Agent Host changes for osortega/agents/chat-gutter-dots-resize-fix
* Reserve marker room when the fixed dot cap forces sampling
restDotCount skipped the "and more" marker's height whenever every prompt
would fit on its own, but MAX_REST_DOTS can force sampling independently of
the height. 51 prompts in a 444px rail returned 50 dots with no marker
budgeted, and the marker _renderDots then appended pushed the column to
424px against the 420px the CSS allows.
Take the marker-free path only when the fixed cap did not apply, and cover
the boundary in the tests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix CI: hygiene errors and a stale gutter rail assertion
Hygiene: register the gutter rail's new custom properties in
vscode-known-variables.json, and replace a U+2212 minus sign in a CSS
comment with an ASCII hyphen.
Tests: a row under the pointer no longer takes the preview highlight (its
own half lights up instead), so drop that assertion from the dot-mapping
test, which is about the sampled-dot mapping it names. Update the
neighbouring test's wording to match the current behaviour.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Make the editor preference replace Local on every new chat while preserving Claude and Codex selections, and expose the setting as enterprise policy.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Remove extension-host Claude implementation
Make Agent Host the sole Claude sessions implementation and remove the obsolete provider preference settings, extension runtime, SDK dependency, commands, tests, and integration glue.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Remove extension-host Claude smoke tests
Delete smoke cases and commands that target the removed extension-host Claude implementation.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix Agent Host Claude permissions link
Keep the Claude-specific permission documentation link for Agent Host Claude after removing the extension-host implementation.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Agent Host changes for osortega/agents/remove-sticky-header-enable-default
* chat: rename the timeline dock style to gutter
`dock` was not part of VS Code's vocabulary — it usually means panel docking
— and it collided with the ruler rail's own use of "dock" for its evenly
spaced pill layout. VS Code already pairs `gutter` with `overviewRuler` for
exactly this split (see `scm.diffDecorations` and the terminal's shell
integration decorations), and this rail's own docs already described it as
living in the transcript's left gutter.
Rename the `sessions.chatTimeline.display` enum value, the rail class and its
files, and the CSS classes and custom properties to match. The ruler rail's
remaining "dock" wording describes its macOS-dock-style fisheye, not a rail
style, so it stays.
Also drop the `experimental` tag from both timeline settings now that they
are on by default: the badge told users the feature may be unstable and
subject to removal, which no longer holds.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chat: keep the timeline gutter rail to insiders
Sticky scroll is ready to ship on by default everywhere, but the gutter rail
is still being tried out, so gate its default back on quality and restore the
`experimental` tag it warrants. The setting stays available on stable for
anyone who wants to opt in.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Restore theme colors in Modern UI shell
Honor contributed title, activity, and status bar colors while preserving the floating-card hierarchy. Use the title bar color for shell gutters, frame activity and content surfaces consistently, and remove the Modern UI title separator.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Update how modern UI applies themes
* Address Modern UI shell review feedback
Keep inactive title gutters synchronized, correct activity rail sizing at exposed window edges, and refresh status bar edge styling when Modern UI is toggled.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* adding smoke tests and unit tests to pipeline
* making tests parallel
* fixing indentation
* adding test type
* building once and running the tests separately
* creating log and crashes folders
* moving the directory creation
* smoke-flaky: create .build/crashes,logs after checkout, not before
checkout: self (invoked inside product-build-*-compile.yml@self) wipes any
files created earlier in the job on hosted agents, so the previous
mkdir-first placement was silently undone by the time the non-production
artifact publish steps ran. Move the directory-creation step to run after
the compile template (which performs checkout) and mark it
condition: always() so it still runs if compile or a later step fails.
* adding fix for window build failure
* smoke-flaky win32: fix 7z archive/extract bugs
- Quote the wildcard source path in the workspace archive step: unquoted,
PowerShell expands \* against the filesystem before 7z.exe runs, which
overflows the command-line length and corrupts the trailing -xr!.git
switch ("Too short switch / r!").
- Stop sourcing exec.ps1 before extracting repo.zip in the Unit/Integration/
Smoke jobs' extract steps: those jobs use checkout: none, so exec.ps1
(which lives in the repo) does not exist until repo.zip is extracted.
Use a plain $LASTEXITCODE check instead.
* fix(pipelines): use absolute path to exec.ps1 in steps with overridden workingDirectory
The 'Archive packaged app' and 'Archive packaged server' steps set
workingDirectory to $(Agent.BuildDirectory) (the parent of the sources
folder), but still sourced exec.ps1 via a path relative to the sources
root, which only resolves when the working directory is the sources
folder itself. Use an absolute path built from $(Build.SourcesDirectory)
instead.
* kill lingering integration test processes
* removing duplication
* removing duplication
Stamp the locked Copilot runtime and SDK versions into product metadata so the native About dialog can report the exact bundled packages in both source and packaged builds.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* agentHost: update Codex to 0.146.0
Update the packaged Codex runtime and protocol-generation pin together, regenerate the app-server types, and adapt the handwritten integration to the updated schema.
* sessions: add per-session Codex model providers
Expose ChatGPT account state and subscription usage, add provider-qualified Copilot and ChatGPT model inventories, persist selections per session, and route Codex requests through each session's selected provider.
* sessions: simplify provider account usage
* agentHost: fix Codex model provider E2E expectation
Update the packaged Codex runtime and protocol-generation pin together, regenerate the app-server types, and adapt the handwritten integration to the updated schema.
* build: harden targeted validation scripts
Reject validation commands that would otherwise succeed without checking files, support multiple stylelint targets, and report validation scope and elapsed time. Document how to avoid redundant typechecking before compilation.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* build: count files entering hygiene checks
Track requested files only when they reach an actual hygiene checker, deduplicate across checker branches, and cover non-checkable assets.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* build: support targeted ESLint files
Use positional arguments as the lint targets while preserving the existing full-repository behavior when none are provided. This avoids expensive repository-wide traversal for targeted agent validation.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* build: reject unmatched ESLint targets
Fail targeted invocations when a supplied file or glob matches nothing while preserving the legacy full-lint behavior.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>