Codex VS Code 创建聊天时报错“AbsolutePathBuf deserialized without a base path”,一个已复现原因是当前工作区包含非 file: 协议的虚拟文件夹。扩展把所有工作区 URI 的 fsPath 当成本机路径发送给 Codex 核心;在 Windows 上,部分虚拟 URI 会转换为没有盘符的 Root 一类字符串。Rust 核心要求绝对路径,反序列化整个请求时就会拒绝该值。
公开复现使用 Windows、VS Code 1.131.0 和 Codex 扩展 26.721.41059,较早的 26.721.30844 也能复现。只要工作区中存在一个由 FileSystemProvider 提供的虚拟文件夹,新建聊天就可能失败。
常见来源包括 GitHub Repositories、Remote Repositories、Azure Repos 和第三方虚拟文件系统。即使多根工作区的第一个目录是正常本地文件夹,只要后面还有一个不合格的虚拟根,整个请求仍会失败。
Codex 核心使用 AbsolutePathBuf 表示工作目录和工作区根。该类型要求输入已经是完整绝对路径,但扩展提交了缺少基础路径的字符串,因此错误发生在请求反序列化阶段。
它不会先创建聊天再忽略坏目录,而是把全部根目录作为一个请求解析。任一条路径不符合契约,整个新聊天创建都会失败,所以界面只显示底层路径类型错误。
| 工作区 URI | Windows fsPath 示例 | 能否作为原生工作目录 |
|---|---|---|
| GitHub 虚拟仓库 | microsoftvscode | 不能,缺少盘符或 UNC 主机 |
| 自定义虚拟根 | Root | 不能,属于盘符相对形式 |
| 映射到本机目录的 provider | C:Usersmeanchor | 可以 |
| 本地 file URI | C:Usersmeproject | 可以 |
关键不是 URI 名称,而是最终路径是否能作为操作系统原生的完全限定工作目录。
vscode-vfs: 协议。AbsolutePathBuf 错误。为了证明多根工作区也受影响,可以再添加一个正常的本地文件夹。若错误仍存在,就说明一个虚拟根足以使整个请求失败,而不是第一个工作区根选择错误。
把虚拟目录从当前工作区移除,只保留真实本地目录,然后重新创建聊天。对于只存在于远程 provider 中的仓库,应先克隆到本地磁盘:
git clone repository-address
cd repository-directory
code .
打开 Codex 面板,确认项目指向这个本地目录后再发送提示。不要在同一个多根工作区中保留原虚拟根,否则坏路径仍可能随请求一起发送。
普通资源管理器不会总是明显显示 URI scheme。可以检查工作区文件:
{
"folders": [
{ "path": "C:\src\local-project" },
{ "uri": "myfs:/Root" }
]
}
带 uri 且不是 file: 的条目通常是虚拟工作区。另一个信号是窗口由“Open Remote Repository”一类命令创建,而本地磁盘上没有对应仓库目录。
保存修改前备份 .code-workspace 文件。移除条目只会改变工作区组成,不会把远程仓库自动下载到本地。
公开代码显示,扩展会映射全部 workspaceFolders,再把结果用于活动工作区根和工作区选项。请求反序列化是整体操作,不会因为第一个根有效就跳过后面的无效根。
因此,改变根目录顺序通常只是碰运气,不能构成修复。用户侧必须移除或关闭虚拟根,扩展侧则应在发送请求前过滤不能作为原生工作目录的值。
从扩展开发角度看,直接判断 uri.scheme === 'file' 虽然能排除常见虚拟 URI,却可能误删合法的 passthrough provider。某些 provider 使用自定义 scheme,但其 fsPath 最终确实是完整的本机路径。
真正的契约应是“最终字符串是不是完全限定的原生绝对路径”。Windows 上通常要求盘符加根分隔符,或合法 UNC 路径;POSIX 上则要求以 / 开始。
Windows 的 path.win32.isAbsolute 会把 Root 判断为绝对形式,但它没有盘符或 UNC 主机,仍不能满足 Codex 核心的完整路径要求。因此,只调用通用 isAbsolute 可能让同一个错误值继续通过。
扩展需要验证盘符根路径或 UNC 路径,并为 POSIX 单独处理。过滤后如果仍有合法根,可以用第一个根作为工作目录;如果一个都没有,应显示“Add a project to use Codex”一类可理解状态,而不是发送必然失败的请求。
fsPath。cwd 和 workspaceRoots。扩展还应声明对 virtual workspace 的支持程度,让 VS Code 在功能受限时提前提示,而不是默认表现为完全支持。
| 工作区组合 | 预期结果 |
|---|---|
| 仅本地 file 根 | 聊天正常创建 |
| 仅普通虚拟根 | 提示添加本地项目,不提交坏路径 |
| 本地根加虚拟根 | 过滤虚拟根,使用本地根 |
| 虚拟根加本地根 | 结果与顺序无关 |
| 自定义 scheme 映射完整路径 | 若路径契约满足则保留 |
| Windows 盘符相对路径 | 拒绝并给出可理解提示 |
| UNC 路径 | 合法时正常使用 |
AbsolutePathBuf。如果纯本地 file: 工作区也同样失败,就不能直接归因于这一缺陷。相同错误还可能来自 WSL 路径、恢复后的远程会话或其他路径转换问题,应另行保存日志和复现条件。
在这个可复现问题中,原因不是聊天内容或 API 密钥,而是扩展把虚拟工作区 URI 派生出的非完整路径传给了要求绝对路径的 Rust 核心。用户当前最可靠的规避方式是只在真实本地项目目录中创建聊天,并从多根工作区移除虚拟根。永久修复需要扩展在请求前验证最终原生路径、过滤不合格根,并在没有可用项目时显示明确提示。
tlwdr7660千兆版怎么设置穿墙(tlwdr7660千兆版设置穿墙方法)
tlwdr7661千兆版路由器怎么设置为副路由器(tlwdr7661千兆版路由器设置为副路由器方法)
myLocalKb 如何通过 Ollama 和向量搜索实现离线文档问答?
mcp-local-knowledge 如何让 AI 在本地语义搜索 DOCX、PPTX 和 PDF?
tlwdr7661千兆版路由器怎么设置穿墙(tlwdr7661千兆版路由器设置穿墙方法)
Codex VS Code 插件为何在 Ubuntu 24.04 上无法加载?