一个自包含、注重生命周期与安全边界的 DeepSeek Harness Windows 桌面封装。
Important
本项目由社区维护,不是 DeepSeek 官方产品,也不代表 DeepSeek 官方立场。
从 GitHub Releases 下载最新的
DeepSeek Harness Desktop_*_x64-setup.exe 并安装。预览版仅支持 Windows 10 22H2 / Windows 11 x64。
v0.1.0-preview.3 未使用 Authenticode 签名,Windows SmartScreen 可能显示未知发布者提示。
请在 Release 页面核对同名 .sha256 文件后再运行安装包。
安装包已经内置 Node.js 22.22.3、@deepseek-ai/dsh 0.1.0-rc.6、
dshmarket 1.6.0 与 pnpm 11.22.0,首次启动无需联网,也不要求预装 Node、DSH、pnpm
或 DeepSeek 官方桌面端。
- 一键启动本地
dsh web,等待严格校验的回环地址后在 WebView2 中加载。 - 单实例运行:再次启动只恢复并聚焦现有窗口,不创建第二个 Host。
- 关闭主窗口后隐藏到系统托盘,任务继续运行;只有托盘“退出”才清理 Host。
- 托盘可串行重启 DSH 服务;新 PID 和随机端口就绪后自动恢复 WebView。
- Host 正常退出等待 5 秒,超时后只强制结束本应用记录的进程树。
- 外部 HTTP/HTTPS 链接交给系统浏览器,危险 scheme 和跨源 WebView 导航被拒绝。
- Host 页面不获得任何 Tauri capability;本地启动页使用严格 CSP。
- 日志包含时间、级别与 PID,并进行敏感字段脱敏和
5 MiB x 3轮转。
v0.1.0-preview.3 将以下插件固定版本后随安装包离线交付。桌面端只维护带 marker 的托管安装,
不会覆盖用户自行安装的同名插件,也会保留用户主动禁用的状态。
| 插件 | 版本 | 默认行为与权限 |
|---|---|---|
dsh-at-file |
0.6.0 | 搜索工作区路径,只插入相对路径引用,不注入文件内容 |
@omdsh-dev/dsh-genui |
0.8.4 | 本地渲染 GenUI、Mermaid 和 Three.js;action 会作为消息回传模型 |
dsh-better-sidebar |
0.12.2 | 可操作文件、Git 和本机 PTY;模型终端工具保持关闭,首次托管安装关闭 HTTP/HTTPS 接管 |
@linxin666/dsh-skins |
0.1.17 | 只安装 Skin Center 与聚合皮肤,不安装 Web UI 全家桶;设置左侧“主题”可试穿、应用和恢复 |
@vectorize-io/hindsight-coding-agents |
0.3.4 | 默认 harnesses.dsh.optInOnly=true 且项目清单为空,不记录也不上传;已有配置不改 |
@liustack/modlens |
3.16.7 | 提供图片读取和结构化视觉结果;不预置密钥、视觉端点或 Agent CLI |
@zebbkira/dsh-skills-mcp-manager |
0.1.3 | 设置一级页管理 DSH Skills 与真实 MCP 连接;MCP env/headers 明文存于 ~/.dsh/mcp.json |
桌面自有 @dsh-desktop/theme-settings 提供“预置插件”和“主题”两个设置一级入口。“预置插件”
只切换白名单 package bundle,不卸载文件、不修改 dependencies、不调用 pnpm;保存后通过托盘
“重启 DSH 服务”生效。官方 bundle、Market 与桌面控制 bundle 自身不可关闭,未知用户 bundle
不会被修改。
GenUI 的锁定 SKILL.md 首次启动会写入 $DSH_HOME/skills/genui/SKILL.md,只作用于 DSH。
已有非托管同名 Skill 不覆盖;托管文件未修改时会随版本升级,用户修改或删除后保留用户选择。
DSH Market 1.6.0 作为桌面运行时 bundle 固定交付,不写入用户 profile dependencies,也不能由
市场升级或卸载。它使用 curated registry 搜索插件,并通过内置 DSH CLI 与私有 pnpm 在
~/.dsh/profiles/web 安装、更新和卸载用户插件;离线可浏览内置快照,但安装、更新和可靠的版本检查需要网络。
桌面端使用安装根私有模块别名加载 Market,因此用户 profile 中已有的同名依赖会原样保留,
但不会覆盖当前桌面发行版的活动 Market 版本。
第三方插件与桌面应用拥有相同主机权限,目前没有包签名验证、权限清单或进程级沙箱。npm
预构建包可以直接安装;需要 prepare、allowBuilds 等脚本的 GitHub 源必须逐包明确确认。
插件需要重启才能生效时,请使用托盘“重启 DSH 服务”,Market 内部重启已被桌面 policy 禁用。
flowchart LR
A["Desktop shell"] -->|"spawn fixed runtime + policy"| B["Bundled Node + dsh web"]
M["DSH Market"] -->|"bundled dsh CLI + private pnpm"| U["User plugins in ~/.dsh"]
U --> B
A -->|"atomic managed profile"| P["Pinned offline plugins"]
P --> B
B -->|"dsh web: loopback URL"| C["Strict readiness parser"]
C -->|"same origin only"| D["WebView2"]
D -->|"external HTTP(S)"| E["System browser"]
A -->|"explicit quit"| F["Graceful then process-tree cleanup"]
应用执行以下命令,并让系统随机分配空闲端口:
node --expose-internals <bundled-dsh>/lib/bin.js web --patch <desktop-policy> --host 127.0.0.1 --port 0
就绪解析只接受以 dsh web: 开头、主机为 127.0.0.1 或 localhost、带合法显式端口、
且没有凭据、路径、查询参数或片段的 HTTP 地址。冲突的重复地址会终止启动。
本仓库只维护 Tauri 桌面壳、进程生命周期、自包含运行时、日志、安全边界和 Windows 发布流程。
它不修改 DSH Web UI,也不修改 Agent 核心能力。DSH、DSH Market、pnpm 与 Web 前端按
runtime.lock.json 固定版本并遵循各自上游许可证。
环境要求:PowerShell 7、Node.js 22.22.3、Rust 1.94.1、MSVC C++ Build Tools 和 WebView2。
git clone https://github.com/licn9901-arch/DSH-Desktop.git
Set-Location DSH-Desktop
npm ci
.\dev.cmd开发构建允许以下覆盖项,发布构建会忽略 Node 与 CLI 覆盖并只使用内置运行时:
| 环境变量 | 用途 |
|---|---|
DSH_DESKTOP_NODE_EXECUTABLE |
仅开发模式:指定 Node 可执行文件 |
DSH_DESKTOP_CLI_ENTRY |
仅开发模式:指定 DSH lib/bin.js |
DSH_DESKTOP_CWD |
指定 Host 工作目录,默认用户目录 |
DSH_DESKTOP_USER_HOME |
仅开发模式:覆盖第三方用户配置目录,供隔离 smoke 使用 |
DSH_DESKTOP_READY_TIMEOUT_SECS |
指定 Host 就绪超时秒数,默认 90 |
npm ci
npm run build构建会按 runtime.lock.json 下载并校验官方 Node 压缩包,以及 DSH、Market、pnpm 的 npm
integrity,并按 plugins.lock.json 校验 8 个托管 bundle 与 1 个托管 Skill
归档与 npm integrity。三组固定 lockfile 分别执行 npm ci;插件组额外使用
--omit=dev --ignore-scripts。Node、DSH CLI、Web 前端、插件本地资产、PTY 和许可证全部验证后
才调用 Tauri 打包。
暂存资源写入被 Git 忽略的 src-tauri/resources,NSIS 安装包输出到
src-tauri/target/release/bundle/nsis。
已有缓存时可离线暂存:
pwsh -NoProfile -File .\scripts\stage-runtime.ps1 -Offline
pwsh -NoProfile -File .\scripts\stage-plugins.ps1 -Offlinenpm run validate:icons
npm run lint
npm test
npm audit
Push-Location runtime-host
npm audit --omit=dev
Pop-Location
Push-Location plugin-runtime
npm audit --omit=dev
Pop-Location
npm run coverage
npm run smoke覆盖率门禁为 Host、运行时、生命周期、导航、日志和就绪解析核心模块行覆盖率不低于 80%;应用装配层由 Windows 冒烟覆盖。详细范围与流程见 测试说明。
日志位于 %LOCALAPPDATA%\dsh-desktop\dsh-desktop.log。
- 启动失败:查看日志中的
level=ERROR、Host PID 和真实退出码。 - 市场显示“状态未知”:表示 registry 或版本检查失败,不等同于“已是最新”。
- 插件安装后未生效:从托盘选择“重启 DSH 服务”,不要依赖 Market 内部重启。
- 预置插件开关:打开“设置 → 预置插件”;开关保存后需从托盘重启 DSH 服务。
- 主题切换:打开“设置 → 主题”;该入口由桌面适配器提供,具体皮肤 UI 与 Host API 仍来自 Skin Center。
- 窗口关闭后仍有任务:这是关闭到托盘的预期行为,请从托盘菜单重新打开或显式退出。
- 构建提示运行时或插件缺失、哈希不匹配:不要绕过校验,清理对应
.runtime-cache后重新暂存。 - 安装器显示未知发布者:首个预览版未签名,请先核对 Release 提供的 SHA-256。
首版不接入自动更新,请从 GitHub Releases 手动安装新版本。需要回滚时安装上一预览版本。 卸载器只删除应用安装文件;即使选择删除应用数据,也只清理桌面壳的日志目录, 不会删除 DSH 用户会话或配置。
- 仅支持 Windows x64,不支持 macOS、Linux 或 ARM64。
- 不包含自动更新、开机自启、插件签名验证、权限沙箱、手机远控或 Channels。
- 本机已有的
0.1.0原型不保证原地升级;测试预览版前请先卸载原型并保留用户数据。
请先阅读 贡献指南 与 安全政策。问题反馈请附版本、复现步骤和 脱敏后的日志片段,不要提交 token、Cookie、密码或完整用户目录。
桌面壳代码采用 MIT License。内置 Node.js、DSH 和其他依赖的版本与许可证见 第三方声明,构建产物同时附带机器可读的第三方许可证清单。