DeepSeek Harness (DSH) 的插件生态支持开发者通过插件扩展 Web 界面的功能。在 Web 界面操作智能体时,代理的内部状态(如思考、搜索、运行命令)往往难以直观感知。dsh-pet-in-frame 是一个插件,它将一个桌面宠物悬浮在 Web GUI 的角落,并跟随智能体的状态切换姿态。
这是一个单包插件,由 HarmlessFunny 维护。它将代理的生命周期状态映射为可视化的动画或静态图片,解决了 Web 界面反馈抽象、难以实时监控工具调用进度的问题。
核心功能¶
该插件通过监听代理的生命周期事件来控制宠物姿态。
- 状态响应:宠物会根据智能体当前的动作切换姿态,包括
think(思考)、search(搜索)、learn(学习)、read(阅读)、bash(命令行)、edit(编辑)、plan(规划)、ask(提问)、subagent(子代理)、cordis(服务调用)、permission(权限)、error(错误)、idle(空闲)和sleep(睡眠)。 - 子代理隔离与指示器:只有主代理的活动会驱动宠物的姿态。当子代理运行时,宠物图像内部会显示一个徽章指示器。来自子代理的工具调用或错误事件不会影响主代理的状态。
- 命令徽章:当主代理运行前台
bash或pwsh工具时,宠物切换至命令姿态,并在图像内固定显示对应的徽章(如bash_comp或pwsh_comp)。 - 后台作业跟踪:支持对后台运行的
bash或pwsh命令进行作业跟踪。命令成功、失败或退出时,宠物会根据状态更新显示。 - 交互与性能:客户端每 250 毫秒轮询一次状态,姿态切换延迟约 0.25 秒。支持拖拽(带视口限制)、悬停缩放(100-320px)、点击查看气泡、隐藏和恢复。支持热重载,修改图片或
manifest.json后约 3-4 秒内生效。 - 无构建步骤:基于纯 JavaScript 实现,无需额外构建配置。
安装与启用¶
安装前需确保已运行 dsh web profile,且系统中有 pnpm。
安装命令:
dsh plugin --profile web add dsh-pet-in-frame
安装完成后,必须重启 dsh web 进程,新的插件条目才会加载。插件的 cordis.patch.yml 会自动插入加载行,无需手动编辑 cordis.yml。
配置与使用¶
资源目录配置¶
图片资源默认位于插件包的 assets/ 目录。也可通过环境变量 DSH_PET_ASSETS 或加载器的 config.assetsDir 指定其他路径。
约定模式(零配置)¶
将图片文件放置在 assets/ 目录下,文件名需与动作名一致(扩展名支持 png/jpg/jpeg/gif/webp/svg)。
assets/
├── default.png # 空闲时的默认姿态
├── think.png # 思考状态
├── search.png # 搜索或阅读状态
├── bash.png # 命令执行状态(可选)
Manifest 配置(显式控制)¶
若需更精细的控制或帧动画,可创建 manifest.json:
{
"default": "default.png",
"think": { "imgs": ["think1.png", "think2.png"], "delay": 1000 },
"sleep": { "imgs": ["sleep1.png", "sleep2.png"], "delay": 500 },
"bash": "bash.png"
}
注意事项¶
- 后台作业跟踪:若要支持后台命令的作业跟踪,需要加载器实现
ctx.jobs.onJobDone接口。 - 权限:插件以当前
dsh进程的权限运行,使用前请检查源码与许可证(MIT)。 - 子代理行为:Shell 调用若发生在子代理内部,不会触发命令徽章;只有主代理的工具调用才会驱动宠物姿态。
总结¶
dsh-pet-in-frame 通过简单的静态图片或帧动画,为 DSH 的 Web 界面提供了直观的代理状态反馈。它通过约定优于配置的方式降低了使用门槛,同时支持热重载和丰富的交互,适合需要在开发过程中实时监控智能体行为的场景。