前言¶
DeepSeek Harness (DSH) 负责编排智能体的运行与工具调用,而 UniPet 是一个运行在桌面上的宠物进程。二者之间缺乏直接的交互接口。unipet-dsh 插件填补了这个空白,它监听 DSH 的 agent/session 生命周期事件,将思考、工具执行、等待审批或失败等状态,通过 HTTP API 推送给本地 UniPet 宠物,使其状态与 AI 的实际运行情况保持同步。
插件概览¶
- 名称:unipet-dsh
- 维护者:ztyhehe
- 许可:MIT
- 定位:工作流插件,负责 DSH 与 UniPet 的状态桥接。
核心功能¶
- 监听 DSH agent/session 的生命周期事件。
- 实时将状态推送到本地 UniPet 宠物。
- 支持状态映射(thinking, waiting, failed, review 等)。
- 宠物不在线时自动执行
unipet start拉起。 - 定期进行健康探测,断线期间停止推送,恢复后自动回 idle。
- 对高频事件进行去抖动处理,并支持失败语义识别。
安装与启用¶
在 DSH 的 web profile 环境下执行以下命令进行安装:
cd ~/.dsh && dsh plugin --profile web add git+https://github.com/ztyhehe/unipet-dsh.git
安装完成后,重启 dsh web 服务即可生效。
状态映射¶
插件会将 DSH 的特定事件映射为 UniPet 的状态,具体对应关系如下:
| DSH 事件 | UniPet 状态 | 气泡文案 |
|---|---|---|
turn/start |
running | Thinking… |
tool/call |
running | Editing code / Running command / Searching / Delegating |
approval/asked |
waiting | Waiting for your approval |
ask/question |
waiting | Waiting for your answer |
tool/result 失败 / agent/error |
failed | Task failed |
agent/status idle |
review | Done - ready for review(8s 后自动复位) |
配置说明¶
默认配置即可满足基本使用。如需调整,可在 profile 的 cordis.patch.yml 中覆盖插件的 config 字段。
- host / port:UniPet 的 HTTP 地址与端口,默认
127.0.0.1:8768。 - source:事件来源标识,默认
dsh。 - autoStart:宠物不在线时尝试拉起,默认
true。 - debounceMs:同类状态的最小发送间隔(去抖窗口),默认
400ms。 - healthIntervalMs:宠物健康探测周期,默认
30000ms。 - aggregate:多 agent 聚合策略,默认
true。 - softFail:扩展语义失败识别,默认
true。
注意事项与限制¶
- 本插件为纯 host 侧插件,不包含客户端代码,仅访问本机回环地址,不外发任何数据。
- 卸载前需手动清理定时器与未发出的去抖状态。
- 若
cordis.patch.yml中存在旧的手工挂载行(name: './plugins/unipet-dsh/index.js'),请务必删除该条 insert,否则可能导致双实例重复推送。
验证与故障排除¶
若日志中出现 push failed: request timeout,但 UniPet 明显在运行,这可能是旧版本误报。v0.2.0 已修复此问题(通过消费 HTTP 响应避免 socket 空闲超时)。确保完全重启 dsh web 后再观察。
可通过以下命令手动验证推送链路,确认 UniPet 正常接收:
curl -sS -m 5 -w "\nHTTP=%{http_code} total=%{time_total}s\n" \
-X POST http://127.0.0.1:8768/api/pet/events \
-H 'Content-Type: application/json' \
--data '{"source":"dsh","state":"idle","message":"DSH ready","action":"update"}'
短结尾¶
通过上述配置,DSH 的运行状态将实时反馈在桌面宠物上。更多细节可查阅项目目录页或源码。