Repository navigation
Releases
v0.1.9
dsh-desktop v0.1.9
给 DeepSeek Harness(DSH)加一个原生桌面窗口,用已安装的 dsh 拉起服务。
本次覆盖 v0.1.3 → v0.1.9 的全部改动。其中 v0.1.4 起的多数修复,针对的是 dsh 0.1.5 引入的启动 token 鉴权(裸根地址一律 401)所暴露出来的旧隐患。
⚠️ 如果你在用 dsh 0.1.5 及以上,请务必升级到本版:早期版本会在「关掉桌面端后重开」时反复报「已在 3080 找到 dsh 服务,但它要求启动 token」,只能手动杀端口。
本次更新
v0.1.9
- 修复:遗留服务仍然认不出来(这是「关不干净」的真正根因)。 0.1.8 的判定里有一条「记录的启动进程必须仍然存活」,但
cmd /c <dsh.cmd>这个包装器可能在 node 服务起来后就退出了 —— 于是判定失败、记账被当成陈旧记录清掉、退回「附加」、拿不到 token 报错。
现在不再依赖包装器是否存活:占端口的进程只要是「我们记录的监听进程」,或「一个 dsh web 服务、且启动时间不晚于我们记账的时刻」,就判定为自己人;杀之前还会核对命令行(必须同时出现dsh与web)才动手。 - 退出路径加了兜底:即使包装器已退出、进程句柄为空,关窗时也按端口找到并结束本次启动的服务,从源头减少残留。
- 回归测试 19 项(覆盖遗留收回的两种判定路径、就绪时补记监听 PID、退出兜底)。
v0.1.8
- 修复:记账记的监听 PID 一直是
null,导致「收回遗留服务」从未生效。 记账发生在spawn()之后立刻,那一刻服务还没绑定端口,findListenerPid()自然是空 —— 而收回逻辑要求「账上的监听 PID == 当前监听 PID」,空值永不匹配。
现在服务就绪后补记真实的监听 PID;对旧格式(监听 PID 为空)的记录另加启动时间兜底。
v0.1.7
-
修复:关掉桌面端后 3080 不释放,重开时报「已在 3080 找到 dsh 服务,但它要求启动 token,而所有已知日志里都没有」。
窗口关闭并不保证退出钩子一定执行(被结束进程、崩溃、注销都会跳过),而桌面端拉起的dsh web隔着cmd /c包装且是 detached 的 —— 于是它会活下来,带着一个只存在于某次日志里的启动 token。下次启动去「附加」它必然失败,只能手动杀端口。现在桌面端给自己拉起的服务记账(
<userData>\spawned-servers.json)。下次启动时若发现「账上那个进程仍占着该端口」,就判定为自己上次的遗留并先停掉、再重新拉起。判定用身份而不是「是否还活着」:只有账上记录的监听进程、且此刻仍占着该端口才算数 —— 手工启动的服务没有账目,永远不会被误杀。 -
回归测试 18 项(新增 2 项覆盖遗留收回:必须在附加探测之前执行、记账在启动时写入并在正常停止时清除)。
v0.1.6
- 修复:接入外部主服务时的 401 白页。新增
mainServiceLog配置(默认<userData>\logs\dsh-main.log),knownToken()一并读取;token 候选改为按日志倒序全部尝试(陈旧行不再遮蔽有效行),并用「303 = 有效 / 401 = 无效」校验(redirect: 'manual'停在第 1 跳)。 - 拿不到 token 时明确报错并给出两条出路,不再静默白页。
v0.1.5
-
新增
launcher配置项,决定桌面窗口自己的服务跑哪个 CLI:值 行为 auto(默认)有 deepseek-harness检出就用检出,否则用已安装的 CLI(历史行为)installed只用已安装的 CLI,忽略任何检出 checkout只用检出,找不到就报错 ⚠️ 默认的auto意味着:只要检出存在且能跑,桌面窗口就跑检出,而不是 npm 全局包。以前检出常年是同一个版本(dsh-v0.1.1-rc.2),跟 npm 版号一致所以看不出来;一旦升级检出,桌面窗口就跟着静默换版本。想让窗口固定在 npm 版就设"launcher": "installed"。 -
辅助端精简回一个:只保留从已安装 CLI 启动的辅助端(默认
3081)。原先的「源码辅助端」已移除——要跑源码版本请自己用pnpm启动。相应配置项auxSourcePort/auxSourceHome/auxSourceRepo一并删除。 -
启动器选择逻辑抽到
desktop/src/launcher.js并可单元测试:覆盖auto/installed/checkout三种偏好、检出存在但不可跑时的回退、以及无检出且无 CLI 的情形。
v0.1.4
- 修复:npm 辅助端因为找不到 CLI 而启动不了。Windows 上
spawnSync('dsh')不会按PATHEXT解析扩展名,而 npm 装出来的是dsh.cmd(外加一个给 Git Bash 用的无扩展名dshshell 脚本),所以旧探测必然 ENOENT —— 终端里dsh能用,桌面端却一直报「未找到已安装的 dsh CLI」。现在改为自己按PATH+PATHEXT解析,且优先.cmd(无扩展名那个 shell 脚本cmd.exe根本跑不了)。 - 修复:辅助端「打开」按钮报
dsh web authentication required。dsh ≥ 0.1.5 的 web 服务用每次启动生成的一次性 token 做浏览器鉴权:裸根地址一律 401,只有它启动时打印的/?token=...才能换取 cookie。该 token 只存在于这个进程的 stdout,而桌面端本来就把 stdout 重定向进了辅助端日志 —— 所以「打开」现在会从日志里读回带 token 的 URL,读不到时才回退到裸根地址。 - 面板状态行新增实例日志路径,便于排查。
v0.1.3
-
辅助端从 1 个变成 2 个:桌面窗口右下角的面板里现在有两块独立控制区,各自有启动 / 打开 / 停止:
实例 默认端口 启动方式 用途 npm 辅助端 3081已安装的 dsh CLI(npm 全局) 日常开发插件。重打包桌面端、升级 dsh 源码都不影响它,随时有一个能用的 dsh 源码辅助端 3082deepseek-harness检出的构建产物试验 dsh 源码新版本(如 0.1.5-rc.2),不动全局安装 -
npm 辅助端不再会被检出「抢走」:旧版按「检出 → DSH_BIN → 安装版 → PATH」解析启动器,只要存在检出就一定用它。现在 npm 辅助端跳过检出,固定在已安装的 CLI 上——这正是「改源码时它照样能用」的前提。
-
新增配置项:
auxPort/auxHome(npm 辅助端)、auxSourcePort(默认3082)/auxSourceHome/auxSourceRepo(源码辅助端)。空 home = 共用主 home;测新版本 dsh 时务必给源码辅助端单独设 home,否则新版的会话格式迁移会改写主 home 的会话。 -
启动失败会显示原因:面板里直接显示「未找到已安装的 dsh CLI」或「未找到 deepseek-harness 检出」等提示,不再静默失败。
-
附带修复:源码运行(
electron .)时config.json不被读取;日志目录不存在时写入静默失败。
v0.1.2
dsh-desktop v0.1.2
给 DeepSeek Harness(DSH)加一个原生桌面窗口,用 npm 安装版 dsh 拉起服务。
本次更新
- 新增「辅助端」按钮:桌面窗口右下角悬浮按钮,可一键 启动 / 打开 / 停止 一个独立端口(默认 3081)的 dsh 实例。
- 主服务(默认 3080)仍由桌面端独占、关窗即停;辅助端是独立服务,关桌面端不会停它。
- 更新桌面端 / 插件时不用停辅助端;主用桌面端时,也能在辅助端里测新功能、试新版本 dsh。
- 配置(%APPDATA%\dsh-desktop\config.json):auxPort(默认 3081)、auxHome(默认空 = 共用主 home;测新版本建议填路径隔离)。
- 修复:关窗后服务残留占用端口(改为按端口杀掉真正的 node 服务整棵进程树)。
- 修复:安装版 CLI 无法启动(cmd /c 引号被再转义)。
- 修复:不再自动弹出浏览器(启动服务加 --no-open)。
- install 自动下载 exe:无内置 exe 时从本 Release 自动下载 DSH-Desktop-*.exe。
安装
手动(tgz)
dsh plugin --profile web add ./dsh-desktop-0.1.2.tgz
cd %DSH_HOME%\profiles\web
pnpm exec dsh-desktop install
从 GitHub 直接安装
dsh plugin --profile web add github:SuperPaiGu/dsh-desktop
pnpm exec dsh-desktop install
仅 Windows。桌面窗口与 Web 界面是同一份数据。
dsh-desktop v0.1.1
dsh-desktop v0.1.1
给 DeepSeek Harness(DSH)加一个原生桌面窗口,用 npm 安装版 dsh 拉起服务。
本次更新
- install 自动下载 exe:git / npm 渠道不再需要手动下载大 tgz;无内置 exe 时,dsh-desktop install 会自动从本 Release 下载 DSH-Desktop-0.1.0-x64.exe(私有仓库请设环境变量 GITHUB_PERSONAL_ACCESS_TOKEN)。
- 修复:安装版 CLI 无法启动——cmd /c dsh.cmd 的引号被 Windows 再转义成 "...",导致报「不是内部或外部命令」。
- 修复:关窗后服务残留占用 3080——关窗只杀了 cmd 壳、留下真正的 node 服务变孤儿进程;现改为关窗时按端口找到真正的 node 服务并杀掉整棵进程树。
- 修复:不再自动弹出浏览器——启动服务时加 --no-open,桌面窗口本身就是界面。
- 兼容 DSH 0.1.1(用 npm 安装版 @deepseek-ai/dsh 拉起服务)。
安装
手动(tgz)
dsh plugin --profile web add ./dsh-desktop-0.1.1.tgz
cd %DSH_HOME%\profiles\web
pnpm exec dsh-desktop install
从 GitHub 直接安装
dsh plugin --profile web add github:SuperPaiGu/dsh-desktop
pnpm exec dsh-desktop install # 自动从 Release 下载 exe
仅 Windows。桌面窗口与 Web 界面是同一份数据。安装前请确认 dsh 命令可用(npm i -g @deepseek-ai/dsh)。
dsh-desktop v0.1.0 — DSH 桌面窗口插件 + 便携 exe
给 DeepSeek Harness 加一个桌面窗口。装好后桌面上有「DSH 桌面版」图标,双击即用:
DSH 没在运行会自动启动,在运行则直接接入(同一界面、同一会话),关窗口自动停掉自己启动的服务。
安装(三步)
- 下载本 Release 的
dsh-desktop-0.1.0.tgz - 终端执行:
dsh plugin --profile web add ./dsh-desktop-0.1.0.tgz - 继续执行:
cd %DSH_HOME%\profiles\web
pnpm exec dsh-desktop install
完成。也可以从 GitHub 直接安装(不带 exe,/desktop 用 Edge 窗口):
dsh plugin --profile web add github:SuperPaiGu/dsh-desktop
要求
- Windows 10/11
- 可用的 dsh + Node ≥ 22 + pnpm
本版本内容
- /desktop 命令(Web UI 命令面板)
- dsh-desktop 命令(run / install)
- 便携桌面 exe(自建服务支持源码检出与安装版 dsh 两种形态)