dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
给 DeepSeek Harness 桌面端的通知卡:任务跑完、等你审批、等你回答时,在屏幕角落弹一张卡片。
只做桌面端。 卡片是 Windows 原生窗口,不依赖浏览器,也不提供网页端那一套(浏览器通知 / 页面浮层 / 标签页标题标记)。
简体中文 · English


三件事发生时弹一张卡:
卡片盖在其他窗口上,但不抢焦点。你可以继续打字,也可以继续全屏看视频。
corner: auto 跟系统通知同一个角:任务栏在下面就在右下,在上面就在右上,在左边就跟到左下。top-left / top-right / bottom-left / bottom-right。上边两个顶格贴屏幕顶,下边两个贴任务栏上沿,按工作区算,任务栏在左边或上边也一样对齐。2:35 PM,24 小时制 14:35)。seconds 秒后淡出,不点也会消失。只做桌面端,不做网页端。 卡片是画在运行 DSH 的那台 Windows 机器桌面上的原生窗口,不经过浏览器。包里没有网页那一半,所以浏览器通知、页面浮层、标签页标题标记这些一个都没有。想在浏览器里收提醒,用 dsh-notify-me 那种带 client 半的网页插件。
| 项目 | 要求 |
|---|---|
| 形态 | 桌面端(DeepSeek Harness.exe),或 DSH 宿主就跑在你要看的那台 Windows 上 |
| 系统 | Windows |
| DSH | 0.1.0-rc.1 或更高 |
| Node | 20 或更高(只在 DSH 加载插件时用得到) |
| .NET Framework | 4.x,Windows 自带,不用另外装 |
浏览器只用来操作 DSH 的话,卡片会画在 DSH 宿主那台机器上。宿主在远程服务器上,卡片就落在服务器的桌面,你在这边看不见。
四种方式,按你的 DSH 是哪种形态选一种。不要同时用两种,否则每件事弹两张卡。
npm i dsh-notice-card@0.2.1
在 profile 目录的 cordis.patch.yml(默认 %USERPROFILE%\.dsh\profiles\<profile 名>\)末尾加上:
- insert:
- id: notice-card
name: C:/你执行 npm i 的目录/node_modules/dsh-notice-card/lib/index.mjs
config: {}
name: 要写完整绝对路径,斜杠用 /。
想改代码就用这种。
git clone --branch v0.2.1 https://github.com/Maple-Yoli/dsh-notice-card.git
- insert:
- id: notice-card
name: C:/你克隆的目录/dsh-notice-card/lib/index.mjs
config: {}
新加的 id 会被 DSH 立即加载,不用重启。没有反应就完全退出 DSH 再打开。
桌面端的 desktop profile 由应用自己管理,命令行的 dsh plugin --profile desktop add 会被拒绝。
在应用里打开 设置 → 插件,填仓库地址:
Maple-Yoli/dsh-notice-card
装完自动挂上,不用改 patch 文件。
dsh plugin --profile <你的 profile> add dsh-notice-card@0.2.1
也可以直接走 GitHub 源,不经 npm:
dsh plugin --profile <你的 profile> add github:Maple-Yoli/dsh-notice-card#v0.2.1
包里的 dsh.bundle.patch 会被自动加进 profile 的 dsh.profile.bundles。
这种方式只适合宿主也跑在本机的场合。宿主跑在远程服务器上,装到哪个 profile 都一样:卡片画在服务器的桌面上。
配置写在 patch 的 config: 里。比如只关掉「任务结束」提示、把停留时间改成 20 秒:
- insert:
- id: notice-card
name: C:/你克隆的目录/dsh-notice-card/lib/index.mjs
config:
onTurnEnd: false
seconds: 20
| 键 | 默认值 | 说明 |
|---|---|---|
onTurnEnd | true | 一轮任务结束时弹卡 |
onApproval | true | 等你审批工具调用时弹卡 |
onQuestion | true | 等你回答问题时弹卡 |
seconds | 10 | 任务结束卡停留几秒。审批卡和提问卡不看这个值 |
turnEndTitle | 任务已结束 | 任务结束卡的标题 |
turnEndBody | DSH 已完成本轮任务,等你下一步。 | 任务结束卡的正文 |
approvalTitle | 等你审批 | 审批卡的标题 |
approvalBody | 工具:{tool}{reason} | 审批卡正文模板。{tool} 工具名,{reason} 审批理由 |
questionTitle | 等你回答 | 提问卡的标题 |
questionBody | 问题:{question} | 提问卡正文模板。{question} 问题内容 |
processName | 自动推断 | 点窗口图标时切到哪个进程 |
appPath | 自动推断 | 那个进程没开时启动哪个 exe |
corner | auto | auto 跟任务栏走,或钉死 top-left / top-right / bottom-left / bottom-right |
maxStack | 3 | 最多同时显示几张卡(1–8),超出关掉最老的。实际张数还受屏幕高度限制 |
processName 和 appPath 默认从 DSH 进程推出来,桌面端下就是 DeepSeek Harness 和它的 exe 路径。两个都留空,点窗口图标只关卡片、不切窗口。
改 corner、maxStack 属于改已有插件的 config,要完全退出 DSH 再启动才生效。
agent/turn-stopping(一轮结束)、approval/request(等你审批)、user-questions/request(等你回答)。next(),把请求交回原本的应答方(应用里的面板)。你还是在应用里作答,卡片盯着请求,答完就收走。sessionTitle(没标题退回会话 id 前 6 位),权限名走 permissionPresets 的预设目录。任一服务读不到就不写那行,卡片照常弹。AppsUseLightTheme、高对比度、动画开关 SPI_GETCLIENTAREAANIMATION、省电 GetSystemPowerStatus、文本大小 TextScaleFactor、触摸 SM_DIGITIZER、滚轮行数 SPI_GETWHEELSCROLLLINES、任务栏在哪边、界面语言、免打扰 SHQueryUserNotificationState。任何一项读不到都退回安全默认值,不会因此不弹卡。-br / -tl),不同角的卡互不计数。card-<编号>.exe。没有常驻进程、没有共享队列、没有请求文件。一张卡崩了只崩它自己。上屏约 60ms。WM_TIMER,180Hz 屏上也是连续滑动。lib/card.cs 第一次弹卡时用系统自带的 csc.exe 编成 exe,存到 %LOCALAPPDATA%\dsh-notice-card\。源码内容变了才重编。$card = (Get-ChildItem "$env:LOCALAPPDATA\dsh-notice-card\card-*.exe" | Select-Object -First 1).FullName
& $card --title "标题" --body "正文" --seconds 8 --corner top-left --session "演示" --preset "工作区内修改"
前提是缓存目录里已经有一个 card-*.exe,没有就先随便跑一轮 DSH 任务让它编一次。--corner、--max-stack、--session、--preset 都可以省略。
在浏览器里用 DSH,能收到卡片吗
收不到。卡片画在跑 DSH 的那台 Windows 机器上,不经过浏览器。dsh web 开在另一台设备上,或者宿主在远程服务器上,卡片都落在宿主那台机器的桌面,你看不见。想在浏览器里收提醒,换 dsh-notify-me 这类带网页端一半的插件。
卡片不弹
cordis.patch.yml 里 name: 的路径是否存在,结尾是不是 lib/index.mjsid 热加载,改已有的 id 要完全退出 DSH 再打开中文变成乱码
lib/card.cs 是 UTF-8 无 BOM 的源码,编译时按文件里的字面量来。乱码一般是编辑器先按 GBK 读、又按 UTF-8 存回去,把中文压坏了。用 VS Code 以「UTF-8 without BOM」重新打开、保存即可。
想改卡片的样子
颜色、字号、圆角、动画时长、叠放间距都在 lib/card.cs 里。改完不用重装,文件内容一改,下次弹卡自动重编。
cordis.patch.yml 里那段 - insert:(方式一、二、四),或在 设置 → 插件 里卸载(方式三)%LOCALAPPDATA%\dsh-notice-card\node_modules/dsh-notice-card(方式一)或克隆出来的目录(方式二)%LOCALAPPDATA%\dsh-notice-card\,卸载时一起删掉每个版本改了什么、修了什么,全部写在 Releases,中文和英文都有。装之前可以先看一眼。
有 Bug、有想法,到 Issues 提。
附上:Windows 版本、DSH 版本、是哪种卡片(任务结束 / 审批 / 提问)、复现步骤。有截图或录屏最好。