voyager
voyager-crew
Enhancement suite for Gemini, AI Studio, Claude, ChatGPT & DeepSeek — plus a prompt manager for any website, DeepSeek Harness included. / 面向 Gemini、AI Studio、Claude、ChatGPT 与 DeepSeek 的增强套件;其中的提示词管理器可用于任意网站,如 DeepSeek Harness。
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:VoodooB0Ys/dsh-desktop-notify
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
中文 | English
给 Windows 上的 DeepSeek Harness 用的桌面提醒:需要你授权、向你提问、任务跑完、 出错、被中止时,屏幕角落弹出一张提醒卡片。点它,DSH 会自己浮到最前,并切到发出这条 提醒的那个对话。
它是为"你没在看 DSH"这个场景做的——你在别的窗口、看别的对话,或者全屏看视频。
仅 Windows。 不支持 macOS / Linux:整条链是 WinRT 通知 / PowerShell / Win32 窗口 激活。在其它系统上插件会加载但什么都不做。
| 事件 | 提醒 | 打扰程度 |
|---|---|---|
| 有工具需要你授权 | 「需要你授权」 | 响,且一直等你 |
| 模型向你提问 / 计划审阅 | 「需要你回答」 | 响,且一直等你 |
| 一个回合正常结束 | 「任务完成」 | 轻 |
| 一个回合以报错结束 | 「任务出错」 | 轻 |
| 回合被中止 / 中断 / 达到输出上限 | 「任务被中止」 | 轻 |
该安静的时候它会安静:
| 情形 | 行为 |
|---|---|
| 你正看着发出这条提醒的那个对话 | 不出声也不弹 |
| 你在看别的对话,或窗口最小化 / 被别的窗口盖住 | 提醒 |
| 子代理 / 子会话里的动作 | 默认不提醒 |
| 短于 5 秒的回合结束 | 不算"完成" |
| 同一件事 8 秒内又发生一次 | 只提醒一次 |
| 主回合在等后台子代理还没跑完 | 不算"完成",等它们都结束 |
| 焦点信息取不到(页面从未上报) | 按"没在看"处理——宁可多响一次也不漏 |
0.1.7-rc.2 或兼容版本没有 npm 依赖。除了想自己重建激活器(见下文)之外,没有构建步骤。
这是一个 DSH bundle:一个声明了 cordis.patch.yml 条目的包。
在 DSH 里打开 设置 → 插件,用 spec 安装(git 简写或本地路径都行):
github:VoodooB0Ys/dsh-desktop-notify
把这个目录放到任意位置,例如 D:\tools\dsh-desktop-notify。
编辑 %USERPROFILE%\.dsh\profiles\<profile>\package.json(<profile> 通常是
desktop,浏览器版是 web),加入:
{
"dependencies": {
"dsh-desktop-notify": "link:D:/tools/dsh-desktop-notify"
},
"dsh": {
"profile": {
"bundles": [
"dsh-desktop-notify"
]
}
}
}
原有条目保留不动——你只是往 dependencies 加一行、往 bundles 加一行。路径用正斜杠。
装进 profile:
cd %USERPROFILE%\.dsh\profiles\<profile>
<自带 node> <自带 pnpm>/bin/pnpm.mjs install
(桌面版自带 node/pnpm,在 %USERPROFILE%\.dsh\dsh-runtimes\ 下。)
重启 Harness。 插件是在宿主启动过程中注册自己的路由的,热重载不够。
除此之外没有任何跟机器绑定的东西:插件里不存任何绝对路径,通知身份是运行时在
HKCU 里按当前用户创建的。
点卡片会把目标对话 id 写进交接文件(%USERPROFILE%\.dsh\dsh-desktop-notify.activate),
宿主轮询取走后让页面打开那个对话——等同于点侧边栏里那一行。同时把 DSH 窗口恢复并
短暂置顶 1.2 秒,这样即使被全屏视频盖住也能浮上来。
默认值在本包的 cordis.patch.yml 里。要改就在你自己 profile 的
cordis.patch.yml 里加一段覆盖:
- id: desktop-notify
name: dsh-desktop-notify
config:
channels:
toast: false # 是否另外发 Windows 系统通知(默认关,避免两条横幅叠一起)
alert: true # 提醒卡片(默认通道)
classes:
completion: false
minTurnMs: 10000
| 键 | 默认 | 含义 |
|---|---|---|
enabled |
true |
总开关 |
classes |
全 true |
按事件开关(approval / question / completion / failure / aborted) |
channels.toast |
false |
Windows 系统通知(进通知中心)。默认关,免得你同时收到两条横幅 |
channels.alert |
true |
提醒卡片 |
alertSeconds |
见文件 | 卡片停留秒数(授权/提问 60 秒,完成 10 秒,出错/中止 25 秒;0 = 一直留到你点) |
gateOnFocus |
true |
"你正在看那个对话就不打扰"这道门 |
backgroundGraceMs |
45000 |
焦点上报多久没更新就当作你已离开 |
minTurnMs |
5000 |
短于这个时长的回合不算"完成" |
dedupeMs |
8000 |
同一对话同一类事件的去重窗口 |
minGapMs |
1500 |
两条提醒之间的最小间隔 |
settleMs |
800 |
回合结束后等多久再判定"完成" |
notifySubagents |
false |
子代理会话是否也提醒 |
sound |
true |
按类别播放的短提示音 |
debug |
true |
写 %USERPROFILE%\.dsh\dsh-desktop-notify.log |
如果你把 channels.toast 打开,插件会顺带注册它需要的 COM 激活器(见
《为什么点击需要 COM 激活器》);关着的时候不注册任何东西。
tail -f %USERPROFILE%\.dsh\dsh-desktop-notify.log # 门与投递的判定
tail -f %USERPROFILE%\.dsh\dsh-desktop-notify.activate.log # 点击与窗口唤前
每一步判定都会留痕:skip completion: user is looking at this conversation、
skip ...: deduped、skip ...: subagent session、card shown、card clicked。
快速确认宿主路由是否活着:
curl -X POST -H "content-type: application/json" -d "{\"focused\":true}" \
http://127.0.0.1:<你的 dsh 端口>/dsh-desktop-notify/focus
返回 204 说明插件注册上了;405/404 说明没有——你正在跑的是旧宿主进程,重启它。
dependencies 和 bundles 里删掉 dsh-desktop-notify,在 profile
目录里跑一次 pnpm install,然后重启。HKCU\Software\Classes\AppUserModelId\DeepSeekHarness.DesktopNotify
HKCU\Software\Classes\CLSID\{D7A1F0B2-3C4D-4E5F-9A0B-1C2D3E4F5A6B} (只有用过 channels.toast 才会有)
对未打包的 Windows 应用,两条看起来最直接的路实测都走不通——都是靠留痕判定,不是猜的:
| 做法 | 结果 |
|---|---|
activationType="protocol" + 注册 URI 协议 |
手动执行这条 URI 每次都成功,但真实点击横幅从来没有到过处理器——Windows 对未打包应用不做这个转交 |
常驻进程订阅通知的 Activated 事件 |
PowerShell 宿主收不到:用一个不需要点击的等价实验(程序化关闭通知)验证,连 Dismissed 都收不到,事件泵根本投递不进这个进程 |
注册成 AUMID 的 CustomActivator 的 COM 本地服务器 |
可用——Windows 会启动 lib/dsh-notify-activator.exe,由它把对话 id 交给宿主并把窗口唤前 |
激活器刻意编译成 winexe:控制台子系统每次点击都会闪一个黑框。用 .NET Framework 自带的编译器重建:
& "$env:WINDIR\Microsoft.NET\Framework64\v4.0.30319\csc.exe" -nologo -optimize+ `
-target:winexe -platform:x64 -out:lib\dsh-notify-activator.exe lib\activator\NotifyActivator.cs
lib/register-activator.ps1 可以手动注册(并校验)COM 那半边。
^0.1.7-rc.2 的事件与服务契约。DSH 内部版本之间会变;如果某个版本改名了
本插件订阅的事件,提醒就会失效。channels.toast 打开。MIT,见 LICENSE。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: notification。