Commit Graph

160544 Commits

Author SHA1 Message Date
Rob Lourens
efa4ddddc3 chat: render Agent Host system notifications consistently (#323382)
* agentHost: restore system notifications within turns

Persist system-initiated notification boundaries and map unmarked SDK notifications back to response parts during history reconstruction. Coordinate boundary writes with replay so restored transcripts match live behavior.

(Written by Copilot)

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

* agentHost: stream system notifications during active turns

Forward system notification response parts through the live turn observer, while avoiding duplicate progress when reconnecting to an active turn. Remove the unnecessary history/database workaround from the previous commit.

(Written by Copilot)

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

* agentHost: simplify notification reconnect tracking

Use the active-turn response-part snapshot boundary instead of notification-specific counters when deciding which notifications still need live emission.

(Written by Copilot)

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

* chat: render persistent system notification response parts

Add a native chat response content kind for system notifications so in-turn notifications use the same compact checked-row treatment as system-initiated requests without disappearing when later content arrives.

(Written by Copilot)

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

* agentHost: restore Copilot system notifications

Use persisted assistant turn boundaries to restore in-turn notifications as response parts and idle wake-up notifications as system-initiated turns.

(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-04 02:24:02 +00:00
Connor Peet
710b8c0cb4 Agent host: run !-prefixed chat messages as terminal commands (#324270)
- Add a "bang command" feature: in any chat agent, a message starting with
  `!` runs as a terminal command (via the existing agent-host terminal/shell
  integration) instead of being sent to the model. The host emits a
  transcript-only tool-call response for the command.
- Persist host-injected "local turns" (`!command` and `/rename`) so they
  survive reload; fork/truncate/rename resolve them to the preceding concrete
  SDK turn. Handled uniformly per-chat (default, peer and subagent chats).
- Refactor local command handling into a pluggable `LocalChatCommandRegistry`
  with self-contained `AgentHostLocalCommands` dispatcher, extracting the
  logic out of `AgentSideEffects`. Add `renameLocalCommand` and
  `bangLocalCommand`.
- Extract shared helpers: `shellCommandExecution` (agent-agnostic shell exec
  core) and `persistSessionMetadata`.
- Fix peer-chat truncation routing: `truncateSession` now takes the chat URI
  and routes peer chats to their own backing session.
- Fix truncate no-op after forking into a second peer chat: `SessionDataService`
  keyed every peer chat of a session onto one data dir/DB (chat id lives in the
  URI authority, which `AgentSession.id` dropped), so a second fork's
  `vacuumInto` failed with "output file already exists" and the forked chat
  never inherited its turn event IDs. Key now includes the authority; both fork
  copy sites also clear any stale target DB first.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-04 00:28:28 +00:00
Christof Marti
ac3c7f9168 Include proxy config source in telemetry event (#324056) 2026-07-03 21:46:52 +00:00
Rob Lourens
0fc534223c chat: avoid relayout while hidden (#324264)
Skip chat view relayouts while the widget is hidden so dynamic-height rows are not measured against detached or display-none DOM.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-03 20:11:18 +00:00
Rob Lourens
40983a9818 Fix chat progressive rendering after hidden updates (#324260)
Use the response render cursor, rather than stream word statistics, to detect content that has not yet been displayed. Add regression coverage for initial catch-up behavior.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-03 20:10:58 +00:00
Sandeep Somavarapu
3a39cd27d1 sessions: add running-subagents status chip above the chat input (#324222)
* sessions: add ephemeral running-subagents chip above the chat input

Adds a status chip above the composer that appears only while the
currently-viewed chat has running (or attention-needing) subagents, so a
parallel background fan-out has a glanceable overview the transcript
can't provide once it scrolls.

- Shows "N running" with a spinner; escalates to "N need attention"
  (warning color) when any subagent is blocked (SessionStatus.NeedsInput).
- Hidden entirely while idle, so it adds no chrome when nothing is running.
- Clicking opens a menu of the running subagents (attention-needing first,
  with the current step surfaced from the chat description); selecting one
  reveals its read-only tab.

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

* sessions: name the single running subagent in the status chip

When exactly one subagent is running, the chip now reads
"Running subagent: <title>" with its live progress inline; for more than
one it stays "N subagents running". The subagent title is read reactively
so it updates when the worker is auto-titled.

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

* sessions: drop needs-attention state from running-subagents chip

Show only running (InProgress) subagents. Removes the NeedsInput
"needs attention" escalation, its warning styling, and the attention-first
ordering; the chip is purely a running-workers indicator now.

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

* sessions: make input-part mounting idempotent (CCR feedback)

Key the banner/chip mounting off the desired final order
([subagentsNode, bannersNode, ...]) so `_ensureBannersMounted` is a true
no-op once the DOM has settled, instead of performing two insertBefore
mutations on every doLayout()/resize.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-03 20:08:36 +00:00
Benjamin Christopher Simmonds
4a7d3b7309 sessions: update changes view file sections (#324247)
* sessions: update changes view file sections

Rename the external session files section to Other Files and align its rows with the main changes list. Update split sizing so CI and file changes cap to their content while Other Files takes remaining space, including a 140px empty file-changes minimum.

Add full Changes view component fixtures for the main split-view states.

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

* sessions: preserve changes view sash size

Fire the tree pane SplitView change event without a preferred size so relayout clamps constraints without forcing the File Changes pane to its maximum.

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

* sessions: mock lifecycle for changes view fixture

Register a no-op ILifecycleService so the full Changes view component fixture can instantiate ViewWelcomeController under the strict fixture instantiation service.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-03 22:07:06 +02:00
Justin Chen
4dec01cd4f fix agents window misplaced steering hover (#324254) 2026-07-03 18:04:47 +00:00
Sandeep Somavarapu
626003aee5 sessions: add setting to show empty default groups (Pinned, Chats) in sessions list (#324251)
* sessions: add setting to show empty default groups (Pinned, Chats) in the sessions list

Add `sessions.list.showEmptyDefaultGroups` (default true) to control whether the
empty Pinned and Chats default groups are shown in the sessions list. When disabled,
the always-visible empty sections are hidden until they contain sessions. The list
re-renders live when the setting changes.

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

* sessions: set APPLICATION scope on showEmptyDefaultGroups setting

Fixes the unused `ConfigurationScope` import (noUnusedLocals) and aligns the
setting scope with nearby Sessions settings.

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

* sessions: use window scope for showEmptyDefaultGroups setting

Remove the APPLICATION scope (defaulting to WINDOW) and drop the now-unused
ConfigurationScope import.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-03 18:04:28 +00:00
Lee Murray
83b736f2da Style overrides: Add border-radius and padding to terminal tab entries (#324241)
* style: Add border-radius and padding to terminal tab entries

* Potential fix for pull request finding

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

---------

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-03 18:00:52 +00:00
Henning Dieterichs
3fbc14e673 fixes lockfile 2026-07-03 17:48:37 +02:00
Henning Dieterichs
f6a4e0843f updates rspack
* reduces memory usage
* loads fixtures from source instead of out
2026-07-03 17:48:37 +02:00
Henning Dieterichs
f8458073d8 adds agentEditorComments proposed API for markdown editor (#324207)
* adds agentEditorComments proposed API for markdown editor

* adds comments file

* Fixes CI
2026-07-03 15:48:12 +00:00
Benjamin Christopher Simmonds
b4b15a9158 sessions: identify session in worktree delete prompt (#324237)
Pass the Copilot CLI session label through the Agents Window delete flow into the Git worktree removal confirmation so dirty worktree prompts show which session owns the worktree.\n\nFixes #324220\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-03 15:42:28 +00:00
Giuseppe Cianci
6e781f1802 Merge pull request #324232 from microsoft/agents/kimi-models-temp1-top095-override
copilot: force temperature=1 and top_p=0.95 for Kimi models
2026-07-03 17:04:42 +02:00
Ladislau Szomoru
d44e5ba3d7 Agents - add review/unreview operation to the multi-file diff editor (#324218)
* Review changes (P1): add overlayPathIntoTree git primitive

Add `IAgentHostGitService.overlayPathIntoTree(base, path, source)` which
builds a new tree equal to `base` with a single repo-relative path replaced
by (or removed to match) the content in `source`, using a throwaway
GIT_INDEX_FILE so the user's real index is untouched.

This is the file-level building block for the upcoming reviewed-ref based
"review changes" feature: mark reviewed = overlay from the working-tree
snapshot; unmark = overlay from the baseline tree.

Includes the `parseSingleLsTreeEntry` helper and real-git integration tests
covering modified, added, and removed paths, plus the non-git no-op case.

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

* Review changes (P2): extract shared Branch Changes baseline resolver

Extract the Branch Changes baseline resolution so the changeset service and
the upcoming review service cannot drift on which baseline they use:

- Add `IAgentHostGitService.resolveBranchBaselineCommit(workingDirectory,
  baseBranch?)` which resolves the merge-base commit-ish the Branch Changes
  diff is anchored on (origin/<base> preference, HEAD fallback, empty-tree
  fallback). `computeSessionFileDiffs` now delegates to the same private
  `_resolveBranchMergeBaseCommit` helper -- pure refactor, no behavior change.
- Add the pure `resolveDiffBaseBranchName(persisted, gitState)` helper for the
  base-branch-name precedence and use it from the changeset service.

Adds unit tests for both pure helpers and real-git integration tests for
`resolveBranchBaselineCommit`; existing `computeSessionFileDiffs` tests still
pass.

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

* Review changes (P3): add reviewed-ref review service core

Add `IAgentHostReviewService` and its node implementation, tracking which
files in a session's Branch Changes the user has reviewed as a session-private
synthetic git ref (`refs/agents/<sid>/reviewed`) whose tree snapshots the
reviewed content.

- `markFileReviewed` overlays the file's current working-tree content into the
  reviewed tree; `unmarkFileReviewed` resets it to the baseline content. Each
  action appends a parent-chained commit (first parent = baseline commit) and
  advances the ref; no-op mutations are skipped so the chain doesn't grow.
- `getReviewedPaths` derives review status from git trees: reviewed = Branch
  Changes files whose reviewed-tree content matches the working tree. Editing a
  reviewed file therefore auto-unreviews it.
- Mutations/reads are serialized per session; the reviewed ref is deleted on
  session data disposal. Operations no-op when not in a git work tree (a future
  milestone adds the non-git DB fallback).

Also adds the `diffTreePaths` git primitive used to compute review status, and
wires the service into the agent-host node and server entry points. Covered by
real-git integration tests.

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

* Review changes (P4): wire the review operation handler + provider

Add `AgentHostReviewFileOperationHandler` (mark/unmark, one instance per
direction) and `AgentHostReviewOperationContribution`, advertising the
`mark-as-reviewed` / `mark-as-unreviewed` resource-scoped operations for the
Branch Changes changeset and delegating to `IAgentHostReviewService`.

The handler resolves the session's working directory and base branch (via the
shared `resolveDiffBaseBranchName`) so review status is keyed on the same
baseline the Branch Changes diff uses.

Plumb the review service into `AgentService`'s inner DI (mirroring the
checkpoint service, defaulting to `NULL_REVIEW_SERVICE`) and register the
contribution. Covered by handler unit tests using a fake review service.

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

* Review changes (P5): surface per-file review status on the Branch changeset

Populate `ChangesetFile._meta.reviewed` for the Branch Changes changeset so the
client can render reviewed/unreviewed affordances per file:

- Inject `IAgentHostReviewService` into the changeset service and, when
  publishing the Branch changeset, look up the reviewed repo-relative paths and
  set `_meta.reviewed` per file (keyed by the file id's repo-relative path).
- Extract the base-branch resolution into a shared `_resolveBranchBaseBranch`
  helper reused by the diff computation and the review-status lookup.
- After a mark/unmark, the operation handler triggers `refreshBranchChangeset`
  so the updated `_meta.reviewed` is republished (the working tree is unchanged
  by a review toggle, so no file-watcher event would otherwise fire).

Adds a reusable `createNoopChangesetService` test helper, updates the handler
test to assert the refresh, and threads the new dependency through existing
agent-host test fakes.

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

* Review changes (P6): copy the reviewed ref on session fork

Add `IAgentHostReviewService.copyReviewedRef(source, target, workingDirectory)`
which points the forked session's reviewed ref at the same commit as the
source's, so a fork starts with the parent's review progress. No-op when the
source has no reviewed ref or the directory is not a git work tree.

Wire it into the Copilot session-fork path (best-effort, after the forked
session's database is copied), and inject the review service into CopilotAgent.
Covered by a real-git integration test.

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

* More refactoring/cleanup

* More changes to get things working

* Fix the actions in the toolbar

* Collapse multi-file diff item that is reviewed

* Remove precondition

* Fix tests + pull request feedback

* Fix hygiene

* Skip integration tests for now

* Make the UI snappier

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-03 14:43:28 +00:00
Lee Murray
51981501c9 Style override: Update badge overflow property and title padding (#324234)
style: update overflow property for badge elements and padding titles

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
2026-07-03 14:18:35 +00:00
Lee Murray
201c7fee48 Style override: Add border-radius to update indicator in action bar (#324231)
style: add border-radius to update indicator in action bar

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
2026-07-03 14:18:09 +00:00
Aiday Marlen Kyzy
598245572c fix: restore color theme when detecting high contrast theme (#324025)
* feat: adding code actions for github and playwright server enablement

* removing prompt validator

* removing code

* adding mcp server and extension search

* adding changes

* polish changes

* polishing tests

* polishing changes

* adding code

* fixing condition

* adding description

* adding splitBySlash

* extracting extension from extension tool name

* using single quotes for mcp server installation

* updating message

* fix: restore color theme when detecting high contrast theme

* removing other PR

* using a setting instead
2026-07-03 16:17:11 +02:00
Christof Marti
e4e5653fd3 Set HTTP_PROXY and HTTPS_PROXY from user / OS config (#324209) 2026-07-03 14:06:15 +00:00
Lee Murray
d399c1f9b7 Style overrides: Remove redundant scroll shadow styles (#324228)
style: remove redundant scroll shadow styles from list and panel elements

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
2026-07-03 14:06:11 +00:00
Benjamin Christopher Simmonds
bab1a11aec Merge pull request #324230 from microsoft/benibenj/boring-heron
Blocked sessions cleanup
2026-07-03 16:05:34 +02:00
Giuseppe Cianci
84a099c0f3 copilot: force temperature=1 and top_p=0.95 for Kimi models
Kimi models (kimi-k2.6, kimi-k2.7-code) require temperature=1 and
top_p=0.95. Override these in customizeCapiBody so the values are
forced on all outbound CAPI requests regardless of what the client
would otherwise send, across agent/ask/edit modes and streaming and
non-streaming paths.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-03 15:53:39 +02:00
Lee Murray
d6ff33d23d a11y: Update theme selection and hover colors for better visibility (#324191)
theme: Update selection and hover colors for improved visibility in light and dark themes

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
2026-07-03 13:51:27 +00:00
Lee Murray
c648fff081 Merge pull request #324197 from microsoft/mrleemurray/casual-coral-marlin
Style overrides: Adjust title bar height and padding for better alignment
2026-07-03 14:37:17 +01:00
BeniBenj
3a29af389a blocked sessions cleanup 2026-07-03 15:33:52 +02:00
Aiday Marlen Kyzy
27dba7c716 early return if dom node is not connected (#324216) 2026-07-03 15:13:35 +02:00
Aiday Marlen Kyzy
8ef54d7c28 fix: making insertFinalNewLine work if last line contains whitespaces (#324194)
* fix: making insertFinalNewLine work if last line contains whitespaces

* remove unused line of code
2026-07-03 15:11:39 +02:00
Lee Murray
3ef4fd9a04 Style overrides: improve scroll shadows (#324210)
style: enhance scroll shadows for editor and panel areas

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
2026-07-03 12:42:19 +00:00
Syed Osama Ali Shah
2ba2224839 Zero-pad percent-encoding for code points below 0x10 in UriTemplate (#323012)
fix: zero-pad percent-encoding for code points below 0x10 in UriTemplate

pctEncode emitted '%' + chr.toString(16) without padding, so a code point < 0x10 produced a single-digit escape (e.g. tab -> %9, newline -> %0A becomes %A, CR -> %D) instead of the RFC 3986/6570 two-digit form. The result is a malformed URI that decodeURIComponent rejects with "URI malformed". UriTemplate is used to resolve MCP and agent resource URIs, where a variable value containing a control character would yield a broken URL.

Zero-pad to two hex digits with padStart(2, '0'); this is a no-op for code points >= 0x10, so existing escapes (%20, %21, ...) are unchanged. Adds a regression test.
2026-07-03 12:42:14 +00:00
Henning Dieterichs
629ea48932 Fixes and improves agentFeedback fixtures (#324208) 2026-07-03 12:39:55 +00:00
mrleemurray
e7d36d1d76 style: Update title height in PartLayout and sync comments in padding.css for consistency
Co-authored-by: Copilot <copilot@github.com>
2026-07-03 13:10:35 +01:00
mrleemurray
9960bb626b fix: Update PartLayout to remove titleArea dependency for improved layout handling
Co-authored-by: Copilot <copilot@github.com>
2026-07-03 13:08:23 +01:00
mrleemurray
b30def48c3 fix: Add style override for title height in PartLayout to ensure consistent layout
Co-authored-by: Copilot <copilot@github.com>
2026-07-03 13:01:31 +01:00
Benjamin Christopher Simmonds
d769f0deca Surface sessions requiring input in the agents titlebar (#324203)
* sessions requiring input

* Dismiss blocked-sessions dropdown + context-specific requires-input messages

- Close the dropdown on Escape or an outside click (contextView onDOMEvent)
- Show a specific titlebar message when all blocked sessions share one reason (terminal approval, failing CI, question, unresolved comments); fall back to the generic 'N sessions require input' for a mix
- Animate the first requires-input appearance (preserve the blink class across redundant re-renders)
2026-07-03 11:47:18 +00:00
mrleemurray
47a1b53cbe style: Remove commented-out margin styles for cleaner code 2026-07-03 12:44:34 +01:00
Sandeep Somavarapu
779f321a06 sessions: move subagents into the Conversations menu (#324199)
Removes the standalone "Subagents" dropdown above the chat input and
instead surfaces a chat's subagents as a separate group at the bottom of
the Conversations menu, scoped to the currently-active chat.

- Delete SessionAgentsControl and its CSS; drop it from ChatView.
- SessionConversationsMenuContribution now registers the active chat's
  subagents in a `2_subagents` group below the session's chats.
- Add SessionActiveChatHasSubagentsContext so the Conversations menu
  surfaces even when the parent is the only committed chat.
- Show the chat tab strip as soon as the session has any subagent, so
  the Conversations menu moves to the tab bar.
- Add a regression test asserting a spawned subagent chat is resolvable
  from the inline pill resource via parseChatUri (the Open-Subagent
  contract), guarding against the pill/catalog identity desyncing.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-03 11:44:18 +00:00
Lee Murray
95cbbdfd54 a11y: Update warning icon colors in 2026 Light theme (#324192)
* theme: add foreground color for problems warning icon in 2026 Light theme
css: remove opacity adjustments for warning and info labels in chat widget

* theme: update foreground color for problems warning icon in 2026 Light theme

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-03 11:42:51 +00:00
Giuseppe Cianci
cc3f68b765 Merge pull request #324064 from microsoft/harden-node-modules-cache
Guard node_modules cache against missing native optional-dep packages
2026-07-03 13:18:05 +02:00
mrleemurray
a5dfea533e style: Remove top margin from activity bar in floating panels for improved alignment 2026-07-03 12:11:54 +01:00
mrleemurray
5fc4fe208f fix: Update PartLayout to include titleArea for improved layout handling 2026-07-03 12:09:55 +01:00
mrleemurray
47b8a7780a style: Adjust title bar height and padding for better alignment in workbench
Co-authored-by: Copilot <copilot@github.com>
2026-07-03 12:01:39 +01:00
Dirk Bäumer
2d0877ddee Make grep the new default search tool output format (#324186) 2026-07-03 10:06:31 +00:00
Benjamin Christopher Simmonds
c2c01cfcf3 sessions: use default cursor in chat list gutters (#324185)
The chat list rows span the full viewport width while the item container is centered with a max-width, leaving gutters on either side. The base list stylesheet sets cursor: pointer on rows, so the gutters showed a pointer cursor even though the item container uses cursor: default. Force default cursor on chat list rows so the gutters match.

Fixes #324173

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-03 09:48:56 +00:00
Lee Murray
066d17a9d7 a11y: Update placeholder foreground colors in input fields for dark and light themes (#324183)
fix: update placeholder foreground colors in input fields for dark and light themes

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
2026-07-03 09:37:01 +00:00
Ralph Feltis
46660cd9c2 Add sshd to devcontainer features (#322971) 2026-07-03 09:23:47 +00:00
Lee Murray
ebed063207 a11y: Update scrollbar and minimap slider colors for better visibility (#324179)
fix: update scrollbar and minimap slider colors for better visibility

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
2026-07-03 09:22:51 +00:00
Giuseppe Cianci
6e0b2e9398 Guard node_modules cache against missing native optional-dep packages
Some deps ship their native binary in a per-platform package declared as an
*optional* dependency of a small base package (e.g. `@openai/codex` ->
`@openai/codex-<platform>-<arch>`, `@anthropic-ai/claude-agent-sdk` ->
`@anthropic-ai/claude-agent-sdk-<platform>-<arch>`). npm does not fail when an
optional dependency can't be installed, so a transient hiccup can leave the base
package present but the per-platform package missing — and that broken tree then
gets frozen into the shared node_modules cache and served to every consumer
(see #323881).

Add build/azure-pipelines/common/checkNativeOptionalDeps.ts and run it after
`npm ci` in the linux, macOS and windows cache-build jobs (before the cache is
saved). For each configured base package that is installed, it asserts the
matching `<base>-<platform>-<arch>` package exists, and fails the job otherwise
so a poisoned cache is never saved.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-03 11:13:03 +02:00
Ulugbek Abdullaev
0dcb0ecd63 Remove the system-wide keybindings first-run dialog (#324045)
* Remove the system-wide keybindings first-run dialog

The first-run notice could appear in multiple windows at once on startup, and
the single-window election meant to prevent that was racy across concurrently
syncing renderers. Rather than harden the election, remove the dialog entirely:
the feature is always on and users who opt a keybinding into "systemWide" know
what they are doing.

This deletes the whole notice path, which existed only to serve the dialog:
- renderer: drop the first-run notification, the acknowledged-storage gate, and
  the IDialogService/IStorageService deps; sync() now just warns about ignored
  when-clauses and pushes to the main process.
- main process: drop the elected-window bookkeeping so INativeSystemWideKeybindingResult
  only reports failures.
- update the systemWide keybindings.json schema description and drop the
  now-obsolete election unit tests.

Global registration and trigger routing are unchanged.

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

* Add a specification doc for system-wide keybindings

Co-locate an architecture/spec document next to the renderer contribution so
future work has the full feature context (user contract, renderer<->main-process
flow, the systemWide flag plumbing, design rationale, tests, and gotchas).

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

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-07-03 13:48:30 +05:00
Sparsh :)
190016f576 sessions: fix endless spinner in Changes view for non-git folders (#324132) 2026-07-03 08:31:29 +00:00