deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
DeepSeek Harness 的原生托盘启动器。它负责启动 DSH Web 服务、等待 DSH 官方就绪信号,并在 Windows 上优先打开 Chrome PWA 应用窗口。
npx --yes --loglevel http @deepseek-ai/dsh[@分支] web --port <port> --no-open(分支 latest / next / alpha 可选,默认 next)dsh web: http://...,确认 Web 服务初始化完成后才打开界面chrome_proxy.exe --app-id=... 启动已安装的 DSH PWAchrome.exe、窗口类是 Chrome_WidgetWin_1、标题是 DSH 标题),找到就把该窗口切到前台,不再启动第二个 App 窗口chrome.exe、窗口类必须是 Chrome_WidgetWin_1、标题必须是 DSH 标题或本端口 URL;同一个 Chrome 实例里的其它标签页不受影响)要求:.NET 10 SDK,以及带 MSVC C++ 工具链的 Visual Studio Build Tools。
dotnet publish -c Release -r win-x64
产物:bin\\Release\\net10.0-windows\\win-x64\\publish\\dsh-tray.exe
也可以运行仓库中的 NativeAot.bat。
构建完成后,双击 install-local.bat 可以把新构建覆盖到已安装位置并自动重启托盘。脚本会先停掉正在运行的托盘:运行中的 exe 被 Windows 锁定无法覆盖,而且单实例机制会让新启动的实例只是请求旧实例重开窗口。注意停托盘会一并关闭 DSH App 窗口并停止 dsh 服务,脚本结束时会重新启动。
安装包由 NSIS 3.12(当前稳定版)构建,脚本是仓库根目录的 installer.nsi:
# 需要先在仓库根目录放好 publish 产物(CI 中由 workflow 复制)
Copy-Item bin\Release\net10.0-windows\win-x64\publish\dsh-tray.exe .
makensis installer.nsi
产物:dsh-tray-setup.exe(CI 中重命名为 dsh-tray-setup-win-x64.exe)。
RequestExecutionLevel user,不弹 UAC),默认目录 %LOCALAPPDATA%\Programs\DSH Tray,写入 HKCU 卸载项,并创建开始菜单与桌面快捷方式DeepSeek Harness Tray 目录),调用方用 /D=<目录> 可显式指定且优先级最高/VERYSILENT /SUPPRESSMSGBOXES /NORESTART),清掉旧文件、旧快捷方式与旧卸载项,再安装新版本——避免磁盘残留和在「应用和功能」里出现两个 DSH Traydsh-tray.exe --stop,同时关闭 DSH App 窗口并停止 dsh 服务),必要时再强制结束,避免运行中的 exe 被锁定/S,以及 Inno Setup 的 /VERYSILENT / /SILENT(旧版 dsh-tray 的自更新就是用后者调用安装包的,/SUPPRESSMSGBOXES、/NORESTART 会被忽略);新版本自更新使用 /S...\Programs\DSH Tray\dsh-tray.exe),安装目录被迁移到别处时那条路径并不存在,由安装器从真实位置拉起更可靠(新版再启动一次也无害,单实例机制会转成 reopen 请求)Uninstall.exe(静默卸载为 Uninstall.exe /S)installer.nsi 含中文界面文案,必须以 UTF-8 with BOM 保存,否则 makensis 会按本地代码页解析,中文会乱码要求:.NET 10 SDK 和 Xcode Command Line Tools。
dotnet workload install macos
dotnet publish -c Release -r osx-arm64
产物:bin/Release/net10.0-macos/osx-arm64/publish/dsh-tray
dsh-tray 使用 3080 端口并自动打开界面
dsh-tray --port 8080 使用自定义端口
dsh-tray --no-open 只启动服务,不打开界面
dsh-tray --stop 请求正在运行的实例停止
日志位置:Windows %TEMP%\\dsh-tray-server.log;macOS /tmp/dsh-tray-server.log。
托盘菜单可以切换 DSH 使用的 npm 分发分支:
latest:正式稳定版(@deepseek-ai/dsh)next:最新开发版(@deepseek-ai/dsh@next,默认)alpha:预览版(@deepseek-ai/dsh@alpha)切换后 dsh-tray 会保存选择并自动重启服务到新分支。托盘菜单会显示当前分支及其对应的具体版本号(通过 npm view 查询,首次查询需联网)。
托盘菜单的 Profile 子菜单可以切换 dsh 使用的 profile($DSH_HOME/profiles/<名称>,默认 web):
package.json),勾选当前使用的那个$DSH_HOME/profiles/ 下创建新的 web 型 profile(dsh-base + dsh-web-app,实时应用 patch),并自动切换、重启服务-、_、. 且以字母或数字开头;desktop 与 node_modules 为保留名dsh plugin --profile ... 提示也会跟随当前 profiledsh plugin --profile <名称> add <包名>(依赖 pnpm)dsh-tray 把 DSH 界面放进 Chrome 的应用窗口(PWA),因此本机必须先安装 Google Chrome;没有 Chrome 时不会启动 dsh 服务,也不会打开界面。
chrome.exe / chrome_proxy.exe(%LOCALAPPDATA%\Google\Chrome\Application、%ProgramFiles%、%ProgramFiles(x86)%)Google Chrome.app(/Applications 与 ~/Applications),并向 Launch Services 查询一次以覆盖自定义安装位置NSAlert),三个按钮语义相同首次使用时,如果 Chrome 中还没有安装 DSH PWA:
dsh-traychrome_proxy.exe 打开 App 窗口程序不会通过 --install-app、桌面快捷方式或 Chrome Policy 强制安装,因为这些方式在普通 Chrome 环境中并不可靠。
插件市场安装或更新插件后,通常需要重启 DSH 才能生效。请使用托盘菜单中的“重启服务”,由 dsh-tray 关闭旧 Node 进程并按当前选中的分支重新启动 dsh。重启前 dsh-tray 会先关闭所有 DSH Chrome App 窗口(只关 DSH 的 PWA,其它 Chrome 窗口不受影响),确保重启后重新打开的是干净的界面。
需要安装/移除命令行插件时,请使用托盘菜单中的“启动 dsh 控制台”:它会在终端里打开一个 dsh CLI,可以直接运行:
dsh plugin --profile web add <包名> # 安装插件
dsh plugin --profile web remove <包名> # 移除插件
控制台里的 dsh 等于 npx --yes @deepseek-ai/dsh[@当前分支],也可以运行 dsh --profile headless "任务" 等其他 dsh 命令。插件管理依赖 pnpm,首次使用请先执行 npm install -g pnpm。
不要在此控制台运行 dsh web,否则会与托盘管理的服务冲突:
EADDRINUSE: address already in use 127.0.0.1:3080
启动时如果目标端口被旧的 DSH/Node 进程占用,dsh-tray 会自动结束该进程树后再启动新实例。也可以先执行 dsh-tray --stop,再重新启动 dsh-tray。
推送 v* tag 后,GitHub Actions 会创建 Release:
dsh-tray-setup-win-x64.exedsh-tray-osx-arm64.dmg运行时需要 Node.js(包含 npx)。DSH 使用 npm 分发分支(latest / next / alpha,默认 next),可在托盘菜单切换。首次启动可能需要下载依赖。
另外需要本机已安装 Google Chrome:DSH 界面通过 Chrome 的应用窗口显示,未安装时 dsh-tray 会提示下载并退出(见「运行前置条件:Google Chrome」)。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。