Alignment with 1.128.1 version of VS Code - #757
Conversation
…23968) * wip on mcp auth through AH * Preserve live MCP server state across customization re-syncs The Agents window showed a connected GitHub MCP server flipping back to 'Starting' when navigating away from and back to a session. A client re-subscribe re-published the session's customizations, and the SessionCustomizationsChanged full-replace reset each MCP entry's state to the 'Starting' default baked into makeMcpServerCustomization. - Skip no-op customization re-syncs in SessionPluginController.sync so an identical re-publish (e.g. navigating back) does no work. - SessionPluginController now overlays live MCP runtime state/channel onto every published customization via _projectForPublish, so a genuine single-customization change no longer resets otherwise-unchanged MCP servers. The overlay is driven by an ISettableObservable kept up to date by the session from McpCustomizationController. - McpCustomizationController._live is now an observable and exposes runtimeStates as a derived; mutations are batched in transactions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Persist agent-host MCP auth and improve auth-required prompts - Key remembered MCP auth on a stable id (session authority + server name + resource URL) instead of the unstable customization id, so grants survive reloads and don't require re-auth. - Record agent-host metadata (authority + host label) on allowed MCP servers and surface agent-host servers in their own section of the Manage Trusted MCP Servers picker instead of filtering them out. - Make the auth-required chat prompt reactive: servers is now an observable so servers whose auth requirement surfaces later join the existing prompt, and the part marks itself used once hidden so later requirements re-prompt. - Show an 'Authenticating <server>...' progress state while each server auths. - Drop the never-serialized mcpAuthenticationRequired part from the serialized response-part unions. - Add unit tests for the stable-id helper, agentHost metadata persistence, and query-service exposure. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address CI failure and Copilot review on MCP auth prompt - Don't emit an empty mcpAuthenticationRequired progress part (was adding a stray part and breaking AgentHostChatContribution tool-progress tests). - Guard the async auth filter with a run id so out-of-order completions can't overwrite a newer server list. - Group agent-host servers in the Manage Trusted MCP Servers picker by stable authority (sorted by label) instead of label, which could collide. - Scope the authenticate link to the #authenticate target and give it button semantics (role=button, cleared href). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…(#323972) * sessions: quick chats — workspace-less single-chat sessions Adds quick chats to the Agents window: lightweight chats not scoped to a workspace, backed by an agent-host session. The host infers workspace-less from an absent workingDirectory (forks excluded) and assigns a stable scratch dir; the workspaceless tag rides the generic _meta bag. Quick chats are single-chat, use the normal session presentation (Done hidden), render in an always-visible in-list "Chats" section, and persist across reloads. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: New from a quick chat opens another quick chat (Round 23) The primary "New" action gated quick-chat routing on `isCreated && isQuickChat`, but a quick-chat draft is Untitled (isCreated=false), so it fell through to the workspace composer seeded with a throwaway scratch dir (no session-type picker, "No models available"). Route on `isQuickChat` alone so a quick chat — draft or committed — opens another quick chat mirroring its harness. Extract the routing into a pure, side-effect-free `openNewChatOrQuickChat` helper so it is unit-testable (chat.contribution.ts is not test-importable). Supersedes Round 14(2) and updates Round 22(3); the Round 14(2) discard branch and Round 17 picker re-parent are kept as internal defense. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: quick-chat list & layout polish (Round 22 items 1-2) - Suppress the redundant per-row chat icon when a quick chat is rendered under the always-visible "Chats" section (the section header already carries a chat icon); keep it in Pinned/custom/date groups where the chat identity is useful. - Disable the "Toggle Side Panel" command for quick chats via precondition IsQuickChatSessionContext.negate(), since a quick chat has no side pane (the empty aux bar is hidden and the chat is full-width). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agentHost: persist empty peer-chat catalog sentinel to avoid re-running legacy migration When a session has no legacy peer chats, write an empty catalog so _readPersistedPeerChatCatalog returns [] on subsequent restores and _migrateLegacyPeerChats never re-runs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: Cmd+N always creates a new session; New Quick Chat gets Cmd+K Cmd+N (Round 24) Per user feedback, Cmd+N must always open a NEW SESSION — never a quick chat. Drop the context-aware quick-chat routing from NewChatInSessionsWindowAction (rename its title "New Chat" -> "New Session", keep the id) so it unconditionally calls openNewSession from the active session; the helper is renamed openNewChatOrQuickChat -> openNewSessionFromActive. Quick chats are created only via the Chats-section "+" (NewQuickChatAction), which now has a default Cmd+K Cmd+N chord. The peer-chat "+" (Cmd+T) is unaffected. Supersedes the Round 22(3)/23 mirror routing; the Round 14(2) discard branch and Round 17 picker re-parent are untouched. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: Cmd+N never inherits a quick chat's folder into the workspace composer (Round 25) New from a quick chat must always land on the clean New Session composer with a visible session-type picker. Gate openNewSessionFromActive's folder inheritance on isQuickChat so a quick chat never carries a (possibly leaked scratch) workspace URI into openNewSession. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: re-seed workspace draft when composer swaps out of quick-chat mode (Round 25b) Cmd+N from a quick chat reuses the new-session composer and only _activate(undefined), leaving it session-less. The session-type picker hides itself when it has no folder types (no active session), so no picker showed. Re-run the constructor's workspace-draft seed from an autorun when the composer transitions out of quick-chat mode with no active session, matching a freshly opened new-session composer (folder + visible picker). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: quick-chat untitled title falls back to "New Chat" via shared helper (Round 26) An untitled quick chat's titlebar showed "New Session" because the empty-title fallback was hardcoded and not quick-chat aware. Add getUntitledSessionTitle(isQuickChat) to the common layer and route all 5 fallback sites (titlebar, session header x2, list hover, sessions picker) through it. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: track isQuickChat in titlebar re-render autorun (Round 27) The SessionsTitleBarWidget re-render autorun read the active session's title and workspace but not isQuickChat, which _render() consumes for the untitled title fallback. Track it as a reactive dependency for forward-safety and consistency with other reactive render sites. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agentHost: move workspace-less marker ownership to the AH service Each agent used to persist and re-emit its own workspace-less (quick chat) marker (copilot.workspaceless / claude.workspaceless) in the shared session database, and agents that persist nothing (Codex) lost the marker on restart. Make the AH service the single owner: AgentService persists a single agentHost.workspaceless key at create/materialize (from the value it already infers in _buildInitialSummary) and overlays _meta.workspaceless onto every agent's summary in listSessions. Agents no longer write or namespace the marker; Copilot reads the shared key for its resume system prompt, and the now-dead workspace-less plumbing is removed from the Claude session. This fixes restored quick chats for every agent (including Codex) with no per-agent code. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions/agentHost: address review feedback (naming + inline) - Rename the workspace-less launch-plan flag from isQuickChat to workspaceless in CopilotSessionLaunchPlan and IAgentHostPromptContext (and the disposeSession local) so the flag matches the workspaceless marker it flows from throughout the AH layer. Feature-descriptive names (COPILOT_AGENT_HOST_QUICK_CHAT_INSTRUCTIONS, _quickChatScratchDir) are kept. - Inline openNewSessionFromActive back into NewChatInSessionsWindowAction.run and remove the single-caller seam module + its test. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agentHost: make the AH service the sole owner of the workspaceless marker Following the earlier ownership move, the agents still read + re-emitted _meta.workspaceless in their metadata projections, which was redundant on the listSessions path (AgentService overlays it centrally) and only load-bearing on the single-session restore path. Centralize the restore overlay in AgentService.restoreSession (reads agentHost.workspaceless in its existing batch metadata read and merges it into the restored summary _meta), then drop the per-agent re-emit: remove it from the Claude metadata store entirely (Claude has no runtime need) and from the Copilot listSessions/getSessionMetadata projections. Copilot keeps reading the AH key for its resume system prompt and scratch-dir cleanup. Codex is now covered centrally with no Codex code. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: inline openQuickChatAndFocus into NewQuickChatAction Single-caller helper folded into the action's run(). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: make ISessionsProvider.createQuickChat mandatory Replace the optional createQuickChat with a mandatory method that throws when the provider does not support quick chats; callers now gate solely on the supportsQuickChats capability instead of probing for the method. Workspace-bound providers (Copilot chat, local chat) get an explicit throwing implementation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agentHost: use "workspace-less chat" terminology instead of "quick chat" Rename the agent-host-internal quick-chat identifiers, prompt tags, and prose to workspace-less: COPILOT_AGENT_HOST_QUICK_CHAT_INSTRUCTIONS -> COPILOT_AGENT_HOST_WORKSPACELESS_INSTRUCTIONS, the <quick_chat> system-message tag -> <workspaceless_chat>, and the scratch-dir helpers (_quickChatScratchDir/_ensure*/_cleanup*/_withQuickChatScratch). The workbench UI term "Quick Chat" is kept only where the agent host documents that mapping. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: address Copilot Code Review feedback on quick chats - sessionsList: select the row chat icon from isQuickChatSession(), not from workspace === undefined, so a workspace session with a transiently-undefined workspace no longer briefly shows the chat icon. - sessionContextKeys: correct the isQuickChat comment to reflect that the key is sourced from the isQuickChat tag, never inferred from workspace absence. - Agents window accessibility help: document the New Quick Chat command (Cmd/Ctrl+K Cmd/Ctrl+N) and the Chats section plus button, and note that the workspace picker does not apply and Toggle Side Panel is disabled for quick chats. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…lt/peer branches) (#323967) * Refactor agent chat operations to resolve chats uniformly Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Refactor chat ops to use concrete chat URIs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agentHost: tolerate a session URI at the chat-context chokepoint (fix CI) The chat-addressing refactor removed the agents' tolerance for addressing the default chat by its session URI (the AHP convention: default chat URI == session URI). This broke integration tests that address the default chat by the session URI (Malformed AHP chat URI) and restore via the mock agent (0 restored turns). - Claude/Copilot `_getChatContext`: accept either a chat channel URI or a bare session URI, normalizing to the default-chat URI in the single resolution chokepoint (not re-derived per operational method). Codex already tolerant. - MockAgent.getSessionMessages: normalize a default-chat channel URI back to the session URI, mirroring the real agents. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agentHost: remove the dead onDidEndChat membership channel onDidEndChat was declared by Claude and Copilot but never fired: a completed subagent chat stays live and is removed only on session teardown (via a direct removeChat), so subagent_completed intentionally has no end event. Remove the unused channel end-to-end — the agents' emitters, the optional IAgent.onDidEndChat member, the orchestrator subscription + _onChatEnded handler, and the synthetic test. onDidSpawnChat (which is fired) remains as a spawn-only membership channel. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agentHost: rename IResolvedAgentChat.session to chatSession Address CCR feedback: `session` overwhelmingly means the owning session URI in this codebase, so `IResolvedAgentChat.session` (the resolved chat session instance) was easy to misread. Rename to `chatSession` and update the two call sites in claudeAgent.ts / copilotAgent.ts. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ilot CLI (#321591)
Remove the experimental chat.cacheBreakHint.enabled setting and its gate so the model/options picker cache-break hint shows by default (still respecting dismissal and cache-warm state). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Agents - more tweaks to the loading indicator
…(#323773) * support session reference attachment * Bound session reference transcript attachments * Address session reference review feedback * reanming * Try with preview, targetted event jsonl + session uri * Scope Agent Host session references to Copilot CLI trajectories * revert unneeded changes * rename * update wording efurther * less cli specific * give await back
…et edges (#323984) * Add Tools tree keyboard navigation, fix focus outline cut-off at widget edges * PR feedback
* Add copilot stage * add counter
…ions (#323981) * Support uninstalling extensions from Tools section of Chat Customizations * PR feedback
…#324016) Update border-radius for editor and sidebar styles to enhance UI consistency Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
…hat capabilities (#324021) sessions: hide subagent chats by default, persist closed chats, and add chat capabilities Improves chat management in the Agents window session view: - Subagent (tool-origin) worker chats are hidden from the chat tab strip by default and surface as a tab only when explicitly opened (e.g. from the Subagents dropdown); closing one hides it again without adding it to the reopenable closed set. Reverts on reload. - Closing a chat is remembered across reload/restart (closed-chat set is persisted per session and restored on startup); subagents are excluded from the persisted set. - Adds "Close All Chats" command (Ctrl/Cmd+K W, mirroring "Close All Editors in Group"), gated on SessionHasMultipleOpenChats so it targets the focused session and does not collide with "Close All Sessions" (Ctrl/Cmd+K Ctrl/Cmd+W). - Introduces per-chat IChatCapabilities (canRename/canDelete) with a central getChatCapabilities resolver that folds in the main-chat invariant (never deletable). Subagent chats report neither rename nor delete; the tab context menu, delete keybinding, and context keys now go through capabilities instead of ad-hoc origin/main-chat checks. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Non-active agent-host session PR icons don't refresh until the session is activated. The per-session poller in GitHubPullRequestPollingContribution keeps a shared PR model warm only once its identity resolves, but the previous trace collapsed all four bail-out stages into one generic message and gave no visibility into how many sessions were actually tracked. Disambiguate the identity derivation into a discriminated PullRequestIdentityState (ok / archived / no-workspace / no-git-repository / no-pull-request) and log the precise stage where a session's PR model is not kept warm, plus the total tracked poller count on each sessions change. Behavior is unchanged; only the 'ok' state starts polling as before. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…24023) Give the Pinned section a leading pin icon (mirroring the Chats section's chat icon) and make both section headers share the standard section-header font/styling. Also keep the Pinned section always visible with a "No pinned sessions" placeholder when empty, matching the Chats section. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When multiple editors are closed at once (Close All Editors, Close Others, etc.), Reopen Closed Editor now reopens them all as a batch instead of one at a time. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…320391) * Reinstate colors of symbol codicons when used in custom tree views * Attestation commit * Attestation commit * Attestation commit * Attestation commit --------- Co-authored-by: Alex Ross <38270282+alexr00@users.noreply.github.com>
* sessions: tweak session files widget in changes view - Use default ResourceLabels (no supportIcons) so file icons render - Drop the resource path from the file description - Only open a diff for modified files when the original has content - Show A/M/D change decoration badges like the changes view - Remove strikethrough for deleted files - Add an Open File action to the row toolbar matching the changes view Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: remove file count from session files header Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Render the comment codicon as the chat-thinking-icon for comment tools (addComment, listComments, etc.) instead of the generic tool icon, and drop the now-redundant inline comment icon from the addComment invocation message. Also bump the addComment preview length from 20 to 40 characters. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Make onboarding tours ready for experiment
* AgentHost - chat working directory fix * AgentHost - fix the root cause: default chat should not seed a workingDirectory Per the protocol, a chat's `workingDirectory` is an OVERRIDE — when absent the chat inherits the session's working directory. `createDefaultChatSummary` was seeding the session default onto every chat as a fake override, which then went stale when the session's working directory was resolved later (e.g. a worktree resolved at materialization), and the per-chat projection surfaced the pre-materialization directory over the resolved session default. Stop seeding `workingDirectory` in `createDefaultChatSummary` so inheriting chats keep it undefined and the projection's fallback always uses the current session working directory. This removes the need for the default-chat working-directory sync and covers all inheriting chats (not just the default). Adds a regression test. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Sandeep Somavarapu <sasomava@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ions and improve command handling (#323931) * Enhance CopilotSlashCommandCompletionProvider with session customizations and improve command handling * Refactor CopilotSlashCommandCompletionProvider to remove unnecessary session check in _getKnownSkills and ensure sessionInfo is always accessed safely * Update commandListCalls in CopilotAgentSession tests to include skills
The Session Files list in the Changes view did not render per-file-type icons because its list was placed outside the file-icon themeable scope. Add a file-icon themeable scope to the SessionFilesWidget root node and align its resource label rendering with ChangesTreeRenderer (strikethrough for deleted files). Also document the show-file-icons requirement in best-practices. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add Che extension directories to the npm install list. Signed-off-by: Roman Nikitenko <rnikiten@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Use full git+https:// URL for @emmetio/css-parser dependency for Cachito build system compatibility (ref: che-incubator#222). Signed-off-by: Roman Nikitenko <rnikiten@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Remove (instance as any) workaround that was added to bypass mangler compilation errors (e2aa458). No longer needed since we build without mangling. Signed-off-by: Roman Nikitenko <rnikiten@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Set terminal renderer default to 'canvas' instead of 'auto' to fix invisible characters issue in web environment (ref: 9033463). Signed-off-by: Roman Nikitenko <rnikiten@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Use window.location.pathname for remote resources path instead of dynamic _remoteResourcesPath getter (ref: d04ac87). Signed-off-by: Roman Nikitenko <rnikiten@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Disable telemetry by default: TelemetryConfiguration.OFF and enableTelemetry=false (ref: 31e901d, fixes eclipse-che/che#21122). Signed-off-by: Roman Nikitenko <rnikiten@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Files silently auto-resolved incorrectly during subtree merge: - chatParticipants.ts: retained removed rateLimitWarning block - extHostSCM.ts: kept MutableDisposable instead of DisposableStore - chatModel.ts: missing GC cleanup code block Signed-off-by: Roman Nikitenko <rnikiten@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
This comment was marked as outdated.
This comment was marked as outdated.
3 similar comments
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
|
Result of After restarting failed tests: |
This comment was marked as outdated.
This comment was marked as outdated.
3 similar comments
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
2d37c39 to
a5f6fb6
Compare
This comment was marked as outdated.
This comment was marked as outdated.
1 similar comment
This comment was marked as outdated.
This comment was marked as outdated.
…r from actual workspace When the cached .code-workspace file has different folders than the real one, a race between cache load and remote file system provider registration causes compareAndDeleteFolderConfiguration() to throw "Unknown folder" — the folder exists in cachedFolderConfigs but not yet in _configuration (still initializing). This leaves workspace.initialized=false and the UI stuck without project explorer. Signed-off-by: Roman Nikitenko <rnikiten@redhat.com> Assisted-by: Cursor AI
Signed-off-by: Roman Nikitenko <rnikiten@redhat.com>
…en cached folders differ from actual workspace' Signed-off-by: Roman Nikitenko <rnikiten@redhat.com> Assisted-by: Cursor AI
769c9f6 to
7aec272
Compare
|
Pull Request images published ✨ Editor amd64: quay.io/che-incubator-pull-requests/che-code:pr-757-amd64 |
Signed-off-by: Roman Nikitenko <rnikiten@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
1fc43b3 to
b4a95a5
Compare
|
Pull Request images published ✨ Editor amd64: quay.io/che-incubator-pull-requests/che-code:pr-757-amd64 |
1 similar comment
|
Pull Request images published ✨ Editor amd64: quay.io/che-incubator-pull-requests/che-code:pr-757-amd64 |
Remove unnecessary mangler exclusions (runInTerminalConfirmationTool, mockAgent, che-api interfaces) — not needed since we build without mangling. Update rebase rule accordingly. Signed-off-by: Roman Nikitenko <rnikiten@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
|
Pull Request images published ✨ Editor amd64: quay.io/che-incubator-pull-requests/che-code:pr-757-amd64 |
What does this PR do?
What issues does this PR fix?
https://redhat.atlassian.net/browse/CRW-11625
Devspaces-auto-validation tests:
How to test this PR?
Test starting a workspace and basic functionality for the following images
Does this PR contain changes that override default upstream Code-OSS behavior?
git rebasewere added to the .rebase folder