You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Visual Studio Copilot sessions from Visual Studio 2026 are currently missed because the parser only discovers the older VSGitHubCopilotLogs/traces layout. The new Visual Studio layout stores Copilot Chat data under each project’s .vs/<ProjectName>/copilot-chat/<thread>/sessions/<GUID> tree, so a configured project root or .vs root produces no Visual Studio Copilot sources today.
This teaches the existing Visual Studio Copilot provider to recognize the project-local session layout while keeping the current shared-trace behavior intact. Discovery, changed-path classification, watch planning, and source identity stay in the provider that already owns the Visual Studio Copilot surface, and payload parsing still reuses the current normalization path where the on-disk JSONL shape matches. The update also keeps mixed legacy and VS 2026 storage on one canonical session source, so the same conversation ID does not get rewritten from two competing file identities.
The focused coverage proves that project-root and .vs-root discovery find Visual Studio 2026 session files, that delete and write handling classify the new layout correctly, that the watch plan covers the nested session roots Visual Studio 2026 writes under, that non-GUID extensionless files stay rejected, and that legacy *_VSGitHubCopilot_traces.jsonl sources still discover and resolve exactly as before.
Summary verdict: Two medium correctness issues remain in the Visual Studio 2026 Copilot session handling; no security findings were reported.
Medium
Location: internal/parser/multi_session_container.go:289 Problem: Deleted VS2026 session files are emitted as virtual tombstones, but those tombstones cannot be processed. Fingerprinting still stats/hashes the deleted container and returns os.ErrNotExist; even if parsing were reached, skipOutcome would skip without ForceReplace because the container is missing. The new test only checks classification, so the stale archived row would remain while sync records an error. Fix: Add explicit missing owned-member tombstone handling that returns a zero fingerprint and a ForceReplaceSkipNoSession outcome, or stop emitting these tombstones if deletion should preserve the archive. Cover the full fingerprint/parse or engine sync path in a test.
Location: internal/parser/visualstudio_copilot.go:289 Problem: Raw export for newly supported VS2026 sessions fails. SplitVisualStudioCopilotVirtualPath now accepts extensionless VS2026 session files, so session export routes them through WriteVisualStudioCopilotConversationJSONL, but that function only scans sibling *_VSGitHubCopilot_traces.jsonl files and never reads the extensionless session file itself. Fix: Special-case VS2026 session paths in WriteVisualStudioCopilotConversationJSONL to filter/write the session file directly, and add an export test for a VS2026 virtual path.
Summary verdict: One medium issue remains; no high or critical findings were reported.
Medium
internal/parser/visualstudio_copilot_provider.go:246: VS 2026 session files are stored as virtual path#conversationID sources, but the direct sync path resolver only expands physical legacy trace files. session sync <VS2026 session file> will sync the file, then fail to find the resulting session because resolveSessionIDByPath queries the physical path exactly.
Suggested fix: Update directBackend.resolveSessionIDByPath to also match file_path LIKE <physical VS2026 path>#% for VS 2026 session files, and add a direct-service test mirroring the existing Visual Studio Copilot physical trace tests.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Visual Studio Copilot sessions from Visual Studio 2026 are currently missed because the parser only discovers the older
VSGitHubCopilotLogs/traceslayout. The new Visual Studio layout stores Copilot Chat data under each project’s.vs/<ProjectName>/copilot-chat/<thread>/sessions/<GUID>tree, so a configured project root or.vsroot produces no Visual Studio Copilot sources today.This teaches the existing Visual Studio Copilot provider to recognize the project-local session layout while keeping the current shared-trace behavior intact. Discovery, changed-path classification, watch planning, and source identity stay in the provider that already owns the Visual Studio Copilot surface, and payload parsing still reuses the current normalization path where the on-disk JSONL shape matches. The update also keeps mixed legacy and VS 2026 storage on one canonical session source, so the same conversation ID does not get rewritten from two competing file identities.
The focused coverage proves that project-root and
.vs-root discovery find Visual Studio 2026 session files, that delete and write handling classify the new layout correctly, that the watch plan covers the nested session roots Visual Studio 2026 writes under, that non-GUID extensionless files stay rejected, and that legacy*_VSGitHubCopilot_traces.jsonlsources still discover and resolve exactly as before.Fixes #890