Agent sessions anchor to the Windows host instead of WSL, and session state is split across two session-store.db files
还没有人认领这个 Issue。
- 主要语言
- Shell
- 星标
- 11.2k
- 派生
- 1.9k
- 平均合并
- 14 小时 16 分钟
- 30 天内合并 PR
- 6
描述
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.
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先跟踪无工作区 agent chat 的初始化过程,以及它如何选择执行上下文;然后检查此处所述的 session-store.db 路径和 listSessions/session-state 处理。将其行为与 Remote - WSL 以及相关 issue #4216 进行比较。完成标准是:由 WSL 支持的会话使用预期的 distro 上下文,或明确显示交接,并且能够跨越这一边界发现会话历史记录。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- linux, rust, shell, ubuntu, vscode
- 领域
- desktop, developer-experience, devtools, operating-systems
- Issue 类型
- 功能
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 活跃
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100