Skip to content

工作区信任

在 Zed 中,工作树可以是 Zed 作为独立“项目”打开的目录或单个文件。 每次运行 zed some/path、将文件或目录拖入 Zed,或打开用户设置文件时,Zed 都会打开一个工作树。

每个打开的工作树可能包含一个 .zed/settings.json 文件,其中包含额外的配置选项,这些选项可能需要安装和启动语言服务器或 MCP 服务器。 为了让用户根据自己的威胁模型和风险承受能力做出选择,所有工作树一开始都处于受限模式。受限模式会阻止下载和运行 .zed/settings.json 中的相关项目。直到工作树被信任,Zed 才会运行相关的不受信任操作,并等待用户确认。这给了用户一个机会来检查项目设置、MCP 服务器和语言服务器。

Zed 仍然信任它全局安装的工具。全局 MCP 服务器和全局语言服务器(如 Prettier 和 Copilot)会照常安装和启动,与工作树信任无关。

如果工作树不受信任,Zed 会在标题栏中显示一个感叹号图标。单击此图标或使用 workspace::ToggleWorktreeSecurity 操作将弹出安全模态框,允许用户信任该工作树。

对工作树的信任决定会在重启之间保持持久。您可以使用 workspace::ClearTrustedWorktrees 命令清除所有受信任的工作树。 此命令将重启 Zed,以确保没有不受信任的设置、语言服务器或 MCP 服务器残留。

此功能在本地以及 SSH 和 WSL 远程主机上均可使用。在这些情况下,Zed 会按主机跟踪信任信息。

什么是受限

受限模式会阻止:

  • 解析和应用项目设置(.zed/settings.json
  • 安装和启动语言服务器
  • 安装和启动 MCP 服务器

配置广泛的工作树信任

默认情况下,Zed 不信任新工作树。用户必须单独信任每个新工作树。尽管不推荐,但用户可以使用此设置信任所有工作树(如何编辑):

json
"session": {
  "trust_all_worktrees": true
}

自动信任的工作树不会在重启之间保持持久;只有手动信任的工作树才会。这确保了如果用户之后禁用了 trust_all_worktrees,他们需要做出新的信任决定。

信任层次结构

这些主要是内部细节,可能会改变,但它们有助于解释如何一次性批准多个信任请求。 Zed 具有多层信任,基于请求,从最低到最高信任级别:

  • “单文件工作树”

在打开一个空的 Zed 窗口后,您可以打开一个单独的文件。在打开一个目录后,您也可以在当前目录之外打开一个文件。 一个常见的例子是 zed: open settings file,它可能启动该文件的语言服务器,并创建一个新的单文件工作树。

启动语言服务器存在风险,如果语言服务器遭受供应链攻击;因此,Zed 默认会对此进行限制。除非包含该文件的目录被信任或所有工作树都被信任,否则每个单文件工作树都需要单独的信任授权。

  • “目录工作树”

如果某个目录在 Zed 中打开,它就是一个完整的工作树。它可以启动项目设置中定义的多个语言服务器和 MCP 服务器。因此,每个目录工作树都需要单独的信任授权,除非存在父目录的信任授权(见下文)。

当目录工作树被信任时,允许下载和启动语言和 MCP 服务器,因此,在这种情况下,我们也会自动为主机启用单文件工作树信任:这在使用受信任目录工作树中的语言服务器功能时打开单个文件有所帮助。

  • “父目录工作树”

为了能够一次性信任多个目录工作树,可以通过选中相应的复选框来信任在 Zed 中打开的给定父目录工作树的所有子目录。这将授予其所有子目录的信任权限,包括所有当前和潜在的目录工作树。