DeepSeek Harness (DSH) 的核心逻辑是“一个会话一个工作区”,即对应文件系统中的一个根目录。在实际开发中,一个完整的项目往往拆分在多个目录中(例如前后端分离、文档独立存放)。当 Agent 需要操作这些目录时,手动输入绝对路径既繁琐又容易出错(特别是在目录名高度相似时)。
dsh-workspace-plus 插件通过为工作区内的目录建立“标签 → 绝对路径”的映射,解决了这一问题。它为每个工作区提供了一套目录管理入口,并将映射表注入 Agent 的上下文中,使 Agent 能精准定位文件,无需在对话中重复粘贴路径。
核心功能¶
该插件提供三个主要交互入口:
- 工作区行上的目录按钮:在 DSH 侧边栏的工作区列表行中,会插入一个“目录”按钮。点击该按钮会弹出一个配置窗口,用于为当前工作区登记多个目录及其标签。
- 对话输入框里的
@触发器:在对话输入框中输入@,会弹出候选列表,列出当前已启用工作区的所有标签。选中标签后,会插入一个引用芯片,提交给模型的是该标签对应的绝对路径。 - 设置页面的开关:在 DSH 设置的
workspace+区域,可以为每个工作区单独开启或关闭该插件功能。默认情况下,除默认工作区外,其他工作区默认开启;默认工作区默认关闭。
使用方法¶
1. 启用功能¶
进入 DSH 设置页面,找到 workspace+ 区域。为需要使用该功能的工作区打开对应的开关。开启后,工作区行上会出现目录按钮,该工作区的对话请求会自动注入目录映射表。
2. 管理目录¶
点击工作区行上的“目录”按钮,在弹窗中添加目录。
* 添加方式:点击“选择目录”按钮打开系统原生对话框,选择路径后自动生成标签。
* 标签命名:如果选中的目录没有输入标签,系统会尝试根据目录名自动生成(如 D:\proj\my api -> my-api),纯中文目录名不自动生成。
* 状态文件:配置结果会持久化存储在 $DSH_HOME/workspaceplus/directories.json。
3. 引用目录¶
在对话输入框中输入 @,即可看到当前会话所在工作区(以及其他已启用工作区)的标签列表。
* 场景:输入 @backend,模型接收到的将是 D:\proj\backend,而非仅仅是 backend。
* 兜底:如果上下文注入因某种原因被压缩或丢失,模型仍能通过 @ 选中的绝对路径继续工作。
4. 工具调用¶
除了上下文注入,插件还提供了 workspace_dirs 工具,支持通过参数 action 进行列表、添加、移除等操作,用于在对话中动态调整目录映射。
技术实现与配置¶
数据存储¶
插件维护一份独立的 JSON 状态文件,位于 $DSH_HOME/workspaceplus/directories.json(若未设置 DSH_HOME,则位于 ~/.dsh/workspaceplus/)。文件结构如下:
{
"version": 1,
"settings": {
"defaultWorkspaceEnabled": false,
"workspaceEnabled": {
"d:\\projects\\api": true
}
},
"workspaces": {
"d:\\proj": {
"path": "D:\\proj",
"dirs": [
{
"label": "backend",
"path": "D:\\proj\\backend",
"note": "后端 API"
}
]
}
}
}
workspaceEnabled:控制每个工作区是否启用插件功能。workspaces:存储具体的目录映射关系。
上下文注入¶
插件在宿主端注册了一个 runtime-context 贡献,优先级(order)为 130。每次请求该工作区会话时,系统会将目录映射表注入到 Agent 的上下文中,明确告知 Agent 路径规则(如“标签不区分大小写”、“只在标签目录内工作”)。
HTTP 路由¶
插件提供了 POST/GET /workspaceplus/api 路由,用于与页面交互,遵循壳层的鉴权机制。
沙箱限制与注意¶
根据 DSH 的沙箱策略,每个会话只有一个可写根目录。这意味着插件虽然可以管理多个目录,但 Agent 的实际文件写入操作仍需落在当前会话的工作区根目录下,或者通过工具调用进行特定的文件系统操作。
此外,插件以 MIT 许可证开源,源码位于 GitHub。在安装前,建议查阅源码以确认其运行机制符合你的安全要求。