把网页界面变成带托盘图标的原生 Windows 应用
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add svandor/deepseek-harness-windows该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 网页界面转原生窗口
- 托盘图标常驻
- 子代理自动降级模型链
展开完整介绍(121 字)↓
DeepSeek Harness 的 Windows 托盘 + 原生 WebView2 窗口,带完整匈牙利语界面、子代理委派自动降级免费模型链(Groq / NVIDIA NIM / OpenRouter / Ollama)和内置本地机器人。
README
由 DeepSeek 最新模型翻译生成DeepSeek Harness for Windows — 托盘图标、原生窗口、匈牙利语界面
English — 把 DeepSeek Harness Web GUI 变成正常的 Windows 应用(托盘图标、原生 WebView2 窗口、可固定到任务栏的启动器),并补上它原本没有的三样东西:完整的匈牙利语界面、子代理委派用的免费模型自动回退链,以及自带状态面板的内置本地机器人。完整英文说明见 README.en.md。
Magyar — A DeepSeek Harness Web GUI-t igazi Windows-alkalmazássá alakítja (tálcaikon, natív WebView2 ablak, tálcára kitűzhető indító), és hozzáad hármat, ami alapból nincs benne: teljes magyar felület, ingyenes modellekre épülő automatikus fallback-lánc a subagent-delegációhoz, és egy beépített helyi robot saját állapotpanellel.
展开完整文档(README 剩余 1 节)
DeepSeek Harness for Windows — 托盘图标、原生窗口、匈牙利语界面
English — 把 DeepSeek Harness Web GUI 变成正常的 Windows 应用(托盘图标、原生 WebView2 窗口、可固定到任务栏的启动器),并补上它原本没有的三样东西:完整的匈牙利语界面、子代理委派用的免费模型自动回退链,以及自带状态面板的内置本地机器人。完整英文说明见 README.en.md。
Magyar — A DeepSeek Harness Web GUI-t igazi Windows-alkalmazássá alakítja (tálcaikon, natív WebView2 ablak, tálcára kitűzhető indító), és hozzáad hármat, ami alapból nincs benne: teljes magyar felület, ingyenes modellekre épülő automatikus fallback-lánc a subagent-delegációhoz, és egy beépített helyi robot saját állapotpanellel.
作者 / Author: Varga Sándor (svandor) — MIT 许可 / MIT license。
一键安装
从最新发行版下载 DeepSeek-Harness-Setup-<verzió>.exe,然后运行。它会把工作区解压到 %LOCALAPPDATA%\DeepSeekHarness 目录,检查 Node.js 和 WebView2 是否存在,并创建桌面和开始菜单图标。
DeepSeek-Harness-Setup-0.1.0.exe # telepítés, folyamatjelzéssel
DeepSeek-Harness-Setup-0.1.0.exe /silent # kérdés nélkül
DeepSeek-Harness-Setup-0.1.0.exe /autostart # + tálca indítása bejelentkezéskor
DeepSeek-Harness-Setup-0.1.0.exe /dir=D:\DSH # saját célmappa
DeepSeek-Harness-Setup-0.1.0.exe /uninstall # mappa + parancsikonok törlése
便携版(解压后运行 install.cmd),或者从源码构建:见 README.en.md。打包命令:.\tools\build-installer.ps1。
环境要求: Windows 11 · Node.js ≥ 22 · dsh 命令行(npm install -g @deepseek-ai/dsh)· WebView2 运行时(Windows 11 自带)。重新编译启动器需要 Visual Studio Build Tools 的 Roslyn csc.exe(不需要 .NET SDK)。
下面是匈牙利语运维指南的细节:托盘图标、原生窗口、面板、状态文件和故障排查。
这个目录是 DeepSeek Harness 的本地配置:一个托盘图标,负责启动后台运行的 Web GUI,并在自己的原生窗口里打开它——不用一直开着终端,也不会开在浏览器标签页里。
tálcaikon (jobb alsó sarok)
├─ elindítja a háttér-GUI-t (dsh web, rejtett folyamat)
├─ megnyitja a natív WebView2 ablakot (bin\DshWindow.exe), sötét témában
└─ az ablak bezárása után a GUI a háttérben fut tovább
启动
双击:tray\dsh-tray.cmd,或者桌面上的 DeepSeek Harness 图标
这会启动右下角的系统托盘图标,启动后台 GUI,并打开原生窗口。之后不需要任何控制台,一切都能从托盘图标操作。
桌面启动图标(可固定到任务栏)
行为跟普通应用启动器一样:
双击桌面图标 ├─ 系统托盘图标还没运行 -> 启动,并打开窗口 ├─ 托盘在运行,窗口已关闭 -> 打开窗口 └─ 窗口已经打开 -> 切到前台(不会开第二个,也不报错)
创建方式:
.\install.ps1 # 桌面图标 .\install.ps1 -AutoStart # + 登录时启动(托盘,不带窗口) .\install.ps1 -RemoveAutoStart
固定到任务栏 —— 解决办法:真正的 .exe 目标
Windows 11 只会把目标为真正 .exe 的快捷方式固定到任务栏。如果目标是 .cmd/.bat/.ps1,图标就拖不上去,右键菜单里也不会出现「固定到任务栏」。所以才做了 bin\DshLauncher.exe,桌面和开始菜单图标现在都指向它。
桌面图标 / 开始菜单 -> bin\DshLauncher.exe -> 托盘图标(dsh-tray.ps1)
这样桌面图标就能拖拽到任务栏(或者右键 → 固定到任务栏)。DshLauncher.exe 的参数:
.\bin\DshLauncher.exe # 打开窗口(同时启动托盘) .\bin\DshLauncher.exe --tray-only # 只启动系统托盘图标,不带窗口
开始菜单项由 .\pin-to-taskbar.ps1 创建(-Remove 删除);.\install.ps1 -PinToTaskbar 做的是同一件事。
固定到任务栏的图标行为跟桌面图标一样:托盘图标已在运行就打开窗口;没运行就启动。
托盘图标菜单里也有 桌面快捷方式… 这一项。
托盘图标能做什么(右键)—— 每一项都有 tooltip,会说明会发生什么、之后会留下什么:
| 菜单项 | 作用 |
| 状态… | 在一个窗口里显示 harness、窗口、机器人面板和守护进程的状态 |
| 打开(窗口) | 打开(或切到前台)原生窗口;需要时也会启动后台 GUI |
| 关闭窗口 | 关闭窗口 —— 后台 GUI 和托盘继续运行 |
| 拆分窗口 ▸ | 1–3 个工作区面板,另外单独有 第 4 个界面:机器人面板 / 仅机器人模式(1 个界面) |
| 启动后台 GUI | 启动 dsh web 进程,如果还没运行 |
| 停止后台 GUI | 停止后台进程(会话会保留) |
| 重启 | 停止后用新的登录 token 重启;窗口会自动切换到新 token |
| 设置端口… | 监听哪个端口(默认:3080) |
| dsh 路径… | 如果找不到 dsh,可以在这里手动指定 |
| 打开日志 | 托盘、窗口和后台进程的日志 |
| 桌面快捷方式… | 在桌面创建一个「DeepSeek Harness」图标 |
| 重启托盘 | 重新加载托盘程序(更新后使用);窗口和后台 GUI 不受影响 |
| 退出(全部停止) | 停止所有内容:窗口、后台 GUI 和托盘。机器人面板的守护进程是独立进程,会继续运行 |
双击托盘图标:立即打开窗口。
图标颜色表示状态:蓝色 = 运行中,灰色 = 已停止。
窗口
bin\DshWindow.exe 是一个自带的无边框应用窗口(WPF + WebView2),深色标题栏、深色主题。它不是浏览器:没有地址栏和标签栏,有独立的任务栏项。窗口可以分成多个面板,每个面板都是一个完整客户端,拥有自己的工作区——参见面板分屏。
位置和大小记忆
窗口每次都会记住自己在哪里、有多大,下次打开时恢复到原位(state\window-geometry.txt)。这样在 32:9 显示器上,它会从你习惯的位置打开,而不是居中。
- 保存发生在窗口关闭时(即使窗口最大化,记住的也是「正常」尺寸)。
- 如果保存的位置落在已断开的显示器上,窗口会自动居中(不会消失)。
- 想让它居中:删除 state\window-geometry.txt 文件,或者用 --reset-geometry 参数启动。
常用参数(手动启动时):
.\bin\DshWindow.exe --port 3080 # 启动后台 GUI + 窗口 .\bin\DshWindow.exe --port 3080 --restart-if-stale # 需要时刷新 token .\bin\DshWindow.exe --url "http://127.0.0.1:3080/?token=..." # 直接指定地址 .\bin\DshWindow.exe --panes 2 # 两个面板,两个工作区 .\bin\DshWindow.exe --width 1600 --height 1000 # 首次尺寸(还没有保存记录时) .\bin\DshWindow.exe --reset-geometry # 忘记位置 .\bin\DshWindow.exe --close-after 10 # 测试:10 秒后关闭
面板分屏 —— 一个窗口多个工作区
用 --panes N 参数可以把窗口分成 N 个并排面板(1–4;托盘启动时默认 2)。这不是同一个对话显示在多个面板里,而是每个面板一个完整客户端,各自有独立的 WebView2 配置档:
- 每个面板都从自己的配置档运行(state\webview2\pane-1、pane-2……),所以会记住自己的工作区、选中的会话和草稿——左边面板可以是 Raider 工作区,右边是 Deepseek Harness 工作区,重新打开后各自还留在原来的位置。
- 两个面板真正并行运行:两个独立客户端,两条独立连接,连到同一个后台 GUI。你可以在一个面板里跑耗时的文本/图像处理,同时在另一个面板里开发网页。
- 面板之间的分隔条可以拖动;位置保存到 state\pane-layout.txt(想恢复等分,删掉它即可)。
- 在工作区里,不建议对同一批文件开两个并行 session:面板是给不同工作区用的,不是用来复制同一个工作区。
从托盘进行设置和使用:
1. 托盘图标 → 拆分窗口 → 1 / 2 / 3 个面板(写入 state\tray-config.json 的 panes 值)。
2. 如果窗口正开着,程序会问你要不要重启;面板会从各自的配置档重新加载。
3. 单独的菜单项:关闭窗口(后台 GUI 继续运行)。
4. 状态窗口(状态…)会显示当前设置的分割方式。
面板由后台 GUI 作为独立客户端来服务;不需要为此重启服务器,面板数量也不影响服务器。
修改 tray\dsh-tray.ps1 之后,必须重启正在运行的托盘(托盘图标 → 退出,然后点桌面图标),否则打开窗口的是内存里跑的旧脚本——而且没有面板。
为什么需要这个目录
机器上已经全局安装了 dsh-harness-control 包,但有两个原因让它没法配合当前的 DSH 使用:
1. 这个包启动的是它自己那份较旧的 @deepseek-ai/dsh 实例(0.1.0-rc.8),它期望的认证文件格式和现在运行的 0.1.5-rc.3 不一样——所以在 .credentials.yaml 那里卡住了(must be a string 错误)。
2. 它开不了窗口:它启动的是浏览器。
这个方案使用现有的、能正常工作的 dsh 安装(挑最新的那份),并加上自己的原生窗口。
登录 token(为什么光有 URL 不够)
dsh web 每次启动都会输出一个 token,并且只把带 token 的 URL 提供给浏览器(http://127.0.0.1:3080/?token=...);用它来换 cookie。所以光用 http://127.0.0.1:3080 会返回 401。launcher 会处理这件事:
- 启动 harness,并从它的输出里读出带 token 的 URL,
- 保存到 state\harness.url 文件(供托盘和之后打开窗口使用),
- 如果连到的是已经在运行的 harness 而没有 token,就用 --restart-if-stale 模式重启,并拿到新的 token。
文件
install.ps1 桌面图标(以及可选的登录时启动) pin-to-taskbar.ps1 Start 菜单项,用于固定到托盘 build.ps1 重新编译原生窗口(bin\DshWindow.exe) make-icons.ps1 从 frontend 的 favicon.svg 重新生成图标 src\DshWindow.cs 原生窗口的源码(WPF + WebView2,Core API) bin\DshWindow.exe 编译好的窗口程序(+ WebView2 运行时 DLL) lib\ 编译时用到的 WebView2 assembly assets\ 窗口/托盘图标(蓝色和灰色) tray\dsh-tray.ps1 托盘图标和启动逻辑(主入口) tray\dsh-tray.cmd 可放到桌面/固定到托盘的启动器(打开窗口) tray\dsh-tray-startup.cmd 只启动托盘图标(登录时用) tray\dsh-window.cmd 打开窗口(和桌面启动器一样) tray\dsh-window.ps1 直接从 PowerShell 启动窗口 tools\restart-harness.cmd 重启 harness(由托盘执行;可从任意位置运行) tools\restart-tray.cmd 仅重新加载托盘程序(更新后使用) tools\restart-all.cmd 一键完整更新:先托盘,再 harness(顺序很重要),最后汇总与状态 tools\build-window.cmd 在窗口运行中也能重新编译窗口(重命名旧文件,新 exe 在下次打开窗口时生效) tools\check-servers.ps1 状态:harness、机器人面板、托盘心跳、token tools\release.cmd 发布:升版本号 + commit + tag + push + GitHub Release (Git 面板的「发布」按钮调用的也是它) VERSION 发布版本号;插件的 package.json 从这里取值 state\ 状态:pid、token URL、日志、设置、窗口几何信息 state\tray-config.json 托盘设置(端口、面板、机器人界面) state\tray.heartbeat 托盘心跳(每 15 秒一次;restart 脚本据此判断可以把重启交给托盘) state\restart-request 来自外部的托盘重启请求(处理完后删除) state\window-geometry.txt 窗口最后的位置和大小 state\pane-layout.txt 各面板相对彼此的宽度 state\webview2\pane-1\ 1 号面板自己的浏览器配置档(持久) state\webview2\pane-2\ 2 号面板自己的浏览器配置档(持久)
设置
托盘的设置存在 state\tray-config.json: json { "port": 3080, "dshBin": "", "width": 1280, "height": 840, "panes": 2 }
dshBin 留空时,程序会挑选最新的可用 dsh (npx cache → 全局 npm → 本地 node_modules → PATH)。
panes 是原生窗口的面板数量(1–4)。在托盘里通过拆分窗口菜单设置;--panes 参数会覆盖它。
登录时自动启动(可选)
默认不开启。开启方式: powershell .\install.ps1 -AutoStart
它会把 tray\dsh-tray-startup.cmd 放进启动文件夹,由它启动托盘图标,不带窗口(GUI 在后台启动)。这时用桌面图标打开窗口。关闭:.\install.ps1 -RemoveAutoStart。
记住的授权(「始终」允许)
如果某个操作要伸到 workspace 之外,Harness 会用黄色卡片请求授权。卡片说中文,上面可以选三种回答:
| 按钮 | 作用 |
| 拒绝 | 操作不执行 |
| 允许一次 | 只允许这一次 |
| 始终:… | 保存授权的类型,下次不再询问 |
有两个「始终」按钮:一个只对发起请求的那个工具生效(pwsh、fs、……),另一个对所有工具生效。类型始终是请求中写明的目标——比如 完全访问(danger-full-access)——所以一条记住的完全访问不会自动允许 workspace-write 升级,反过来也一样。所以这不是「以后什么都不再问」的开关,而是对某一类访问的记住:其他类型照样会问。
决定在 host 侧做出:如果类型已被记住,服务器会在浏览器看到请求之前就回复——卡片根本不会出现。记住的条目放在 state\approvals.json 文件里,可以在右上角的 🛡 按钮处查看:可以逐条撤销,可以全部删除,还能看到自动批准的日志(服务器侧同样在 state\ui-extras-client.log 里)。
「总是」按钮只有在 host 侧(/ui-extras/approvals route)已经运行时才可见。所以装完新插件版本后,要用 ⇪ 生效 或 ⭯ 重启 按钮把服务器重启一次;在那之前卡片也能用,只是不会记住。
角标按钮和统计行在新的、还空的对话里也会显示:这时它们出现在输入框上方,发出第一条消息后就移到惯常的位置(右上角,以及输入卡片下面那一行)。
成本与统计——什么在哪里
行里只有当下的、明确的数据:轮次、步骤、token、缓存命中、余额,以及高峰/低谷时段状态和下次切换。成本和日均值在行的快速提示里(鼠标移到行上),因为这两项需要全部历史记录:
使用量与成本(按官方价目表估算)本次对话:$0.6644 成本(30 天):$0.6644 日均(30 天):$0.0221/天活跃天数:1(平均 $0.6644/天) token(30 天):145.2M — 未缓存 292.4k,缓存命中 144.6M,输出 311.3k 请求数:455 高峰时段只在工作日,匈牙利时间 03:00–06:00 和 08:00–12:00;周末和中国节假日始终是低谷时段(半价)。
30 天汇总由 host 从 session 日志算出(GET /ui-extras/usage?days=30&session=…),逐请求按真实模型和当时的费率(依据 DeepSeek 官方价目表;高峰时段只在工作日 01:00–04:00 和 06:00–10:00 UTC,匈牙利时间冬季 02:00–05:00 和 07:00–11:00,夏季 03:00–06:00 和 08:00–12:00)。周末和中国法定节假日始终算低谷时段——节假日列表来自 2026 年 State Council 条例,每年要在 host 侧的 CHINESE_HOLIDAYS 表里更新。check-usage.mjs 和 check-plugin.mjs 会校验价格、时间窗口,以及两份副本里节假日表是否一致。
委派工作——免费链路和付费路径分开算
委派(subagent)工作被 tooltip 分成两个口袋,因为只有一种能省钱:
节省——免费链路上的委派工作节省:$0.0128(走付费路径本来要花这么多)免费链路上:10 个请求 · $0.0000 · 5 个 session 委托到付费路由:274 次请求 · $0.3019(无节省)已委托:284 / 7.2k 次请求(3.9%)免费 worker:10 次请求 · $0.0000 付费 deepseek-flash:273 次请求 · $0.2969 上次委托:2026. 09. 29. 12:44
- 免费链上 = 请求命中了 MODEL_PRICES 表中的零价格行(本地 fallback 代理的 worker route 和链上的成员)。这才是真正的节省:freeSavingsUsd = free.baseline − free.cost。
- 委托到付费路由 = 子代理也跑在付费路径上(通常是因为代理挂了,或者它拿到了显式指定的模型)。这不算节省:花费和父代理自己跑一样多。
- 上次委托的时间之所以放在行间,是为了让旧数据不至于看起来像刻死的数字:如果好几周都没有委托,面板会直接说明这一点。
- 只有确实发生委托时,这个数字才会动:链本身不会发起工作(没有自动委托器;定时的 retune/watchdog scripts 不会调用 subagent tool)。子代理的路由由 providers\check-delegation-route.mjs 按天/按周回溯展示。
- 重要: 从 GUI 启动的子代理只有在该对话跑在 standard-free preset 上时,才会走免费链(web profile 里的 tool-subagent 行来自 preset,而 standard preset 里没有 agentOptions —— 这种情况下子代理会继承父代理的付费 route)。安装并设为默认: node providers\install-free-preset.mjs --apply --default;详情见 providers\README.md。
旧的、合并成一条的「委托成本 / baseline」行,只有在 host 端还是旧版时(没有 free/paid 拆分)才会出现,这样 tooltip 在这种情况下也不会说谎。
自动化(headless)运行 —— 独立通道
DSH 的 headless 运行总会在工作目录里创建一个会话,DSH 启动时会把每个这样的目录单独归为一个工作区。如果运行从项目目录启动,会话就会落进项目栏 —— 2026-09-27 那天,委托测试的 9 个会话就这样把列表刷满了。
所以自动化运行从自己的目录(.automation)启动,host 会把它识别为独立工作区:
一个自动化任务,跑在自己的通道里(报告也可以写进文件) .\providers\run-headless-task.ps1 "Report the current date using the pwsh tool." -ReportDirectory .\providers\reports
node providers\session-channel.mjs # 报告:谁在刷列表
node providers\session-channel.mjs --channel # 注册通道
node providers\session-channel.mjs --hide # 隐藏机器运行
隐藏是归档,不是删除:会话会从栏和搜索里消失,但日志还在原处,所以 30 天统计仍然会把它算进去。归档发生在运行中 host 的 registry 里(POST /ui-extras/workspace-session),因为 storages/workspace.json 由 DSH 只在启动时读取——手动改文件会被 host 覆盖。
恢复:node providers\session-channel.mjs --unhide --ids <id,...>。
故障排查
| 现象 | 说明 / 解决办法 |
| 窗口显示「DeepSeek Harness 未启动」页面 | 日志会说明原因:托盘 → 打开日志(state\window.log) |
| 「找不到 dsh CLI」 | 在目录中执行 npm install @deepseek-ai/dsh,或在托盘 dsh 路径… 菜单中指定 |
| 端口被占用 | 托盘 → 设置端口…,然后 重启 |
| 窗口打不开 | 检查 state\window.log;WebView2 运行时随 Windows 一起提供 |
| 图标不刷新 | 托盘 → 重启托盘,或 tools\restart-tray.cmd |
| 窗口跑到屏幕外(换显示器后) | .\bin\DshLauncher.exe --reset-geometry —— 清除保存的位置,窗口回到屏幕中央。(手动同样效果:删除 state\window-geometry.txt。) |
| 不知道启动器有哪些开关 | .\bin\DshLauncher.exe --help —— 会显示在 MessageBox 里,因为启动器不是控制台程序 |
| 设置了分屏,却只打开一个面板 | 正在运行的托盘还在跑旧脚本:重启托盘(tools\restart-tray.cmd)。检查:state\tray-config.json → panes,以及 state\window.log → panes: N。 |
| 窗口里的机器人界面不见了 | 托盘 → 窗口分屏 → 勾选 第 4 个界面:机器人面板。设置会写入 state\tray-config.json,下次打开窗口时生效。 |
| 重启后机器人面板的位置变成 DSH 面板(面板重复) | 修复前的 DshWindow 会在每个面板上启动 token 监听,于是把机器人面板也导航到了 DSH 的 token URL。执行 tools\build-window.cmd,然后托盘 → 关闭窗口 + 打开(窗口)。 |
| 机器人面板没有响应 | bot\start-robot-watchdog.cmd,或等 60 秒 —— 托盘会自动启动守护进程。检查:tools\check-servers.ps1。 |
| 机器人面板不跟随其他面板切换浅色/深色主题或语言 | 面板运行在单独的 origin(4180)上,所以同步要经过 host。DSH 的主题按钮用 theme-sync 通知它,面板则每 10 秒回查一次(robot-theme)。如果 host 侧路径还没生效,重启服务器(⭯ 或 tools\restart-harness.cmd)。 |
| 🤖 面板在英文界面上显示匈牙利语标题,或在浅色模式下保持黑色 | 面板跟随 DSH 的当前语言和 <body data-ds-dark-theme> 标记;客户端 bundle 在服务器重启时更新。刷新:⭯ 或 tools\restart-harness.cmd,然后重新加载页面。 |
| 某个面板空白 / 显示错误页面 | state\window.log:webview2 init failed (pane N) 行。面板有自己的配置档 state\webview2\pane-N;如果它仍被锁定(窗口被强杀),启动时会切换到带时间戳的兄弟目录。 |
| 面板「忘记」了自己的工作区 | 面板配置档在启动时被锁定(之前某个窗口被强杀),因此切换到了全新配置档。下次打开时会恢复;要永久重置,请删除 state\webview2\pane-N 文件夹。 |
| 一直显示「正在重新连接…」,不会消失 | 标签页还持有旧的登录 token。窗口每 4 秒检查一次新 token(state\harness.url 以及服务器日志),并自动跳转过去——前提是窗口运行的是最新的 bin\DshWindow.exe。 |
| 黄色同意卡片上没有「始终」按钮 | 插件 host 那一侧还是旧的(路由要重启之后才生效)。用 ⇪ 或 ⭯ 按钮重启服务器。如果之后还是不出现,state\ui-extras-client.log 会告诉你原因。 |
| 界面「卡死」(无法输入、无法点击) | 先看 state\ui-extras-client.log 的末尾:main thread stalled 这一行会告诉你页面在什么时候、被阻塞了多久。如果那里没有这一行,卡死就不在页面的 JavaScript 里(通常是某个原生窗口,比如文件夹选择对话框,把输入攥在自己手里)——这种情况下,强杀进程/重启窗口是出路。 |
重启服务器——从任何地方,通过托盘
重启 harness 会中断为它提供服务的那个进程。
因此 tools\restart-harness.ps1 不自己干活:它把请求交给 系统托盘图标,这是 DSH 进程树之外唯一的进程(登录时启动,有自己的 mutex)。这样重启就能从任何地方发起——DSH 终端、 Web UI 或普通窗口——而且不会中途被打断。
bármely hívó ─▶ fut a tálca? (state\tray.heartbeat friss)
├ igen ─▶ state\restart-request ─▶ a TÁLCA végzi el
├ nem ─▶ elindítja a tálcát, majd az előző ág
└ nem indítható ─▶ WMI-vel leválasztott másolat
minden út végén: friss token a state\harness.url fájlba (ATOMIKUSAN írva)
* ⇪ 生效(Web UI)——host 写入配置档补丁,然后请求重启。
* ⭯ 重启(Web UI)——同上,但不写补丁。
* 托盘图标 → 重启——直接从托盘发起。
* tools\restart-harness.cmd——可点击;所有路径最终都汇到同一处。
.\tools\restart-harness.cmd # a tálca végzi el (ajánlott)
.\tools\restart-harness.cmd -NoWait # csak a kérést adja le, nem vár
.\tools\restart-harness.cmd -Force # a tálcát kihagyva, WMI-vel
.\tools\check-servers.ps1 # állapot: harness, robot panel, tálca-életjel, token
为什么不用 -Detached? 早先的版本会启动一个隐藏的 PowerShell 副本——但它同样留在调用方的进程树里,所以 DSH 的 taskkill /F /T 也会把它一起带走。实测故障(2026-10-02):新 token 没有写出来(state\harness.url 本该 74 字节,结果只有 3 字节),托盘读到旧 token,于是自愈式地重启了服务器。因此 -Detached 如今内部开关(分离副本会用到),不是用户选项。
如果没有正在运行的托盘,脚本会停下(exit 3),不碰服务器:它自己这条路径的第一步就是停掉旧服务器,如果它跟着调用方的进程文件一起死掉,harness 就会一直停着。这比一个半途而废的 token 更糟——所以自己这条路径只在带 -Force 时才启动。
入口点、状态文件和故障排查的完整说明: docs/UZEMELTETES.md。
运行 WebView2 窗口的重要事项
WebView2 会启动自己的浏览器进程。这在普通 Windows 桌面环境下(你自己启动托盘时)可以正常工作。受限环境下——比如 DSH 智能体从自己的沙箱里启动托盘——浏览器进程起不来,state\window.log 里会看到:
webview2 init failed: ... E_UNEXPECTED
这不是配置出错:托盘和窗口要从 Windows 里启动(双击,或登录时启动),不能从沙箱进程里启动。
重新编译
如果你改了 src\DshWindow.cs:
.\build.ps1
编译用的是 Visual Studio 2022 Build Tools 的 Roslyn csc.exe,以及它自带的 WebView2 assembly——不需要 .NET SDK,也不需要联网。
注意:只要有一个 bin\DshWindow.exe 实例在跑,就没法重新编译它。
这种情况下 build.ps1 会生成 bin\DshWindow.exe.new;窗口还在运行时可以这样安装(运行中的实例继续用旧文件,下次开窗口就用新的):
Move-Item bin\DshWindow.exe bin\DshWindow.exe.old -Force
Move-Item bin\DshWindow.exe.new bin\DshWindow.exe -Force
制作发布包
.\tools\build-installer.ps1 # dist\ 下:portable ZIP + 安装程序 EXE .\tools\release.cmd # 版本 + commit + tag + push + GitHub Release
发布包只包含 git 跟踪的文件,所以 state\、node_modules 和所有机密都不会进去。发布前:
node tools\audit-secrets.mjs # 机密与个人信息审计(工作树里和提交历史里都查)
node tools\check-plugin.mjs # 插件完整性
许可证
MIT——见 LICENSE。Copyright (c) 2026 Varga Sándor (svandor)。
可自由使用、修改和分发,需注明作者姓名和许可证文本。软件按「现状」提供,不附带任何担保。
关键词
DeepSeek Harness · Windows 11 托盘应用 · WebView2 原生窗口 · 匈牙利语界面 · 免费 LLM fallback · Groq · NVIDIA NIM · OpenRouter · Ollama · 子代理委派 · 本地 AI 智能体 · 桌面 AI 助手 · MIT 许可证
Keywords (EN): DeepSeek Harness · Windows 11 tray app · WebView2 native
window · Hungarian UI localization · free LLM API fallback · Groq · NVIDIA NIM · OpenRouter · Ollama · subagent delegation · local AI agent · desktop AI assistant · MIT licence预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
svandor/deepseek-harness-windows
把网页界面变成带托盘图标的原生 Windows 应用
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,362已汉化DSH
71.4
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,076已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,814已汉化DSH
71.1
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。