Agent sessions anchor to the Windows host instead of WSL, and session state is split across two session-store.db files
Personne n'a encore pris cette issue.
- Langage dominant
- Shell
- Étoiles
- 11.2k
- Forks
- 1.9k
- Merge moyen
- 14 h 16 min
- PR mergées (30 j)
- 6
Description
Describe the bug
On a Windows host where all development happens inside WSL2, agent chat sessions initialize on the Windows side rather than in the WSL distro. This mirrors #4216 (same fragmentation reported for SSH dev containers) but for WSL, which is a far more common setup.
Two distinct problems result:
- Wrong execution context. A workspace-less chat gets a Windows scratch CWD and Windows-hosted tooling, even though the user's toolchain, runtimes, dotfiles, and repos live in WSL. Invoking WSL from the session lands in
/mnt/c, not the Linux filesystem. - Split session state. Windows and WSL each maintain a separate
~/.copilotroot with its ownsession-store.db. A conversation started on one side is not visible or resumable from the other, so a discussion cannot be handed off to a WSL-backed workspace — it must be restarted as a new session with a manually re-pasted context summary.
Affected version
Not resolvable — no copilot binary is on PATH on either the Windows host or in WSL, as this is the VS Code-embedded agent surface rather than a standalone CLI install. ~/.copilot/logs confirms it is nonetheless this project:
[INFO] Starting CLI in server mode (stdio)
[INFO] Starting CLI in stdio mode (Rust JSON-RPC engine)
[INFO] CLI server ready (stdio mode, Rust JSON-RPC engine)
Steps to reproduce the behavior
-
On Windows 11 with WSL2 (Ubuntu) installed, open a workspace-less Copilot agent chat from VS Code.
-
Ask the agent for its current working directory. It reports a Windows path:
C:\Users\<user>\.copilot\chats\<session-uuid> -
Have the agent invoke WSL. It lands in the
drvfsmount rather than the Linux home:$ wsl.exe -d Ubuntu -e bash -lc 'printf "cwd=%s\n" "$PWD"' cwd=/mnt/c/Users/<user>/.copilot/chats/<session-uuid>Any Linux tooling therefore defaults to
/mnt/c, which is materially slower for dependency-heavy projects and file watchers, and has different permission/symlink/case semantics than~. -
Enumerate both state roots. They are separate, and not even structurally equivalent:
# Windows: %USERPROFILE%\.copilot chats/ ide/ installed-plugins/ instructions/ logs/ session-state/ config.json session-store.db session-store.db-shm session-store.db-wal -> session-state entries: 6 -> chats entries: 9 # WSL: ~/.copilot ide/ installed-plugins/ logs/ session-state/ config.json session-store.db session-store.db-shm session-store.db-wal -> session-state entries: 0The Windows root has
chats/andinstructions/directories that the WSL root lacks entirely. -
Confirm the boundary itself is otherwise healthy — a file written in WSL is immediately readable from Windows, so this is not a connectivity or permissions limitation:
$ wsl.exe -d Ubuntu -e bash -lc 'echo hello-from-wsl > ~/probe.txt' $ Get-Content \\wsl.localhost\Ubuntu\home\<user>\probe.txt hello-from-wsl
Expected behavior
- When the user's development environment is WSL, the agent session should be able to initialize inside the WSL distro — or at minimum offer an explicit, discoverable way to target it — the same way Chat does under Remote - WSL.
- Session history/state should be discoverable across the boundary, so a chat can be handed off to a WSL workspace session without losing continuity.
Any one of these would substantially help, roughly in order of preference:
- Let an agent session target a WSL distro as its execution context, so tools run natively in Linux with a
~-rooted CWD. - Make session state discoverable across the boundary, so a Windows-side chat can be resumed or explicitly handed off to a WSL session.
- Failing both, surface the anchoring clearly in the UI so the mismatch is obvious up front rather than discovered midway through a task.
Additional context
Environment
- Operating system: Windows 11 (host)
- CPU architecture: x86_64
- WSL: Ubuntu, WSL2, kernel
6.18.33.2-microsoft-standard-WSL2(adocker-desktopWSL2 distro is also present) - Shell: PowerShell on the host; bash in WSL
- VS Code: 1.134.0 (
110a328ea54b42367b803ec53ee0bf52ef26b419, x64)
Impact
- The agent cannot reach WSL-installed toolchains, runtimes, or language servers without every command being manually wrapped in
wsl.exe -d <distro> -e bash -lc '...'. - Shell state (
cd, exports, virtualenv activation) does not persist across wrapped invocations, so multi-step Linux work is fragile. - Windows and WSL have separate Git configs, credentials, SSH agents, and package caches, so results differ depending on which side ran the command.
- Discussion or triage done in a Windows-anchored chat cannot be continued in a WSL workspace session; context must be manually re-established.
Related issues
- #4216 reports the same host-vs-remote fragmentation for SSH dev containers. This is the WSL case; a shared fix for "respect the workspace's remote context" would likely cover both.
- #3652 (
area:sessions,area:platform-windows) shows the session layer already struggles across the WSL boundary —listSessionstaking 40–80s plusFailed to create database... unable to open database filelooks like the same split-state design surfacing as a perf/IO bug. - #3528 and #3515 show session CWD/anchoring is fragile more generally.
- #3212 (canonical vs symlink paths on WSL) is the related path-translation friction.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par retracer l’initialisation du chat d’agent sans workspace et la manière dont il sélectionne le contexte d’exécution, puis examinez les chemins de session-store.db et la gestion de listSessions/session-state décrites ici. Comparez le comportement avec Remote - WSL et l’issue associée #4216. Le travail est terminé lorsque les sessions prises en charge par WSL utilisent le contexte de distribution prévu ou exposent clairement un transfert, et que l’historique des sessions est découvrable de part et d’autre de la frontière.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- linux, rust, shell, ubuntu, vscode
- Domaine
- desktop, developer-experience, devtools, operating-systems
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- Active
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100