Raven 桌宠 · DSH Web 插件
把 Raven 桌宠作为页面内悬浮层显示在 DeepSeek Harness 的 Web 界面里。不包含 Tauri/exe,也不改动 DSH 本体;动作素材随插件分发。
安装
插件市场收录后可直接一键安装;也可以使用 GitHub Release 中的预构建包:
https://github.com/shixiaoyu-funny/DSH-DesktopPet/releases/latest
本地开发时:
plugin_manager install_bundle → 目标:本目录
安装后刷新页面,桌宠出现在右下角。
使用
- 拖拽:按住角色拖动(页面内边界限制)。
- 点击互动:点角色头部 → 撩头发;点腹部 → 捂嘴笑;正坐时点腿部 → 慌张(按当前姿态选版本,播放一次后回待机),每次随机弹出一句对应气泡。
- 右键菜单:顶部剩余余额;大小分段(小 / 中 / 大);姿态分段(站 / 坐);换一个动作;开发者模式;重置位置。
- 气泡:随 Agent 活动显示「工作中 / 查资料 / 搞定 / 出错了」。
- 大小/位置等设置保存在浏览器
localStorage,刷新后保留;随机切换固定开启。
剩余余额
右键菜单底部显示当前 DeepSeek 账户的 CNY 余额,每 60 秒刷新,打开菜单时也会立即刷新:
- > 20 元:绿色;
- 8 ~ 20 元:黄色;
- < 8 元:红色;
- 未登录或账户服务不可用时显示「未登录 / 不可用」。
余额由宿主半区通过 deepseekAccount.getBalance() 读取,不经过浏览器凭据。菜单底部的「AI 活动流 · 已连接 / 未连接」只表示桌宠与宿主活动推送(SSE)的连接状态,与余额无关;余额走独立 HTTP 查询,即使活动流断开也能显示。
动作比例(定稿值)
动作的 scale 与坐姿 offset 来自 assets/manifest.json,以 1024 基准画布 为准:
scale是「相对 1024 容器满铺的比例」,1 = 铺满;offset是 1024 画布内的 CSS 垂直偏移,只有坐姿/慌张有(12.8),站姿/过渡为 0。
客户端为每一层 <video> 单独应用 width = 1024 × scale、translate(-50%, calc(-50% + offset)),再把整个 1024 画布缩放到页面档位(512 / 384 / 288 CSS px)。这样切换动作时角色大小、坐姿接地位置与桌面版一致,不会忽大忽小。
groundRatio/charHeightRatio/ 桌面三档 768/512/384 是桌面窗口物理坐标体系,网页端不需要窗口吸附,因此只沿用动作的比例关系。
开发者模式
右键桌宠 →「开发者模式」打开面板:
- 列出全部动作(站姿 / 坐姿 / 过渡 / 慌张);点选即循环预览,手机、书籍、工作、搜索这些平时触发不到的动作也能直接看;
- 「缩放」「偏移」滑杆实时应用到当前预览动作,数值存在
localStorage的role2pet.dev.v1,刷新后保留; - 「复位」恢复该动作在
manifest.json里的原值;「复制覆盖值」得到当前所有覆盖的 JSON; - 开发者模式打开期间会暂停空闲随机和 AI 抢动作,关闭后回到待机。
调好后把覆盖值 JSON 回填到 assets/manifest.json(或发给我),就会成为所有页面/设备共用的定稿值。
空闲与点击
- 空闲只使用三个基础待机:
stand_idle(站姿)、sit_idle(正坐)、sit_lean(侧坐单手撑),每 60 秒随机切换,跨姿态时播放过渡动画; - 其他动作(鲜花 / 手机 / 书籍 / 擦汗 / 撩头发 / 生气 / 捂嘴笑,含侧坐四套)不参与空闲随机,只在 AI 映射或点击互动时出现;
- 点击头部 / 腹部,以及「搞定 / 出错」,都会按当前姿态选择对应版本:站姿用
stand_*、正坐用sit_*、侧坐用sit_side_*; - 正坐姿态下点击腿部会播放一次慌张(
sit_panic),结束后回到正坐待机;其他姿态点腿部不触发; - 头部 / 腹部 / 腿部各有一组 8 条随机短句(舒服 / 想笑 / 害羞讨厌),交互时弹出约 4.5 秒;
- 侧坐四套按
scale = 1、offset = 0展示;侧坐「擦汗」目前只在开发者模式里可预览,尚未绑定自动触发场景。
AI 联动
宿主半区监听 session/event 与 agent/assistant-stream,但只处理当前主视图会话:页面从会话目录的 retainedBy.mainView 标记取出当前会话 id,切换时上报给宿主;其他工作区/会话的 AI 活动不会驱动桌宠。
| 状态 | 触发 | 动作 |
|---|---|---|
| 工作中 | 当前会话回合开始、思考、普通工具调用 | stand_phone(玩手机) |
| 查资料 | 当前会话的 web_search / web_fetch 等搜索类工具 |
stand_book(看书) |
| 搞定 | 当前会话回合正常结束 | 站姿 → 随机正坐 / 侧坐过渡 → 对应坐姿撩头发一次 → 对应坐姿待机 |
| 出错 | 当前会话失败 / 异常结束 | 生气(按当前姿态选站 / 正坐 / 侧坐版本,播放一次后回待机) |
| 待机 | 其他时间 | 三个基础待机(站 / 正坐 / 侧坐)每 60 秒随机切换 |
- 回合正常结束:先回到站姿,然后随机正坐或侧坐,播放站→坐过渡、对应坐姿撩头发一次,最后停在对应坐姿待机;
- 失败:显示「出错了…」并回待机;
- 随机切换固定开启,只在空闲时生效:AI 正在响应(working)或开发者面板打开时会自动暂停,不会把工作动作切走;
- 桌宠始终响应当前会话的 AI 活动,没有单独的开关。
结构
| 文件 | 作用 |
|---|---|
index.js |
宿主半区:/role2-pet/assets/* 视频路由(Range/206)、会话活动投影、SSE 推送 |
client.js |
客户端半区:shell.overlay 悬浮桌宠、动作状态机、比例/偏移、拖拽/菜单/气泡 |
cordis.patch.yml |
插入插件行 |
assets/ |
动作视频、manifest.json 与市场图标(随包分发) |
locale/ |
插件列表里的标题/描述 |
icon.svg |
插件图标 |
素材
assets/ 随 npm 包与 GitHub 仓库一起分发,宿主半区直接从包内读取;不需要再与桌面版的 src/assets 同步。
说明
- 视频路由仅允许本机回环访问。
- 客户端声明为
immediately: false:即使客户端模块出错,也只影响桌宠本身,不会阻塞 DSH 的 Web boot。 - 更换动作素材后,更新
assets/manifest.json的scale/offset即可,无需改客户端代码。
No comments yet. Be the first to write one.