UnknowCao/dsh-dock0

dsh-dock

DSH一键桌面启动器:激活时自动在桌面生成免编译的绿色版原生应用(DSH Harness.exe),支持无终端后台启动并全屏运行GUI。

AI 分析

核心用途是免去命令行启动DSH的繁琐步骤。适合Windows用户,双击桌面图标即可秒开全屏DSH,并可通过侧边栏菜单一键安全退出。

包名
dsh-dock
版本
0.3.2
许可证
MIT
最近更新
2026年9月4日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:UnknowCao/dsh-dock

🌐 中文 · English

DSH Dock(dsh-dock)

「双击桌面鲸鱼,秒开全屏 DSH——不用再开终端敲 npx dsh web,也不用去进程列表里找 3080。」

License: MIT Platform: Windows Runtime: DSH Web profile dsh-plugin

把「开终端 → 敲命令 → 粘 token → 手动全屏 → 翻进程列表杀进程」收成桌面一个鲸鱼图标 + 侧栏一个「更多」菜单。单文件原生 exe、免编译安装、零依赖、只与本机通信。

效果与实测 · 快速开始 · 能做什么 · 安全边界 · 验证与测试


侧栏「更多」菜单:⚙ 设置 / ⟳ 重启 / ⏻ 完全退出

侧栏一个「更多」菜单:⚙ 设置 · ⟳ 重启 · ⏻ 完全退出(两步防误触)——打开与退出第一次收进同一处。


它解决什么问题

如果你是 DeepSeek Harness 的日常用户,下面这段大概每天重复:开终端 → npx dsh web --no-open → 记下那串 token URL → 粘进浏览器 → 手动按 F11。想重启?先 Get-NetTCPConnection -LocalPort 3080 找到 PID 再 Stop-Process,然后从头再来一遍。

问题不在哪一步特别难,而在每一步都要你亲手做——尤其"重启"这种一天好几次的高频动作,却藏在进程列表里。

DSH Dock 把整件事收进两个入口:

  • 桌面一个黑鲸鱼图标:服务器在跑 → 直接全屏打开;没在跑 → 自动拉起,就绪后开窗。
  • 侧栏一个「更多」菜单:⚙ 设置 / ⟳ 重启 / ⏻ 完全退出,全部在同一处。
  • 退出自动收尾:点「完全退出」→ 两步确认 → 页面自动关闭 → 服务器静默停止 → 会话实时保存,下次双击鲸鱼直接续上。

效果与实测

本节四张图与所有数字均为真实运行产物,重录方法全部入库:docs/screenshots/CAPTURE.md

桌面程序(双击即启动)

桌面「DSH Harness」程序图标(黑鲸鱼)

安装后桌面出现「DSH Harness.exe」桌面程序,双击它本身就是入口(不是快捷方式):服务器在跑 → 静默全屏开窗;没在跑 → 鲸鱼卡片拉起。图标为黑鲸鱼(编译进 exe,上图取 assets/dsh-dock.ico 内嵌的 512×512 帧,透明底)。

侧栏「更多」菜单(点击后向上弹出)

打开菜单点一次「完全退出」后
侧栏「更多」菜单完全退出二次确认

右图是两步防误触的第二步:第一次点「完全退出」,按钮变「确认完全退出?」,4 秒内再点才执行。

从上到下:⚙ 设置(打开原设置弹窗)、⟳ 重启(重载界面,等效 Ctrl+Shift+R,服务器不动)、⏻ 完全退出(两步防误触)。

「完全退出」执行序列:发退出请求 → 页面短促停留 → 自动关窗 → 服务器静默停止。若浏览器拦截自动关窗,会亮出提示遮罩,手动关一次即可。

冷启动卡片(服务器没在跑时双击鲸鱼)

冷启动卡片

深色半透明圆角玻璃卡,居中的黑鲸鱼即呼吸灯(亮度 35%↔100% 余弦起伏,无进度条、无字标);失败时鲸鱼停呼吸、文字转红并给出日志路径与关闭按钮。

截图实录:冷卡为预编译启动器(assets/dsh-dock-launcher.exe)在演示配置下(临时 launcher.ini 指向 3080 真服务器 + 失效 token 行,只读探测、不写真实日志)的真实渲染,上方为「正在连接」态。可重录:pwsh -File scripts/capture-demo-card.ps1

实测数字(本机)

本机 = Windows 11 + 360 安全软件环境;方法见 验证与测试。换机器后引擎相关耗时会变,插件自身耗时 ~0.75s 稳定。

场景实测说明
服务器在跑,双击桌面程序Edge 新进程 ~0.6–1.5s原生 exe 直连(启动 ~100ms + 本机 HTTP 验证 ~10ms),无 wscript 层
服务器没跑,双击桌面程序品牌卡片 ~0.3s 出现,服务器就绪后自动开窗卡片与启动器同一原生 exe(预编译入库,安装免编译),无 PowerShell 引擎等待
服务器冷启动至端口就绪~10–13sdsh 自身启动耗时(实测 10.6s / 13.2s)
点「完全退出」到进程真正死亡~5.3s大头是本机 PowerShell 引擎派生(~4.5s,AV 环境);插件脚本本身 ~0.75s

快速开始

前置条件:Windows 10/11 + DSH web profile + Edge(缺失时回落默认浏览器)。无需 Node 配置——安装时自动探测可用 Node(≥ 22.19)。

dsh plugin --profile web add github:UnknowCao/dsh-dock#v0.3.2

重启服务器后无需任何操作:插件激活时自动从环境提取参数(自身监听端口、Node 路径、启动命令),~2 秒内桌面出现「DSH Harness.exe」(黑鲸鱼图标)+ 侧栏「更多」菜单。日常两步:双击鲸鱼开,菜单里退

想自定义(改名/换端口)再对 Agent 说:

帮我把 DSH 桌面程序改名为 XX / 装到 3081 端口

卸载:删桌面 DSH Harness.exe~\.dsh\launcher\;profile 里移除依赖与 bundle 条目。卸载不会自动删除任何文件。

能做什么

能力交付触发
一键启动 · 快路径服务器在跑:静默全屏打开(独立 Edge 应用窗口,无卡片闪现)双击桌面程序
一键启动 · 冷路径品牌卡片(鲸鱼呼吸灯)→ 静默拉起 → 就绪开窗双击桌面程序
独立应用窗口专属 Edge 配置:不并入主浏览器标签页,自带 30 天登录态自动
退出自动关窗页面短促停留后关闭,服务器随后静默停止,会话实时保存菜单「完全退出」×2
抗误触/抗竞态完全退出两步确认;退出后立刻双击会等待旧进程死透再冷启动;冷启动单实例锁;端口被占却未就绪时明确报错而非干等自动
单文件 · 免编译 · 零依赖桌面是原生 exe 本体(非快捷方式);预编译入库,安装不需要 csc;运行只与本机回环通信自动
激活即自动安装插件激活后 ~2s 自动落盘全套产物,参数(端口/Node/启动命令)全部环境自探测;内容比对幂等,升级插件自动刷新dsh plugin add + 重启

与手动操作相比

场景手动做法dsh-dock
打开终端 npx dsh web + 手抓 token + 粘浏览器双击图标,自动抓 token、全屏开窗
窗口形态混进浏览器标签页独立应用窗口,直接全屏(专属配置)
重载界面——(只能整个重启服务器)菜单一键重载,服务器不动
退出翻进程列表找 PID 再杀菜单两步「完全退出」,自动关窗+停服
重复双击可能重复起服务幂等:已在跑就直接开窗

更多插件见生态索引:dsh-plugin 话题 · Oh-My-DSH · awesome-deepseek-harness


安全边界

  • 只监听回环:退出接口 /launcher/api/stop 只接受本机/可信来源 + 同源请求,跨站直接 403,不对外暴露
  • 不碰会话数据:退出依赖 DSH 实时持久化,插件不读写 $DSH_HOME 里的会话
  • 不读不传凭据:token 只在本地日志与本地 Edge 启动参数间流转
  • 防误杀:退出用"自身 PID 直杀 + netstat 兜底"双保险;manifest 指向其他进程时绝不动手
  • 安装零生命周期脚本:package.json 无 preinstall/install 等钩子,安装过程不执行任意代码;桌面已有同名但非本插件的文件时,拒绝覆盖并明确报错
  • 完全退出有二次确认;启动失败会亮出原因与日志路径
  • 无常驻进程:双击链路是单一原生 exe——探测、token 验证、卡片、开窗全在进程内,零 wscript、零 PowerShell 引擎开销(仅安装时短调用一次)

已知限制(先声明,非缺陷)

  • 仅 Windows(macOS/Linux 计划中)
  • 手动启动的服务器 + 全新 Edge 配置:日志无 token 可抓,首次需用带 token 的地址登录一次(登录态 30 天)
  • 普通浏览器标签页内点「完全退出」,浏览器可能拦截自动关窗 → 弹出提示遮罩,手动关一次即可;桌面程序打开的应用窗口可自动关闭
  • 杀进程耗时 ~5.3s 中 ~4.5s 是本机 PowerShell 引擎派生(安全软件实时扫描所致),非插件逻辑开销

文件结构

dsh-dock/
├── index.js                 # Host:launcher_install 工具 + 退出路由 + 烤 launcher.ini/start-server.cmd + 放置桌面 exe
├── client.js                # Client:侧栏「更多」菜单 + 退出自动关窗 + 菜单动效
├── cordis.patch.yml         # bundle 补丁:编排插入插件行
├── package.json             # 包清单(name: dsh-dock)
├── regen-launcher.mjs       # 维护:脱离 harness 重新生成启动套件
├── src/
│   └── DshDockLauncher.cs   # 启动器唯一实现:快路径静默开窗 + 冷卡 + 健康闸 + 退出竞态 + 单实例锁
├── assets/
│   ├── dsh-dock-launcher.exe # 预编译启动器(scripts/build-launcher.ps1 产出,随仓库提交,安装免编译)
│   ├── dsh-dock.ico         # 桌面程序鲸鱼图标(编译进 exe)
│   └── whale.png            # 卡片鲸鱼源位图(白化重映射)
├── docs/
│   └── screenshots/
│       ├── desktop-shortcut.png  # 桌面程序图标特写(黑鲸鱼 512×512 透明底)
│       ├── menu.png         # 侧栏「更多」菜单实拍(README 效果区主视觉)
│       ├── menu-exit-armed.png   # 「完全退出」二次确认态
│       ├── cold-card.png    # 冷启动卡片实拍(演示配置重录)
│       └── CAPTURE.md       # 素材重录说明(菜单人工截图 + 脚本重跑)
├── scripts/
│   ├── build-launcher.ps1   # 编译 src/DshDockLauncher.cs → assets/dsh-dock-launcher.exe(开发时)
│   ├── capture-demo-card.ps1     # 冷卡截图重录:演示 ini + 失效 token → 连拍取鲸鱼最亮相位
│   └── verify-health-gate.ps1    # 回归:失效 token(401)绝不误开窗
├── LICENSE
├── README.md                # 中文主文档
└── README.en.md             # English README

安装后生成于 ~\.dsh\launcher\(运行时产物,不入仓库):

dsh-dock-launcher.exe(启动器本体)、launcher.ini(exe 读的运行时配置,值 base64 编码)、start-server.cmd(隐藏拉起,等端口空闲才启动防日志截断)、launcher.json(host/port/桌面目录缓存,供退出路由与幂等检查)、dsh-dock.icowhale.png.stopping(退出中标记)、.starting.lock(冷启动单实例锁)、dsh-server.log(.err)edge-app-profile\(全屏窗口专属 Edge 配置);桌面放置 DSH Harness.exe(同一二进制副本)。以上在插件激活时自动生成/刷新


验证与测试

装完花 3 分钟自验(每步期望都写明了):

  1. 一键开:双击桌面「DSH Harness.exe」→ 服务器在跑时 1~2s 内弹全屏窗口(无卡片)。
  2. 菜单:侧栏 ☰「更多」→ 弹入动效;「设置」打开设置;「重启」页面重载、会话不变。
  3. 冷启动:菜单「完全退出」×2 → 等 Get-NetTCPConnection -LocalPort 3080 -State Listen 无输出 → 双击桌面程序 → 鲸鱼呼吸灯卡片 → 服务器就绪 → 全屏窗口 → 卡片淡出。
  4. 抗竞态:第 3 步服务器启动途中(约 10s 内)再双击一次 → 应只有一个服务器、最终窗口可用。

实现要点(给想了解深度的读者)

  • 单 exe 单实现:快路径、冷卡、健康闸、退出竞态、单实例锁全部编译进 src/DshDockLauncher.cs 一个文件——之前 .lnk→wscript→VBS→HTA 四层链(同一逻辑三份实现,正是历史 bug 温床)已退役
  • 预编译 + 运行时配置:exe 随仓库提交(assets/dsh-dock-launcher.exe),安装免 csc;所有机器相关路径(日志/批处理/Edge 配置/标记/鲸鱼图)烤进 launcher.ini(base64 值,中文用户名安全)
  • HTTP 200 健康闸(含 cookie 语义):DSH 对有效 token URL 回 303 + Set-Cookie → /,浏览器跟随落 200;闸带 CookieContainer 复刻这一链路,旧 token(裸 401)绝不误开窗
  • 退出/启动竞态吸收:.stopping 新鲜时先等端口死透再冷启动;.starting.lock 单实例锁防双启,60s 崩溃接管
  • 动画零阻塞:TCP 探针(死端口最长阻塞 700ms)、日志抓取、健康闸 HTTP 全部在后台线程轮询,UI 线程只负责绘制——冷启动全程呼吸灯流畅,卡顿与机器性能无关
  • 明确失败而非干等:端口被占但页面始终不 200 时,~24s 内报出"上一次会话可能未完全退出"+ 日志路径
  • 激活即自动安装:apply() 后 ~2s 落盘全套产物——端口取自自身 PID 的 LISTENING 套接字(netstat,~100ms),Node 与启动命令走探测链;已就绪时内容比对直接跳过(仅几次文件读,零 PowerShell、零写入)
  • 诊断钩子:设置环境变量 DSH_DOCK_DIAG=1 后,启动器把决策/崩溃轨迹追加到 %TEMP%\dsh-dock-diag.log(平时零开销)
  • 改了 index.js 配方或重编 exe 后,用 node regen-launcher.mjs 重新生成整套启动文件

致谢与声明

License

MIT


双击鲸鱼开,菜单里退 🐋