English | 简体中文
把 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 互相覆盖、排布全靠手拉。
这个壳只做三件事:
- 接 —— 把每一处 dsh 当成一个「实例」管起来:跑在 WSL2 里的、跑在 Windows 本机的、或远端只有 URL 的服务器
- 排 —— 每个实例开成一个窗格,拖动、缩放、吸附、平铺,排布结果记住
- 隔 —— 每个窗格有自己独立的浏览器会话,多开不会互相踩 cookie
| 多实例并排 | 一屏放几个 DSH,各自独立窗格,拖拽缩放、自由排布 |
| 独立会话 | 每一格是独立的浏览器 partition,cookie / localStorage 互不干扰 |
| 跨环境接入 | 本机 Windows、WSL2 里的、以及服务器上的远程 DSH(带 token 的 HTTPS 地址)都能接 |
| 一键分屏 | 1/2、1/3、1/4 分区,选中后其余实例自动填剩余格 |
| 自动发现 | 扫本机常见位置,找到已装的 dsh 就问你要不要加进来 |
| 内置安装 | 不用开终端 —— 界面上选版本、选 npm 源、指定端口,直接装一份 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 上现在只有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.git
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。
- 启动后左侧栏是实例列表。首次打开会自动扫本机已有的 dsh,扫到就问你要不要加。
- 没有的话点「下载实例」——在界面上选版本(正式/预览/内测,或具体某个历史版本)、 选 npm 源(官方/华为云/淘宝/腾讯云)、指定端口,直接装一份。
- 也可以点「增加实例」手动填:本机端口、WSL2 里的、或服务器的 HTTPS 地址 + token。
- 实例卡片指示灯:绿=在线、黄=服务在但要 token、红=连不上。
- 实例上划出气泡(鼠标移到顶部中央)就能拖动 / 缩放 / 分区。
- 点画布空白看快捷键;点版本号看运行环境。
| 按钮 | 作用 |
|---|---|
| 增加实例 | 手动加一个(本机 / WSL2 / 远程) |
| 搜索实例 | 扫本机常见位置找已装的 dsh。刻意不扫全盘(尊重隐私),界面会写明这次扫了哪些地方 |
| 下载实例 | 在界面上装一份新的 dsh,可指定版本、npm 源、端口 |
一个「实例」记录的是:这处 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,很快。它刻意不扫全盘,两个理由:
- 隐私 —— 全盘扫意味着会去读你
Documents、Pictures里所有文件的名字。这个壳没有理由知道那些 - 不划算 —— 全盘是百万级文件、几分钟的量级,而 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-<id>),所以:
- 不同实例之间的登录 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 再转发回外壳,
否则 <webview> 会把键盘事件全吃掉。
需要 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>" # 加载后在渲染层跑一段 JS
./start.sh --devtools / --verbose
# 自动截图后退出(GUI 取证用)
./start.sh --shot=<path> --shot-delay=<ms> --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 默认把它算成
<appData>/<应用名>, 而应用名在开发态取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 官方无隶属关系。它只消费 dsh 已经对外提供的 Web 界面, 不修改 dsh 本体,也不代表官方立场。
见 CHANGELOG.md。







