前言¶
DeepSeek Harness(DSH)采用「一切皆插件」的理念,开发者可以通过插件扩展宿主能力。在开发或使用智能体时,长时间面对界面容易产生疲劳,需要一个实时反馈会话状态的陪伴对象。现有的会话状态往往只体现在输入框或工具调用提示中,缺乏持续的情感连接。dsh-plugin-pet 插件将电子宠物引入 DSH 桌面端,让 AI 智能体在思考、调用工具、报错、完成等状态时产生具体行为,同时提供一个独立的宠物管理页面与本地养成系统。
插件定位¶
dsh-plugin-pet 是运行在 DeepSeek Harness 0.2.1+(Web 与桌面端)的桌面电子宠物插件,由维护者 c-ling 开发。它通过实时会话状态驱动宠物心情动画,提供内置形象、自定义图片与 Codex 风格多帧精灵图,并内置本地陪伴养成系统。插件采用 bundle 安装方式,自动插入 loader 行,无需额外配置。
核心功能¶
实时心情浮层¶
宠物常驻页面右下角,通过 ctx.connection.fetch 注册的认证路由获取会话状态。宠物会根据以下状态改变表情与动作:
- 空闲:正常状态
- 思考:思考状态
- 工作中:气泡显示当前工具
- 报错:难过表情
- 等待你操作:等待状态
- 一轮完成:庆祝动作
- 长时间空闲:打瞌睡
- 连续工作:提醒喝水 / 休息 / 护眼
浮层支持拖动到任意位置(位置按浏览器记忆),拖动时朝移动方向播放奔跑动画。单击抚摸(增加经验与亲密度),双击隐藏(右下角保留爪印按钮可重新唤出)。支持 Tab 聚焦后 Enter / 空格抚摸。
独立宠物页面¶
设置不再是嵌入式面板,而是一个独立页面(main 插槽),从左下角头像菜单 → 宠物进入。页面包含固定页头、三页签(概览 / 外观 / 成长)、单一滚动区与固定页脚。切换页签不会跳页头,切页签会重置滚动位置,重新进入页面会回到「概览」并刷新配置。
页签内容¶
| 页签 | 内容 | 保存 |
|---|---|---|
| 概览 | 当前形象与心情、等级 / 亲密度、名字 / 大小 / 显示开关、快速喂食 / 玩耍 / 抚摸 | 页签行内「保存」,只提交本页字段 |
| 外观 | 内置形象、自定义图片、Codex / 通用精灵图、心情预览 | 页签行内「保存」,只提交外观 |
| 成长 | 陪伴时长、互动次数、今日在线 / 任务、心情分布、成就 | 只读,无保存动作(页签行高度保持不变) |
内置形象¶
插件提供 14 个内置形象(blob / cat / duck / robot / axolotl / ghost / panda / shiba / fox / bunny / penguin / frog / owl / slime),均为内联 SVG,纯 CSS 动画。每只都会眨眼,并随心情切换眼睛与嘴形。
自定义图片¶
支持 PNG / JPEG / GIF / WebP 格式,动图原样播放。上传后可在外观页签选择使用。
Codex 多帧精灵图¶
支持 Codex 风格精灵图,使用 pet.json + spritesheet.webp(V1 1536×1872、V2 1536×2288)或通用网格(列数 / 行数 / fps / 状态行 / 每行帧数)。
Codex 行 → DSH 心情映射:
- idle → 0
- run_right → 1
- run_left → 2
- pet → 3(waving)
- happy → 4(jumping)
- sad → 5(failed)
- waiting → 6
- working → 7(running)
- thinking → 8(review)
- sleeping → 0(复用 idle)
V1 九行动作全部启用;仅 V2 的朝向行(9/10)未使用。
本地养成系统¶
养成数据保存在本地状态目录,包括亲密度、等级、经验、心情分布、成就、每日在线与任务统计。所有写操作原子化并保留 .bak 备份。
数据与存储¶
状态目录:$DSH_HOME/storages/dsh-plugin-pet/(可用 config.directory 覆盖)。
| 文件 | 内容 |
|---|---|
config.json |
{ version: 1, revision, config: { name, size, visible, sprite } };目录 0700、文件 0600 |
config.json.bak |
每次成功写入的同步备份 |
stats.json / stats.json.bak |
陪伴成长统计;主文件损坏时从 .bak 恢复 |
image.<ext> / sheet.<ext> |
上传的图片 / 精灵图原始字节 |
HTTP 接口(认证 /api 桥)¶
插件通过零依赖 Fetch 适配层提供以下接口(需认证):
| 方法 | 路径 | 用途 |
|---|---|---|
| GET | /api/dsh-plugin-pet/config |
当前配置 + revision |
| POST | /api/dsh-plugin-pet/config |
局部更新名字 / 大小 / 可见性 / 内置形象 / 精灵图 fps、状态行、帧数;支持 expectedRevision |
| GET/POST/DELETE | /api/dsh-plugin-pet/image |
读取 / 上传原始字节 / 删除自定义图片 |
| GET/POST/DELETE | /api/dsh-plugin-pet/sheet |
读取 / 上传 / 删除精灵图 |
| POST | /api/dsh-plugin-pet/petjson |
导入 Codex pet.json(要求已有尺寸匹配的精灵图) |
| GET | /api/dsh-plugin-pet/stats |
陪伴成长统计 |
| POST | /api/dsh-plugin-pet/stats/heartbeat |
页面在线心跳(陪伴时长、在线时长、心情采样) |
| POST | /api/dsh-plugin-pet/stats/interaction |
喂食 / 玩耍 / 抚摸,返回经验与亲密度增益 |
| POST | /api/dsh-plugin-pet/stats/task |
完成任务成长 |
| POST | /api/dsh-plugin-pet/stats/event |
客户端检测到的成就事件(连续工作 / 修复错误) |
错误响应带稳定机器码({ ok: false, code, error, params? },如 bad_json / too_large / codex_size / grid_uneven / stale-config)。成长类响应额外携带 unlockedKeys 与 levelUp;interaction 超出冷却或每日上限时返回 throttled: true 且不加值。
安装与启用¶
推荐使用 bundle 安装方式(dsh.bundle + cordis.patch.yml 会插入 loader 行):
# Web(推荐 bundle 模式;自动插入 loader 行)
npx @deepseek-ai/dsh plugin --profile web add "github:c-ling/dsh-plugin-pet#v2.0.0"
dsh plugin --profile web add "github:c-ling/dsh-plugin-pet#v2.0.0"
# 桌面端(由 Desktop 自带的 CLI 或「插件」页面管理)
dsh plugin --profile desktop add "github:c-ling/dsh-plugin-pet#v2.0.0"
安装后需要重启宿主进程生效:Web 重启 dsh web,桌面端退出并重新打开应用;仅刷新页面不足以加载新包。
也可手动作为普通依赖安装,然后自行在 profile 的 cordis.patch.yml 中添加同一行(不要同时使用 bundle 与手写行):
cd ~/.dsh/profiles/web
corepack pnpm add "github:c-ling/dsh-plugin-pet#v2.0.0"
- insert:
- id: dsh-plugin-pet
name: 'dsh-plugin-pet'
config:
maxImageBytes: 5242880 # 可选:单张图片上限(默认 5 MB)
maxSheetBytes: 10485760 # 可选:精灵图上限(默认 10 MB)
interactionCooldownMs: 1500 # 可选:互动冷却毫秒(默认 1500,0 关闭)
maxDailyInteractions: 500 # 可选:每日互动计次上限(默认 500)
directory: "" # 可选:自定义状态目录(默认 storages/dsh-plugin-pet)
典型用法¶
打开宠物页面¶
- 点击左下角头像 → 菜单中的 宠物(位于「设置」下方)。
- 页面包含三个页签:概览、外观、成长。
- 在「概览」页签可以快速喂食 / 玩耍 / 抚摸宠物,这些操作会通过
POST /api/dsh-plugin-pet/stats/interaction提交。 - 在「外观」页签可以切换内置形象、上传自定义图片或导入 Codex 精灵图。
- 在「成长」页签可以查看陪伴时长、互动次数、今日在线 / 任务、心情分布、成就。
导入 Codex 宠物包¶
- 宠物页面 → 外观 → 精灵图 → 导入 Codex 宠物包。
- 先上传
spritesheet.webp/spritesheet.png:必须是 1536×1872(V1,9 行) 或 1536×2288(V2,11 行),8 列网格、每格 192×208;版本自动检测。 - 可选导入
pet.json,应用displayName并校验spriteVersionNumber与已上传精灵图一致。
通用精灵图¶
- 宠物页面 → 外观 → 精灵图 → 通用精灵图。
- 上传任意宽高能被网格整除的 PNG / WebP。
- 设置列数、行数、fps。
- 页面内提供实时预览,上传后为每个心情分配行号与帧数。
适用场景与注意¶
本插件适合需要在 DSH 桌面端有一个实时反馈会话状态的陪伴对象,用于改善长时间使用智能体的体验。
注意事项¶
- 目标运行时:DeepSeek Harness 0.2.1+(
engines.dsh: >=0.2.1-rc.2 <0.3.0-0),桌面端与 Web profile 同一套代码。 - 1.x(DSH 1.0.7)的
settingsScope/currentProvideInfo/webServer裸路由已全部移除;旧的扁平config.json会在首次读取时自动迁移。 - 每页只有一个全局宠物(根作用域浮层),不按会话区分。
- 宠物位置按浏览器
localStorage保存,不跨设备同步。 - 头像菜单入口依赖对 shell 弹窗 DOM 的防御式增强;若官方后续提供菜单插槽会改为官方注册。
- 未实现 Codex「尾部空帧」自动检测;帧数来自规格默认值或显式配置。
插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
短结尾¶
dsh-plugin-pet 通过实时会话状态驱动宠物行为,为 DSH 开发者与用户提供了一个兼具实用性与趣味性的陪伴对象。其独立页面设计、本地养成系统与 Codex 精灵图支持,使其在保持轻量的同时具备较高的可扩展性。
- 插件目录页:https://www.skillhub.cn/plugins/c-ling/dsh-plugin-pet
- GitHub 仓库:https://github.com/c-ling/dsh-plugin-pet