dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
一个 DSH 插件:当 agent 会话完成、异常或需要你确认时弹出 Windows 原生通知,完成时还可附带提示音——长任务可以放手不管,出事的瞬间你会知道。
cordis.patch.yml,由 DSH 的 patch watcher 自动生效,无需重启。前置条件:DSH 0.1.2-rc.1+,且 web profile 已初始化(至少跑过一次 dsh web),Node.js ≥ 20、pnpm ≥ 10。
dsh plugin --profile web add dsh-helper@latest
包内是预构建产物(lib/ 已随包发布),不含任何安装脚本,因此 pnpm 不会要求你授权构建,装完即用。
dsh plugin --profile web add github:sunligh91/dsh-helper
git 源安装会拉源码并由 pnpm 运行
prepare;pnpm ≥10 在得到显式允许前会拒绝执行,需要把 pnpm 打印的包键写进该 profile 的pnpm-workspace.yaml:allowBuilds: dsh-helper: true该授权等于「允许此包的代码在安装时于本机执行」。若只想装预构建代码,请用方式一。
git clone https://github.com/sunligh91/dsh-helper.git
cd dsh-helper
# 链接到你的 web profile
cd ~/.dsh/profiles/web
pnpm add file:/绝对路径/dsh-helper
然后把 "dsh-helper" 加进 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 数组,并硬刷新浏览器(Ctrl/Cmd + Shift + R)。
进入 设置 → 任务通知 (dsh-helper)。
| 配置项 | 默认值 | 说明 |
|---|---|---|
notifyOnComplete | true | 会话完成时通知(同一会话 60 秒内去重)。 |
notifyOnError | true | 会话出错时通知。 |
notifyOnConfirm | true | agent 即将提问时通知。 |
soundOnComplete | true | 完成通知后播放提示音。 |
soundVolume | 70 | 提示音音量,0–100。 |
soundFile | "" | 本地音频文件路径(wav / mp3 / wma)。留空用内置提示音;自定义文件不存在时回退到内置提示音,再回退到 Windows 系统自带提示音。 |
默认值随包附在 cordis.patch.yml;你的改动会写入 ~/.dsh/profiles/web/cordis.patch.yml。
| DSH 事件 | 行为 |
|---|---|
agent/status(idle) | 弹出「任务完成」通知 + 播放提示音 |
agent/request-error | 弹出「任务异常」通知(纯放行,不做任何拦截或重试) |
tools/pre-execute(ask_user_question) | 弹出「需要确认」通知 |
session/event → approval/asked | 弹出「需要授权」通知 |
审批通知监听的是会话审计事件
approval/asked,而不是瀑布事件approval/request。原因是 cordis 的 waterfall 语义为「不调用next()即否决整条链」,任何排在前面并直接返回结果的监听器(例如自动审批门控)都会让后面的监听器永远收不到事件。approval/asked是决策前写入日志的纯审计事件,不受此影响。
设置路由(/_dsh/dsh-helper/settings)仅监听本机,非 127.0.0.1 / ::1 的请求一律返回 403。
🔄 还需要自动重试? 本插件只做通知,这是有意为之。可搭配专门的重试插件,例如
dsh-task-reliability(它在同一事件上返回{ kind: 'retry' }触发 DSH 原生重试)。
git clone https://github.com/sunligh91/dsh-helper.git
cd dsh-helper
| 文件 | 作用 |
|---|---|
lib/index.js | 宿主侧 — cordis 插件:事件钩子 + 设置路由 |
lib/client.js | 客户端侧 — 通过 window.__ModuleLoader__ 注册,无需构建 |
cordis.patch.yml | 注入 profile 的默认配置 |
两侧都是原生 ES module / UMD,没有打包器,改完刷新即可。
System.Media.SoundPlayer(仅支持 wav,且音量设置不生效)。System.AppUserModel.ID 的快捷方式,否则 toast 会被间歇性静默丢弃(尤其当有前台窗口时),表现为「焦点不在本应用就收不到通知」。插件启动时会自动幂等补齐这条快捷方式(%APPDATA%\Microsoft\Windows\Start Menu\Programs\dsh-helper.lnk),无需手动操作、也无需管理员权限。MIT © sunligh91
System.AppUserModel.ID,否则 toast 会被间歇性静默丢弃。插件启动时自动幂等补齐该快捷方式(运行时自建,包内不含任何安装脚本,npm 安装无需授权)。另:审批通知改挂 session/event → approval/asked,不再被自动审批门控的瀑布抢答吞掉。session- 前缀,子 agent 是裸 UUID,据此过滤);另加全局节流,60 秒内最多一条完成通知。dsh-helper,并在每次发送前幂等写入 HKCU\Software\Classes\AppUserModelId\dsh-helper 的 DisplayName,通知顶部由一串十六进制 GUID 变为 dsh-helper。GetTemplateContent 被误调在 ToastNotifier 实例上(该方法属于 ToastNotificationManager 静态类),WinRT toast 从未真正成功过,一直走 WScript 弹窗兜底。现改回正确调用并实测弹出真通知。approval/request 事件,工具权限审批时提醒);设置面板拆分为三个测试按钮:完成 / 多选一确认 / 权限审批。