DeepSeek HarnessDSH的 Windows 桌面壳,基于 Tauri v2 + React 18 +…
45.4/100
综合分
24
GitHub 星标
289
npm 周下载
—/5
用户评分
数据截至 2026/10/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-desktop-pluginnpm 源 · dsh-desktop-plugin 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 19 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-desktop-plugin @ 1.5.12
✓Node 引擎要求 ^22.19 || >=24 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 04:31:57
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 35 处,展示前 35 条)
- 执行外部命令固定命令lib/installer.js:171
const child = spawn('curl', args, { stdio: 'ignore', windowsHide: true }); - 删除本地文件lib/installer.js:175
child.on('error', error => { fs.rmSync(tmp, { force: true }); reject(error); }); - 删除本地文件lib/installer.js:179
fs.rmSync(tmp, { force: true }); - 删除本地文件lib/installer.js:184
fs.rmSync(tmp, { force: true }); - 读取本地文件lib/installer.js:189
resolve(fs.readFileSync(tmp)); - 删除本地文件lib/installer.js:195
fs.rmSync(tmp, { force: true }); - 读取本地文件lib/installer.js:207
exists: path => fs.existsSync(path), - 写入本地文件lib/installer.js:208
mkdir: dir => fs.mkdirSync(dir, { recursive: true }), - 写入本地文件lib/installer.js:209
writeFile: (path, data) => fs.writeFileSync(path, data), - 执行外部命令固定命令lib/installer.js:213
const child = spawn('powershell', ['-NoProfile', '-Command', "[Environment]::GetFolderPath('Desktop')"], { - 发起网络请求lib/installer.js:223
const response = await fetch(url, { - 写入本地文件lib/installer.js:240
fs.mkdirSync(tmpBase, { recursive: true }); - 删除本地文件lib/installer.js:259
fs.rmSync(tmp, { force: true }); - 执行外部命令固定命令lib/installer.js:271
const child = spawn('powershell', ['-NoProfile', '-Command', script], { - 执行外部命令固定命令lib/installer.js:279
const child = spawn('powershell', ['-NoProfile', '-Command', `(Get-Item -LiteralPath '${psQuote(path)}').VersionInfo.ProductVersion`], { - 写入本地文件lib/installer.js:287
rename: (from, to) => fs.renameSync(from, to), - 删除本地文件lib/installer.js:288
removeFile: path => fs.rmSync(path, { force: true }), - 执行外部命令来自配置/变量lib/launcher.js:12
const child = spawn(exePath, [], { - 执行外部命令固定命令src/installer.ts:226
const child = spawn('curl', args, { stdio: 'ignore', windowsHide: true }) - 删除本地文件src/installer.ts:229
child.on('error', error => { fs.rmSync(tmp, { force: true }); reject(error) }) - 删除本地文件src/installer.ts:233
fs.rmSync(tmp, { force: true }) - 删除本地文件src/installer.ts:238
fs.rmSync(tmp, { force: true }) - 读取本地文件src/installer.ts:242
try { resolve(fs.readFileSync(tmp)) } catch (error) { reject(error) } finally { fs.rmSync(tmp, { force: true }) } - 读取本地文件src/installer.ts:255
exists: path => fs.existsSync(path), - 写入本地文件src/installer.ts:256
mkdir: dir => fs.mkdirSync(dir, { recursive: true }), - 写入本地文件src/installer.ts:257
writeFile: (path, data) => fs.writeFileSync(path, data), - 执行外部命令固定命令src/installer.ts:261
const child = spawn('powershell', ['-NoProfile', '-Command', "[Environment]::GetFolderPath('Desktop')"], { - 发起网络请求src/installer.ts:271
const response = await fetch(url, { - 写入本地文件src/installer.ts:287
fs.mkdirSync(tmpBase, { recursive: true }) - 删除本地文件src/installer.ts:302
fs.rmSync(tmp, { force: true }) - 执行外部命令固定命令src/installer.ts:314
const child = spawn('powershell', ['-NoProfile', '-Command', script], { - 执行外部命令固定命令src/installer.ts:322
const child = spawn('powershell', ['-NoProfile', '-Command', `(Get-Item -LiteralPath '${psQuote(path)}').VersionInfo.ProductVersion`], { - 写入本地文件src/installer.ts:330
rename: (from, to) => fs.renameSync(from, to), - 删除本地文件src/installer.ts:331
removeFile: path => fs.rmSync(path, { force: true }), - 执行外部命令来自配置/变量src/launcher.ts:14
const child = spawn(exePath, [], {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
1 张 · 点击查看大图功能亮点
- Tauriv2桌面外壳
- 托盘常驻
- 任务完成弹窗提醒
DeepSeek Harness 桌面外壳——Tauri v2,托盘 + 原生网页聊天 + 任务完成弹窗提醒,单个便携 exe
最近更新
在 GitHub 查看全部 →v1.6.722026-10-15预发布
· v1.6.72 预发布版 / Prerelease
本次处理 #20 启动窗口尺寸与 #21 托盘界面重载。稳定版保持 v1.6.69。
· 启动尺寸与居中:首次打开按主屏宽度 78%、高度 88% 计算,在扣除任务栏的工作区内居中;适配系统缩放,小屏限制在可用区域内。从托盘恢复不会重新调整窗口位置和大小。无法取得显示器信息时保留 1280×800 回退尺寸。
· 重新加载界面:托盘 Open DSH 下新增入口,由原生窗口重载页面并唤回隐藏窗口,不执行后端重启。已保存的设置保留;未发送的输入、滚动位置等临时页面状态可能丢失。此功能提供恢复手段,不代表已解决所有卡死原因。
· 新入口支持六种语言;简体与繁体菜单的“检查前端更新”改为“检查应用更新”。
验证范围和限制见仓库 docs/issues-20-21-checks.md。不同屏幕缩放及原始卡死环境仍欢迎复测。安装方式:下载 exe,退出旧桌面后替换并重开;本次不需要升级 DSH 内核。npm 插件未发布。
· English
Prerelease addressing initial window geometry (#20) and a native tray reload action (#21). Stable Latest remains v1.6.69.
· Size the initial window to 78% of primary screen width and 88% of height, bounded and centered within its work area. Scale minimum dimensions correctly for DPI and cap them on small displays. Tray restoration preserves the adjusted geometry. Missing monitor information keeps the 1280×800 fallback.
· Add Reload interface after Open DSH in the tray menu, with six locales. Reveal the window and reload its webview without restarting the backend. Persisted settings remain; unsent drafts and other transient UI state may be lost. This is a recovery action, not a fix for every cause of freezing.
· Clarify the application-update label in Simplified and Traditional Chinese.
See docs/issues-20-21-checks.md for validation and limitations. Reporter-machine verification is still needed. Replace the executable after exiting the previous desktop and reopen. No DSH backend upgrade or npm plugin release is required.
v1.6.712026-10-05预发布
· v1.6.71 预发布版 / Prerelease
针对 #18 会话通知失效与 #19 添加工作区后界面不刷新的候选修复。稳定 Latest 保持 v1.6.69,等待原机器复测后再决定是否转正。
· #18:重复会话信息不再清掉已知运行状态;最小化、隐藏或后台窗口允许完成通知,前台正在查看时仍抑制通知。逻辑事件流报错后重新连接,补充连接就绪、完成判定和 Windows 通知失败日志;被动监听正确跳过交互事件。
· #19:通过官方目录选择接口,由桌面创建归属于主窗口的文件夹选择框,替代外部无主对话框。保留页面和草稿,不刷新网页,不开放通用远程 Tauri 权限。旧版 DSH 没有该接口时保留原流程。
下载下方 exe,从托盘退出旧桌面后替换并重开。无需为本次桌面更新升级或重启 DSH 后端;若测试 #19,请保留报告中使用的 DSH 0.2.0-rc.2 环境作对照。
验证:40 项 Rust 测试通过,4 项可选测试忽略;目录选择桥接测试覆盖选择、取消、错误、草稿保留和来源校验;启动状态回归、生产构建与嵌入资源核验通过。目录桥接测试模拟了原生命令,未在报告者的 Windows 10 / WebView2 154 环境复现原故障;未发送真实模型任务。因此实际通知和目录选择后的显示仍需复测,两条 Issue 保持打开。npm 插件未发布。
· English
Candidate fixes for missing completion notifications (#18) and workspace updates not appearing after folder selection (#19). Stable Latest remains v1.6.69.
· Preserve running state across repeated session metadata events; allow notifications when hidden, minimized or unfocused, while suppressing them in the focused foreground window. Reconnect after logical-stream errors, improve diagnostics, and decline interactive events as a passive observer.
· Use the official desktop directory-picker hook with a native dialog owned by the main window. Preserve the page and drafts without reloads or general remote Tauri permissions. Older backends without the hook keep their existing flow.
Exit the previous desktop from the tray, replace the executable and reopen. No backend upgrade/restart is required for this desktop update. Keep the reported DSH 0.2.0-rc.2 environment for comparison when testing #19.
Validation: 40 Rust tests passed, 4 optional tests ignored; cross-origin picker bridge selection/cancellation/error/draft/source checks; boot regression; production build and embedded assets. Browser tests mock native commands. The reporter's Windows 10 / WebView2 154 rendering problem was not reproduced locally, and no live model task was submitted. Actual notifications and native picker behavior still require reporter confirmation; both issues remain open. No npm release.
v1.6.702026-10-01预发布
· v1.6.70 预发布版 / Prerelease
恢复会话完成通知(#18),并合并社区修复(#16)。
· 通知(#18)
· 会话完成通知自 dsh 0.1.2 起完全失效:事件源 /api/events.host 已删除,monitor 仍在连旧端点;握手不带凭证;帧格式(server-request/host/session-status)与新 mux 协议完全对不上;且 401-only 的分类器对"连接被掐断"这类失效连一条日志都不写。三项独立失效,任意一项都足以让通知永不触发。
· 适配方式(协议已对运行中的 dsh web 实测验证):握手携带 webchat 登录换取的 dsh-auth-… 会话 cookie,连接 ws://127.0.0.1:3080/api/remote.mux,发送 {type:"open", endpoint:"$events"} 打开事件逻辑流,解析 api-session/status(sessionId, running)、api-session/added(summary)、api-session/removed(sessionId);保留原有 true→false 边沿判定(配单元测试),稳态空闲不重弹。
· cookie 来源:dsh.rs 在 token 兑换后除种入 WebView2 外,同步保留给 Rust 侧消费(内存 + %LOCALAPPDATA%\dsh-desktop\webauth-session.cookie,过期时间随行);壳重启后 monitor 仍可复用(附着模式没有新的 token 也能用)。
· 通知标题查询从已删除的点号端点改到 session/list,payload 使用新网关要求的 args._request 形状并携带凭证——否则每条通知都会退化成"任务已完成:一个会话"。
· 失效可见性:无 cookie / 401/403 → 静默 15 秒轮询、只记一条 Info;其他协议/IO 故障每段故障只记一条 Warn。
· 合并社区 PR(#16)
· 页面右键刷新/F5 后仅靠一次性 fire-and-forget 的状态重推,丢一次就永远停在「正在启动 DSH…」。现在页面加载时主动 dsh_current_status 拉取对账;推送仍是快路径,事件到达后拉取作废,两者共用一个 applyStatus。
· 壳内左键点链接开两个相同标签页:页面自身(MarkdownAnchor→window.open)与壳注入的回退脚本(捕获阶段,defaultPrevented 守卫是死代码)各自翻译一次点击。回退移到 window 冒泡阶段,页面处理过的链接壳一律让位;页面不认的锚点仍回退壳处理(issue #7 场景)。五条路径回归测试(页面自持/无主/站内/修饰键/右键菜单)。
· 附带修复:壳此前会无视页面的"在侧栏打开"偏好强制唤起系统浏览器。
· 文档
· README 架构小节(中英)更新为 remote.mux/$events/api-session/* 现行协议,删除对已删除的 events.host 端点的描述。
· 验证
· 36 项 Rust 单元测试通过(monitor 新增 6 项:分帧解析×5、边沿判定×1)。
· 前端 tsc 零错误;appearance 6/6、backend-update 6/6、explorer 4/4 模型测试通过。
· UI 浏览器回归:startup、backend-update、titlebar-hover、tray-settings、boot-reconcile(PR #16 新增,覆盖丢失重推/迟拉取/空拉取)、link-open-once 全部 PASS。
· 协议实测:真实 dsh web(0.1.7-alpha.2 profile web)上完成 token→cookie→WS 握手→ready 帧全链路验证;无凭证 WS 升级按预期 401。
· 通知按钮、托盘行为与本版无改动。
· English
Prerelease restoring session-finish notifications (#18) and merging community fixes (#16).
· The monitor now speaks dsh 0.1.2+ BrowserAuth: the launch-token-exchanged dsh-auth-… cookie rides the WS handshake to /api/remote.mux, the shell opens the gateway's $events logica
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成DSH Desktop (dsh-desktop-windowos)
DeepSeek Harness(DSH)的 Windows 桌面壳,基于 Tauri v2 + React 18 + TypeScript。
打开应用 → 自动拉起本机 DSH Web 服务 → 窗口内嵌原生 webchat(常驻壳) → 托盘常驻,任务完成弹系统通知。
交付物是单个免安装裸 exe(约 4.5 MB)。
推荐用法:在任意文件夹执行 pnpm add @deepseek-ai/dsh(或 npm i @deepseek-ai/dsh),把 exe 放进同一文件夹的根目录双击即可——应用自动发现旁边的 node_modules\.bin\dsh.cmd,启动零下载、零配置、不询问。
桌面「DeepSeek Harness Web」快捷方式在应用 v1.6.52+ 首次启动后自动迁移为登录入口:点击时启动/唤起桌面应用,等待后端就绪并在默认浏览器完成登录。升级后请先从托盘退出旧版应用再重新打开一次;自定义网页地址保持原样。
展开完整文档(README 剩余 1 节)
DSH Desktop (dsh-desktop-windowos) DeepSeek Harness(DSH)的 Windows 桌面壳,基于 Tauri v2 + React 18 + TypeScript。 打开应用 → 自动拉起本机 DSH Web 服务 → 窗口内嵌原生 webchat(常驻壳) → 托盘常驻,任务完成弹系统通知。 交付物是单个免安装裸 exe(约 4.5 MB)。 推荐用法:在任意文件夹执行 pnpm add @deepseek-ai/dsh(或 npm i @deepseek-ai/dsh),把 exe 放进同一文件夹的根目录双击即可——应用自动发现旁边的 node_modules\.bin\dsh.cmd,启动零下载、零配置、不询问。 桌面「DeepSeek Harness Web」快捷方式在应用 v1.6.52+ 首次启动后自动迁移为登录入口:点击时启动/唤起桌面应用,等待后端就绪并在默认浏览器完成登录。升级后请先从托盘退出旧版应用再重新打开一次;自定义网页地址保持原样。 更新通道(三段式发布) 应用按三段式节奏发布,releases/latest 即稳定通道: 1. 开发期:每个迭代版本发为 GitHub 预发布(开发版)——自动更新不触碰(latest 天然排除),想尝鲜从 Releases 手动下载 2. 稳定性检查:功能收敛后的检查版与修 bug 迭代仍走预发布 3. 稳定版:仅当作者确认稳定使用后才转正(latest),桌面端自动更新开闸——已装用户下次启动即升级 桌面端自动更新支持稳定与预发布两个通道(更新中心可切换或关闭自动更新):稳定通道为默认,预发布通道供尝鲜与测试机验证。 功能 - 开箱即用:双击 exe 启动本机 DSH 并嵌入原生 webchat。已安装候选等待最多 120 秒,npx 最多 300 秒;通过只读包文件识别 --no-open,不会为参数检测启动 profile。 - 自绘标题栏:无边框窗口,Comfy 式胶囊控件(鲸鱼标+名字+箭头)整颗居中——点击打开环境管理面板(开启态蓝边高亮、箭头翻转);拖拽区/最小化/最大化/关闭自绘,Win 贴靠与边缘缩放原生保留 - 设置工作区:点击标题栏胶囊打开左右布局的设置页,包含常规、外观、环境、更新和日志;支持全局设置搜索、图标导航、键盘操作与窄窗口布局。聊天 iframe 常驻,切换设置页保留聊天状态。 - 外观定制:浅色 / 深色 / 跟随系统;DSH、海洋、森林、紫罗兰、琥珀、玫瑰六个预设。分别设置强调色、背景色、文字、前景卡片和顶部/侧栏边框色;自由选色、层次对比度、字体字号、手形光标和半透明侧栏。主题支持复制、粘贴、导入与重置;语言位于常规。 - 日志体系(ComfyUI 式):dsh.log 只记壳自身事件(启动/监护/更新;DSH web 输出不入日志,不再膨胀),[本地时间] [INFO/WARN/ERROR] 格式逐行着色,每次启动轮转历史文件;启动页「查看日志」实时看终端在跑什么;日志页带等级筛选/自动跟随/清空显示 - 诊断包:面板「更多 → 导出诊断信息」一键把环境配置+本次日志组装成 markdown——复制到剪贴板可直接粘贴给 AI 排障,无需翻目录查全局安装 - 托盘常驻:关闭窗口(X)只是隐藏到托盘,DSH 后台继续运行;双击托盘图标或右键 → Open DSH 随时唤回窗口;右键还有「重启 dsh web(后端)」「前后端重启」「检查前端更新」「环境信息」 - 故障自愈与可见性:DSH 崩溃的真实原因以 ERROR 写入日志并直接显示在启动页错误视图(摘要自动定位到 Error 行而非堆栈尾巴),附手动修复命令——再无静默崩溃循环;缺 profile 包时自动带冷却期旁路补装并重试;settings.yaml 被 Web UI 写坏(如 key:value 缺空格)时自动备份+修复+round-trip 校验后才落盘;启动链用绝对路径解析 dsh/pnpm,不受 GUI 环境 PATH 影响 - DSH 监护自愈:DSH 意外退出(市场更新自重启/崩溃)时自动重拉并刷新界面,无需人工干预;连续快速崩溃自动熔断报错 - 自动更新带进度:更新时顶栏名字旁绿色圆环旋转 → 完成对勾 → 自动重启生效(无需手动重开;更新只在启动时发生,不打断对话);应用每次启动自检 GitHub 最新 Release,更新通道与自动更新开关见更新中心 - 更新中心:分别管理 DSH 内核和桌面壳。内核按完整 SemVer 比较运行版本与所选 npm 标签(latest / next / 高级 alpha),避免将较旧的 rc 版误报为更新;降级需要确认,复制命令不执行安装。仅对经过来源验证的应用托管全局 npm 安装提供一键更新,并核验重启后的进程、路径与版本;其他安装来源显示对应操作建议。桌面壳继续提供稳定 / 预发布通道、自动更新开关及完整性校验。 - 设置中心(环境面板第四标签):窗口置顶 / 开机自启(最小化待命) / 关闭按钮行为(隐藏到托盘[默认] 或 直接退出) / 记住上次页签——全部以滑动开关呈现、点击即时生效并跨重启持久化;各子项说明收纳在功能名旁的「?」里,点击弹出气泡详读 - 主题模式:跟随系统 / 深色 / 浅色,桌面外壳即时切换;内嵌聊天的明暗模式重启后同步。 - 六种界面语言实时切换:设置 → 外观 → 语言(简体中文/繁體中文/English/日本語/한국어/Русский),整个壳界面与托盘菜单即时换语言、无需重启;默认「跟随系统」——启动时按 Windows 显示语言自动选择(简繁分流,未适配语言回退英文),也可手动指定;Rust 侧系统通知(更新流程/下载完成/任务完成)同步六语;新增语言只需一份字典(欢迎提 issue/PR) - 缩放与下载:Ctrl +/-/0 与 Ctrl+滚轮缩放整个界面(焦点在内嵌页也生效);内嵌页面触发的下载(session log 导出等)统一落「下载」文件夹并弹系统通知 - 桌面快捷方式可配置:通过 profile 的 cordis.patch.yml 控制创建行为;本插件目前不提供 GUI 开关。见下方“快捷方式配置”。 - 插件包自动同步(带验真):应用启动时自动把已安装的 dsh-desktop-plugin 对齐到 npm 最新版(只升不降,带 pnpm 新发布冷却期旁路);安装后回读 node_modules 验证真实落地,pnpm 冷却期静默保留旧版,不再虚报成功 - 图片拖放/粘贴:与浏览器一致——可拖入或粘贴 png/jpg/webp/gif 作为对话附件(DSH v1 支持的四种格式) - 一键重启 DSH:托盘「重启 dsh web(后端)」只重启 DSH 服务(会话数据在 ~/.dsh 持久化);「前后端重启」连壳带后端全新拉起(无论后端是谁启动的都会清干净),新装插件随之加载,插件卡死 webchat 时一键满血——面板「更多」里也有同款 - 托盘图标固定任务栏:启动时自动写入 Windows 通知区域设置(IsPromoted),图标不再每次被收进任务栏角溢出 - 任务完成通知:会话从运行中转为空闲时弹 Windows 系统通知,带两个按钮——「打开窗口」(复现并聚焦窗口)和「明白」(收起通知);不点击则数秒后自动收起 - 外链统一接管:聊天/插件市场里的 http(s) 外链,左键点击与右键「在浏览器中打开」都会送达系统默认浏览器——包括 target=_blank 等在壳内会被 WebView2 吞掉激活的链接(替换误导性的 WebView2 默认菜单) - 升级失败自动回滚:dsh 后端升级前自动保存当前版本号;升级后如果启动失败,错误界面提供「回滚之前版本」按钮一键恢复,回滚过程后台执行不卡界面 - ⚠️ 不同 DSH 版本间的会话历史:dsh 使用 fail-closed 会话格式保护——新版本写入的会话日志包含旧版本不认识的事件类型,旧版本会拒绝加载(防止数据损坏)。跨版本切换(升级/降级/源码↔npm)后历史对话可能暂时不可读,等升级到相同或更新版本即可恢复。会话数据不会丢失,只是暂时无法读取 - 附加模式:启动时若 3080 已有 DSH 在跑,直接连接不重复拉起;退出时也不会动别人(先于应用存在)的实例 - 干净退出:仅托盘右键 → 「退出(关闭 DSH)」才真正退出,自动 taskkill /T 杀掉自己拉起的整棵进程树,零孤儿进程 - 防重复实例:exe 被再次双击只会唤回已有窗口,不会开第二个 - 便携小巧:单文件、无安装器、无 DLL 依赖,数据/日志写在 %LOCALAPPDATA%\dsh-desktop\ - 本地优先启动,npm 全局为主推荐:按候选链自动启动 DSH——DSH_CMD 环境变量(失败自动降级,不再卡死)→ 自定义路径(启动页可填,永久记住)→ PATH 全局安装的 dsh web → 项目本地 node_modules\.bin\dsh.cmd(exe 同目录/工作目录/用户目录)→ 已确认过的 npx;全都找不到时启动页提供一键全局安装(应用直接执行 npm install -g @deepseek-ai/dsh,约 1-3 分钟,装完永久走最快路径、终端获得 dsh 命令)、npx 下载(备选)、手动填路径、重新检测、退出——不会静默下载任何东西 前提条件 目标机器需已具备(exe 不携带): | 项 | 要求 | | Node.js | ^22.19 或 ≥ 24(必须;DSH 的 Node 版本要求) | | DSH | 可选,三种方式任一:全局安装 npm i -g @deepseek-ai/dsh(最快,推荐);本地安装(在 exe 旁或任意被搜索目录执行 pnpm add @deepseek-ai/dsh);都没有则首次启动时点「下载并启动」走 npx | | DSH 版本兼容 | 保留旧协议与进程 token + Cookie 鉴权适配;v1.6.65 将 0.1.6-alpha.2 / 0.1.7-alpha.2 纳入真实内核连接回归。桌面更新无需升级内核,第三方插件兼容性单独确认。见 双版本验证 | | 从源码跑 DSH 的开发者 | 设 DSH_CMD(pnpm dsh web)与 DSH_CWD(DSH 仓库路径)环境变量 | | WebView2 | Windows 11 自带 | 快速开始 方式一:装 DSH 插件(推荐给 DSH 用户) dsh plugin --profile web add dsh-desktop-plugin 重启 DSH 后插件自动把 exe 装到 %LOCALAPPDATA%\Programs\dsh-desktop-windowos\,并在桌面生成两个快捷方式——「DeepSeek Harness」(桌面应用)和「DeepSeek Harness Web」(浏览器打开前端);之后每次激活还会自动升级 exe 到最新 Release(应用运行中也能安全替换)。对话里说“打开桌面应用”可通过 desktop_launch 工具直接拉起(exe 缺失时走后台任务安装,完成后自动启动,聊天里可轮询进度)。首次运行 exe 会弹 SmartScreen(未签名),点「更多信息 → 仍要运行」即可。 插件 npm 与应用是两条独立版本线(npm 现 1.5.12,应用现 v1.6.63,不一致是有意设计)——npm 只在插件代码变更时发布,内容相同的空包只会触发所有用户的插件市场更新提示与重复下载;应用走 GitHub Release 自由前进,桌面端启动时自动把已装插件对齐 npm 最新版(只升不降)。详见 plugin/README.md。 方式二:直接下载 exe 1. 从 Releases 下载 dsh-desktop-windowos-v<版本>.exe,双击运行(免安装单文件,无需解压)。首次运行 Windows SmartScreen 可能拦截(exe 未签名):点「更多信息 → 仍要运行」即可 2. 机器满足以下任一状态,双击后自动进入 webchat: - 已有 DSH 在跑(如自己开过 dsh web)→ 自动附加,直接使用,无需 Node 在 PATH - 全局装了 DSH(npm i -g @deepseek-ai/dsh,推荐)→ 启动最快,无需网络 - 本地装了 DSH(在 exe 同目录、工作目录或用户目录执行 pnpm add @deepseek-ai/dsh)→ 自动发现 node_modules\.bin\dsh.cmd 并使用 - 之前选过「下载并启动」 → 自动经 npx --yes @deepseek-ai/dsh web 拉起(首选项记录在 %LOCALAPPDATA%\dsh-desktop\settings.json) 3. 若本地没有任何 DSH:启动页提供选择——「一键全局安装并启动(推荐)」(应用直接执行 npm install -g @deepseek-ai/dsh,约 1-3 分钟)/「下载并启动(npx,备选)」/粘贴已知 dsh.cmd 路径/「重新检测」/「退出」,不会未经同意就下载;需 Node.js(^22.19 或 ≥ 24) 构建前提(Windows) - Rust msvc 工具链 + VS 2022 生成工具(「MSVC v143 C++ 生成工具」+ Windows 11 SDK) pnpm install # 本项目是独立工作区根 pnpm tauri dev # 开发模式 pnpm tauri build # 产物:src-tauri\target\release\dsh-desktop-windowos.exe 开发提示:D 盘紧张时用 CARGO_TARGET_DIR=C:\dsh-build-target 把编译产物指到 C 盘;重建前先退出正在运行的应用(exe 被进程锁定会导致链接失败)。 工作原理 - Rust 侧以 POST /api/host.describe 探测就绪(result.ok === true 即就绪);启动走本地优先候选链:DSH_CMD 环境变量(失败自动降级)→ 自定义路径 → dsh web(PATH 全局)→ 项目本地 node_modules\.bin\dsh.cmd → 已确认过的 npx;链空则发 notfound 事件,启动页提供一键 npm install -g、npx 备选、路径输入;每个候选独立就绪窗口,失败自动降级并逐次入日志;DSH web 子进程经 cmd /S /C 拉起(CREATE_NO_WINDOW,绝对路径解析),其输出进有界内存尾部(仅崩溃原因可见用,不写日志文件;DSH 有自己的 ~/.dsh/logs,壳日志只记自身事件并按会话轮转) - 监听 ws://127.0.0.1:3080/api/remote.mux 上的 $events 事件流(携带 webchat 登录换取的浏览器会话 cookie,适配 dsh 0.1.2+ BrowserAuth),在 api-session/status 的 running 出现 true→false 边沿且主窗口隐藏时,经 session/list 取会话标题弹通知 - 裸 exe 无安装器,Windows 会静默吞 Toast——应用启动时自动在注册表注册 AppUserModelID(HKCU\Software\Classes\AppUserModelId\com.dsh.desktop)保证通知可达 项目结构 src/ React 常驻壳:自绘顶栏 + boot 视图 + webchat iframe EnvPanel.tsx 环境管理面板(搜索/环境|日志|更新标签/信息卡/日志控制台/更新中心) src-tauri/src/ dsh.rs DSH 生命周期:探测 / spawn / 监护自愈 / 会话日志(轮转+等级) monitor.rs remote.mux $events 流监听:running 边沿 + 两按钮通知 + 断线重连 update.rs 自更新(多路由下载+完整性校验) / 插件同步 / 完整重启 lib.rs 托盘、窗口 X=隐藏、single-instance、AUMID 注册、面板命令 plugin/ DSH 插件(npm: dsh-desktop-plugin):自动安装/升级 exe + 双快捷方式 + desktop_launch 工具 icon-src/ 图标源(DeepSeek 鲸鱼标,品牌蓝 #4D6BFE) DeepSeek Harness(DSH)的 Windows 桌面壳,用 Tauri v2 + React 18 + TypeScript 构建。 启动应用 → 自动拉起本地 DSH web 服务 → 窗口把原生 webchat 嵌进常驻壳 → 驻留托盘,任务完成时发系统通知。 以单个便携裸 exe 分发(约 4.5 MB,无安装器)。 推荐用法:在任意文件夹执行 pnpm add @deepseek-ai/dsh(或 npm i @deepseek-ai/dsh),然后把 exe 放进该文件夹根目录双击——应用自动发现相邻的 node_modules\.bin\dsh.cmd:零下载、零配置、无需多问。 发布通道(三阶段) releases/latest 是稳定通道: 1. 开发:每次迭代都以 GitHub pre-release 发布——自动更新永不触碰(latest 不含 pre-release);想尝鲜早期构建,去 Releases 手动下载 2. 稳定性检查:收敛后的构建检查和 bugfix 轮次仍留在预发布通道 3. 稳定版:只有作者确认真实环境稳定后才提升到 latest —— 这时自动更新才会拉到它(下次启动应用时) 桌面端自动更新器默认跟踪稳定通道(更新中心可以切到预发布,或关掉自动更新);预发布主要供手动尝鲜和测试机使用。 快捷方式创建在配置档 YAML 里配置,不是 GUI 开关;见 快捷方式配置。 默认桌面 Web 快捷方式由应用 v1.6.52+ 在首次启动时迁移。它通过桌面应用打开当前已认证的 Web UI,而不是裸 URL。升级后重启一次桌面应用;自定义 Web URL 会保留。 功能 - 零配置:启动本地 DSH 并内嵌原生 webchat。已安装的候选进程给 120 秒;npx 给 300 秒。只读包检查能识别 --no-open 支持,无需启动配置档。 - 自定义标题栏:无边框窗口,居中放一个 Comfy 风格的胶囊控件(鲸鱼标记 + 名称 + 箭头)—— 点击胶囊打开环境面板(蓝色高亮,打开时箭头翻转);拖拽/最小化/最大化/关闭都是自绘,原生吸附和边缘缩放保持不变 - 设置工作区:两栏布局,含常规、外观、环境、更新和日志;设置可搜索,支持图标导航、键盘操作和响应式布局。设置打开时聊天 iframe 保持挂载。 - 外观:独立明暗主题和预览、跟随系统模式、DSH、Ocean、Forest、Violet、Amber 和 Rose 预设,自定义背景/文字/表面/边框颜色和表面对比度,UI/代码字体和字号,指针光标,半透明侧边栏,以及主题复制/粘贴/导入/重置。语言现在放在常规里,支持跟随系统和六种语言。自定义颜色和字体影响桌面外壳;聊天的明暗模式在应用重启后跟随。 - ComfyUI 风格日志:dsh.log 只记录外壳事件(启动/监管/更新;DSH 自身输出不记录),带时间戳的 [INFO/WARN/ERROR] 行按级别着色,按会话轮转;启动页上的查看日志链接会流式显示终端正在做什么 - 诊断包:更多 → 导出诊断信息把环境信息和会话日志打包成 markdown 放进剪贴板 —— 粘贴给任何 AI,不用再翻安装目录 - 托盘常驻:关闭窗口(X)只是隐藏到托盘,DSH 继续运行;双击托盘图标或右键 → Open DSH 把窗口调回来;菜单里还有「重启 dsh web(后端)」(后端重启)、「前后端重启」(完整重启 —— 外壳和后端都重启,不管后端是怎么启动的)和更新检查 - 故障可见与自愈:子进程真正的死因会以 ERROR 写进日志,并显示在启动错误视图里,附上手动修复命令(摘要以 Error 行开头,而不是堆栈末尾)——不再有悄无声息的崩溃循环;缺失的配置档包会自动安装,跳过冷却并重试;被 Web UI 弄坏的 settings.yaml(比如 key:value 少了空格)会先备份、修复、解析校验,再写回;dsh/pnpm 解析为绝对路径,不受 GUI 环境 PATH 怪异行为影响 - DSH 守护自愈:DSH 意外退出(市场自重启 / 崩溃)会自动重新拉起并刷新视图,无需手动操作托盘;连续三次快速死亡会触发崩溃循环防护 - 带进度的自动更新:更新时,名称旁边会转起一个小绿环 → 变成对勾 → 自动重启到新构建(只在启动时检查,绝不在对话中途检查);更新通道和自动更新开关都在更新中心里 - 更新中心:完整的 SemVer 排序会把运行中的后端与选定的 npm tag(latest/next/advanced alpha)做比较,所以更旧的 RC 不会被当作升级推送。降级需要确认;复制命令绝不会执行它。一键安装仅限经过验证、归应用所有的全局 npm 源,重启后会校验进程、路径和目标版本。其他源会给出相应的人工指引。桌面端 stable/prerelease 通道、自动更新和完整性校验仍然可用。 - 插件自动同步(带校验):启动时,已安装的 dsh-desktop-plugin 会对齐到 npm latest(只升不降,跳过冷却);随后对照 node_modules 校验安装结果,pnpm 悄悄保留旧版本再也无法冒充成功 - 托盘图标固定到任务栏:应用在启动时写入 Windows 通知区域设置(IsPromoted),图标不再每次启动都掉进溢出区 - 任务完成通知:会话从运行转为空闲时,会弹出 Windows 通知,带两个按钮——「打开窗口」(还原并聚焦)和「知道了」(关闭);放着不管,几秒后会自动收起 - 链接右键菜单:在聊天里右键点击链接,会显示干净的两项菜单——「在浏览器中打开」/「复制链接」(替换掉容易误导的 WebView2 默认菜单);左键仍然用系统默认浏览器打开外部链接 - 附加模式:如果启动时 DSH 已经在监听 3080,应用会附加过去,而不是再拉起一个——而且绝不会杀掉不是自己启动的实例 - 干净退出:只有托盘右键 →「退出(关闭 DSH)」才会退出,通过 taskkill /T 拆掉自己拉起的进程树,零残留 - 单实例:再次启动 exe 只会聚焦已有窗口 - 便携小巧:单文件,无需安装器,无 DLL 依赖;数据和日志写到 %LOCALAPPDATA%\dsh-desktop\ - 本地优先启动,主推全局 npm:按候选链启动 DSH —— DSH_CMD 环境变量(失败就继续往下走,不会卡住)→ 启动页里填的自定义路径(会记住)→ PATH 全局的 dsh web → 项目本地的 node_modules\.bin\dsh.cmd → 之前同意过的 npx;本地什么都没有时,启动页提供一键全局安装(应用替你跑 npm install -g @deepseek-ai/dsh,约 1-3 分钟,之后永久走快路径,终端里也有 dsh 命令),npx 下载作为兜底,还能手动填路径、重新检测、退出 —— 不会有任何静默下载 前置条件(目标机器) exe 不捆绑这些: | 项目 | 要求 | | Node.js | ^22.19 或 ≥ 24(必需;DSH 声明的 Node 版本) | | DSH | 可选,以下任一种:全局安装 npm i -g @deepseek-ai/dsh(最快,推荐);本地安装(pnpm add @deepseek-ai/dsh,装在 exe 旁边或任何会被搜索的目录);或者首次启动时点「下载并启动」走 npx | | DSH 版本支持 | 保留旧协议和 token/cookie 认证适配器。v1.6.65 为 0.1.6-alpha.2 / 0.1.7-alpha.2 增加了真实后端连接回归覆盖。桌面端更新不需要后端跟着升级;第三方插件要单独做兼容性检查。见验证 | | 从源码运行 DSH | 设置 DSH_CMD(pnpm dsh web)和 DSH_CWD(DSH 仓库路径)两个环境变量 | | WebView2 | Windows 11 自带 | 快速开始 方案 A:安装 DSH 插件(DSH 用户推荐) dsh plugin --profile web add dsh-desktop-plugin 重启 DSH 后,插件会自动把 exe 装到 %LOCALAPPDATA%\Programs\dsh-desktop-windowos,并创建两个桌面快捷方式 —— 「DeepSeek Harness」(桌面应用)和「DeepSeek Harness Web」(浏览器里的 Web UI);之后每次激活还会把 exe 自动更新到最新 Release(应用正在运行也安全)。在聊天里说「打开桌面应用」,就会通过 desktop_launch 工具启动它(exe 缺失时会作为后台任务安装,装完自动启动,进度可以在聊天里轮询)。首次运行未签名的 exe 会弹 SmartScreen —— 点「更多信息 → 仍要运行」。插件的 npm 和应用跑在两条独立的版本线上(npm 当前 1.5.12,应用当前 v1.6.63 —— 这个不一致是故意的):npm 只在插件代码变动时才发版,因为内容相同的空包只会给每个插件用户带来更新提示和重复下载;应用则通过 GitHub Releases 自由推进,桌面应用会把已安装插件对齐到 npm 最新版(只升不降)。见 plugin/README.md。 方案 B:直接下载 exe 1. 从 Releases 下载 dsh-desktop-windowos-v<version>.exe,双击运行(单文件便携版,无需解压)。首次运行时 Windows SmartScreen 可能弹出警告(exe 未签名):点击「More info → Run anyway」 2. 以下几种机器状态都能用——应用启动后会自动进入 webchat: - DSH 已在运行(比如你自己启动了 dsh web)→ 自动接入,立即可用,PATH 里不需要 Node - DSH 已全局安装(npm i -g @deepseek-ai/dsh,推荐)→ 启动最快,不需要联网 - DSH 已本地安装(pnpm add @deepseek-ai/dsh,放在 exe 旁边、工作目录或用户配置档里)→ 会自动发现并使用 node_modules\.bin\dsh.cmd - 之前选过「Download」 → DSH 通过 npx --yes @deepseek-ai/dsh web 自动启动(选择会持久化到 %LOCALAPPDATA%\dsh-desktop\settings.json) 3. 本地完全没有 DSH 时:启动页会提供——「一键全局安装并启动」(推荐;应用自己执行 npm install -g @deepseek-ai/dsh,约 1-3 分钟) / 「下载并启动」(npx 兜底)/ 粘贴已知的 dsh.cmd 路径 / 「重新检测」/ 「退出」。未经你同意不会下载任何东西;需要 Node.js ^22.19 或 ≥ 24 构建(Windows) - Rust msvc 工具链 + VS 2022 Build Tools(「MSVC v143 C++ build tools」+ Windows 11 SDK) pnpm install # this project is its own workspace root pnpm tauri dev # dev mode pnpm tauri build # output: src-tauri\target\release\dsh-desktop-windowos.exe 开发提示:需要的话把 CARGO_TARGET_DIR 指向空间更大的盘,并且重新构建前先退出正在运行的应用(运行中的 exe 会锁住链接器输出)。 工作原理 - Rust 侧通过 POST /api/host.describe 探测就绪状态(result.ok === true);启动时按本地优先的候选链依次尝试:DSH_CMD 环境变量(第一个候选,失败则继续往下)→ 启动页里填的自定义路径(持久化在 settings.json)→ dsh web(PATH 全局,用 where dsh 检查)→ node_modules\.bin\dsh.cmd(exe 所在目录 / 工作目录 / 用户配置档)→ 之前同意过的 npx --yes @deepseek-ai/dsh web;候选链为空时发出 notfound,启动页提供一键 npm install -g(由应用执行)、npx 兜底和手动输入路径——每个候选都有自己的就绪等待窗口,失败就继续往下,每次尝试都会记日志;DSH web 子进程通过 cmd /S /C 启动(CREATE_NO_WINDOW,绝对路径解析);它的输出进入一个有上限的内存尾部缓冲(仅用于查看崩溃原因,绝不写入日志文件——DSH 自己的日志在 ~/.dsh/logs 下,shell 日志只记录 shell 事件,按会话轮转) - 它监听网关在 ws://127.0.0.1:3080/api/remote.mux 上的 $events 逻辑流,用 webchat 登录交换得到的浏览器会话 cookie 做认证(dsh 0.1.2+ BrowserAuth,issue #18);当窗口隐藏时,api-session/status 里 running 出现 true→false 边沿,它就通过 session/list 解析会话标题,然后弹出 toast - 裸 exe 没有安装程序,Windows 会静默丢弃 toast——应用在启动时把 AppUserModelID 注册到注册表(HKCU\Software\Classes\AppUserModelId\com.dsh.desktop),让通知能正常工作 快捷方式配置 / Shortcut configuration 本插件目前不提供 GUI 配置开关。编辑 %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml(使用其他 profile 或 DSH_HOME 时替换对应路径),把下面的覆盖项合并进现有 YAML 列表。已有相同 id 时合并其 config,不要重复添加,也不要覆盖整个文件: - id: dsh-desktop-plugin name: dsh-desktop-plugin config: createShortcut: false createWebShortcut: false 保存后重启 dsh web 生效。关闭配置只会停止创建/刷新,不会删除已有快捷方式;你可以自行删除桌面副本,或移到开始菜单。配置开启时,插件激活会创建/刷新桌面固定位置,移动副本不会改变这个行为。桌面 v1.6.52+ 会把已有的默认 Web 地址迁移为登录入口;本次源码修复让插件保留该迁移结果,旧 npm 1.5.12 仍可能重写裸地址,桌面运行时会修回。 本插件目前没有 GUI 配置开关。编辑上面路径下 profile 的 cordis.patch.yml(按你的 profile 或 DSH_HOME 调整路径),把这一项合并进现有列表;如果相同 id 已存在,就合并 config。保存后重启 dsh web。关闭创建不会删除已有快捷方式;请自行删除或移动。开启时,插件激活会创建/刷新固定的桌面位置。移动副本不会阻止重新创建。源码修复会保留桌面已迁移的默认登录入口;已发布的 npm 1.5.12 仍可能覆盖它,运行中的桌面会修回。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
RAFOLIE/dsh-desktop-windowos
DeepSeek HarnessDSH的 Windows 桌面壳,基于 Tauri v2 + React 18 +…
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,288已汉化MCP
71.7
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9
原生编程智能体paean-ai/deeptide
由 DeepSeek 打造,为 DeepSeek 而生。
★ 1,107已汉化DSH
67.7
多引擎接力台emo-xiaoyu/harness-mix
macOS/Linux 已加入源码构建与启动适配;目标系统的完整桌面验收仍需在对应机器执行。安装方式、Linux…
★ 419已汉化DSH
66.8
这是你的仓库?认领条目