Commit Graph

2652 Commits

Author SHA1 Message Date
Tyler James Leonhardt b32d032eff Add Anthropic SDK Upgrader Agent (#3459)
So that I can use CCA to do this.
2026-02-04 23:05:34 +00:00
Logan Ramos 23299a88a9 Fix errors to just say switch to auto (#3455) 2026-02-04 22:47:53 +00:00
Rob Lourens a1fc8f2717 Adopt new hook name (#3457) 2026-02-04 22:36:59 +00:00
Harald Kirschner eb0af67a38 Simple classifier (#3401)
* Simple classifier

* Add classification guidance to clarify signals are illustrative, not exhaustive

Addresses feedback from PR review to help the classifier understand that keywords,
signals, and examples are hints about categories, not an exhaustive list to match against.

* Add unknown_scope for consistency with unknown_domain

* fix: Reject empty 'PT' in ISO 8601 duration validation

The regex now uses a negative lookahead (?-200) to ensure at least one
time component (hours, minutes, or seconds) is present after 'PT'.

* feat: Add unknown_intent category to taxonomy

Fallback category for messages that are too ambiguous to classify
into any specific intent.

* feat: Add workspace and editor context to categorization prompt

Replace manual context signals with WorkspaceStructure and
CurrentEditor prompt components for richer context. These components
automatically gather relevant project and editor state.

* feat: Add currentLanguage to categorization telemetry

Capture the active editor's language ID for better analysis of
prompt classification patterns across different programming languages.

* Use tool calling for structured prompt categorization output

* Refine prompt categorization context and usage

---------

Co-authored-by: Harald Kirschner <digitarald@gmail.com>
2026-02-04 22:17:31 +00:00
Martin Aeschlimann ba03a41858 filter duplicate instruction file contents (#3453) 2026-02-04 21:40:03 +00:00
Logan Ramos e7bc310ccb Render images in history too (#3454) 2026-02-04 21:38:53 +00:00
Devraj Mehta 196023d98a Add VS Code clientName to Copilot SDK session (#3449) 2026-02-04 20:55:34 +00:00
Tyler James Leonhardt 944bddfed9 refactor(claude): extract session parser into dedicated module (#3451)
Introduce a new Claude Code Session Parser module that provides type-safe
parsing of Claude Code session files stored in JSONL format.

## Architecture

The previous monolithic claudeCodeSessionService.ts is now split into:
- sessionParser/claudeSessionSchema.ts - Type-safe validators using IValidator pattern
- sessionParser/claudeSessionParser.ts - Core parsing and session building logic
- sessionParser/claudeCodeSessionService.ts - VS Code service with caching

## Flow Diagram

```mermaid
flowchart TB
    subgraph "Entry Points"
        A[ClaudeChatSessionItemProvider] --> |getAllSessions| B[IClaudeCodeSessionService]
        C[ClaudeChatSessionContentProvider] --> |getSession| B
    end

    subgraph "Service Layer"
        B --> D[ClaudeCodeSessionService]
        D --> |metadata cache| E[_metadataCache]
        D --> |full session cache| F[_fullSessionCache]
    end

    subgraph "Directory Discovery"
        D --> G[_getProjectSlugs]
        G --> |single folder| H[computeFolderSlug]
        G --> |multi-root| I[process.cwd slug]
        H & I --> J[~/.claude/projects/slug/]
    end

    subgraph "Metadata Extraction - Lightweight"
        D --> |list sessions| K[extractSessionMetadataStreaming]
        K --> |streaming readline| L[processLineForMetadata]
        L --> |early termination| M[IClaudeCodeSessionInfo]
    end

    subgraph "Full Session Loading"
        D --> |load session| N[parseSessionFileContent]
        N --> |each line| O[parseSessionEntry]
        O --> P{Entry Type}
        P --> |user| Q[vUserMessageEntry]
        P --> |assistant| R[vAssistantMessageEntry]
        P --> |summary| S[vSummaryEntry]
        P --> |chain-link| T[vChainLinkEntry]
        P --> |queue-op| U[vQueueOperationEntry]
    end

    subgraph "Session Building"
        Q & R & S & T --> V[buildSessions]
        V --> W[Find Leaf Nodes]
        W --> X[Build Parent Chain]
        X --> Y[Resolve Chain Links]
        Y --> Z[Deduplicate by ID]
        Z --> AA[IClaudeCodeSession]
    end

    subgraph "Subagent Loading"
        D --> |has subagents dir| AB[_loadSubagentsForSession]
        AB --> |agent-*.jsonl| AC[_parseSubagentFile]
        AC --> AD[buildSubagentSession]
        AD --> AE[ISubagentSession]
        AE --> AA
    end
```

## Key Improvements

- **Type Safety**: Replaced unsafe `as` casts with composable IValidator<T> pattern
- **Error Handling**: Added detailed ParseError with line numbers and context
- **Performance**: Streaming metadata extraction with early termination for listings
- **Cycle Detection**: Proper cycle detection with visited sets (vs potential infinite loops)
- **Separation of Concerns**: Clean schema → parser → service layers

## Changes

- Moved `claudeCodeSessionService.ts` to `sessionParser/` directory
- Added type guards for TextBlock, ThinkingBlock, ToolUseBlock, ToolResultBlock
- Updated imports in chatSessions.ts, claudeChatSessionContentProvider.ts,
  claudeChatSessionItemProvider.ts
- Added comprehensive test coverage (~2500 lines) for schema, parser, and service
- Added README.md documenting the module architecture and future improvements
2026-02-04 20:55:26 +00:00
Tyler James Leonhardt 880370ce3c Update Anthropic SDK packages and fix temperature/top_p handling (#3446)
* Update Anthropic SDK packages

### `@anthropic-ai/sdk` (0.71.2 → 0.72.1)

#### Features
- Structured Outputs support in Messages API
- MCP SDK helper functions

#### Breaking Changes
- `output_format` → `output_config` parameter migration

### `@anthropic-ai/claude-agent-sdk` (0.2.5 → 0.2.31)

#### Features
- **Query interface:** Added `close()` method, `reconnectMcpServer()`, `toggleMcpServer()` methods
- **Sessions:** Added `listSessions()` function for discovering resumable sessions
- **MCP:** Added `config`, `scope`, `tools` fields and `disabled` status to `McpServerStatus`
- **PDF support:** Added `pages` field for reading specific page ranges
- **Debugging:** Added `debug` and `debugFile` options
- **Results:** Added `stop_reason` field to `SDKResultSuccess` and `SDKResultError`
- **Hooks:** Added notification hook support

#### Bug Fixes
- Fixed `mcpServerStatus()` to include tools from SDK and dynamically-added MCP servers
- Fixed PermissionRequest hooks in SDK mode
- Fixed structured output validation errors and empty assistant message handling

#### Breaking Changes
- `KillShellInput` → `TaskStopInput`: Updated type mapping in claudeTools.ts

Also improved upgrade documentation in AGENTS.md with GitHub release URLs
and consolidated summary format guidance.

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix erroring out by deleting the base's value of temperature & top_p, honoring the request.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-04 20:54:27 +00:00
Ulugbek Abdullaev f84b66e725 nes: log spec req headerRequestId and oppId (#3450) 2026-02-04 20:45:03 +00:00
Don Jayamanne 0e7329b0ac background agent stests to verify grep/glob tools (#3445)
* background agent stests to verify grep/glob tools

* Skip
2026-02-04 20:32:43 +00:00
Anisha Agarwal 7239dd454c Use the SFT + RL CAPI proxy model to power the Search Subagent (#2929)
* add a search agent endpoint & call it

* toggle between main and proxy

* add toggle that checks for manually set setting for agentic proxy

* update to use agentic proxy

* update package jsons to reflect new setting

* search subagent should be enabled for proxy to be enabled

* change to settings.json to trigger search subagent with proxy

* make config settings non-advanced

* remove search subagent settings
2026-02-04 20:31:56 +00:00
Benjamin Steenhoek db107e4f97 Fixes to adaptive aggressiveness updates (#3441)
* Add config parsing tests

* Update comment

* Add validation for rejectedScore > ignoredScore > acceptedScore

* Replace unnecessary generic type with declared type

* Send telemetry event incorrectNesAdaptiveAggressivenessConfig

* Update tests for new type declaration

* Update tests for telemetry update

* Fix validation

* Add telemetry tests for config validation

* Test actual config that was set
2026-02-04 19:42:46 +00:00
Osvaldo Ortega e2091bf24e Cloud checking for single repository (#3435)
* Cloud checking for single repository

* Decide caller when to add the options and when not to

---------

Co-authored-by: Josh Spicer <23246594+joshspicer@users.noreply.github.com>
2026-02-04 18:59:47 +00:00
Alexandru Dima 5fb39d42b8 Include enterprise_list in chat telemetry events (#3444)
Chat telemetry events (copilot-chat/*) were missing the enterprise_list
property that completions telemetry correctly includes. This caused
enterprise usage data to appear incomplete in reports.

Changes:
- Add enterpriseList to ITelemetryUserConfig interface
- Update TelemetryUserConfigImpl to extract enterprise_list from token
- Update TelemetryData.extendWithConfigProperties() to include enterprise_list
- Add unit tests for enterprise_list telemetry propagation
2026-02-04 18:54:20 +00:00
Logan Ramos 3c88945ae7 Bump engine (#3443) 2026-02-04 18:10:19 +00:00
Benjamin Pasero b4d8946004 style - fix formatting in shouldShowSession method (#3440) 2026-02-04 15:17:39 +00:00
Ulugbek Abdullaev 2623c8aea2 Add Xtab275EditIntent prompting strategy with edit intent filtering (#3439)
* Add Xtab275EditIntent prompting strategy with edit intent filtering

This adds a new prompting strategy that extends Xtab275 with edit intent
tag parsing. The model returns an edit_intent tag indicating confidence
level (no_edit, low, medium, high), which is then filtered against the
user's aggressiveness level.

Filtering logic:
- no_edit: Never show
- low intent: Show for all aggressiveness levels
- medium intent: Show for low/medium aggressiveness
- high intent: Only show for low aggressiveness

Changes:
- Add EditIntent enum and namespace with parsing and filtering logic
- Add EditWindowWithEditIntent response format
- Add Xtab275EditIntent prompting strategy
- Implement parseEditIntentFromStream in xtabProvider
- Add editIntent telemetry field
- Add comprehensive unit tests for EditIntent

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

* Short circuit when we hit a no_edit or low-confidence edit, and skip parsing the rest of the response

* Add an experimental key to telemetry to log parse errors for edit intent

* Change the filtering logic so there's only one place where edit intent short-circuits to skip the rest of the stream

* Add tests for parsing edit stream

* Log unknown values parsed during edit intent parsing

* Clean up tests

* Fix failing test by actually returning expected error

* Remove unused method

* Testing

* Fix bug where premature promise resolution was causing error streaming response

* Fix flipped confidence levels mapping to aggressiveness!

* Update comment

* Add manual test cases

* Remove manual tests

* Remove edit intent from log context

* Update doc comments

* Fix indentation src/platform/inlineEdits/common/dataTypes/xtabPromptOptions.ts

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

* Add parser for short edit intent tags

* Support short edit intent tags through another prompting strategy

* Remove unnecessary change

* Fix switch case

* Fix missing cases

* Update test constant 🤦

---------

Co-authored-by: Ben Steenhoek <bensteenhoek@microsoft.com>
Co-authored-by: GitHub Copilot <noreply@github.com>
Co-authored-by: Benjamin Steenhoek <bstee615@github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-04 12:57:46 +00:00
Josh Spicer ef78fb2313 Joshspicer/partner agent telemetry (#3438)
* partner agent telemetry (fix https://github.com/microsoft/vscode-internalbacklog/issues/6703)

* track model
2026-02-04 11:59:38 +00:00
Ulugbek Abdullaev be8a7fa8f8 Make adaptive aggressiveness configurable and update to new algorithm (#3437)
* feat(inlineEdits): make user happiness score algorithm configurable

Add UserHappinessScoreConfiguration interface and experiment-based config
to allow tuning the happiness score calculation via experiments:

- Add configurable score weights (acceptedScore, rejectedScore)
- Add configurable thresholds (highThreshold, mediumThreshold)
- Add InlineEditsUserHappinessScoreConfigurationString config key
- Load configuration from experiment service with JSON validation

The algorithm behavior remains unchanged with default values matching
the original hardcoded implementation (accepted=1, rejected=0,
highThreshold=0.7, mediumThreshold=0.4).

* feat(inlineEdits): add ignored action tracking to happiness score

Add support for tracking when users ignore (neither accept nor reject)
inline edit suggestions:

- Add 'ignored' action type alongside 'accepted' and 'rejected'
- Add handleIgnored() method to UserInteractionMonitor, XtabProvider,
  and IStatelessNextEditProvider interface
- Add configurable ignoredScore (default: 0.9, near-accept)
- Skip ignored actions in debounce time calculation

This allows the happiness score algorithm to account for suggestions
that were shown but neither explicitly accepted nor rejected.

* feat(inlineEdits): update happiness score to v2 algorithm

Implement enhanced happiness score calculation with improved handling
of ignored/not-accepted actions:

Algorithm changes:
- Add ignored action limiting via window expansion to prevent score
  dilution from long sequences of ignored suggestions
- Add normalized scoring (0-1 range based on accept/reject weights)
- Add configurable options: includeIgnored, ignoredLimit,
  limitConsecutiveIgnored, limitTotalIgnored

Default value changes (tuned via experimentation):
- rejectedScore: 0 -> 0.2 (partial credit for explicit rejection)
- ignoredScore: 0.9 -> 0.5 (neutral treatment for ignored)
- highThreshold: 0.7 -> 0.6 (slightly easier to reach high aggressiveness)

New defaults enable total-ignored limiting (max 5 ignored actions in
the 10-action window) which allows the algorithm to look further back
in history to find meaningful accept/reject signals.

* Rename adaptive aggressiveness configuration

* feat(tests): add user happiness score tests to ensure new configurable algorithm behaves like original

* Keep more items than MAX_INTERACTIONS_CONSIDERED to account for dynamic window.

* Record ignore events to user interaction monitor

* Keep old behavior for timing; use a separate array to track events for aggressiveness level, including "ignored" events

* Only log events to interaction monitor if edit was shown and not superseded

* Add unit tests for happiness calculation and history logging

* Make default config equivalent to the original formula

* Make the unit test check the actual v2 implementation

* Fix test

* Log aggressiveness level and happiness score to XTabProvider log context

* Remove local files

* Remove extra line

* Doc

* Move validator to xtabPromptOptions

* Fix typo in configuration name

* Fix fallback to 0.5 calculation to use the correct denominator

* Catch and log validation errors, fallback to default

* Revert accidental change to default adaptive mode settings. Add validator for configured values. Remove default values from comments to avoid redundancy.

* Move lint options parsing function next to its validator

* Restore vscode settings

* Added a member variable to track if the last edit was shown instead of passing wasShown. Tested that only one suggestion is shown at a time, even with side-by-side editors of the same or different file (clicking away from the editor ignores the suggestion)

* Fix test

* use an enum instead of union of strings

* do not use `as any`

* fix reversed args

* migrate to using ActionKind enum and use TestLogService

---------

Co-authored-by: Ben Steenhoek <bensteenhoek@microsoft.com>
2026-02-04 11:29:35 +00:00
Benjamin Pasero 8cc21cb9ca sessions - show all in agent sessions workspace (#3436) 2026-02-04 10:46:41 +00:00
Don Jayamanne ae64cae576 Support editor selections using copilot CLI attachments (#3429)
* Remove unwanted LM hint from background agent promtps

* Fix tests

* Fix paths on windows

* Update src/extension/agents/copilotcli/node/copilotcliPromptResolver.ts

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

* Update src/extension/agents/copilotcli/node/copilotcliPromptResolver.ts

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

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-04 06:07:09 +00:00
Don Jayamanne 56403491f9 Add some missing tests for background agent (#3433) 2026-02-04 06:04:03 +00:00
Bhavya U 629a64fa13 Cherry-pick thinking fixes from release/0.37 (#3432)
* check before enabling interleaved thinking

* fix: simplify Sonnet 4 model check in AnthropicPromptResolver

* fix: update hash check for hidden model G
2026-02-04 05:06:25 +00:00
Don Jayamanne 674a8f4e88 Remove unwanted hint from background agent prompts (#3430)
* Remove unwanted hint from background agent prompts

* Fix tests
2026-02-04 05:06:15 +00:00
Don Jayamanne e65e50b9f9 Include background attachments when there are chagnes in repo (#3431) 2026-02-04 04:19:33 +00:00
Don Jayamanne 014e348a40 Support background session folder picker with validation of existence of folder (#3426)
* Support background session folder picker with validation of existence of folder

* Fix windows tests

* Fix windows tests

* Fix paths
2026-02-04 04:04:54 +00:00
Rob Lourens bf7bcce698 Add parentRequestId for subagent telemetry (#3397)
* Add parentRequestId for subagent telemetry

* Update test snapshot
2026-02-04 03:36:23 +00:00
Rob Lourens f0c0f74cd8 Remove "you don't have to read the attachment" comment from older models prompt (#3427)
* Remove "you don't have to read the attachment" comment from older models prompt
For #284959

* Revert

* Revert this
2026-02-04 03:35:34 +00:00
Connor Peet a297186f52 tools: support vscode-chat-response-resource scheme in external file check (#3425)
Adds support for the 'vscode-chat-response-resource' scheme when checking
if a file is external and needs confirmation. This scheme is used for
chat response resources and should be treated similarly to untitled files
that don't require external file confirmation.

- Extends isFileExternalAndNeedsConfirmation to recognize the
  vscode-chat-response-resource scheme
- Allows chat response resources to be accessed without confirmation
  dialogs

Fixes https://github.com/microsoft/vscode/issues/292733

(Commit message generated by Copilot)
2026-02-04 03:19:48 +00:00
Vijay Upadya c3ebf9882d Fix Gemini BYOK telemetry: token usage capture and TTFTE improvements (#3423)
* Fix Gemini BYOK telemetry: token usage capture and TTFTE improvements

* include thoughtsTokenCount
2026-02-04 02:53:45 +00:00
Paul 6a523f4677 Add initial hooks support (#3422)
* Implement service and sample hook

* Adapt to new shape

* API version

* Update src/extension/chat/vscode-node/chatHookService.ts

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

* Update src/extension/prompt/node/defaultIntentRequestHandler.ts

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

---------

Co-authored-by: Rob Lourens <roblourens@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-04 01:40:37 +00:00
Bryan Chen 6f1d87bfa4 upload source maps on release (#3416)
* generate source maps

* feat: add source map upload functionality to Azure Blob Storage

* feat: implement Azure CLI task for uploading source maps and update package.json

* feat: update source map upload process to include extension ID in CDN path

* Use template uploadSourceMaps instead of custom script

- Remove uploadSourceMaps.ts script (template handles upload now)
- Remove @azure/storage-blob dependency
- Remove upload-sourcemaps npm script
- Update pre-release.yml and release.yml to use template's uploadSourceMaps parameter

* Add processLocalization parameter to pre-release pipeline

- Allows skipping localization (GetEnglishStrings/PushEnglishStrings) for test runs
- Defaults to true to maintain existing behavior

* Apply suggestion from @Copilot

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

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-04 00:47:39 +00:00
Tyler James Leonhardt 83959badf5 Manually invoke the AskUserQuestion tool (#3419)
Since this tool will move into Core this temporarily fixes this. When in moves to Core we won't have to deal with this.

Fixes https://github.com/microsoft/vscode/issues/292710
2026-02-04 00:21:46 +00:00
dependabot[bot] b83db04003 Bump @isaacs/brace-expansion from 5.0.0 to 5.0.1 (#3415)
Bumps @isaacs/brace-expansion from 5.0.0 to 5.0.1.

---
updated-dependencies:
- dependency-name: "@isaacs/brace-expansion"
  dependency-version: 5.0.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 22:31:56 +00:00
Ulugbek Abdullaev 581a58e889 nes: cache: cleanup: remove unused param (#3414) 2026-02-03 22:03:43 +00:00
Tyler James Leonhardt a7d08a1aa4 Align the 3 registries to one pattern (#3413)
chain imports where:
* vscode-node imports
* node which imports
* common
2026-02-03 19:56:31 +00:00
Ulugbek Abdullaev 2b3c4ffb8b nes: feat: speculative requests (#3412) 2026-02-03 18:27:38 +00:00
Ulugbek Abdullaev 26d1cfe511 nes: fix: correctly split chunks to lines for trailing newline (#3409) 2026-02-03 14:55:34 +00:00
Ulugbek Abdullaev f4aa27017e remove unused completionsProvider (#3407)
barebone ghostText reimplementation in Chat repo
2026-02-03 14:55:19 +00:00
Ulugbek Abdullaev d958a956dd nes: tests: stop trailing whitespace sensitivity on file saves (#3408) 2026-02-03 14:34:22 +00:00
Don Jayamanne e32f74182b Always show browse repository dropdown in cloud (#3388) 2026-02-03 11:32:01 +00:00
Ulugbek Abdullaev f9d3c0ce17 nes: refactor: async generator based streaming instead of pushEdit (#3384) 2026-02-03 10:14:48 +00:00
Ladislau Szomoru 625a0ee2fe Background - update badge icon (#3404) 2026-02-03 08:38:40 +00:00
Bhavya U 601a01e797 Update messages API changes in main (#3402)
* Disable beta features for inline-chat in messages API usage

* Disable all beta features for non agent location

* Refactor: Update conversation agent checks to include MessagesProxy location

* Update Anthropic thinking budget to max output tokens

* Update test

* update telemetry for  context editing with additional metrics

* fix: refine deferred loading logic for allowed conversation agents

* Remove 'experimental' tag from Messages API and budgetTokens descriptions in configuration

* Add Anthropic configuration options for Messages API and budget tokens
2026-02-03 06:19:44 +00:00
Don Jayamanne ba47da6109 Display background agent todo tool results (#3400)
* Display background agent tool results

* wip tools
2026-02-03 06:19:03 +00:00
Matt Bierner 2c2c5f19e2 Pick up latest blackbird-external-ingest-utils (#3395) 2026-02-03 06:09:52 +00:00
Ben Villalobos b65da0e983 Increase code coverage in CCR area (#3396)
* Export functions for testing

* Add tests for githubReviewAgent

* More exports

* More tests (35%)

* More tests (68%)

* More tests (82%), doReview 20%

* /no-any

* Remove unnecessary tests

* Migrate tests into doReview.spec.ts

* Address code review feedback

- Fix reverseParsedPatch test: correct line numbers to match parsePatch behavior
- Add try-finally for proper CancellationTokenSource disposal in tests

* PR feedback
2026-02-03 05:52:20 +00:00
Don Jayamanne 5e623421b5 Support question tool in background agent (#3398)
* Support question tool in background agent

* Update src/extension/agents/copilotcli/node/copilotcliSession.ts

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

* Fixes

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-03 05:52:17 +00:00
Copilot 2f5758ebac Use IFileSystemService for trajectory export operations (#3387)
* Initial plan

* Use IFileSystemService instead of vscode.workspace.fs in trajectory export

Co-authored-by: zhichli <57812115+zhichli@users.noreply.github.com>

* Use subAgentInvocationId to determine agent name for trajectories

Changed the trajectory agent name logic to use subAgentInvocationId presence
instead of subAgentName fallback. Now uses 'subagent' when subAgentInvocationId
is defined, and 'GitHub Copilot Chat' for the main agent.

* Revert "Use subAgentInvocationId to determine agent name for trajectories"

This reverts commit d045a1de6fc25a8e9abebf08bfdb607d4c9014b9.

* docs: Clarify service preference over extension APIs in copilot-instructions

Added guidance to prefer internal services (IFileSystemService, ILogService)
over VS Code extension APIs, with reasoning for testability and cross-platform
support.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: zhichli <57812115+zhichli@users.noreply.github.com>
Co-authored-by: Zhichao Li <zhichli@microsoft.com>
2026-02-03 05:42:09 +00:00