🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

AngelosZou/dsh-multi-folder

DeepSeek 客户端兼容 / 相关生态spec-screened扫描:低风险在 GitHub 查看 ↗
✓ 可直接安装

为 DeepSeek Harness 项目提供副工作目录——不离开主工作区,同时编辑源码库、测试库与文档库。

自动检查通过:npm 包已发布且 engines 声明满足基线(声明 Node >=20);该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/9/19 · 已提供中文文档

DeepSeek Harness 项目的辅助工作目录——无需离开主工作区,即可并排编辑源代码仓库、测试仓库和文档仓库。

综合分
37.7
GitHub 分
37.7
用户评分
—
★ Stars
9
周下载量
—
兼容 / 相关生态插件(非 dsh 原生,请按其对应运行时安装)
git clone https://github.com/AngelosZou/dsh-multi-folder.git
信任档位:已验证本站已于 4 天前真实安装成功(L4 · 真实安装)
是什么
生态插件(可安装,未声明 dsh 能力)
装得上吗
本站已真实安装成功(L4 · 真实安装,非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 6 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/21
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/21(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-multi-folder @ 0.2.4
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/21 20:15:20

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
dsh-multi-folder

为 DeepSeek Harness 项目提供副工作目录——不离开主工作区,同时编辑源码库、测试库与文档库。

License: MIT
Node.js >= 20
npm version
GitHub issues
Awesome DSH Plugin

一个 DeepSeek Harness 插件 bundle,为一个 Project(工作区)提供一组副工作目录:

- Agent 的核心 cwd 等属性始终指向主工作目录;
- 在 Workspace Write 模式下,Agent 对配置的副工作目录拥有与主工作目录同等的读取、写入、编辑与命令执行权限——实现方式是重定向会话自身的沙箱策略根,因此每种模式语义都自然保持(read-only 依旧拒绝、workspace-write 放行、danger-full-access 放行);
- 目录列表注入系统提示词,每次组装按会话求值;
- 配置变更通过不打断的消息队列通知 Agent——在下一次消息边界(用户发送或工具调用结束)送达,且仅在目录集合实际变化时发送;
- 会话开始前即可配置:会话创建页(新会话界面)提供「多工作目录」入口(英文界面显示 "Multi-folder"),通过无会话远程 API(multiFolder/ 端点)读写同一份 per-workspace 配置——无需 session id;
- 不新增任何工具:改动全部位于框架级(工具流水线拦截)与 UI 级(会话级头部入口)。

环境要求

- Node.js >= 20
- 由 @deepseek-ai/dsh-base + @deepseek-ai/dsh-web-app 组成的 DSH profile

安装

将本仓库链接进 DSH profile:

dsh plugin --profile web add dsh-multi-folder

然后重启 DSH 后端(宿主组合在进程启动时装载)并刷新浏览器页面(客户端 bundle 以 no-cache 提供)。

兼容性

请选择与你的 DeepSeek Harness 版本匹配的插件版本:

| DeepSeek Harness | 安装 |
| --- | --- |
| 0.1.1 及更早 | dsh-multi-folder@0.1.7 |
| 0.1.2-alpha 及更新 | 最新版 dsh-multi-folder |

使用

会话头部出现「多工作目录」按钮(英文界面显示 "Multi-folder");会话创建页的入口位于输入框上方——与 git 分支胶囊同一条 dock 带,左边缘对齐新会话界面的工作区/预设胶囊,点击后面板以锚定在该胶囊上的浮层展开。会话创建页始终只显示一个入口:插件注册三个候选座位并选用当前可用的最佳者(上游 conversation.hero.workspaceExtras chip > conversation.input.dock 行 > 两者皆未声明时的右下角浮动按钮)。打开面板即可:

| 操作 | 行为 |
| ---- | ---- |
| 添加目录 | 打开原生目录选择器 |
| 移除 / 刷新 | 立即生效 |
| 切换会话 | 面板自动切换为该会话的副工作目录 |
| 重新打开面板 | 使用会话级缓存,不产生冗余命令行 |

等价的用户斜杠命令:

/multi-folder list
/multi-folder add "D:\path\to\repo"
/multi-folder remove "D:\path\to\repo"
/multi-folder set "D:\a" "D:\b"

Agent 无需任何额外操作:read / glob / grep 随处可用;write / edit / pwsh / bash 在路径(或 workdir)落入副目录时自动拦截并以该目录为沙箱根执行。

权限模型

每条受沙箱约束的命令只拥有唯一一个可写根——即本次调用被换根到的那个目录(Windows ACL runner 为每个进程树只授予一个工作区写 SID)。由此:

- cwd 停留在主工作区的命令不能在副目录创建文件。git -C  commit、脚本内 cd 、git clone  、按绝对路径写文件等都会以操作系统级 Permission denied 失败(例如 fatal: Unable to create '.../.git/index.lock': Permission denied)。
- 对称地,被换根到副目录的命令在同一次调用中也不能写主工作区(或另一个副目录)。
- 创建文件的命令必须把 workdir 设为它要写入的目录,且必须使用该目录的绝对路径——相对 workdir 只会相对主工作区解析;在命令内部切换进程目录(Set-Location / cd)也不会扩大可写根(写入会以操作系统级拒绝失败,Windows 错误码 5)。对 git 而言,请进入仓库目录执行(workdir 指向该仓库),而不是从主工作区用 git -C。该规则同样适用于 run_in_background: true 的后台任务。
- 读操作不受限制,无需 workdir。

当 shell 命令以这类拒绝失败且命令引用了已配置的副目录时,插件会在工具结果后附带一条简短的诊断提示,说明 workdir 的修正方式。后台任务的拒绝发生在工具调用返回之后,只出现在该任务的 job_output 输出里,那时不会再附带提示——请读取任务输出,并用绝对 workdir 重跑。

工作原理

- 拦截——监听 tools/execute 环绕分派瀑布,对解析路径(或 workdir)落在副目录内的 write / edit / pwsh / bash 调用短路,并以换根后的会话站立策略({ ...standingPolicy, workspaceRoot: secondaryDir })执行。模式本身不变,因此各种沙箱模式与主工作区的语义天然一致。匹配前先经 fs.resolve + processPath 规范化,..、符号链接与大小写差异均正确处理。
- 提示词注入——一个有序 systemPrompt 段落,text provider 每次组装按会话求值,仅为配置了副目录的会话渲染。
- 通知——命令处理器仅在目录集合实际变化时置位 pending notice;agent/pre-step(前置注入进入批次)与 tools/post-execute(附加为 additionalContexts)两个通道中先触发者消费——均使用框架原生的插件来源 notice 上下文。
- 配置与安全边界——per-workspace 配置存储于 Agent 沙箱之外的宿主自有目录(/storages/multi-folder/.json)。对配置文件的任何直接 write/edit 都会收到显式拒绝——Agent 永远无法自我授予目录,配置权仅属于用户。详见 SECURITY.md。
- 无会话远程 API——经 ctx.typert.register 注册 multiFolder 命名空间(手写 src-json 描述符),并以普通对象服务 multiFolder 提供;list/add/remove/set 以工作区路径为键,与 /multi-folder 命令共享同一套校验核心,因此会话尚未建立时创建页也能直接配置。
- 客户端——手写维护的 factory bundle(window.__ModuleLoader__.load),无需构建工具链;面板经两条通道驱动宿主:会话内走 Remote BFF(ctx.remote.commands.execute),无会话端点走共享 /api RPC 通道(ctx.connection.rpc.call)。

目录结构

| 路径 | 作用 |
| ---- | ---- |
| cordis.patch.yml | profile patch 层,插入 dsh-multi-folder 行 |
| lib/index.js | 宿主插件:配置存储、工具流水线拦截、提示词注入、双通道通知、/multi-folder 命令、无会话 multiFolder/ 远程 API |
| lib/client.js | 客户端插件(factory bundle):会话头部按钮 + 覆盖层面板 + 会话创建页入口(输入框上方的 dock 胶囊 / 上游 hero chip / 右下角兜底浮动按钮) |
| test/ | 免 DSH 运行时的行为测试(见开发) |
| docs/ | 设计与分析文档 |

开发

零构建步骤:宿主半边为纯 ESM,lib/client.js 为 DSH client-modules 格式的手写 factory bundle。测试直接用 Node 运行:

node test/smoke-host.mjs    # 宿主 apply 冒烟 + 远程 API 行为
node test/intercept.mjs     # 拦截 / 命令 / 通知行为
node test/smoke-client.mjs  # 客户端 bundle 与面板流程(React shim)

修改 lib/client.js 前请先阅读 docs/design.md 中的 bundle 契约。

文档

- docs/design.md — 架构与安全模型(英文)
- docs/upstream-hero-slot.md — 上游 conversation.hero.workspaceExtras 插槽改动(B1)与插件的对接方式(英文)

参与贡献

见 CONTRIBUTING.md。欢迎提交 issue 与 PR。

许可证

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群