前言¶
DeepSeek Harness(简称 dsh)是 DeepSeek AI 开源的智能体运行时,核心理念是「一切皆插件」。它目前仍处在开发者预览阶段,默认 Web UI 监听 http://127.0.0.1:3080。社区里还有独立站点在收录第三方插件,例如 DeepSeek Harness 插件库;这类目录与 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。
dsh 把会话、审批、提问都放在 Web 界面里。人如果切到编辑器或终端,就很难立刻知道智能体是在干活、在等确认,还是已经做完。桌面宠物正是为这个缝隙准备的:不改 harness 本身,只在桌面上放一个常驻指示器。dsh-plugin-pet-rs 做的就是这件事——一只像素风鲸鱼,跟着会话状态换表情。
这是什么¶
dsh-plugin-pet-rs 是社区目录里归在「趣味」分类的项目,由 HuanLinOTO 在 GitHub 维护。仓库创建于 2026-08-10,目录页收录日期为 2026-08-11,最近一次推送在 2026-08-15。工作区 Cargo.toml 里的版本号是 0.0.1。
它不是嵌在 dsh Web 页面右下角的前端组件,而是一个用 Rust 写的原生桌面程序:透明置顶窗、系统托盘、只读地连本机 dsh。README 写明,这是对 Electron 版 ../dsh-pet/ 的纯 Rust 重写,目标体积小于 10MB(原约 100MB)。二进制名是 dsh-pet。
需要先说清楚安装形态。社区目录给出的命令是:
dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs
仓库根目录没有 package.json,也没有常见的 dsh 插件清单。dshfind 明确写了:这不是可安装的插件包,dsh plugin add 会直接失败。实际用法以 GitHub README 为准:自己用 Cargo 构建,再单独运行桌宠进程。
核心功能¶
仓库 README 和源码可以对上的能力如下。
1、五态鲸鱼。对外宣传的优先级是 offline > attention > working > done > idle。源码里还有启动态 starting。状态机在 dsh-pet-core 里聚合:连不上 dsh 时是离线;有待审批或待回答提问时是 attention;有会话正在跑是 working;刚结束、两分钟内待查看是 done;其余是 idle。气泡文案也是按这个优先级生成的,例如「连不上 DSH」「需要你确认」「正在干活…」「任务完成啦」「休息中」。
2、双通道实时推送加轮询兜底。README 把实时通道称为「双 SSE」,对应端点是 events.mux 和 events.host。events.mux 负责审批、提问、队列;events.host 负责会话 running 翻转。另外每 2 秒调用一次 session.list 做基线,断线后会补一轮轮询。实现上有一处和文案不完全一致:sse.rs 注明类型名 SseConnector 是历史遗留,当前 dsh 事件端点要求 WebSocket 升级,HTTP GET 会返回 426。连接是单向的(只收服务端帧),断开后约 3 秒重连。
3、像素画鲸鱼和状态气泡。默认素材是 80×58 网格的 HD 像素鲸鱼,带喷水水滴、zzz / spark 叠层。气泡是多会话聚合列表,可滚动,有 popIn 动画。渲染走 tiny-skia 合成,再交给 softbuffer 呈现。
4、透明置顶窗和系统托盘。窗口可拖拽、可调大小,位置会写入配置。托盘菜单可以打开 dsh GUI、隐藏或显示气泡、开关提示音、测试音效、放大缩小重置、退出。
5、内嵌设置面板。双击鲸鱼打开,可开关声音、编辑 dsh 地址。地址必须以 http:// 或 https:// 开头;提交后 RPC 和两条事件连接会按新地址重建,不必重启进程。
6、可覆盖素材。可执行文件同目录下建 custom/,用 sprites.json 换像素图,用 attention.m4a / done.m4a(也支持 mp3 / wav / ogg)换提示音。
7、对 dsh 零侵入。它只读 HTTP / 事件流,不往 harness 里注入前端,也不改会话。这和挂在 Web GUI 里的桌宠插件不是同一条路。
安装与构建¶
目录页上的安装命令以页面原文为准:
dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs
如需可复现安装,目录页建议固定 commit 哈希。当前 master 最新提交是 81605ef83947c28799369a4456605c4a17513430(2026-08-15):
dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs#81605ef83947c28799369a4456605c4a17513430
社区插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查源代码仓库和许可证。就这个仓库而言,上面两条命令大概率装不成标准插件;README 也写了:GitHub Actions 因账单额度无法运行,没有预构建产物,请自行构建。
本机需要 Rust 工具链。克隆后:
git clone https://github.com/HuanLinOTO/dsh-plugin-pet-rs.git
cd dsh-plugin-pet-rs
# 开发构建
cargo build
# 发布构建
cargo build --release
# 测试
cargo test --all
仓库是 Cargo workspace,三个 crate 分工明确:
crates/
├── dsh-pet-core/ # 状态机、RPC、事件连接、配置、素材包
├── dsh-pet-ui/ # 窗口、渲染器、输入、emoji 图集
└── dsh-pet-app/ # 主入口、异步任务、音频、托盘、平台适配
典型用法¶
先让 dsh 跑起来。官方仓库给出的一种方式是:
npx @deepseek-ai/dsh web
Web UI 默认在 http://127.0.0.1:3080,和桌宠的默认地址一致。然后在插件仓库里启动:
# 默认连接 http://127.0.0.1:3080
cargo run --release
# 指定 dsh 地址(优先于配置文件)
DSH_PET_URL=http://localhost:3080 cargo run --release
地址优先级是:环境变量 DSH_PET_URL > 配置文件 > 默认值 http://127.0.0.1:3080。运行时在设置面板改过的地址会写进配置,下次启动沿用。
配置文件路径按平台不同:
| 平台 | 路径 |
|---|---|
| Windows | %APPDATA%\dsh\pet\config.json |
| macOS | ~/Library/Application Support/dsh/pet/config.json |
| Linux | ~/.config/dsh/pet/config.json |
字段均可省略。一份完整示例如下:
{
"scale": 0.67,
"bubble_visible": true,
"sound_on": true,
"endpoint": "http://127.0.0.1:3080",
"window_x": 2268,
"window_y": 1084
}
和鲸鱼的交互来自 README,可以直接复现:
| 操作 | 效果 |
|---|---|
| 单击鲸鱼 | 延迟 250ms 后在浏览器打开 dsh GUI |
| 双击鲸鱼 | 打开内嵌设置面板(单击会被取消) |
| 按住拖拽 | 移动窗口,位置自动保存 |
| 滚轮(气泡上) | 滚动会话列表 |
单击延迟是为了区分双击。首次启动窗口会落到屏幕右下角。缩放范围是 50%–110%,默认 67%。
自定义素材放在可执行文件同目录:
custom/
├── sprites.json
├── attention.m4a
└── done.m4a
sprites.json 的格式参考仓库里的 assets/sprites/whale-sprites-hd.json。
另外还有一个截图自检入口,会按 5 个状态 × 3 个时间点输出 PNG,方便做像素回归:
cargo run --release -- --shot .shots
适用场景与注意事项¶
适合已经在本机跑 dsh Web UI、希望离开浏览器也能看见会话状态的人。它跟着审批、提问、running、完成这些事件换姿态,并可以弹气泡、响提示音。不适合指望 dsh plugin add 一键装进当前 profile 的场景——这个仓库目前是独立桌面程序。
平台支持以 README 表格为准:
| 平台 | 状态 | 备注 |
|---|---|---|
| Windows | 完整 | DWM per-pixel alpha 透明窗 |
| macOS | 完整 | NSWindow 透明,并隐藏 Dock |
| Linux (X11) | 完整 | 透明窗、置顶、skip-taskbar |
| Linux (Wayland) | 降级 | 不置顶、不跨全屏;建议用 XWayland |
GNOME 默认没有系统托盘,需要安装 AppIndicator / KStatusNotifierItem 扩展。托盘创建失败时,右键鲸鱼本体仍可打开菜单。
字体方面,程序会探测系统 CJK 字体:Windows 用微软雅黑 / 黑体,macOS 用苹方 / 黑体,Linux 用 Noto Sans CJK SC / 文泉驿微米黑。README 写明 v1 没有内嵌 Noto Sans CJK 子集;系统里没有 CJK 字体时,启动会 panic,并给出安装指引。
许可证不要只看 README 末尾的「MIT」。仓库根目录 LICENSE 文件是 GNU Affero General Public License v3.0,工作区 Cargo.toml 的 license 也是 AGPL-3.0;GitHub 和社区目录目前都显示 NOASSERTION。安装或再分发前,以 LICENSE 文件为准,自行核对。
安全边界可以分两层看。对标准 dsh 插件,目录页的警告仍然成立:插件以当前 dsh 进程权限运行,安装时可能执行代码。对本仓库,进程是单独的原生程序,源码注释写明对 dsh 只读;但它仍会连本机 dsh 的 HTTP / WebSocket 接口,也会读本机配置目录。用之前应自己看源码,不要把社区目录当成官方背书。
工作区 Cargo.toml 里 authors 写的是 DSH Team,repository 指向 https://github.com/dsh-external/dsh-pet-rs。当前对外仓库是 HuanLinOTO/dsh-plugin-pet-rs,社区目录维护者也是 HuanLinOTO。不要把它理解成 DeepSeek 官方桌宠。
GitHub 在 2026-08-17 显示 18 个 star,社区目录页列出的是 12 个,数字会变,不必当作质量指标。
小结¶
dsh-plugin-pet-rs 把 dsh 的会话生命周期搬到桌面上:一只五态鲸鱼、两条事件流加 2 秒轮询、透明置顶窗和托盘。它走的是原生 Rust 客户端,而不是 Web 插件注入。目录页仍提供 dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs,但仓库没有 package.json,实际路径是自行 cargo build --release 后运行,并指向已经启动的 dsh。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-plugin-pet-rs/
GitHub:https://github.com/HuanLinOTO/dsh-plugin-pet-rs