dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Multi-directory workspaces for DeepSeek Harness — attach extra directories and manage them in the GUI. · 给工作区关联额外目录(Codex --add-dir / Antigravity 式),在界面里图形化管理。
让 DeepSeek Harness 支持多根目录工作区与上下文动态注入
灵感来自 OpenAI Codex --add-dir 与现代 AI IDE 多根目录工作区设计
在默认情况下,DeepSeek Harness 的工作区通常只绑定一个工作目录(Primary Root)。当面临以下复杂开发场景时常常受限:
frontend/ 与 backend/),智能体需要同时理解接口定义与业务实现;shared-ui/、core-lib/),需要跨目录检索却不想反复复制代码;dsh-plugin-addir 彻底打破单一工作区限制!它支持在当前工作区下关联任意多个外部目录,配合直观的图形化管理界面、自动上下文注入与细粒度只读保护,让智能体自如跨目录协同工作。
[别名]/path 或 别名:path 路径简写。只读 的目录将被文件工具守卫拦截 write / edit 操作,彻底避免智能体误改公共依赖或文档。⋯ → 编辑)。弹窗支持调用系统原生目录选择器,体验丝滑自然。$DSH_HOME/storages/addir.json),应用重启后自动恢复。addir_list、addir_add、addir_remove 工具,允许智能体在对话中动态扩展视野;也可一键关闭权限,由用户完全掌控。在工作区列表中点击目标项目的「⋯」按钮,选择「编辑」:

支持修改工作区名称、使用系统原生目录选择器添加文件夹、配置个性化别名,并可单独勾选「只读」权限:

启用 enableContextInjection 后,插件会在每轮对话自动向大模型注入当前工作区的生效目录表:
# Active Workspace Directories
- [primary] `/Users/dev/repo/frontend` (Primary root)
- [backend] `/Users/dev/repo/backend` - 核心 API 服务
- [specs] `/Users/dev/repo/api-specs` [Read-Only] - OpenAPI 契约定义
智能体能够据此识别每个目录的作用,并使用 [backend]/src/app.ts 或直接使用绝对路径进行高效分析。
⋯」→「编辑」,点击「添加文件夹」选择本地目录,设置别名(如 backend)并保存;"请阅读 [backend] 目录下的路由定义,并在当前前端项目中生成对应的 API 请求函数。"
打开 DeepSeek Harness 桌面端或 Web 端,进入 设置 → 插件管理,搜索 dsh-plugin-addir,点击安装即可。
# Web Profile(推荐在 Web 版使用)
dsh plugin --profile web add dsh-plugin-addir
# 桌面端 Desktop Profile
# 注意:桌面端首次使用请先启动一次应用以初始化 profile,完全退出应用后再执行安装命令,随后重新打开应用
dsh plugin --profile desktop add dsh-plugin-addir
# Headless / 自定义 Profile
dsh plugin --profile headless add dsh-plugin-addir
[!NOTE] 本插件自带 bundle patch(
cordis.patch.yml),安装时会自动向 profile 注册id: addir,无需手动修改配置文件。
# 克隆仓库
git clone https://github.com/keatsyh/dsh-plugin-addir.git
cd dsh-plugin-addir
# 安装依赖并构建(prepare 会自动编译 lib/ 产物)
pnpm install
# 软链接安装到目标 profile
dsh plugin --profile web add "link:$PWD"
所有配置项均有合理的默认值。您可以在 DSH 的插件设置页中直观调整,或在 profile 对应的 cordis.patch.yml 中进行配置覆盖:
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enableTools | boolean | true | 是否向智能体暴露 addir_* 工具(允许模型自己增删目录) |
enableContextInjection | boolean | true | 是否在每轮对话开始前向系统提示词注入工作区目录表 |
enforceReadOnly | boolean | true | 是否在底层工具拦截对标记为只读目录的文件写入与编辑 |
defaultDirectories | Array | [] | 启动时预先关联的静态目录列表(包含 path, alias, description, readOnly) |
- id: addir
config:
enableTools: false # 仅允许在 UI 界面中手动管理,禁止智能体自行增删
enableContextInjection: true # 保持提示词注入
enforceReadOnly: true # 开启只读保护
defaultDirectories:
- path: /data/docs/specs
alias: specs
description: API 规范文档
readOnly: true
[!TIP] 界面中所做的新增、编辑和删除操作,会实时持久化在
$DSH_HOME/storages/addir.json中,按规范化工作区根路径索引,无需担心重启丢失。
当 enableTools 开启时,智能体可自主使用以下工具:
| 工具名称 | 参数 | 说明 |
|---|---|---|
addir_list | — | 查看当前工作区已关联的所有目录(包括主根目录、别名、描述与只读标记) |
addir_add | path (必填)alias (可选)description (可选)readOnly (可选) | 动态关联一个额外目录。支持传入绝对路径或相对工作区主目录的路径 |
addir_remove | pathOrAlias (必填) | 解除关联指定目录(支持按绝对路径或别名查找,主根目录不可移除) |
如不希望智能体拥有自主挂载权限,只需将配置中的 enableTools 设为 false。
其他插件或扩展可以通过 Cordis 服务上下文直接调用 ctx.addir:
import type { Context } from '@deepseek-ai/cordis'
export function apply(ctx: Context) {
// 获取当前会话下关联的目录列表
const dirs = ctx.addir.list(sessionId)
// 动态关联额外目录
ctx.addir.add({
path: '/path/to/shared-lib',
alias: 'shared',
description: 'Shared utilities',
readOnly: true,
}, sessionId)
// 解析带别名的路径为真实绝对路径(例如 '[shared]/utils.ts' -> '/path/to/shared-lib/utils.ts')
const resolved = ctx.addir.resolvePath('[shared]/utils.ts', sessionId)
// 检查某个路径是否归属于当前工作区或其关联目录
const isIncluded = ctx.addir.isUnderWorkspace('/path/to/file.ts', sessionId)
// 检查某个路径是否处于只读保护范围内
const isReadOnly = ctx.addir.isReadOnly('/path/to/file.ts', sessionId)
}
桌面端应用在首次安装插件时,需要完全退出应用进程(macOS 请使用 Cmd + Q,Windows 请从托盘或任务管理器完全退出),再次启动应用使客户端扩展脚本加载生效。
可以。只读保护仅拦截 write、edit 等修改文件的工具调用,代码阅读(read)、检索(grep / glob)等完全正常运作。
可以。目录关联数据是严格按照各工作区的根目录路径隔离存储的,不同工作区之间的别名互不影响。
在 DSH 插件设置中将 enableTools 开关关闭(或在配置文件中设为 false),智能体将不再拥有 addir_* 工具,但您依然可以在 GUI 弹窗中手动管理目录。
# 安装依赖
pnpm install
# 运行单元测试与集成测试
pnpm test
# 类型检查
pnpm run typecheck
# 构建打包(含 client bundle 语法检查与 d.ts 生成)
pnpm run build
架构提示:客户端代码采用经典脚本与 DSH 共享模块加载器注册(
window.__ModuleLoader__.load),使用宿主提供的 React 运行时。工作区菜单入口通过 DOM 适配器挂载(src/client/workspace-menu.ts)。
本项目基于 MIT 许可证 开源。