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

BOWLUNA/dsh-multi-instance

DeepSeek Harnessspec-screened扫描:中风险在 GitHub 查看 ↗
未验证

dsh-multi-instance —— DeepSeek Harness 多实例桌面客户端

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/24 · 已提供中文文档

DSH 多开桌面客户端:把 dsh web 装进原生 webview 窗口,按 URL 接入多个实例 —— 本机、WSL2、或服务器上的远程 DSH 都能接。多窗口自由排布与缩放,多实例之间互不干扰,每格独立浏览器会话。|Desktop client and webview shell for DeepSeek Harness: multi-instance, multi-window panes that attach to any number of DSH instances by URL - local, WSL2 or remote - one isolated browser session per pane.

综合分
29.9
GitHub 分
29.9
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add BOWLUNA/dsh-multi-instance
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
信任档位:已验证本站已于 0 天前真实安装成功
是什么
dsh 原生插件 · market
装得上吗
本站已真实安装成功(非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 1 天前

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

🟢实装验证通过· 2026/9/25
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/25(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

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

dsh-multi-instance —— DeepSeek Harness 多实例桌面客户端

release platform tests license electron dsh npm&style=flat-square&logo=npm&logoColor=white&labelColor=1f2430)

bilibili Douyin RedNote Discord GitHub

把 DeepSeek Harness(dsh)的 Web 界面装进一个桌面客户端:
多开多个实例 —— 本机、WSL2、或服务器上只有 URL 的远程 DSH 都能接。
每个实例各占一个窗格,多窗口自由排布与缩放;多实例之间互不干扰,每格有自己的浏览器会话。

一句话:给 dsh web 套一层窗口管理器 —— 多个实例并排跑,互不干扰。

它不是浏览器插件,也不是对 dsh 的重实现 —— 就是给 dsh web 已经提供的那套页面,套一层窗口管理外壳。

同样可能被搜到的说法:DSH 多开 · 多实例 · 多窗口 · 多开窗口 · 分屏 · 平铺 · 窗口管理 · 桌面客户端 · 客户端 ·
套壳 · 网页套壳 · 远程接入 · 服务器 DSH · WSL2 · 独立会话 · 多会话 · 多标签 · 并排 · 自由布局 ·
DeepSeek Harness GUI · DSH GUI · dsh 图形界面 · dsh 桌面版

目录

- 它解决什么
- 它不做什么
- 安装(安装包 / npm / 源码)
- 快速上手
- 接入一处 DSH(含自动发现、手动安装)
- 多窗格与排布 · 会话隔离
- 操作(隐藏抽屉、界面、快捷键)
- 从源码运行 · 测试 · 从源码打包 · 调试开关
- 文件位置
- 排障
- 已知限制
- 相关项目 · 参与贡献 · 更新日志 · 许可

它解决什么

dsh 自带的 Web 界面很好用,但一次只能看一处、一个窗口。当你需要同时盯着本机 WSL 里的一处和
服务器上的另一处(甚至是同一个实例的两个不同会话)时,浏览器标签页就不够用了:分不清哪个是哪个、
cookie 互相覆盖、排布全靠手拉。

这个壳只做三件事:

1. 接 —— 把每一处 dsh 当成一个「实例」管起来:跑在 WSL2 里的、跑在 Windows 本机的、或远端只有 URL 的服务器
2. 排 —— 每个实例开成一个窗格,拖动、缩放、吸附、平铺,排布结果记住
3. 隔 —— 每个窗格有自己独立的浏览器会话,多开不会互相踩 cookie

| | |
|---|---|
| 多实例并排 | 一屏放几个 DSH,各自独立窗格,拖拽缩放、自由排布 |
| 独立会话 | 每一格是独立的浏览器 partition,cookie / localStorage 互不干扰 |
| 跨环境接入 | 本机 Windows、WSL2 里的、以及服务器上的远程 DSH(带 token 的 HTTPS 地址)都能接 |
| 一键分屏 | 1/2、1/3、1/4 分区,选中后其余实例自动填剩余格 |
| 自动发现 | 扫本机常见位置,找到已装的 dsh 就问你要不要加进来 |
| 内置安装 | 不用开终端 —— 界面上选版本、选 npm 源、指定端口,直接装一份 dsh |

|  |  |
| --- | --- |
| 多窗格平铺 | 自由排布 8 个实例 |
| 分区光晕 | 实例设置 |

|  |  |
| --- | --- |
| 内置安装 dsh | 深色主题 |

它不做什么

- 不捆绑 dsh,也不会在后台自动下载它。要装,得你在界面里显式点「开始安装」
- 不做账号体系:dsh 自己怎么认证,壳就怎么呈现
- 不碰 dsh 的任何数据:不写 ~/.dsh、不动凭证文件,只读你指定的地址文件
- 不扫你的全盘:自动发现只走常见位置(理由见下)

安装

方式一:下载安装包(推荐)

到 Releases 下载:

| 文件 | 说明 |
|---|---|
| DSH.Multi-Instance-Setup-x.y.z.exe | 安装包 —— 常规 Windows 安装程序,可选安装目录、建桌面和开始菜单快捷方式 |
| DSH.Multi-Instance-x.y.z-x64.zip | 免安装压缩包 —— 解压即用,不写注册表,适合放 U 盘或便携使用 |

文件名里的点是 GitHub 干的:上传时它会把名字里的空格换成 .(本地产物名里是空格)。

需要 Windows 10/11。软件本身不含 dsh —— 装完在界面里点「下载实例」,或者接你已有的 DSH。

方式二:npm

⚠️ npm 上现在只有 0.0.1,那是个占位空壳(只用来占住包名,装上去不会启动任何东西)。
可用的版本还没发到 npm —— 在那之前请用方式一或方式三。
想确认自己拿到的是不是真包,装之前先跑一句:npm view dsh-multi-instance version,
现在它会返回 0.0.1。

npm i -g dsh-multi-instance   # 装完用 dsh-multi-instance 启动
dsh-multi-instance --version  # 先确认装成了什么(不需要 Electron 也能看)
dsh-multi-instance --help     # 全部开关

npm 方式需要先有 Electron 运行时(npm i -g electron)。打包成 exe 的那两种方式不需要任何前置依赖。
--version / --help 是唯二不需要 Electron 就能用的开关 —— 装完先跑这两条,比启动失败再猜省事。

方式三:从源码跑

git clone https://github.com/BOWLUNA/dsh-multi-instance.gitmarkdown
cd dsh-multi-instance
npm install
npm start

也可以双击 start.vbs(无黑框)或 start.cmd。

⚠️ 启动器里有一行 unset ELECTRON_RUN_AS_NODE / set "ELECTRON_RUN_AS_NODE=",不要删。
这个变量残留为 1 时(Electron 系工具的子进程会继承),electron.exe 会退化成纯 Node,
现象是「双击后毫无反应」。判据:electron.exe --version 输出的是 Node 版本号
(v24.21.0 这类)就是中了;正常应输出 Electron 版本 v44.4.3。

快速上手

1. 启动后左侧栏是实例列表。首次打开会自动扫本机已有的 dsh,扫到就问你要不要加。
2. 没有的话点「下载实例」——在界面上选版本(正式/预览/内测,或具体某个历史版本)、
选 npm 源(官方/华为云/淘宝/腾讯云)、指定端口,直接装一份。
3. 也可以点「增加实例」手动填:本机端口、WSL2 里的、或服务器的 HTTPS 地址 + token。
4. 实例卡片指示灯:绿=在线、黄=服务在但要 token、红=连不上。
5. 实例上划出气泡(鼠标移到顶部中央)就能拖动 / 缩放 / 分区。
6. 点画布空白看快捷键;点版本号看运行环境。

三个按钮

| 按钮 | 作用 |
|---|---|
| 增加实例 | 手动加一个(本机 / WSL2 / 远程) |
| 搜索实例 | 扫本机常见位置找已装的 dsh。刻意不扫全盘(尊重隐私),界面会写明这次扫了哪些地方 |
| 下载实例 | 在界面上装一份新的 dsh,可指定版本、npm 源、端口 |

接入一处 DSH

一个「实例」记录的是:这处 dsh 怎么跑、怎么拿到带 token 的访问地址、怎么起停。按目标分三种:

| 类型 | 说明 |
| --- | --- |
| WSL | 跑在某个 WSL2 发行版里。可指定发行版与用户名(留空 = 用默认用户),地址从 dsh-url.txt 或进程输出里取 |
| Windows | 跑在 Windows 本机 |
| 远端 | 跑在别的机器上,只有 URL 和 token,壳只管显示 |

访问地址(含 token)按这个优先级解析:上次成功捕获并持久化的地址 → 你指定的地址文件 → 启动实例时从进程输出里现抓。

自动发现

左侧的「检测」会从三个维度扫:

- 已经装好、正在跑 —— 扫进程与常见端口段,拿到端口后按特征确认「这确实是 dsh」
- 已经装好、但没启动 —— 扫 dsh 可执行文件与 npm 全局目录,拿到可执行文件路径
- 装在自定义目录里 —— 扫常见位置的同名文件夹(DeepSeek Harness / DeepSeekHarness / dsh- 等写法)

判定特征(实测):无 token 返回 401 且响应体含 dsh web authentication required;带 token 返回 303 且
set-cookie 含 dsh-auth-。两者都符合才认。

扫描范围,以及为什么不扫全盘

发现功能只走这些地方:

| 范围 | 深度 |
| --- | --- |
| PATH 里的 dsh | — |
| npm 全局目录 | — |
| 你的用户目录(优先 Desktop / Documents / Downloads / Projects / Code / Dev / Work 等) | 4 层 |
| 各盘根(C:\ D:\ …) | 2 层 |

实测走过 5441 个目录约 300ms,很快。它刻意不扫全盘,两个理由:

1. 隐私 —— 全盘扫意味着会去读你 Documents、Pictures 里所有文件的名字。这个壳没有理由知道那些
2. 不划算 —— 全盘是百万级文件、几分钟的量级,而 DSH 几乎不可能装在冷门深处

而且撞名只是线索,不是判据。目录名像 dsh 的很多(实测 28 个),但真装过 dsh 的目录里一定躺着
node_modules/@deepseek-ai/dsh/package.json —— 只有找到它才算数(实测 28 个里只有 1 个是真的)。

界面上会写明这次扫了哪些地方、走过多少目录。扫不到就用「增加实例」手填。

手动安装

壳不捆绑 dsh。只有你点了「开始安装」,它才会往你指定的目录执行一次 npm install @deepseek-ai/dsh。

| 项 | 说明 |
| --- | --- |
| 装到哪 | WSL2 发行版(在该发行版里装)/ Windows 本机 |
| 目录 | 任意目录。~ 开头会展开成该用户的 home |
| 版本 | 最新正式版 / 预览版 / 内测版,或点「拉取」列出全部历史版本任选 |
| 端口 | 装完自动创建的实例用这个端口 |
| npm 源 | npm 官方 / 华为云 / 淘宝 npmmirror / 腾讯云 / 自定义 |

安装前可以「检查环境」确认 node/npm 就位,过程实时回显输出,装完自动 dsh --version 验证并建好实例。

实测数据(Windows 目标、npm 官方源):565 个包、约 4 分钟、产物 294MB、dsh --version 正常。

换源提示:四个源的 dist-tags 实测一致,差别只在速度。装得慢或超时就换近的源。

多窗格与排布

- 拖动:鼠标划到窗格顶部中央会滑出一个气泡把手,按住它拖
- 缩放:拖窗格的四条边或四个角
- 吸附:拖到接近其他窗格的边或中线时自动对齐,并显示辅助线
- 铺满 / 归位:双击窗格顶部
- 一键平铺:工具栏的排布按钮
- 分区:点 1/2、1/3、1/4 出分区光晕,选中后其余窗格自动填剩余格

窗格上没有边框也没有标题栏 —— 拿到的画面就是全部。排布结果是归一化坐标(0..1),
所以窗口缩放后会自动适配;退出时持久化,下次打开原样恢复。

实例不允许重叠:拖动时用最小平移向量推出,缩放遇到邻居就停。

会话隔离

同一个 dsh 可以开任意多个窗格。每个窗格有自己独立的浏览器会话(partition = persist:pane-),所以:
- 不同实例之间的登录 cookie 不会互相覆盖 —— 这是多开 dsh 最容易踩的坑
- 同一个实例开两个窗格,各自带着 token 独立认证,互不影响
- 每个窗格的会话存在磁盘上,重启应用后不用重新认证

因为 token 会随会话存下来,用户配置文件里可能包含你填过的 token。那个目录别拿去分享或提交 Git。

操作

两个隐藏抽屉

| 抽屉 | 怎么叫出来 |
| --- | --- |
| 上侧(地址栏、刷新、新建、平铺、窗口控制) | 鼠标移到窗口最顶部边缘,或点顶部中间的小横条 |
| 左侧(实例列表、检测、安装、主题、语言、关于) | 鼠标移到窗口最左边缘,或点工具栏最左的 ≡ |

抽屉平时完全收起,展开时窗格会整体让位(不是盖在上面),所以标题栏和内容永远不会被压住。想让它常驻,点上侧工具栏的图钉。

界面

|  |  |
|---|---|
| 常驻标题栏与左侧抽屉 | 深色主题 |

- 常驻标题栏(20px):左边 ⌄ 展开工具栏 + + 新增实例,中间可拖窗口,右边最小化/最大化/关闭。
它占真实空间,所以永远不会盖住 DSH 自己的按钮。
- 两个隐藏抽屉:上侧(地址栏、刷新、平铺)和左侧(实例列表)。平时全收起,画布只剩 3px 边距。
- 主题:浅色 / 深色 / 跟随系统。语言:中文 / English。
- 实例无边框无标题栏 —— 整个画面都是 DSH,操作靠悬停气泡。

快捷键

| 快捷键 | 作用 |
| --- | --- |
| Ctrl+Shift+T | 固定 / 收起上侧工具栏 |
| Ctrl+Shift+B | 固定 / 收起左侧抽屉 |
| Ctrl+N | 打开实例列表(新建窗格) |
| Ctrl+R | 刷新当前窗格 |
| Ctrl+W | 关闭当前窗格 |
| Esc | 收起所有抽屉与菜单 |

这些键在鼠标焦点位于 dsh 页面内部时同样有效 —— 主进程监听 before-input-event 再转发回外壳,
否则  会把键盘事件全吃掉。

从源码运行

需要 Node.js 与 npm。

git clone https://github.com/BOWLUNA/dsh-multi-instance.git
cd dsh-multi-instance
npm install          # 只装 electron 与 electron-builder

启动(三选一):

| 方式 | 命令 | 说明 |
| --- | --- | --- |
| 双击 | start.vbs | 无黑框,日常用这个 |
| 双击 | start.cmd | 会出现一瞬间 cmd 窗口 |
| 命令行 | ./start.sh | 开发用,日志同时打到终端 |

测试

npm test              # 57 条:纯 Node,不需要图形界面、不需要 Electron
npm run smoke         # 30 条:起一次真应用,看网页有没有真的被渲染出来

npm test 覆盖的是纯逻辑:用户数据落点与迁移、配置的读写/备份/损坏恢复、实例地址解析、
npm 入口的参数解析与运行时查找。零依赖、纯 Node,不需要装任何东西。

npm run smoke 补的是上面测不到的那一半 —— 窗口里的东西。它自己在本机起一个「假 DSH」页面,
再用一套测试配置起一次真应用,断言点落在「那个页面确实被请求了」上:
渲染层 boot、窗口显示、webview 挂载与加载、每格独立 partition、窗格发出的 UA、截图非空白、退出码。
不需要网络、不需要真的 DSH、不需要任何凭据,也不碰你真实的配置(userData 指向临时目录)。

npm run smoke                    # 默认:一个窗格
node tools/smoke.js --scene=tile # 4 个窗格平铺
node tools/smoke.js --scene=empty# 空画布的引导态
node tools/smoke.js --keep       # 失败也保留现场(.tmp/smoke)供事后翻看

这条测试是被一件事逼出来的:0.5.0 之前,每个窗格的分区加固整段是死代码
—— will-attach-webview 被注册在了错误的对象上(详见 更新日志 的 0.5.0)。
57 条纯逻辑测试全绿,而缺陷就在窗口里躺着;npm run smoke 一跑,两条断言当场变红。

交互类的自测(拖拽、气泡、侧栏自动收)仍然走 --selftest 那一套,它们要真窗口 + 合成鼠标事件。

从源码打包

npm run dist          # 同时出 exe 安装包 + zip 免安装包
npm run dist:setup    # 只出 exe 安装包(NSIS)
npm run dist:zip      # 只出 zip

产物在 dist/。上面三条都会先自动跑一次 npm run clean:dist(predist 钩子)。

实测(electron-builder 26.15.3):含中文的路径下也能正常打包 —— 本仓库的开发目录就含中文,
上面两种产物都是在原地打出来的,不需要挪到英文临时目录。

clean:dist 是干什么的:electron-builder 会删 dist/win-unpacked、dist/win-unpacked.tmp,
NSIS 收尾时还会删上一版的 .__uninstaller.exe。在带「批量删除守卫」的沙箱里
(某些 AI 终端会注入这类拦截),这些删除会以 SAFE_DELETE_BULK_CONFIRM_REQUIRED 失败,
而且出现在两个不同的阶段,后果完全不同:

| 阶段 | 后果 |
| --- | --- |
| 解包(extractArchive,删 win-unpacked / .tmp) | 致命 —— dist/ 里一个产物都没有,zip 只剩个 0 字节空壳 |
| 收尾(NSIS finishBuild,删 .__uninstaller.exe) | 产物已经生成,只有一行红字 |

clean:dist(挂在 predist 上)把这些目录和中间文件提前用 同步 fs.rmSync 清掉
—— 同步 API 不在拦截范围内;走到那一步时已经没有东西可删,计数为 0,守卫不会触发。
平时手动打包不需要它,只在这类沙箱里有意义。

调试开关

./start.sh --demo                      # 展开抽屉 + 打开实例
./start.sh --demo --demo-zone=4        # 展示 1/4 分区光晕
./start.sh --demo --demo-page=install  # 打开安装页
./start.sh --selftest                  # 合成鼠标事件验证「划出气泡 → 按住气泡拖动」
./start.sh --selftest-side             # 验证侧栏三条收起路径
./start.sh --selftest-win              # 验证常驻标题栏给画布让出了空间
./start.sh --selftest-tip              # 全量检查悬停提示会不会被窗口/侧栏裁掉
./start.sh --memtest                   # 全部打开后统计进程数与内存
./start.sh --no-discover               # 关掉启动时的自动发现弹窗(截图用)
./start.sh --mask-token                # 地址栏里的 token 打码(截图用)
./start.sh --eval=""               # 加载后在渲染层跑一段 JS
./start.sh --devtools / --verbose

自动截图后退出(GUI 取证用)
./start.sh --shot= --shot-delay= --shot-exit

文件位置

| 内容 | 路径 |
| --- | --- |
| 用户配置(实例列表、窗格排布) | 应用数据目录下的 config.json |
| 配置的自动备份(最近 3 份) | 同目录 config.json.bak-1 … bak-3 |
| 配置损坏时保留的残片 | 同目录 config.json.corrupt- |
| 每个窗格的登录态(浏览器分区) | 应用数据目录下的 Partitions/ |
| 主进程日志 | 应用数据目录下的 logs/main.log |

应用数据目录在 Windows 上是 %APPDATA%\dsh-multi-instance\(开发态与打包版同一个位置)。

配置是怎么被保护的(改坏过的人会关心这个):每次覆盖 config.json 之前,先把上一位能解析的内容
滚成 bak-1(旧的往后推,只留 3 份)。同一串写入只占一个槽 —— 一次操作会连写好几笔
(panes / ui / collapsed),3 秒内不再重复轮转,所以 3 份备份对应的是最近 3 次操作,
而不是最近 3 次写盘。读不出来时,先把手上的残片原样存成 config.json.corrupt-,
再从最近的备份回退,并把回退结果写回主文件。日志里会写明发生了什么:

[store] 配置损坏,残片已保留: config.json.corrupt-2026-09-24T05-31-02-123Z(32 字节)
[store] 已从 config.json.bak-1 回退配置并写回主文件

所以「实例列表突然空了」不再是终局 —— 先别动文件,看 logs/main.log 里有没有上面两行,
bak-1 就是上一次的配置。

落点是钉死的,不是自动推导的。 Electron 默认把它算成 /,
而应用名在开发态取 package.json 的 name、在打包态取 productName ——
不钉死就会变成两套目录:你在源码里排好的布局,打包版用户打开是空的。

这个项目改过三次名字(dsh-shell → dsh-webview-desktop → dsh-multi-instance),
所以启动时会自动做一次迁移:若当前目录里没有窗格,就去旧目录里找
(DSH Multi-Instance / dsh-webview-desktop / dsh-shell / DSH套壳),
把窗格最多的那一份 config.json 连同 Partitions/ 一起接过来。
只在当前目录没有窗格时才动手,跑过一次之后就不会再动。日志里会写明迁移了什么、从哪来。

应用不会修改 dsh 启动器写出的地址文件,也不会碰 dsh 自己的凭证文件。

排障

窗格显示红色状态点 / 提示拿不到访问地址
在窗格或实例条目上点「启动」,或先手动确认服务:curl -o /dev/null -w '%{http_code}' http://127.0.0.1:3080/。
返回 401 说明服务是活的,只是缺 token —— 这属于正常现象,不是故障。

远端实例的 token 从哪来
dsh 的访问地址形如 https:///?token=xxxxxxxx。在服务器上执行下面这条,把 token= 后面那串填进实例的 Token 字段:

grep -hoE 'token=[A-Za-z0-9_-]+' ~/.local/share/dsh/web.log | tail -1

加载出来是 401 页面
说明这个实例缺 token,或 token 已经过期。打开实例的「编辑」,重新填 token。

服务器实例连不上
检测结果会区分三种:绿色=在线、黄色=服务在但需要 token、红色=连不上。
如果是 HTTPS 站点,注意服务端证书要有效 —— 证书链不完整会让握手直接失败在 TLS 层,
那不是壳的问题(用 curl -v https://你的域名/ 看证书报错)。

平铺之后画面糊成一团
窗格太多了。实测每个窗格约 241MB 内存:16GB 机器舒服跑到 12 个左右,20 个开始吃紧,30 个以上不现实。
收进左侧抽屉的实例不占内存(webview 会被卸载),只有在画布上的才吃资源。

想知道应用到底做了什么
tail -f "/logs/main.log"
里面记录了:地址解析结果、每个 webview 的挂载与加载结果、发现扫描的目录数与耗时、失败原因。

升级后实例列表空了 / 排布回到默认了
0.3.0 起落点已钉死为 %APPDATA%\dsh-multi-instance\,并会在启动时从旧目录自动接回配置。
看日志里有没有这一行:

[appdata] 已从  迁移: config.json, Partitions(窗格 N 个)

没有这行、而旧目录确实存在,说明旧目录里也没有窗格 —— 那就手动把旧目录的 config.json
复制到 %APPDATA%\dsh-multi-instance\ 下面(先关掉应用)。
(0.2.0 及更早版本存在落点漂移:开发态与打包版会写到不同目录。日志里 userData= 那行是权威答案。)

0.4.0 起,配置自己会留备份:目录里出现 config.json.bak-1 / bak-2 / bak-3 是正常的
(每次操作往前滚一位,同一串写入只占一个槽),出现 config.json.corrupt- 说明读到过一次坏内容 ——
那一份是原样保留的残片,先别删。日志里会有对应两行,bak-1 通常就是你要回的那一版:
关掉应用,把 config.json.bak-1 复制成 config.json,再启动。

实例列表里的条目在,但连不上 / 状态点是红的
这跟配置无关,是那一处 DSH 本身不在。按上面「窗格显示红色状态点」那条查。

已知限制

- 一个实例约 241MB(实测:12 个实例 = 17 个进程 / 2897MB)。
16GB 机器舒服跑到 12 个左右,20 个开始吃紧。收进侧栏的实例不占内存(webview 会卸载)。
- 平铺装不下时会提示:12 个起格子开始勉强、20 个以上不可用(软件会告诉你,而不是让你对着糊成一团猜)。
- 实例画面顶部中央那 20px 被气泡热区占着,点不到 DSH 页面那里的东西 —— 这是拿鼠标事件必须付的代价。
- 发现只扫「常见位置」:PATH、npm 全局目录、用户目录(4 层内)、各盘根(2 层内),实测约 300ms。
装在冷门深处的找不到 —— 手动加即可。
- dsh 页面里的 window.open 会被转给系统默认浏览器,不会在壳内新开窗格。
- 没有 macOS / Linux 版。Electron 跨平台,但窗口行为(无边框、边缘热区)是照 Windows 调的,其他平台未验证。
- 窗格缩放到最小尺寸有下限(舞台的 16%),防止被拖成看不见的小条。
- 拖动把手在气泡上,所以拖动前要先把气泡划出来。

目录结构

.
├── package.json
├── bin/cli.js                           npm 包的可执行入口(--version / --help + 找 electron 并拉起应用)
├── build/icon.ico                       应用图标
├── start.cmd / start.vbs / start.sh     启动器(三选一)
├── tests/run.js                         纯 Node 测试套件(npm test,57 条纯逻辑)
├── tools/smoke.js                       窗口级冒烟测试(npm run smoke,起真应用看渲染)
├── tools/screenshots/shoot.js           批量拍 README 截图
├── docs/index.html                      GitHub Pages 落地页(单文件、无外部依赖)
├── docs/images/                         README 用的截图
└── src/
├── main/
│   ├── main.js        主进程:窗口、webview 加固、IPC、自测打点
│   ├── appdata.js     用户数据落点(钉死)+ 旧目录迁移
│   ├── instances.js   实例模型:地址解析、起停、可达性探测
│   ├── discovery.js   自动发现:扫进程/端口 + 扫 dsh 可执行文件 + 扫常见目录
│   ├── installer.js   手动安装器(不捆绑 dsh)
│   └── store.js       JSON 配置读写:原子写 + 滚动备份 + 损坏回退
├── preload/preload.js 白名单 IPC 桥
└── renderer/
├── index.html
├── style.css      纸白底 + 半调网点的视觉
├── icons.js       内联 SVG 图标
├── i18n.js        中英双语词典
├── layout.js      布局引擎(拖动 / 缩放 / 吸附 / 分区)
└── app.js         编排:实例面板、抽屉、窗格、快捷键

相关项目

| 项目 | 是什么 |
| --- | --- |
| dsh-custom-mode | 同作者的 DSH 插件:一套系统提示词的管理、切换与分享。装在 DSH 里用,与这个壳互补 |
| DeepSeek Harness | 上游。本项目只消费它的 Web 界面,不修改本体 |
| 项目主页 | 一页看完的介绍:截图、安装方式、已知限制(源文件是 docs/index.html) |

参与贡献

| | |
| --- | --- |
| CONTRIBUTING.md | 怎么跑起来、改完该测什么、三条不要动的不变式 |
| SECURITY.md | 它经手哪些敏感数据;发现了问题走私密通道报 |
| CHANGELOG.md | 每个版本改了什么 |
| Issues | 缺陷与建议(有表单,会顺便问你版本和日志) |
| Discussions | 用法交流、排布方案、接哪台服务器 |

与 DeepSeek Harness 的关系

本项目是独立的第三方外壳,与 DeepSeek 官方无隶属关系。它只消费 dsh 已经对外提供的 Web 界面,
不修改 dsh 本体,也不代表官方立场。

更新日志

见 CHANGELOG.md。

许可

MIT

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

💬 加入社群

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

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