DSH 关联工作区:多目录项目上下文与只读检索

前言

在 DeepSeek Harness(DSH)里做全栈或组件库联调时,会话通常只绑定一个工作区根目录。组件库、后端服务或参考仓库若在别的路径,模型要么看不到,要么只能靠你反复粘贴路径和片段。下面介绍社区插件 dsh-linked-workspaces(维护者 NingTiAn-byte):为主项目配置关联目录,在同一会话里按别名搜索和读取,并保留文件来源与会话级配置快照。

这是什么

dsh-linked-workspaces 是 DSH 的客户端类插件(当前版本 0.3.0)。它为单个 DSH 项目设置主工作区,并关联本机上的其他目录(例如组件库、后端或参考项目)。关联关系保存在 DSH 存储域中,不向用户仓库写入配置文件。插件通过 bundle patch 安装,无需手改 DSH 源码;支持本机文件系统与 DSH Web 客户端(桌面端复用同一 Web 客户端)。

兼容 DeepSeek Harness 0.2.1-alpha.4 与 0.2.1-rc.2,需要 Node.js 22.19+。许可证为 MIT。

核心功能

关联目录与别名

  • 最多关联 16 个本机目录;不支持 SSH、容器路径或远端文件系统后端。
  • 别名以小写字母开头,可含小写字母、数字、下划线和连字符,最多 32 字符(例如 components、server)。
  • 路径经 realpath 规范化;拒绝重复、别名冲突和父子目录重叠。配置的根目录目标变化后需要重新关联。

项目右键菜单(快捷入口)

在 DSH 左侧项目名称上右键,可 添加关联工作区… 或 管理关联工作区。从已有工作区选择、或 选择本机目录… 后,会自动生成别名并保存,无需再进管理页填写。新会话自动继承项目配置;已有会话保留旧快照,可在管理页 同步到所选会话。侧栏「关联工作区」管理页仍可用于改别名、移除关联和面板内搜索。

面板搜索与预览

在管理面板中可按文件名或文本搜索,结果以 components/src/Button.tsx 这类带别名前缀的路径展示。点击结果可预览带行号的文本,并加载适用目录链上的 AGENTS.md(不额外加载 CLAUDE.md 或跨目录规则继承)。

模型工具(只读)

工具 功能
linked_workspace_list 列出当前会话快照里的主目录、关联目录和可用状态
linked_workspace_search 在指定别名或全部目录进行不区分大小写的字面文件路径/文本搜索
linked_workspace_read 按相对路径读取带行号文本,并返回根目录至文件父目录的 AGENTS.md

工具不提供写入、删除、依赖安装或命令执行。「关联工具只读」仅指上述工具;不限制原有 shell、文件工具或其他插件,DSH 现有 sandbox 与权限模型继续生效。关联目录清单也不是整台机器的读取白名单。

会话快照

项目配置变更后,已有会话保留旧快照;在面板选择空闲会话并点击 同步到所选会话,下一次模型请求才采用新快照。快照以 plugin:linked-workspaces/snapshot 形式由宿主 projection 恢复;继续会话与分叉会继承已记录的快照。

安装与启用

从 GitHub Release 安装预构建包。将 web 换成你实际使用的 profile:

dsh plugin --profile web add https://github.com/NingTiAn-byte/dsh-linked-workspaces/releases/download/v0.3.0/dsh-linked-workspaces.tgz --ignore-scripts --config.auto-install-peers=false

Windows 桌面发行版启动器未加入 PATH 时,可先定位 CLI 再执行同样参数:

$dshCli = Join-Path $env:LOCALAPPDATA 'Programs/DeepSeek Harness/resources/runtime/cli/bin/dsh.cmd'
& $dshCli plugin --profile web add https://github.com/NingTiAn-byte/dsh-linked-workspaces/releases/download/v0.3.0/dsh-linked-workspaces.tgz --ignore-scripts --config.auto-install-peers=false

按宿主提示重新启动相应 profile 并刷新页面。同一安装包适用于 alpha.4 与 rc.2;安装时保留 --ignore-scripts --config.auto-install-peers=false。

典型用法

右键快速关联

  1. 在左侧项目名称上右键,选择 添加关联工作区…。
  2. 从已有工作区选 添加此工作区,或 选择本机目录… 选中目录。
  3. 别名自动生成并保存;新开会话继承配置。

管理页与对话

  1. 添加主项目工作区后,在左侧进入「关联工作区」并选中该项目。
  2. 从「从已有工作区添加」或「添加目录」(本机绝对路径)加入关联,设置别名与用途后保存。
  3. 在主工作区开始会话;模型首次处理请求时继承当时配置并获得目录清单。
  4. 可对模型说:「从 components 中找到 Button 的实现,阅读它的使用约束,再在主项目中复用。」

关联目录不会自动成为主项目的包依赖;复制源码、本地包链接和改构建配置仍由任务本身决定。会话仍属于原主工作区;切换主工作区请通过 DSH 工作区入口新建或打开会话。

搜索、读取与存储

搜索会跳过符号链接与 junction;读取拒绝最终指向目录外的符号链接。搜索排除隐藏项(.github 除外)、.env、常见私钥与凭据文件,以及 .git、node_modules、dist 等目录;当前不解析 .gitignore。文本工具不支持二进制文件;达到遍历、时长、大小或结果上限时可能返回 truncated。

项目配置保存在 DSH storageDomain 的 local_linked_workspaces 域(JSON 后端下为 local_linked_workspaces.json),按工作区 ID 索引。管理与搜索 HTTP 接口挂在 DSH 已认证的 Connection exact Fetch route 上,仅 owner Peer 可调用;插件不另开监听端口。

可在插件配置中覆盖读取与搜索相关的整型上限,例如 readMaxBytes(默认 65536)、searchMaxResults(默认 40)、searchTimeoutMs(默认 5000)等,详见仓库 README 配置表。

适用场景与注意

适合:主仓与组件库/后端分目录存放、需要在一次会话里按别名检索并只读阅读多仓代码与 AGENTS.md 的 DSH 用户。

注意:

  • 插件以当前 DSH 进程权限访问本机路径;安装前请阅读 GitHub 源码 与 MIT 许可证。
  • 第一版不统一各仓 Git 操作、不安装依赖、不建立构建联动,也不增加跨目录写权限。
  • 不要让多个独立 DSH 进程同时写同一 JSON 存储目录;多窗口同一实例内有版本冲突检测,冲突后需刷新再保存。
  • 项目右键菜单通过 shell.overlay 识别 data-row-key="workspace:…" 实现;后续 DSH 若改动项目行结构,需重新验证,管理页入口可独立使用。

DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区收录,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-linked-workspaces 把「主项目 + 多个本机关联目录」收进同一会话的清单、快照和只读工具里,并用右键菜单降低配置成本。需要细节、配置项与开发验收步骤时,以仓库 README 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye