Affected area
Desktop core (Tauri / Rust)
Version or commit
v1.3.1
Environment
windows环境
liveagent:过去版本到最近最新的版本
Steps to reproduce
让子agent修改或者创建代码的时候,会用worktree来隔离,但是在执行过程中出现了这个问题。
Expected behavior
希望可以修复这个问题,让子agent也可以参与修改代码的行为。
以下文字是根据antigravity gemini-3.7-flash-medium在liveagent 1.3.1版本的代码bug预测,希望能够有所帮助:
你遇到的这个现象,是由 Windows 下 Rust 标准库 std::fs::canonicalize 的特殊规范化行为(Verbatim Path / 扩展长度路径前缀) 引起的。
1. 根本原因定位
在 Windows 操作系统中,当 Rust 后端调用 std::fs::canonicalize 解析绝对路径时,底层会调用 Win32 API 将路径转换为扩展长度前缀(Verbatim Path),即:
$$\texttt{C:\textbackslash Users\textbackslash admin\textbackslash ...} \quad \xrightarrow{\text{fs::canonicalize}} \quad \mathbf{\backslash\backslash ?\backslash}\texttt{C:\textbackslash Users\textbackslash admin\textbackslash ...}$$
产生错误的链路:
- Rust 后端未做前缀剥离:
在 subagent_worktree.rs 和 git.rs 中,创建完 Worktree 之后,直接执行了:
let worktree_root = fs::canonicalize(&target)?;
// 输出直接变成了 "\\?\C:\Users\xxx\.liveagent\worktree\..."
- 传递给前端/大模型/终端工具后的畸变:
- 转义符丢失 / 斜杠转换:前端或工具将 Windows 反斜杠
\ 统一转为正斜杠 / 时,\\?\ 会变成 //?/C:/...。
- URL 协议与 Markdown 解析:在转换成
file:// 或经过某些正则匹配/字符串分割时,由于开头的特殊问号 ?,路径经常被错误地截断或解析为 ?/ C:\... 或 \??\C:\...。
- 外部命令行(cmd/powershell/git)不兼容:Windows 自带的
cmd.exe、powershell 和部分版本的 git 无法将 \\?\ 开头的路径作为当前工作目录(cwd),会直接报错找不到目录。
2. 项目中已有的规范做法与缺失处
实际上,项目在 crates/agent-gui/src-tauri/src/runtime/platform.rs 中专门实现过去除该前缀的工具函数:
/// `fs::canonicalize` returns `\\?\`-verbatim paths on Windows. Classic Win32
/// form is required for child-process cwd (cmd.exe / Windows PowerShell
/// mishandle verbatim) and for user-facing workdir strings. No-op elsewhere.
pub(crate) fn strip_windows_verbatim_prefix(path: PathBuf) -> PathBuf {
#[cfg(windows)]
{
let raw = path.to_string_lossy();
if let Some(stripped) = raw.strip_prefix(r"\\?\UNC\") {
return PathBuf::from(format!(r"\\{stripped}"));
}
if let Some(stripped) = raw.strip_prefix(r"\\?\") {
return PathBuf::from(stripped.to_string());
}
}
path
}
但是在 Worktree 创建返回的地方(subagent_worktree.rs 和 git.rs),遗漏了对 strip_windows_verbatim_prefix 的调用,导致带有 \\?\ 前缀的裸路径被直接返回给了前端和子 Agent。
3. 解决思路
只需在 Rust 后端 subagent_worktree_create 以及 git_create_worktree 返回路径之前,用 strip_windows_verbatim_prefix(或使用 dunce::canonicalize)将 \\?\ 前缀剥除,恢复成标准正常的经典 Win32 路径格式 C:\Users\<用户名>\... 即可彻底根治。
Actual behavior
在子agent执行中,因为worktree路径生成错误导致子agent创建错误。
Logs / screenshots
No response
Pre-submit checklist
Affected area
Desktop core (Tauri / Rust)
Version or commit
v1.3.1
Environment
windows环境
liveagent:过去版本到最近最新的版本
Steps to reproduce
让子agent修改或者创建代码的时候,会用worktree来隔离,但是在执行过程中出现了这个问题。
Expected behavior
希望可以修复这个问题,让子agent也可以参与修改代码的行为。
以下文字是根据antigravity gemini-3.7-flash-medium在liveagent 1.3.1版本的代码bug预测,希望能够有所帮助:
Actual behavior
在子agent执行中,因为worktree路径生成错误导致子agent创建错误。
Logs / screenshots
No response
Pre-submit checklist