Historically we've tracked edits in the ChatEditingSession, which is
owned by the editor and _very_ internal and _very_ complex, for Reasons.
In the agent host world, the agent host now owns edits.
This is a minimal implementation of an IChatEditingSession that is used
for the agent host. It does not have keep/undo (the writing has been
on the wall for that for a while) which removes a large chunk of
complexity. Nevertheless, it can deliver diffs, undo/redo and restore
state.
Diffs still happen client-side, but this could be optimized in the
future.
Closes#305332
* test: add tests for external harness replacement behavior
* feat: enhance external customization item handling with storage inference and instruction enrichment
* refactor: remove workspaceSubpaths from chat session customization metadata
* Copilot CLI session 6be53c25-3ac3-44c2-97f1-846de07165de changes
* refactor: extract shared buildInstructionListItem and document provider API
Extract the instruction classification logic (applyTo parsing, badge
generation, groupKey assignment) into a shared buildInstructionListItem
method used by both the built-in and provider item paths.
Remove the instruction-specific enrichInstructionItemsFromProvider in
favor of inline logic in fetchItemsFromProvider that delegates to the
shared helper.
Add a section to the chat-customizations-editor skill documenting the
chatSessionCustomizationProvider proposed API flow.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix: address PR review — disposal fallback and agent instruction grouping
Fix disposal fallback: when an external harness that overrides a static
one is disposed, keep the active harness on the same id since the static
harness is restored. Only fall back to all[0] when no harness with that
id remains.
Fix agent instruction grouping: buildInstructionListItem now detects
well-known agent instruction files (AGENTS.md, CLAUDE.md, CLAUDE.local.md,
copilot-instructions.md) and assigns groupKey 'agent-instructions' so
they appear under the correct header for both built-in and provider items.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* revert: remove skill file edits to avoid merge conflict
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat: enhance AICustomizationListWidget with grouping and badge support for external customization items
* feat: add user data profile service and infer storage from URI in AICustomizationListWidget
* Copilot CLI session 8af2fd4a-10fe-4bba-b408-f1b90cebc8dc changes
* docs: add chatSessionCustomizationProvider API chain to customizations editor skill
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix: address PR review feedback
- Remove duplicate sectionToIcon, reuse getSectionIcon instance method
- Use Map for O(1) groupKey lookups instead of O(n²) includes/find
- Check active project root in inferStorageFromUri for Sessions window
- Set pluginUri on provider items and use it for storage inference
- Remove redundant plugin check from inferStorageFromUri (handled by caller)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Resolve merge conflict with origin/main. Remove duplicate re-export
from chatInputCompletions.ts (line 72) per review feedback. Update
notebook.chat.contribution.ts to import directly from
chatInputCompletionUtils.ts.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When clicking a walkthrough step checkbox in an expanded step, a blue
focus border appeared and persisted until clicking elsewhere. This was
caused by the codicon element receiving tabindex='0' when the step
expands, making it focusable on mouse click with no CSS rule to suppress
the default outline.
Added :focus (outline: none) and :focus-visible (outline with focusBorder)
rules for .getting-started-step .codicon, mirroring the existing pattern
used for button elements in the same file.