Commit Graph
1854 Commits
Author SHA1 Message Date
Megan RoggeGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>meganrogge
6201f0a052 Make dictation enterprise managed (#327340)
* Make dictation enterprise managed

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 18f58fa9-d1dc-472f-8b3c-a59f64d8ba2a

* Add DictationEnabled to policyData.jsonc

Co-authored-by: meganrogge <29464607+meganrogge@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: meganrogge <29464607+meganrogge@users.noreply.github.com>
Copilot-Session: 18f58fa9-d1dc-472f-8b3c-a59f64d8ba2a
2026-07-24 19:40:22 +00:00
Connor PeetandCopilot 885d08ef56 sessions: register side chat translations
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-24 10:51:58 -07:00
Josh SpicerandGitHub 95307914be Improve managed settings policy diagnostics (#327332)
* Improve managed settings diagnostics

* Fix local managed settings diagnostics routing
2026-07-24 10:44:12 -07:00
Giuseppe CianciandGitHub 687caa0a3a agentHost: support OpenAI subscriptions in Codex (#327290)
* Codex: support OpenAI subscription account switching

Add shared account selection UI and agent-host protocol support for switching Codex between GitHub Copilot and OpenAI authentication. Restart connections safely on source changes, preserve account state across views, and override persisted model providers when resuming sessions after a switch.

* Codex: harden subscription account switching

Reuse existing ChatGPT credentials before starting OAuth, preload optional Copilot auth for source changes, and serve the Codex model catalog probe through the CAPI proxy. Add regression coverage for account activation, protected resources, and proxy startup.

* Codex: add harness settings editor

Add shared Codex account and global configuration management, and expose account, personality, auto-review, and config controls through a modal editor in both Agents and editor windows.

* Codex: move harness settings into customizations

Expose account selection, personality, auto-review policy, and config access through a shared Codex Settings section in Agent Customizations for both editor and Agents windows.

* Codex: wait for account login cancellation

Keep the account controls disabled until the App Server has cancelled login and refreshed account state, then allow another sign-in attempt.

* drop auth and sign in flow, only wire up through agent host setting, make customization settings widget more generic

* Reuse Agent Host root config for harness settings

Remove the custom account and global configuration protocol extensions. Publish provider-backed Codex settings through RootState.config and namespaced root metadata, route edits through root/configChanged, keep config.toml values out of agent-host persistence, and reuse the shared settings widget for local and remote hosts.

* Codex: reset threads when switching providers

Refresh provider-backed configuration after authentication becomes available and preserve those values during root config replacement. Recreate Codex threads when moving between Copilot and OpenAI because persisted rollout content is provider-bound.

* Codex: remove unrelated test changes

* Codex: address settings integration review feedback

Seed Codex provider configuration before the initial root snapshot, move the shared settings widget into the workbench layer, and harden provider switching and configuration writes against races and connection loss.

* Codex: initialize contributed sections in editor test

* Codex: update exported policy description
2026-07-24 16:39:06 +00:00
Elijah KingandGitHub 050e15b1f4 chat: segmented voice/dictation toggle with hold-to-talk and listen-button styles (#327072) 2026-07-23 16:01:14 -07:00
07745f1d76 Style overrides: Consolidate CSS selectors and unify surface color tokens (#326948)
* perf: consolidate style-override CSS selectors

Merge the duplicate .tab.sticky-compact geometry blocks in tabs.css and collapse the focus selector lists in keyboardFocusOnly.css with :is() (specificity preserved) to reduce the number of matched selector entries.

* style: update surface color tokens and unify font weights across components

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
2026-07-22 15:26:28 +00:00
Martin AeschlimannandGitHub 3fa380ff09 Revert 326678 and 326718 (#326769)
* Revert "Chat dictation: always use Nemotron model, remove model setting (#326718)"

This reverts commit 6d02468e2c.

* Revert "Dictation: migrate on-device runtime to Foundry Local streaming ASR (#326678)"

This reverts commit 6b3ff3c7f0.
2026-07-21 08:52:50 +00:00
648d169d92 Bump github/copilot 1.0.72 (#326704)
* Bump github/copilot 1.0.72

* need to exclude webview

* Try skipping notification/tools/list_changed

* Capture tool list changes in agent host e2e snapshot

* Filter machine-dependent tools/list_changed notification from AHP snapshots

* Add glob patterns for Copilot Win32 built-in plugins in gulpfile tasks

* Update glob patterns for Copilot Win32 built-in plugins in gulpfile tasks

---------

Co-authored-by: Don Jayamanne <don.jayamanne@outlook.com>
2026-07-21 17:36:26 +10:00
Megan RoggeandGitHub 6b3ff3c7f0 Dictation: migrate on-device runtime to Foundry Local streaming ASR (#326678) 2026-07-20 18:29:05 +00:00
03c4db773e Check Agent Host dynamic dependencies (#326084)
Include statically named dynamic imports in the remote Agent Host dependency graph while excluding exact dev-only and test-only imports.

(Written by Copilot)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-18 23:38:51 +00:00
277c4d29e6 sessions: align floating panel sashes (#326407)
* sessions: align floating panel sashes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* sessions: explain floating sash styling

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-18 02:19:29 +00:00
Vijay UpadyaandGitHub e1b183798f Add enterprise allowedMcpServers / deniedMcpServers governance policies for MCP servers (#326226)
* Add enterprise allowedMcpServers / deniedMcpServers governance policies for MCP servers

* Feedback updates

* add tests
2026-07-17 02:48:18 +00:00
789a0c793d Add open/close animations to standard button menus + fix menu positioning (#326050)
* Agent Host changes for agents/sidebar-menu-motion-implementation

* Address PR feedback

* Fix some stuff

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-16 14:46:49 -04:00
b7d0a0bb1c Fix remote Agent Host dependency packaging (#326019)
* Fix remote Agent Host dependencies

Include fs-copyfile in REH packages and verify that startup imports are declared in the remote manifest.

(Written by Copilot)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Smoke test packaged remote Agent Host

Launch the packaged Agent Host with its bundled Node after native REH builds and require it to bind a WebSocket listener.

(Written by Copilot)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-15 23:08:06 +00:00
Christof MartiandGitHub ca2e4407da Use @vscode/os-proxy-resolver for additional info (#325916) 2026-07-15 21:42:31 +00:00
a077843f88 Add focus outline color to suggest widget for improved accessibility (#326005)
Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
2026-07-15 17:15:03 +00:00
Zhichao Li dbc333bef4 Regenerate policy data with otel referencedSettings 2026-07-14 15:21:11 -07:00
Dirk BäumerandGitHub 7e4e91cab4 Adapt to TypeScript 7 (#325757)
* Adapt TypeScript 7

* Ensure that we always call TS7 from spawnTsgo

* Fix package lock file

* tsc - tsc6

* More tsc -> tsc6

* More TSGO conversion

* More moves from tsgo -> tsc

* Fix tsgo resolving in extension folder

* Call TS7 compiler directly

* Update package-lock.json

* Remove tsc:version again
2026-07-14 12:34:04 +02:00
4e6997ae07 build: support platform-specific built-in extensions from GitHub releases (#324206)
* Support platform-specific built-in extensions from GitHub releases

Adds support for downloading platform-specific built-in extension VSIXs
from GitHub releases, keyed by marketplace target platform. Also downloads
the latest pre-release assets for insiders builds, ignoring the pinned
version and checksum.

- extensionTarget.ts: resolve build target + release asset name
- builtInExtensions.ts: platformSpecific checksum map + insiders detection
- extensions.ts/fetch.ts: fromGithub asset selection + prerelease support
- CI: platform-aware cache key and target env plumbing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Insiders downloads the latest release instead of latest pre-release

Insiders builds should always be on the newest published release, so the
GitHub download now resolves the most recently published release (including
pre-releases) rather than filtering to pre-releases only.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address code review feedback for platform-specific extensions

- Sort latest releases by published_at instead of created_at
- Log a warning when skipping checksum validation in latest mode
- Document that platform-specific extensions always download from GitHub
- Skip gracefully on unsupported platforms; keep a clear error for a
  known target missing from the platformSpecific map

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address CCR feedback: restrict targets and harden helpers

- Restrict getExtensionTarget to the supported marketplace targets, returning
  undefined for unsupported OS/arch (e.g. win32-ia32, linux-riscv64) so callers
  skip gracefully instead of failing with a missing-asset error
- Remove the bogus ia32 -> x86 mapping (no win32-x86 target exists)
- Validate the target format in getPlatformSpecificAssetName and throw a clear
  error for malformed targets
- Guard the latest-release sort against NaN timestamps (missing published_at
  sorts to the end deterministically)
- Update tests accordingly

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Align asset naming with VS Code convention and support product.overrides.json

The platform-specific extension this feature targets (typescript-go's
TypeScriptTeam.native-preview) publishes VSIX assets named
<name>-<target>.vsix using the raw marketplace target platform, not the
node-vsce-sign osx/win/arm aliasing. Update getPlatformSpecificAssetName to
the standard <name>-<target>.vsix convention and validate against the
supported target set.

- fetch.ts: in latest mode, select the newest published release that actually
  contains the requested asset, so releases shipping only other artifacts
  (e.g. tarballs) without a matching VSIX are skipped
- builtInExtensions.ts: merge product.overrides.json (gitignored, local) so
  overridden built-in extensions are downloaded, mirroring bootstrap-meta
- Update tests for the new naming convention

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Detect extensions project by path segment, not substring

ESBuildTranspiler decided CJS vs ESM output via configFilePath.includes('extensions').
When the repo is checked out (e.g. as a git worktree) into a folder whose name
merely contains the substring 'extensions', the 'src' project was wrongly treated
as an extension and transpiled to CJS, breaking top-level await in src/cli.ts,
src/server-cli.ts and src/server-main.ts. Match an 'extensions' path segment instead.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove product.overrides.json support from built-in extensions download

Revert the download script to read product.json directly, per review feedback.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-14 10:26:58 +00:00
Megan RoggeandGitHub 6ba8d81120 Bring voice mode to the Agents (Sessions) window (#325138) 2026-07-09 21:56:22 +00:00
078671da10 Prompt timeline: reduce scroll jitter and polish the rail (selection, spacing, performance) (#325041)
* Prompt timeline: reduce ruler scroll jitter with adaptive height estimate

The ruler positioned marks from the chat list's height model, where every
un-rendered row is guessed at a flat 200px default. Real turns vary widely
(short prompts, tall/variable responses), so as rows render and get measured
the list's tops snap around and the marks visibly drift while scrolling a
fresh session.

Compute the marks' positions from our own per-item height model instead:
measured rows use their real currentRenderedHeight; un-measured rows use a
running average of measured heights of the same kind (prompt vs response,
seeded with priors). Marks land near their final position immediately and
barely move, converging exactly with the list once every row is measured.

Keep the viewport thumb in the list's own scrollTop/scrollHeight space so it
stays aligned with the native scrollbar (the marks' estimated space would
separate from it while heights settle and look like a second scrollbar). Add
a short 'glide' transition, enabled one frame after each structural rebuild,
so any residual drift animates smoothly without new marks sliding in from the
top; disabled under prefers-reduced-motion.

Also improve the keyboard focus indicator: grow the focused mark to a rounded
pill hugged by the focus ring instead of a bare outline on the 2px bar.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: polish rail selection, spacing, and scroll performance

Builds on the scroll-jitter work with a round of UX and performance fixes:

- Selection: replace the glowy box-shadow/backing-lane with a crisp border on
  the pill, and give keyboard focus a distinct dashed ring so a focused mark is
  never mistaken for a second selection. There is only ever one selected mark
  (it follows the viewport and click-reveal).
- No !important: the workbench outlines any focused [tabindex=0] button, which
  boxed the mark; suppress it by qualifying our rule through the marks container
  to win on specificity instead.
- Scrollbar: reserve a gutter (derived from the real scrollbar width) so the
  marks sit left of the native scrollbar and it stays grabbable.
- Spacing: reserve room on the transcript's right edge so message content keeps
  a guaranteed minimum gap from the marks, derived from the rail width via CSS
  variables rather than a magic number.
- De-cluster marks: prompts that sit close in content space could let the 24px
  hit targets overlap; space adjacent mark centres apart (new pure
  promptTimelineLayout.ts, unit-tested).
- Performance: the rail relayout read clientHeight on every scroll event (a
  forced reflow -> ~19% of active CPU while scrolling). Cache the height
  (refreshed only on resize) and coalesce scroll relayouts to one per animation
  frame; a re-profile shows relayout self-time drop from ~968ms to ~2ms.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: define the scrollbar gutter in CSS instead of JS

Review feedback: the gutter was set from JS (DEFAULT_SCROLLBAR_SIZE + gap), but the
list scrollbar is a stable 10px and the rail's other geometry already lives as CSS
variables on .prompt-timeline-host. Move it there as --prompt-timeline-scrollbar-gutter
and drop the runtime setProperty, the constant, and the base import. Not related to the
focus-outline specificity fix.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: simplify spaceMarkCenters even-distribution branch

Review feedback: the even-distribution branch is only reached when
(n - 1) * minGap > hi - lo, and hi > lo is already guaranteed, so n >= 2 there.
The n === 1 guards were dead code; remove them. Single-mark inputs go through the
forward/backward clamp pass, which the unit tests still cover.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 23:09:12 +00:00
RoboandGitHub 913d5cccc1 feat: restore asar for node_modules (#324897) 2026-07-08 13:10:17 +00:00
RoboandGitHub 926982696e Revert "feat: restore asar for node_modules" (#324875)
* Revert "fix: builtin resolution of electron modules via asar hook (#324861)"

This reverts commit 5928613aa1.

* Revert "fix: restrict asar esm hook resolution to app resources (#324851)"

This reverts commit 89bc3825bd.

* Revert "feat: restore asar for node_modules (#324084)"

This reverts commit c9dda3b36a.
2026-07-08 07:16:29 +00:00
04c9ab57fb Prompt timeline rail for the Agents window (#324131)
* Add prompt timeline rail to the Agents window

Introduce a right-edge "prompt timeline" rail in the Agents window that
lets users scan and jump between the prompts they have sent in a chat
session, adapted from GitHub's "jump to your messages" affordance.

- Self-contained contrib under src/vs/sessions/contrib/promptTimeline,
  attached per-widget via IChatWidgetContrib (no vs/workbench changes).
- Recency-bucketed ticks (pure, unit-tested budgetBucketPrompts) capped
  so each tick keeps a >=24px hit target (WCAG 2.5.8).
- Dense marks at rest that expand on hover/focus, with green/red per-turn
  diff magnitude and a solid-blue active mark.
- Interactive hover card: prompt text, clickable +/- diff stats that open
  the per-request diff, and per-file drill-down rows.
- Per-request diffs via provider-agnostic IChatResponseFileChangesService
  (agent-host server-computed turn changeset) with editing-session
  fallback; diff sides are probed so missing checkpoint blobs render as a
  pure add/delete instead of crashing the multi-diff editor.
- Keyboard-first commands: Go to Next/Previous Prompt, Go to Prompt...
  (quick pick), Review Changes for Prompt, with ARIA announcements.
- Gated behind the new sessions.promptTimeline.enabled setting and
  ChatContextKeys.enabled; rail is created/disposed reactively.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: quiet gray-dense rail with single-mark accordion

Replace the whole-rail expand-on-engage behavior with a per-mark
accordion. The rail now stays quiet, gray and dense at all times; only
the mark under the pointer (or keyboard focus) expands to a >=24px pill
and reveals its green/red diff, so the rail no longer becomes a column
of slim pills with large gaps when interacted with.

- CSS: drop the `.engaged` whole-rail slot expansion and the transform
  fisheye; expand only `:hover`/`:focus-visible` marks (8px -> 24px slot,
  fat pill, diff colors). Active mark stays solid blue in every state.
- Rail: remove the fisheye magnify, the engaged-state tracking, and the
  magnitude width buckets; capacity now reserves headroom for a single
  expanded mark over the dense 8px rhythm, so more prompts fit.
- Drop the now-unused --tick-scale/--tick-scale-y custom properties.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: open per-file diff inside the multi-diff, revealed at that file

Clicking a file row in the hover card previously opened a standalone
single-file diff. Route it through the same multi-file diff we already
build for "Review Changes", passing viewState.revealData so it opens
revealed at the clicked file. Per-file and whole-prompt review now share
one multi-diff experience (and open in the modal editor when enabled),
reusing the existing MultiDiffEditorInput without any new UI.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: show per-turn diffs against the frozen after-turn snapshot

The per-prompt diff was rendering before-turn vs the live working file, so
it showed the combined changes of all later turns. The per-turn changeset
already carries a frozen "after" snapshot; surface it and diff against it.

- Add optional `modifiedContentURI` to IEditSessionEntryDiff: the frozen
  after-state RHS content, distinct from `modifiedURI` (the live file used
  for identity / go-to-file). Opt-in, so existing consumers (e.g. the chat
  "Changed N files" summary) keep their current behavior unchanged.
- Populate it in AgentHostResponseFileChangesProvider from the changeset's
  after-content; extend its test to assert the mapping.
- PromptTimelineModel now diffs originalURI (frozen before) against the
  frozen after snapshot, so review shows only that turn's changes, while
  go-to-file still opens the live working file.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: add an overview-ruler style selectable by setting

Introduce a second rail style and let users choose via the new
sessions.promptTimeline.style setting ('compact' | 'overview').

- Extract IPromptTimelineRail as the seam the contrib consumes, and a
  shared PromptTimelineCard (hover preview) used by both styles.
- Rename the existing rail to PromptTimelinePillRail (dense pills).
- Add PromptTimelineRulerRail: the session compressed into the rail like
  the editor overview ruler — proportional marks at their transcript
  scroll positions, a scrollbar-slider you-are-here thumb, one green
  "changed code" signal (editorOverviewRuler.addedForeground), focusBorder
  active, >=24px hit targets. Detail stays in the shared hover card.
- Model exposes getScrollLayout()/onDidChangeScrollLayout for proportional
  positions (per-request offsets via currentRenderedHeight + scrollTop).
- Contrib picks the rail class reactively and reuses the enablement swap
  pattern, wiring setScrollLayout only for rails that support it.

All colors come from real theme tokens. Validated: typecheck, eslint,
layers, hygiene, unit tests (12 passing).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: position overview-ruler marks from the list layout model

The overview-ruler rail placed each mark by accumulating chat items'
`currentRenderedHeight`, which the virtualized tree only sets for rows it has
actually rendered. Off-screen prompts reported `undefined` (treated as 0), so
every not-yet-rendered mark collapsed onto the same position and only spread
out as the user scrolled and rows rendered.

Read each prompt's top from the list's layout height model instead, the same
virtualization-safe source the scrollbar uses (all items have a height via the
delegate's `currentRenderedHeight ?? defaultElementHeight`). Threaded a
read-only accessor through the layers, all in the list's content-pixel space so
the viewport thumb stays aligned:

- AbstractTree.getElementTop(location): absolute top (works off-screen), sibling
  of getRelativeTop.
- ChatListWidget.getElementTop / ChatWidget.getElementTop + ChatWidget.scrollHeight.
- PromptTimelineModel.getScrollLayout() and _updateActive() now use these instead
  of accumulating currentRenderedHeight.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: color ruler marks by the turn's add/remove split

Ruler marks were a single green "edited" signal, so a delete-heavy turn still
showed green. Render the mark as a two-tone bar instead (a green added segment
and a red removed segment sized by flexGrow from the turn's diff stat), reusing
the pill rail's seg-add/seg-del pattern. Only the non-zero side is appended, so
a pure-add turn is fully green and a pure-delete turn fully red, and a 1px
min-width keeps the minority color visible on a lopsided split. Segments go
transparent while the mark is active so the focusBorder you-are-here color wins.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: fall back to the live file when a turn snapshot is unreadable

Per-turn review diffed the frozen before/after turn-checkpoint snapshots so only
that turn's changes show. But those checkpoint blobs can be absent (an added
file's original, or a pruned/restored session where whole turn checkpoints are
gone). When both sides were unreadable every item was dropped and reviewChanges
opened nothing at all.

_readableSides now still prefers the frozen snapshots but falls back to the live
working file for the modified side when the checkpoint blob is unreadable, so
review always opens with the best available fidelity. An unreadable side is
still dropped so the file renders as a clean add/delete instead of crashing the
diff editor.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: drop the pill style, keep only the overview ruler

The rail shipped with two selectable styles (dense pills vs overview ruler)
behind sessions.promptTimeline.style. We're standardizing on the overview-ruler
UX, so remove the pill style and the setting entirely (the on/off
sessions.promptTimeline.enabled setting stays).

- Delete promptTimelinePillRail.ts and the PROMPT_TIMELINE_STYLE_SETTING /
  PromptTimelineStyle enum.
- The contribution always builds the ruler rail; drop the style-based swap, the
  capacity->display-budget wiring, and the optional setScrollLayout indirection
  (now required on the interface).
- Model no longer tracks a dynamic display budget; ticks bucket against the
  constant MAX_TICKS (still caps very long sessions).
- Remove the pill-only CSS; the overflow rule now hides the ruler marks.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: address review feedback on grouped-tick diffs and read probes

Two fixes from a council review:

- getRequestFiles: when a grouped tick edits the same file in more than one
  prompt, advance the merged entry's diffModifiedURI to the later prompt's
  after-snapshot (keeping the earliest originalURI) so the opened multi-diff
  spans the whole tick instead of only the first edit.
- _canRead: probe availability with readFile(resource, { length: 1 }) instead of
  reading whole (potentially large) file contents just to test whether a diff
  side is readable.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: refresh comments left over from earlier iterations

Comment-only cleanup after removing the pill style and the display-budget
mechanism: drop the stale "or budget", "(like the pill rail)", and "visual
density" references so the docs match the single overview-ruler implementation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: gate the enabled setting behind an experiment

Put sessions.promptTimeline.enabled behind the experimentation service via the
`experiment: { mode: 'startup' }` property (the sanctioned way for core
TS-registered settings; the registry auto-adds the onExP tag). Default is now
false so the rail is off until the experiment (or the user) turns it on.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: address PR review feedback and fix class-field init order

Review fixes:
- Remove the redundant GoToNext/GoToPrevious commands: they duplicated and
  collided with the built-in chat nextUserPrompt/previousUserPrompt keybindings
  (same chord, weight, when). Drop the two actions, their command ids,
  contrib.navigate(), and model.getSiblingTick(). GoToPrompt and ReviewChanges
  stay.
- Fix the active-mark fallback: when scrolled above the oldest prompt, highlight
  the oldest tick (ticks.at(0)), not the newest (ticks.at(-1)).
- Replace the getComputedStyle probe + unreverted host `position` mutation with a
  lifecycle-scoped `.prompt-timeline-host` class removed on teardown.
- Give the overview-ruler toolbar a proper keyboard model: aria-orientation,
  roving tabindex (a single Tab stop) and Arrow/Home/End navigation between marks.

Also assign `_sessionResource` in the constructor instead of a field initializer:
it reads `this.widget`, which under useDefineForClassFields is not yet assigned
when field initializers run (fixes the define-class-fields-check / TS2729).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: stop showing the unreliable per-prompt timestamp

Agent-host sessions don't record per-turn timestamps; the transcript is
reconstructed via ChatModel.addRequest(), which stamps Date.now(), so every
prompt showed ~the current time. Since the real send times aren't available to
recover, drop the absolute time from the hover card and the "Go to Prompt"
picker. Grouped ticks still show their prompt count; the prompt text and diff
stats (both reliable) are unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prompt timeline: act on PR review (remove ReviewChanges action; rename modifiedContentURI)

- Remove the ReviewPromptChangesAction command: per-prompt review is already
  available from the hover card, so the palette/keyboard entry point was
  redundant. Drops the command id and the now-unused contrib.getActiveTick() /
  contrib.reviewChanges() bridge (model.reviewChanges stays, wired to the card).
- Rename IEditSessionEntryDiff.modifiedContentURI -> modifiedSnapshotURI: it's the
  frozen after-turn snapshot content, and "snapshot" reads clearer next to
  modifiedURI (the live file) than "content".
- Clarify in comments that this field is distinct from the agent-host checkpoint-
  ref readability fix (#323932): that made the snapshot blobs readable; this
  carries which snapshot to diff against so a per-turn review shows only that
  turn's changes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-07 22:17:09 +00:00
6ed31a3c8f Add validation for deprecated design tokens (#324782)
feat(stylelint): add validation for deprecated design tokens

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
2026-07-07 17:20:47 +00:00
dd766a81fe Refactor font size and weight tokens for consistency (#324738)
* Add font size and weight variables to theme sizes

Co-authored-by: Copilot <copilot@github.com>

* Refactor font size and weight tokens in design and UX skills documentation; deprecate legacy tokens

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
2026-07-07 12:20:40 +00:00
c9dda3b36a feat: restore asar for node_modules (#324084)
* feat: restore node_modules bundled into asar

* fix: store node_modules at top level inside asar archive

* Revert "fix: store node_modules at top level inside asar archive"

This reverts commit 4747aa5e375cc1fe49b8eb510dd1acec1fd6a581.

* fix: pack node_modules into asar

* fix: read copilot/ripgrep natives from node_modules.asar.unpacked

* fix: load node-context modules and native binaries from ASAR

- bootstrap-esm: resolve bare specifiers via package self-reference so
  Node applies the package's real `exports`/`main` and ESM conditions.
  The previous CommonJS `require.resolve()` picked the `require`
  condition and loaded the CJS entry of dual CJS/ESM packages (e.g.
  playwright-core), which did not expose their named ESM exports.

- amdX: in `_nodeJSLoadScript`, read module files with the ASAR-aware
  `require('fs')` instead of `import('fs')`, which the resolution hook
  maps to the ASAR-unaware `original-fs` and therefore cannot read
  files inside the archive (e.g. @vscode/iconv-lite-umd).

- agentHost commandAutoApprover: load the tree-sitter `.wasm` files
  from node_modules.asar.unpacked in built apps (node_modules in dev).

- agentHost copilotAgent: resolve the @github/copilot-<platform> CLI
  and the @microsoft/mxc-sdk sandbox binaries from
  node_modules.asar.unpacked in built apps, and unpack
  @microsoft/mxc-sdk/bin so those executables can be spawned.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: resolve ASAR modules relative to the archive root

Two follow-up fixes for ASAR support:

- bootstrap-esm: resolve packages inside node_modules.asar with relative
  specifiers (require.resolve("./<pkg>/package.json") and "./<spec>")
  instead of bare specifiers. The archive directory is named
  node_modules.asar, so a bare-specifier resolution walks for a
  node_modules directory that does not exist and fails. This broke every
  native module imported from main.js in the packaged app
  (@vscode/spdlog, @vscode/sqlite3, native-keymap, @vscode/deviceid,
  @vscode/policy-watcher), preventing startup.

- create-universal-app: pass `singleArchFiles` so the universal merger
  allows files that are unique to a single arch inside the merged
  node_modules.asar (the @github/copilot-<arch> platform package and the
  arch-specific copilot/ripgrep binaries). These paths are ASAR-internal
  (top level, no node_modules prefix); without the allowlist the merge
  aborts with "Detected unique file ... not covered by allowList rule".

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: resolve sandbox runtime and Windows CJS lookups with ASAR

* fix: resolve ESM modules from the importer's own node_modules

* fix: unpack node-pty package.json

* fix: resolve node-pty binaries from unpacked asar in Copilot shim

* fix: resolve Copilot native binaries from node_modules.asar.unpacked

* fix: universal build for mxc

* fix: load tree-sitter wasm from node_modules on web

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-07 07:39:48 +00:00
Dmitriy VasyuraandGitHub 0e294574fb Streamline update mode configuration and handling (#323206)
Enables changing update mode without restart, allowing policy updates to cancel an in-progress update.
2026-07-02 11:51:31 -07:00
5a980fc4aa sessions: animate input banner border while an action is running (#323857)
* sessions: animate input banner border while an action is running

The CI checks and comments input banners in the Agents window now show an
animated "border beam" while an async action is running, mirroring the chat
input's in-flight border. This is primarily for the CI "Fix Checks" action,
which spends a noticeable amount of time fetching check annotations before
submitting the prompt.

- SessionInputBannerWidget: action run() may return a promise; while it is
  pending the banner gets a `.working` class and its buttons are disabled. The
  animation is only shown after a 50ms delay so fast actions don't flicker.
- CSS: added the comet/glow ::before/::after rings (padding + inverted mask
  trick) driven by a spinning conic gradient, respecting reduced-motion.
- Color matches the chat input working-border token for comments banners, and
  the orange accent (same as the primary button) for CI banners.
- Fix Checks / Address Comments await their work; Reveal Checks stays
  fire-and-forget. Added a CIFailuresLoading screenshot fixture.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* sessions: address input banner loading review feedback

- Disable banner buttons immediately while an action is pending; only the
  animated border is delayed by 50ms to avoid flicker.
- Make the click handler explicitly fire-and-forget and swallow action errors
  inside _runAction so it can never produce an unhandled rejection.
- Type _executeCommand cleanly as Promise<void> (await + try/catch) instead of
  returning the unknown-typed executeCommand result.
- Expose SessionInputBannerWidget.setWorking so the CIFailuresLoading fixture
  reflects the real disabled-button state, not just the .working class.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* build: register session input banner CSS variables for hygiene

The animated banner border introduced new CSS custom properties that must be
listed in build/lib/stylelint/vscode-known-variables.json, otherwise the
hygiene 'Unknown variable' check fails.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-01 13:17:14 +00:00
041ae8b0c9 feat(automations): add foundation — types, storage, scheduler, leader election (#323745)
* feat(automations): add foundation — types, storage service, scheduler, leader election

Introduces the Automations subsystem core:
- IAutomation types and IAutomationSchedule (interval-based: manual/hourly/daily/weekly)
- DST-safe computeNextRunAt scheduling logic
- IAutomationService with persistent JSON ledger (StorageScope.APPLICATION)
- Optimistic concurrency via revision counter for cross-window safety
- Leader election to ensure single scheduler instance across windows
- AutomationScheduler: periodic tick loop checking due automations
- Feature gate: chat.automations.enabled setting mirrored to context key
- Unit tests for scheduling logic

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address Copilot Code Review feedback on PR 1

- Add _unsupportedSchema guard to recordRunStart and updateRun
- Localize CRASH_RECOVERY_REASON string via nls.localize()
- Move imports above registerSingleton call in contribution file
- Fix test comment referencing wrong helper name (buildLocalDate -> localDate)

* fix: address CCR round 2 — schema guards, telemetry cleanup, scope fix

- Add _unsupportedSchema guard to markStaleRunsFailed and advanceNextRunAt
- Replace boolean telemetry flags with actual enum values (permissionLevel, isolationMode)
- Remove hasProviderId, hasSessionTypeId, hasModelId, hasMode, hasPermissionLevel flags
- Add scope: ConfigurationScope.MACHINE to runTimeoutMinutes setting

* fix: gate scheduler construction on chat.automations.enabled

AutomationSchedulerCore (and its leader election heartbeat/storage
writes) are now only constructed when the feature setting is enabled.
Uses MutableDisposable for clean teardown on runtime toggle.

Addresses CCR feedback: avoid 30s heartbeat timer + storage writes
when the feature is disabled.

* fix: isolate per-automation errors in dispatch loop

Wrap advanceNextRunAt + runOneWithTimeout in try/catch so a failure
in one automation does not abort dispatch of remaining due automations.

* fix: register automations path in i18n resources

Adds vs/sessions/contrib/automations to the translation resources
so nls.localize calls pass the eslint translation-remind rule.

* fix: validate enum fields at write boundary and harden persist()

- Normalize permissionLevel/isolationMode in createAutomation and
  mergeAutomation: reject unknown values to keep persisted data and
  GDPR-classified telemetry low-cardinality.
- Wrap persist() storage read and write in try/catch so storage
  failures degrade gracefully instead of breaking the scheduler.

* fix: scheduler to Eventually phase, simplify persist(), document serial dispatch

- Move scheduler registration from AfterRestored to Eventually —
  background concern that doesn't need to block workbench restore.
- Remove re-read-before-write in persist() — refreshFromStorage via
  onDidChangeValue already handles cross-window sync. Eliminates
  redundant JSON.parse on every mutation and the misleading optimistic
  concurrency check that overwrote anyway.
- Document that _pendingRuns serializes dispatch intentionally.

* style: remove em dashes and obscure acronyms from comments

Replace all em dashes with periods or semicolons. Remove TOCTOU
acronym. Replace multiplication sign with plain x.

* Signing commit

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-30 16:38:35 -07:00
4b6f5e55bb chore: bump electron@42.5.0 (#321629)
* chore: bump electron@42.4.0

* chore: apply temp dir workaround for short paths

* chore: use 24.15.x for CI node

* chore: update nodejs build

* chore: bump electron@42.5.0

* fix: unblock playwright install on node 24.17

Node 24.16+ made Readable pause()/resume() a no-op on destroyed streams
which makes yauzl 2.x / extract-zip 2.x and older playwright extraction
hang forever.

- extensions/copilot: add "yauzl": "^3.3.1" override (was missed by #318682)
  so electron and @vscode/vsce no longer resolve the broken yauzl 2.10, fixing the
  hung `npm ci` in the Copilot and Extract chat-lib pipelines.
- extensions/copilot: bump electron ^39.8.5 -> ^42.5.0 so its install
  script uses the native @electron-internal/extract-zip instead of extract-zip.
- bump @playwright/test ^1.56.1 -> ^1.61.1 so `playwright install`
  uses the fixed extractor, unblocking the "Download Electron and
  Playwright" step in all electron test pipelines.

* chore: update build

* agentHost: fix macOS sandbox smoke sentinel parsing

On macOS CI, the AgentHost sandbox smoke test resolves the shell to
/bin/sh, which uses the sentinel-based completion path. In that path, the
parser could consume the echoed sentinel command text
(`<<<COPILOT_SENTINEL_..._EXIT_$?>>>`) before the real numeric marker
arrived, causing a false `Exit code: -1` failure even though the command
later completed successfully.

Harden the sentinel parser to ignore echoed/non-numeric sentinel text
and use the latest complete numeric marker instead. Also force the
macOS AgentHost sandbox smoke test to use /bin/sh and assert that in the
suite log so local runs exercise the same path as CI.

Adds a regression test for echoed sentinel command text.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: update screenshot baseline after playwright bump

* chore: bump distro

* chore: fix typecheck

* chore: bump distro

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-29 13:53:48 +00:00
884913d065 build: avoid per-section Electron re-download in PR test runs (#323341)
The GitHub Actions PR test workflows run integration/smoke tests out of
sources, so each test section launches scripts/code.bat, which runs
build/lib/preLaunch.ts. Unlike the Azure Pipelines product builds, the
GitHub workflows did not set VSCODE_SKIP_PRELAUNCH, so preLaunch ran on
every section and getElectron() unconditionally deleted and re-downloaded
.build/electron each time. On Windows this races with file locks held by
the just-exited Electron process and intermittently fails the whole job
with the bare 'The system cannot find the path specified.' error.

- Set VSCODE_SKIP_PRELAUNCH=1 on the unit/integration/remote test steps of
  the win32, linux and darwin PR workflows, matching Azure Pipelines (the
  workflows already prepare node_modules, out, built-in extensions and
  Electron in dedicated steps before the tests run).
- Make getElectron() version-aware: skip the destructive re-download when
  the installed Electron already matches the expected version, falling back
  to a download on any detection failure.
- Make scripts/code.bat fail fast with a clear message when preLaunch.ts
  fails instead of falling through to launch a missing executable.
- Retry rimraf on EBUSY/EPERM (Windows file-lock codes), not just ENOTEMPTY.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-29 08:44:22 +00:00
a68095a294 Simplify agent sandbox settings (#323224)
* Simplify agent sandbox settings

* updates

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* updates

* Updating policyData.json using using export-policy-data

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-28 20:57:14 +00:00
Zhichao Li 0ce1f55d29 fix: regenerate policy data to match fixture-based export
The checked-in policyData.jsonc was generated with the Copilot extension
loaded, which injected referencedSettings linking the OTel extension
settings to the core CopilotOtel* policies. The PolicyExport integration
test regenerates using the test fixture distro with no user extensions, so
those referencedSettings are absent. Regenerate in an isolated environment
to match the fixture-based export.
2026-06-26 22:15:11 -07:00
Zhichao Li bb524011b6 feat: deliver managed OTel headers to the Copilot Chat extension 2026-06-26 16:02:53 -07:00
Zhichao Li fce8c4fea1 feat: deliver managed OTel resourceAttributes to both surfaces 2026-06-26 15:54:59 -07:00
Zhichao Li ee15deed1c feat: deliver managed OTel serviceName to both surfaces 2026-06-26 15:44:01 -07:00
Zhichao Li 401a8ca8f3 build: link otel.protocol reference in policy catalog 2026-06-26 13:38:09 -07:00
Zhichao Li 7f142afb26 build: export CopilotOtelOtlpProtocol policy to catalog 2026-06-26 13:21:29 -07:00
Zhichao Li a3930b873e build: export OTel managed-settings policies to policy catalog 2026-06-26 11:42:40 -07:00
Benjamin Christopher SimmondsandGitHub 263f339cfc agents: enhance contrast agent feedback widget 6ce216a8 (#323040)
Agent Host changes for agents/enhance-contrast-agent-feedback-widget-6ce216a8
2026-06-26 10:22:29 +02:00
Anthony KimandGitHub 8a9cd3dd36 Bump Copilot CLI package to 1.0.65 (#322747)
* Bump Copilot CLI package to stable 1.0.64

* Try to bump to 1.0.65 instead

* Remove stale Copilot sdk/worker materialization for 1.0.65

* Update Debian amd64 deps after excluding Copilot native executable

* Remove stale RPM x64 libstdc++ deps after Copilot CLI 1.0.65 packaging

* Prune Copilot SEA executable before CI packaging

* Exclude Copilot SEA executable from packaging stream

* SDK should be 1.0.4
2026-06-25 12:03:54 -07:00
bf6124c49c Gate Claude3PIntegration behind editor preview policy (#322851)
* Gate Claude3PIntegration behind editor preview policy

Flip ownership of the `Claude3PIntegration` enterprise policy so it can
honor the account-side editor preview-features flag.

Previously the policy was owned by the copilot-chat extension setting
`github.copilot.chat.claudeAgent.enabled` via the distro `product.json`
`extensionConfigurationPolicy` block. Because `product.json` is pure JSON
it cannot carry a `value(policyData)` callback, so the policy only
responded to OS/MDM admin policy and never honored
`chat_preview_features_enabled` (sourced from the Copilot token's
`editor_preview_features`). Codex works because its core setting owns
`Codex3PIntegration` in code with a value callback.

Now the in-code core setting `chat.agentHost.claudeAgent.enabled` owns
`Claude3PIntegration` with the preview-features value callback, and the
extension setting attaches via a `policyReference` declared from
`product.json`. To express that, an `extensionConfigurationPolicy` entry
can now be either form:

- the current owner/"parent" syntax (full `IPolicy`: name, category,
  minimumVersion, description), or
- a reference: `{ "policyReference": { "name": "<owner>" } }`, mirroring
  the in-code `policyReference` configuration field.

`configurationExtensionPoint` and the policy exporter detect the
`policyReference` key to route entries to `.policy` vs `.policyReference`;
the exporter links reference entries into the owner's `referencedSettings`
and skips type validation for settings not registered in the headless
export process.

Regenerates `policyData.jsonc` and updates the export test fixture.

Requires the companion change in microsoft/vscode-distro that turns the
claude entry into a `policyReference`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Bump distro to pick up Claude3PIntegration policy reference

Update the distro pin to 7abf39b86c07d094722a4b3ec9f37e78fe3d5db3, which
includes the merged change turning the `github.copilot.chat.claudeAgent.enabled`
`extensionConfigurationPolicy` entry into a `policyReference` to the in-code
`Claude3PIntegration` owner (microsoft/vscode-distro#1434).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Ubuntu <josh@ahp.4mywozgnka0etnlo23z031udwc.xx.internal.cloudapp.net>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-25 09:39:09 -07:00
adc7ecf823 sessions: responsive auto-collapse of the sessions sidebar (D7) (#322819)
On a narrow Agents window, auto-hide the sessions sidebar while both the
editor and the side panel (auxiliary bar) are open, and show it again once
either closes or the window grows wide. A manual close suppresses auto-show
until the user opens it again; suspended while the editor is maximized or
multiple sessions are visible. Gated by the experimental setting
`sessions.layout.autoCollapseSessionsSidebar` (default on in non-stable builds).

Session navigation never auto-hides the sidebar: a base-controller restore
epoch (`_withSessionLayoutRestore` / `_isRestoringSessionLayout`) wraps both
the aux-bar restore and the editor working-set apply (`_applyWorkingSet`, which
reveals the editor part after an await). The D7 autorun re-baselines instead of
reacting while a restore is in flight. The epoch is a depth counter so the
guard stays up across overlapping/independently-settling restores, and it
decrements synchronously for void work so it never leaks for no-op restores.

Layout-controller registration moves to a new
`sessions.layout.contribution.ts` that picks the desktop or mobile controller
per platform and registers the experimental setting.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-24 14:09:52 -07:00
Vijay UpadyaandGitHub 65d9832931 Add model managed setting and make it default for new conversations (#322669)
* Add model managed setting and make it default for new conversations

* Pr feedback updates

* fix

* update policy doc
2026-06-24 11:16:40 -07:00
Josh SpicerandGitHub 7813158c77 agents: remove redundant text mcp policy e7ff5829 (#322568)
Agent Host changes for agents/remove-redundant-text-mcp-policy-e7ff5829
2026-06-24 10:16:22 -07:00
Henning DieterichsandGitHub b99aeda16a fixes missing font file in monaco-editor (#322735) 2026-06-24 17:47:01 +02:00
Anthony KimandGitHub 1c0b4bea4c Bump Copilot CLI SDK packages to 1.0.64-1 / 1.0.3 (#322645)
* Bump Copilot CLI packages to @github/copilot@1.0.64-1 and @github/copilot-sdk@1.0.3

* Resolve Agent Host Copilot CLI through @github/copilot/bin.copilot

* Materialize @github/copilot/sdk from @github/copilot-<platform> in extension postinstall

* Package @github/copilot-<platform>/copilot for Agent Host and linuxmusl

* Exclude Copilot optional native payloads from extension package

* Scan @github/copilot-*/copilot for Linux package dependencies

* Tighten Copilot SDK 1.0.64-1 attachment and RPC typings

* Increase Copilot SDK native binary scan test timeout

* Update amd64 deb deps for @github/copilot-linux-x64/copilot

* Update arm64 rpm deps for Copilot package layout

* Update x64 rpm deps for @github/copilot-linux-x64/copilot

* Try to fix windows smoke test

* Try to fix platform runtime files for agent host

* exclude copilot computer.node from agent host packaging

* Another attempt to try to get packaging right

* Should only try to load 1.0.64-1

* Try to fix packaing for windows, macos, deb deps

* Update armhf/arm64 deb and x64 rpm Copilot dependency baselines

* Copilot darwin ripgrep universal merge and arm64 rpm deps

* Restore target Copilot SDK prebuilds for built-in extension packaging

* see if changes to gulpfile.reh.ts would help

* dont mess with formatting

* Launch copilot cli from platform index.js and exclude SEA
2026-06-24 06:47:26 -07:00
d2892d5d78 sessions: contribute PR pill as session header meta toolbar action (#322581)
* sessions: contribute PR pill as session header meta toolbar action

The session header pull request pill was rendered as bespoke DOM directly in sessionHeader.ts. Instead contribute it as an action into the existing Menus.SessionHeaderMeta toolbar, mirroring how the changes view contributes the diff-stats action.

- Add OpenPullRequestAction + OpenPullRequestActionViewItem (renders the #<number> pill, opens the PR on GitHub) in contrib/github/browser/pullRequestActions.ts, registered via IActionViewItemService.
- Gate it on a new per-view SessionHasPullRequestContext key, set by SessionView from the session's GitHub info (parallel to SessionHasChangesContext).
- Remove the manual PR pill DOM, fields, handlers and IOpenerService/URI usage from sessionHeader.ts; the meta toolbar now owns both the diff-stats and PR pills.
- Share the pill CSS between the diff-stats and PR action view items.
- Replace the header fixture's PR-pill variants with a dedicated openPullRequest fixture for the new action view item.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* sessions: document PR pill in Agents window accessibility help

Add a line to the SessionsChat accessibility help dialog describing the session header pull request pill and referencing its command keybinding placeholder, mirroring the existing diff-stats entry so screen reader users can discover it.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* build: register vs/sessions/contrib/github for i18n

The new pullRequestActions.ts introduces the first localized strings under vs/sessions/contrib/github. Add the module to build/lib/i18n.resources.json so the code-translation-remind eslint rule passes (it was failing Compile & Hygiene).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fixtures: render PR + diff pills in session header fixture

The session header fixture rendered the real SessionHeader, but its meta toolbar (Menus.SessionHeaderMeta) was backed by the empty TestMenuService / NullActionViewItemService, so the contributed pull request and diff-stats pills never appeared.

Wire the fixture's meta toolbar through the production code path: use FixtureMenuService for IMenuService, a small Map-backed IActionViewItemService, and a bound ISessionContext, then register the real OpenPullRequestActionViewItem / ViewAllChangesActionViewItem factories and contribute the matching menu items (gated on the mock session having a PR / changes). The header now shows 'folder #<number> +X -Y' as in production.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-23 12:38:00 -07:00
9a2c9f33e7 sessions: add CI failures and created-comments banners above the chat input (#322578)
* sessions: add CI failures and created-comments banners above the chat input

Add two dismissible banners that render directly above the active session's
chat input in the Agents window:

- A CI failures banner (orange accent) shown when the active session has at
  least one failed CI check. It reads "X of N checks failed" (ellipsized) with
  a floating right-aligned button bar: Fix Checks (same as the Changes view
  fix-ci action) and Reveal Checks (opens the Changes view and expands +
  focuses the CI checks section).
- A created-comments banner (neutral accent) shown when the active session has
  reviewable (PR/Agent review) comments still in the Created state. It reads
  "N comments" with Address Comments (sends /act-on-feedback) and Reveal
  Comments (opens the first comment in the editor).

Each banner has its own dismiss (x) that permanently hides it for that session,
persisted across reloads via the storage service.

The presentational card is a self-contained SessionInputBannerWidget so it can
be rendered in a Component Explorer fixture; the reactive SessionInputBanners
host composes it and the chat view mounts it above the input via the public
IChatWidget.inputPart.element API.

Also adds CIStatusWidget.expand()/focus(), ChangesViewPane.revealChecks(), and a
Reveal Checks command, plus Component Explorer fixtures for the banners.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* sessions: register sessionInputBanners in i18n.resources.json

Fixes the Compile & Hygiene CI failure: the new contrib uses localize() so its
folder must be listed for translation extraction.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* sessions: address PR feedback on input banner widget

- Use the shared Button widget for banner action buttons so theming, focus,
  keyboard/touch, and accessibility stay consistent (primary = button colors,
  secondary = ghost), mirroring the chat input notification widget.
- Make the ThemeIcon import type-only.
- Use the --vscode-strokeThickness token for the 1px border and focus outlines.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* sessions: make the Fix Checks button orange to match the CI banner accent

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* sessions: give secondary banner buttons a visible border

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* sessions: label comments banner by kind (PR / agent / mixed)

Show 'N PR comments' when all counted comments are PR reviews, 'N agent
comments' when all are agent reviews, and 'N comments' for a mix.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-23 12:37:25 -07:00