dsh
OpenPetsHQ/openpets将 DeepSeek Harness 的生命周期状态、错误与审批请求,桥接到本地运行的 OpenPets 桌面伙伴。
DeepSeek Harness 提醒插件:当 Agent 需要你的时候,响一声 + 弹一条桌面通知。
你在等 Agent 干活的时候可以去刷视频、看网页、做别的事。 Agent 真正需要你时(要确认、要输入、干完了、出错了),dsh-ping 提醒你回来。
| 事件 | 含义 | 提示音 |
|---|---|---|
stage | Agent 完成一个阶段 | 轻微短音 |
approval | Agent 请求你批准工具调用 | 明显双音 |
input | Agent 被阻塞,等你输入 | 明显三连音 |
complete | 任务执行完成 | 上行琶音 |
error | Agent 出错 | 下行低沉音 |
git clone <repo> dsh-ping && cd dsh-ping && npm install && npm run build
Node.js >= 18,Windows 优先(macOS / Linux 也做了简单支持)。
dsh-ping 声明了 dsh.bundle 元数据(package.json + cordis.patch.yml),
安装即生效,无需手动改配置:
dsh plugin --profile <你的 profile 名> add dsh-ping
dsh 会自动把 dsh-ping 加入该 profile 的 bundles 列表,插件行随 bundle patch 自动应用。
本地开发时用 file: 直装源码:
dsh plugin --profile <你的 profile 名> add file:E:/test/dsh-ping
开发期改完代码 npm run build 后,先 remove 再 add 强制更新:
dsh plugin --profile <你的 profile 名> remove dsh-ping
dsh plugin --profile <你的 profile 名> add file:E:/test/dsh-ping
想关掉某类提醒,在 profile 的 cordis.patch.yml 里按 id 覆盖:
- insert:
- id: dsh-ping
name: 'dsh-ping'
config:
stage: false # 关掉阶段提醒
approval: true
input: true
complete: true
error: true
dsh --profile <你的 profile 名> web # 或 headless
看到 [dsh-ping] 已加载,正在监听 Agent 事件 即接入成功。
web profile 里设置面板中有独立的一栏「dsh-ping 提醒」:dsh web → 打开设置,侧边栏直接可见。
--dsw-alias-*),自动跟随系统深浅色主题| 场景 | 播放方式 |
|---|---|
| web 界面打开(含后台标签页) | 浏览器播放(HTML5 Audio,任意格式) |
| headless / 浏览器关闭 | host 兜底播放(PowerShell 等系统播放器,WAV) |
浏览器在线时,host 通过 SSE(/dsh-ping/events)推送提醒帧,浏览器从 /dsh-ping/sound/<type> 拉取当前铃声播放;桌面通知始终由 host 发出。上传的铃声存放在 $DSH_HOME/dsh-ping/sounds/。
实现分两半:
ctx.settings.register)、上传路由(POST /dsh-ping/upload)、SSE 事件流、声音文件路由dsh.client),注册独立设置栏 + EventSource 播放器dsh-ping 通过 Cordis 监听 session/event 事件流(@deepseek-ai/dsh-session 的 SessionEventMap):
| dsh 事件 | dsh-ping |
|---|---|
step/end | stage |
approval/asked | approval |
turn/end(blocked) | input |
turn/end(completed) | complete |
turn/end(error) | error |
防重复提醒:
step/end 延迟 300ms 提醒;若 turn 紧接着结束,由 turn 级提醒(complete/input/error)接管blocked 结束不再重复提醒也可以不依赖 dsh,直接在任意 Node 项目里调用:
import { ping } from "dsh-ping";
await ping({
type: "approval",
title: "Agent 需要确认",
message: "请回来确认下一步操作",
});
await ping({ type: "complete" }); // 标题和文案有默认值
dsh-ping test 测试声音 + 桌面通知
dsh-ping stage 轻微提示音(阶段完成)
dsh-ping approval 明显提示音(需要确认)
dsh-ping input 明显提示音(需要输入)
dsh-ping complete 完成提示音
dsh-ping error 错误提示音
本地开发时用 node bin/cli.js test,或 npm link 后直接用 dsh-ping。
声音文件在 sounds/ 目录,是脚本生成的简单正弦波 WAV,可以直接换成你自己喜欢的音频(保持文件名不变即可)。
重新生成:
npm run gen:sounds
SoundPlayer,macOS 用 afplay,Linux 用 paplaynode-notifier(唯一运行时依赖,Windows 下走 SnoreToast)name + apply(ctx, config)DSH_PING_DRY_RUN=1 node scripts/verify-harness.mjs 在真实 Cordis + dsh-session 上验证全部事件映射MIT