deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:RAFOLIE/dsh-desktop-windowos
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
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,启动零下载、零配置、不询问。
dsh web),就绪后窗口内嵌 http://127.0.0.1:3080/ 的原生 webchat 界面(iframe 常驻壳,不自创聊天 UI、不做反向代理)[本地时间] [INFO/WARN/ERROR] 格式逐行着色,每次启动轮转历史文件;启动页「查看日志」实时看终端在跑什么;日志页带等级筛选/自动跟随/清空显示~/.dsh 持久化);「重启前端(完整重启)」连壳带后端全新拉起,插件卡死 webchat 时一键满血——面板「更多」里也有同款IsPromoted),图标不再每次被收进任务栏角溢出taskkill /T 杀掉自己拉起的整棵进程树,零孤儿进程%LOCALAPPDATA%\dsh-desktop\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 的开发者 | 设 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.10,应用现 v1.6.2,不一致是有意设计)——npm 只在插件代码变更时发布,内容相同的空包只会触发所有用户的插件市场更新提示与重复下载;应用走 GitHub Release 自由前进,桌面端启动时自动把已装插件对齐 npm 最新版(只升不降)。详见 plugin/README.md。
方式二:直接下载 exe
dsh-desktop-windowos-v<版本>.exe,双击运行(免安装单文件,无需解压)。首次运行 Windows SmartScreen 可能拦截(exe 未签名):点「更多信息 → 仍要运行」即可dsh web)→ 自动附加,直接使用,无需 Node 在 PATHnpm i -g @deepseek-ai/dsh,推荐)→ 启动最快,无需网络pnpm add @deepseek-ai/dsh)→ 自动发现 node_modules\.bin\dsh.cmd 并使用npx --yes @deepseek-ai/dsh web 拉起(首选项记录在 %LOCALAPPDATA%\dsh-desktop\settings.json)npm install -g @deepseek-ai/dsh,约 1-3 分钟)/「下载并启动(npx,备选)」/粘贴已知 dsh.cmd 路径/「重新检测」/「退出」,不会未经同意就下载;需 Node.js(^22.19 或 ≥ 24)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 被进程锁定会导致链接失败)。
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,stdout/stderr 丢弃——DSH 有自己的 ~/.dsh/logs,壳日志只记自身事件并按会话轮转)ws://127.0.0.1:3080/api/events.host,在 host/session-status 的 running 出现 true→false 边沿且主窗口隐藏时,经 session.list 取会话标题弹通知HKCU\Software\Classes\AppUserModelId\com.dsh.desktop)保证通知可达src/ React 常驻壳:自绘顶栏 + boot 视图 + webchat iframe
EnvPanel.tsx 环境管理面板(搜索/环境|日志标签/信息卡/日志控制台)
src-tauri/src/
dsh.rs DSH 生命周期:探测 / spawn / 监护自愈 / 会话日志(轮转+等级)
monitor.rs events.host WS 监听:running 边沿 + 两按钮通知 + 断线重连
update.rs 自更新(多路由下载+完整性校验) / 插件同步 / 完整重启
lib.rs 托盘、窗口 X=隐藏、single-instance、AUMID 注册、面板命令
plugin/ DSH 插件(npm: dsh-desktop-plugin):自动安装/升级 exe + 双快捷方式 + desktop_launch 工具
icon-src/ 图标源(DeepSeek 鲸鱼标,品牌蓝 #4D6BFE)
A Windows desktop shell for DeepSeek Harness (DSH), built with Tauri v2 + React 18 + TypeScript. Launch the app → it auto-starts the local DSH web service → the window embeds the native webchat in a persistent shell → tray-resident with system notifications on task completion. Ships as a single portable bare exe (~4.5 MB, no installer).
Recommended setup: run pnpm add @deepseek-ai/dsh (or npm i @deepseek-ai/dsh) in any folder, then drop the exe into that folder's root and double-click — the app auto-discovers the adjacent node_modules\.bin\dsh.cmd: zero download, zero config, no questions asked.
dsh web); once ready, the window embeds the native webchat at http://127.0.0.1:3080/ in a persistent same-window iframe (no custom chat UI, no reverse proxy)[INFO/WARN/ERROR] rows with level coloring, rotated per session; a 查看日志 link on the boot page streams what the terminal is doingIsPromoted) at startup, so the icon no longer falls into the overflow on every launchtaskkill /T with zero orphans%LOCALAPPDATA%\dsh-desktop\DSH_CMD env var (falls through on failure instead of stalling) → a custom path entered on the boot page (remembered) → PATH-global dsh web → project-local node_modules\.bin\dsh.cmd → a previously consented npx; when nothing local exists the boot page offers a one-click global install (the app runs npm install -g @deepseek-ai/dsh for you, ~1-3 min, permanently on the fast path with a terminal dsh command), the npx download as fallback, a manual path input, re-detect, and exit — nothing downloads silentlyNot bundled with the exe:
| Item | Requirement |
|---|---|
| Node.js | ^22.19 or ≥ 24 (required; the Node version DSH declares) |
| DSH | optional, any of: global install npm i -g @deepseek-ai/dsh (fastest, recommended); local install (pnpm add @deepseek-ai/dsh beside the exe or in any searched dir); or click "下载并启动" on first launch to go through npx |
| Running DSH from source | set the DSH_CMD (pnpm dsh web) and DSH_CWD (DSH repo path) env vars |
| WebView2 | included with Windows 11 |
Option A: install the DSH plugin (recommended for DSH users)
dsh plugin --profile web add dsh-desktop-plugin
After restarting DSH, the plugin auto-installs the exe into %LOCALAPPDATA%\Programs\dsh-desktop-windowos and creates two desktop shortcuts — "DeepSeek Harness" (the desktop app) and "DeepSeek Harness Web" (the web UI in a browser); each later activation also auto-updates the exe to the latest Release (safe even while the app is running). Saying "open the desktop app" in chat launches it via the desktop_launch tool (a missing exe installs as a background job that auto-launches when done, with progress pollable in chat). First run of the unsigned exe shows SmartScreen — click "More info → Run anyway". The plugin npm and the app run on two independent version lines (npm currently 1.5.10, app currently v1.6.2 — the mismatch is deliberate): npm publishes only when the plugin code changes, since identical empty packages would just trigger update prompts and re-downloads for every plugin user; the app advances freely via GitHub Releases, and the desktop app aligns installed plugins to npm latest (upgrade only). See plugin/README.md.
Option B: download the exe directly
dsh-desktop-windowos-v<version>.exe from Releases and double-click it (single portable file, no unzip needed). Windows SmartScreen may warn on first run (the exe is unsigned): click "More info → Run anyway"dsh web yourself) → auto-attach, works immediately, no Node needed on PATHnpm i -g @deepseek-ai/dsh, recommended) → fastest launch, no network neededpnpm add @deepseek-ai/dsh beside the exe, in the working dir, or the user profile) → node_modules\.bin\dsh.cmd is discovered and usednpx --yes @deepseek-ai/dsh web (choice persisted in %LOCALAPPDATA%\dsh-desktop\settings.json)npm install -g @deepseek-ai/dsh itself, ~1-3 min) / "下载并启动" (npx fallback) / paste a known dsh.cmd path / "重新检测" (re-detect) / "退出" (exit). Nothing downloads without consent; Node.js ^22.19 or ≥ 24 is requiredpnpm 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
Dev tips: point
CARGO_TARGET_DIRat a roomier drive if needed, and quit the running app before rebuilding (a running exe locks the linker output).
POST /api/host.describe (result.ok === true); launch runs a local-first candidate chain: DSH_CMD env var (first candidate, falls through on failure) → custom path from the boot page (persisted in settings.json) → dsh web (PATH-global, checked via where dsh) → node_modules\.bin\dsh.cmd (exe dir / working dir / user profile) → a previously consented npx --yes @deepseek-ai/dsh web; an empty chain emits notfound and the boot page offers a one-click npm install -g (run by the app), the npx fallback, and a manual path input — each candidate has its own readiness window, falls through on failure with every attempt logged; the DSH web child is spawned via cmd /S /C (with CREATE_NO_WINDOW; its stdout/stderr is discarded — DSH keeps its own logs under ~/.dsh/logs, and the shell log records only shell events, rotated per session)ws://127.0.0.1:3080/api/events.host; on a true→false edge of running in host/session-status while the window is hidden, it resolves the session title via session.list and fires the toastHKCU\Software\Classes\AppUserModelId\com.dsh.desktop) to make notifications workCLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。