Skip to content

fix(parser): support Visual Studio 2026 Copilot sessions#919

Open
rodboev wants to merge 4 commits into
kenn-io:mainfrom
rodboev:pr/visualstudio-2026-copilot
Open

fix(parser): support Visual Studio 2026 Copilot sessions#919
rodboev wants to merge 4 commits into
kenn-io:mainfrom
rodboev:pr/visualstudio-2026-copilot

Conversation

@rodboev

@rodboev rodboev commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

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.

Fixes #890

@roborev-ci

roborev-ci Bot commented Jun 29, 2026

Copy link
Copy Markdown

roborev: Combined Review (b9fe203)

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 ForceReplace SkipNoSession 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.


Panel: ci_default_security | Synthesis: codex, 10s | Members: codex_default (codex/default, done, 6m17s), codex_security (codex/security, done, 2m37s) | Total: 9m4s

@roborev-ci

roborev-ci Bot commented Jun 29, 2026

Copy link
Copy Markdown

roborev: Combined Review (4788ea0)

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.


Panel: ci_default_security | Synthesis: codex, 7s | Members: codex_default (codex/default, done, 6m45s), codex_security (codex/security, done, 2m13s) | Total: 9m5s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

Support Microsoft Visual Studio 2026

1 participant