dsh-desktop-shell
DeepSeek Harness(dsh)的桌面快捷启动端:一个轻量 Electron 壳,给 dsh web profile 一个原生窗口和系统托盘常驻。
它做什么
双击启动 → 检查 dsh web 是否已在监听(默认 http://127.0.0.1:3080);没跑就自动拉起;然后用原生窗口打开 web UI。
- 托盘驻留 —— 关窗不退出,隐藏到系统托盘;托盘菜单:打开主窗口 / 退出。
- 单实例 —— 重复启动会聚焦已有窗口。
- 所有权分明 —— 壳自己拉起的 web 在退出时一并关闭;已存在的(你自己终端里跑的、别的工具拉起的)不动。
- 全配置化 —— dsh 启动命令、工作目录、额外环境变量、端口、窗口标题都在
config.json里;仓库里没有任何写死的本机路径或 API 端点。
安装 dsh 侧(bundle 插件)
本仓库是一个 dsh profile bundle:package.json 声明了 dsh.bundle.patch,装进 web profile 后会自动激活一个 patch 层——把 web 服务器锁定在本机回环 127.0.0.1:3080,并挂一个小型 glue 插件(打印就绪行;若服务器绑定超出回环会告警)。
从 git 安装:
dsh plugin --profile web add github:ikashana/dsh-desktop-shell从 npm 安装(发布后):
dsh plugin --profile web add dsh-desktop-shell之后照常启动 dsh --profile web 即可——或者直接让下面的壳帮你拉起。
安装壳(桌面应用)
前置:Node.js ≥ 18(安装时 Electron 会自行下载)。
git clone https://github.com/ikashana/dsh-desktop-shell.git
cd dsh-desktop-shell
npm install
cp config.json.example config.json # 按你的环境修改
npm start唯一必须改的是 dshCommand(以及 dsh 不在旁边时的 cwd):指向你的 dsh 命令,或源码安装时指向 checkout 的 node + 入口,例如:
{
"dshCommand": ["C:/path/to/node.exe", "--import", "tsx/esm", "apps/cli/src/bin.ts", "--profile", "web"],
"cwd": "C:/path/to/deepseek-harness"
}Windows 上建议写 node.exe 的绝对路径;裸 dsh 会走 .cmd shim,child_process 因 CVE-2024-27980 加固默认拒绝无 shell 拉起(壳也兼容该情形,但显式可执行文件最稳)。
config.json 字段
| 字段 | 默认 | 含义 |
|---|---|---|
port | 3080 | web 服务器监听端口。改动时记得与 bundle patch 里的 webserver.port 保持一致。 |
dshCommand | ["dsh", "--profile", "web"] | 启动 dsh web 的命令 argv。 |
cwd | 壳目录 | dshCommand 的工作目录。 |
env | {} | 注入 web 进程的额外环境变量(例如你的 dsh 安装从环境变量读取的 provider 端点)。 |
title | dsh Desktop | 窗口与托盘标题。 |
桌面快捷方式(Windows)
$WshShell = New-Object -ComObject WScript.Shell
$lnk = $WshShell.CreateShortcut("$HOME\Desktop\dsh Desktop.lnk")
$lnk.TargetPath = "C:\path\to\dsh-desktop-shell\node_modules\electron\dist\electron.exe"
$lnk.Arguments = "`"C:\path\to\dsh-desktop-shell`""
$lnk.WorkingDirectory = "C:\path\to\dsh-desktop-shell"
$lnk.IconLocation = "C:\path\to\dsh-desktop-shell\assets\icon.ico"
$lnk.Description = "dsh Desktop · DeepSeek Harness 桌面壳"
$lnk.Save()日志
壳把 shell.log 和 web.log 写进 Electron userData 目录(Windows:%APPDATA%\dsh-desktop-shell\)——web 起不来时先看这两个文件。
平台说明
在 Windows 上开发与测试。托盘行为跨平台;进程树回收在 Windows 上用 taskkill,其它平台回退到 kill()。窗口图标由 dsh favicon 渲染而来(assets/favicon.svg,MIT)——想换外观就改 assets/favicon.svg 后运行 node_modules\electron\dist\electron.exe make-icon.js 重新生成。
目录结构
├── main.js # Electron 主进程:窗口 / 托盘 / 单实例 / web 生命周期
├── lib/index.js # dsh bundle glue 插件(回环校验 + 就绪行)
├── cordis.patch.yml # dsh profile patch 层(回环锁定的 webserver + glue 行)
├── config.json.example
├── make-icon.js # 图标渲染脚本(favicon.svg → PNG)
└── assets/ # 图标 + favicon 源文件许可证
MIT。assets/favicon.svg 复制自 MIT 许可的 deepseek-harness 仓库。