* Update @github/copilot and related dependencies to version 1.0.66-2
- Bumped @github/copilot to version 1.0.66-2 in package.json and package-lock.json.
- Updated optional dependencies for various platforms to match the new version.
- Adjusted @github/copilot-sdk to version 1.0.5-preview.0.
- Enhanced filtering logic in copilotCLITools.ts to include additional attachment types.
* Enhance attachment rendering in CopilotCLISession with additional GitHub attachment types
* Remove optional suppressResumeEvent property from ICopilotResumeSessionLaunchPlan interface
---------
Co-authored-by: Anthony Kim <62267334+anthonykim1@users.noreply.github.com>
* Make Copilot sanity tests mint their own token instead of using static copilot-token
The Copilot sanity tests resolve their Copilot token via
getOrCreateTestingCopilotTokenManager, which prefers VSCODE_COPILOT_CHAT_TOKEN
(set here from the `copilot-token` Key Vault secret) over GITHUB_OAUTH_TOKEN.
`copilot-token` holds a pre-minted Copilot token that is refreshed out-of-band
by a separate scheduled pipeline. When that refresher broke (the GitHub OAuth
secret it reads was rotated/removed during a security incident), `copilot-token`
silently went stale and expired. The static token manager hands the expired
token to CAPI `/models`, which returns 401, leaving no resolved model and
surfacing the misleading "server did not mark a chat fallback model" error.
Drop the static `copilot-token` so the tests fall through to GITHUB_OAUTH_TOKEN
(`capi-oauth-pipeline-token`) and exchange it for a fresh Copilot token on
demand. This path self-refreshes and removes the dependency on the external
refresher.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Re-enable sanity tests and surface model-fetch error
- Re-enable the three Copilot sanity tests that were temporarily skipped in
#323684 now that token resolution is fixed.
- Surface the underlying model-fetch error (e.g. an expired-token 401) from
ModelMetadataFetcher resolve methods instead of the misleading
"server did not mark a chat fallback model" message.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Omit reasoning summary instead of sending invalid 'off' value
#323639 disabled Responses API reasoning summaries by hard-coding
`reasoning.summary = 'off'`, but the Responses API only accepts
'concise', 'detailed', or 'auto' (or omitting the field to disable).
Models such as gpt-5.3-codex reject 'off' with HTTP 400
invalid_request_body, which surfaced as failing Copilot sanity tests
once they could reach the model.
Set summary to undefined so the field is omitted (summaries stay
disabled, as intended) and update the unit test accordingly.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Decouple reasoning-preserve test from disabled summary
The "should preserve reasoning object when thinking is supported" test
relied on the reasoning summary always being present to keep
body.reasoning defined. Now that the summary is omitted, give the test
model reasoning_effort support so body.reasoning is populated via effort,
which is what the test actually means to verify.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* signing commit
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* onboarding: let developerMode bypass experiment gating
Developer mode for a scenario now bypasses the experiment gate in addition to the usage and once-per-user gates: an experiment-linked tour is shown even when the experiment is not running or the user is in the control arm. No assignment-context telemetry gate is opened in that case, so a developer preview never affects an experiment scorecard.
Also documents the three automatic-eligibility rules (onboarding.enabled master switch, experiment gating, and ungated tours) across the service, config, and experiment types, and adds tests covering the new developer-mode behavior.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* onboarding: address PR feedback
- Restore the accidentally-dropped 'an opened gate persists' test header so the test file parses again.\n- Scope the developer-mode doc's 'no telemetry gate' note to the experiment-inactive preview case; the active control arm still opens the gate.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* onboarding: don't open telemetry gate in developer mode
CI surfaced a failing unit test: the developer-mode control-arm preview did not open the telemetry gate, but the test expected it to. Make this behavior explicit and deterministic instead — a developer-mode preview now shows the tour unconditionally and never opens the assignment-context telemetry gate (in any arm), so a local preview can never affect an experiment scorecard. Update the failing test expectation and the docs to match.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: add Session Files section to the Changes view
Add a collapsible/resizable 'Session Files' section to the agents Changes view, modeled on the CI Checks section, listing files created/edited/deleted outside the session workspace folders during the session (these are not committed).
Data is parsed from the agent-host chat-state turns (response parts -> tool calls -> FileEdit results/pending edits) and exposed via a new optional 'externalChanges' observable on ISession. Parsing is incremental: completed turns are memoized by id and only the active turn is re-parsed per streamed delta, with equality functions to suppress redundant downstream work. Computation is gated on the active, non-archived session.
Click opens created/deleted files normally and edited files as a diff. Adds component-explorer fixtures and unit tests covering delta-only recomputation and reduce semantics.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: register ResourceLabels services in Session Files fixture
The Session Files widget fixture failed to render because ResourceLabels depends on IWorkspaceContextService, IDecorationsService, ITextFileService and INotebookDocumentService, which the base fixture services don't provide. Register mock instances the same way the multiDiffEditor fixture does.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: address Session Files review feedback
- Add a Changes-view accessibility help dialog (SessionsChangesAccessibilityHelp) with a new verbosity setting, documenting the file tree and the Session Files / Checks sections and how to operate them (collapse/expand, open file vs diff).
- Handle touch in the Session Files header via Gesture.addTarget + TouchEventType.Tap so the collapse/expand toggle works on touch platforms.
- Use getComparisonKey(uri) instead of uri.toString() for Map keys and sorting in reduceSessionFiles, for safe cross-platform URI identity.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: register IListService in Session Files fixture
SessionFilesWidget creates a WorkbenchList, which depends on IListService. Register it in the fixture (as the aiCustomizationListWidget fixture does) so the widget can be instantiated under the component explorer.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add margin and padding adjustments to activity bar and panel titles
* fix: adjust padding-right for agent sessions title container
* fix: add padding adjustments for basepanel composite titles
---------
Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
* sessions: add terminals pill to session header meta row
Surface a "{n} terminals" pill in the session header meta row (next to
workspace / changes / pull request). The label counts the session's
terminals that have had at least one command sent in them; the hover
reports how many of those are currently running something (active), e.g.
a watch task or an in-progress npm install. Clicking reveals the terminal
view for the session.
The pill is gated on the new per-view SessionHasTerminalsContext key.
Counts are exposed via the new ISessionTerminalsService, backed by
SessionsTerminalContribution which tracks per-session terminals, records
"has had a command" stickily (executed text / command detection / started
child process) and recomputes the active subset live from
hasChildProcesses. Newly created terminals are associated with the active
session so the counts update as terminals are opened.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: address PR feedback on terminals pill
- Enforce single terminals provider: throw on a second registration so a
leaked/overwritten provider listener can't accumulate
- Fix SessionHasTerminalsContext description to match its semantics (set
from total terminals with a command, not active terminals)
- Include the total count and an action description in the pill aria label
so screen reader users get the same information as sighted users
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: remove unused test variable (fix CI)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The sessions list pruned manual section order/promotion entries on every render via retain(). Workspace identities are derived from asynchronously-loaded sessions, so early renders after a reload pruned workspace order entries before their sessions loaded, losing the user's interleaving of groups and workspaces (groups load synchronously and survived).
Garbage-collect only on genuine removals (session removals and group changes), which happen after sessions are loaded, instead of on every render.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Close active editor in overlay group on feedback submit
Always close the overlay group's active editor when feedback is submitted, so diff and multi-diff session editors close too.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When creating a new group in the sessions list, scroll its header into view so the focused inline name editor is visible.
Fixes#323528
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Expand agent feedback widget when revealing feedback
revealFeedback set the navigation anchor to the raw feedback id, but the
editor widget contribution matches against the prefixed session-editor-
comment id. As a result the editor scrolled to the location but the widget
stayed collapsed. Convert the feedback id to the session-editor-comment id
so the matching widget expands.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix test wrapper, comment length and mock typing from review
- Reintroduce the 'removing feedback preserves ordering' test() wrapper that
was accidentally dropped, fixing the TS1128 compile error breaking CI.
- Compress the revealFeedback inline comment to a single line.
- Use unknown/undefined instead of any in the openEditor test stub.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Break import cycle flagged by cyclic dependency check
sessionEditorComments.ts only uses AgentFeedbackKind/State and IAgentFeedback,
which are defined in agentFeedbackModel.ts (the service merely re-exports them).
Import them directly from the model so agentFeedbackService.ts can import
sessionEditorComments.ts without forming a cycle.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Previously only the Fix Checks button was hidden after requesting a CI fix for the current PR head commit; the banner stayed visible with the Reveal Checks action. Now the whole CI input banner is hidden until a new commit lands on the PR.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* refactor: streamline agent, rule, and skill discovery with Promise.all for improved performance
* refactor: remove unused import for raceCancellation in sessionCustomizationDiscovery
Rename capi-oauth secret to capi-oauth-pipeline-token
The capi-oauth Key Vault secret value leaked. Rename the secret
reference to capi-oauth-pipeline-token so that revoking the old
capi-oauth secret cuts off access for any other harness still
pointing at the old name. The new name is also more descriptive of
its purpose (CAPI OAuth token used in the automation pipeline).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Tidy Copilot managed-settings structured table for consistency
Give every STRUCTURED_MANAGED_SETTINGS row a named encode* helper
(encodeObject, encodeArray, encodeExtraMarketplaces) co-located with the
existing encodeStringMap, instead of mixing inline lambdas with named refs.
This keeps the central deserialization/mapping table uniform and easy to
extend.
No behavior change. base/common/managedSettings.ts stays the shared
base-layer module (consumed by both the policy layer and chat plugin code),
and IStrictMarketplaceSource is retained.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Harden extraKnownMarketplacesToConfigDict against prototype pollution
Marketplace names arrive from managed settings (untrusted input) and are
written as object keys, so skip __proto__/constructor/prototype keys, mirroring
the guard already present in the managed-settings string-map encoder.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Centralize the default-model managed-settings value callback
The model managed setting was the only managed-settings-driven control whose
policy value callback was hand-rolled inline in chat.shared.contribution.ts
(pass-through + trim + empty->undefined), while enabledPlugins / extraMarketplaces
/ strictMarketplaces all use the shared managedSettingValue() helper.
Add a memoized managedModelValue() helper in copilotManagedSettings.ts that holds
the model-specific trim/empty normalization, and wire the policy with
value: managedModelValue() so every managed-settings control is declared the same
way and the model normalization lives with the rest of the managed-settings logic.
No behavior change.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chat: avoid layout shift when switching sessions
Publish every fresh dynamic row measurement to the delegate cache so chat can size the last response correctly before the initial ResizeObserver report. Preserve the deferred initial height-change behavior and avoid any additional DOM measurement.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* list: publish only valid dynamic heights
Cover delegate-provided dynamic heights and centralize publication so all fresh probe paths update caches while zero heights remain excluded.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve workspace context as a hidden workspace variable when Agent Host session history is restored.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add Responses API cache control markers
* Refactoring code
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Gate Responses API cache breakpoints by model support
* Disable Responses API reasoning summaries
* reverting cache commits
* Remove Responses API cache breakpoint handling
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>