READMESource: main@0564c71a
方糕萌宠 · Fanggao Pet
一只会跟着 DeepSeek Harness 对话状态变化的方糕萌宠:对话进行时奔跑、完成时躺下睡觉、出错时生气。可鼠标拖拽移动、旋转角度,位置与角度自动记忆。

特性
- 三态动画:由当前会话的
SessionSnapshot实时驱动状态 触发条件 形象 🏃 奔跑 running === true身体前倾、双臂弯曲摆动、双腿大步幅交替、速度线 + 扬尘 😴 睡觉 空闲 / 无报错 横躺、闭眼、头顶飘 Z z z😡 生气 lastAgentError/promptError/openError存在,或openState === 'error'竖眉、撇嘴、红脸、额头青筋脉冲 - 悬浮常驻:渲染在
shell.overlay帧级浮层,始终位于最上层,不占布局。 - 鼠标拖拽 / 旋转:左键拖动移动位置;右键或 Shift+拖动旋转角度。位置与角度都存入
localStorage,刷新后保留。 - 永不遮断操作:浮层本身 click-through,只有方糕本体响应指针事件。
- 纯 SVG + CSS 动画:矢量、任意分辨率清晰、体积小、跟随时序流畅。
安装
本插件是 DeepSeek Harness 的本地 bundle(@local/fanggao-pet):
- 克隆仓库到本地:
git clone https://github.com/gavinff1990/fanggao-pet.git - 在 Harness 中通过插件管理器安装该目录(绝对路径):
- 动作:
install_bundle - 目标:
<克隆目录的绝对路径>
- 动作:
- 插件会立即激活并出现在页面右下角(默认位置)。
安装/卸载时插件管理器会重新链接该 bundle;修改
client.js后重新安装即可热加载。
更新
改完代码后,一条命令完成校验 + 刷新本地链接:
./scripts/update.sh # 校验 + 提示重装
./scripts/update.sh --push # 额外提交并推送到 GitHub
脚本会提示你在 设置 → 插件 → 方糕萌宠 → 重新安装,然后 Cmd + R 刷新页面。
工作原理
- Host 半(
index.js)无需逻辑,只负责注册 bundle。 - Client 半(
client.js):- 注入
slots+sessions服务。 - 订阅
sessions.list找到当前主视图会话(retainedBy.mainView > 0)。 - 订阅该会话的
SessionFace(sessions.binding(id).session)读取SessionSnapshot,据此选出三种形态。 - 通过
ctx.slots.inject('shell.overlay', …)注册悬浮层条目,并用指针事件实现拖拽。
- 注入
文件结构
fanggao-pet/
├── package.json # bundle 清单(dsh.bundle.patch + dsh.client)
├── cordis.patch.yml # 插入 fanggao-pet 插件行
├── index.js # Host 半(空 apply)
├── client.js # Client 半:SVG 萌宠 + 状态 + 拖拽/旋转
├── icon.svg # 插件管理器中显示的图标
├── locale/{en,zh}.json # 插件标题/描述
├── scripts/ # validate.mjs(校验)、update.sh(一键更新)
└── docs/ # 形态预览与跑步循环图
自定义
- 颜色/造型:
client.js顶部的COLORS常量与runningPose/sleepingPose/angryPose三个函数。 - 拖拽记忆:
STORE_KEY(默认fanggao-pet.position)。 - 默认位置:
defaultPos()(默认右下角)。
FAQ / 排错
- 页面看不到方糕? 确认插件已启用,且当前在主界面;它是
shell.overlay条目,打开任意会话即可看到。 - 拖动没反应? 指针要落在方糕本体上;它只占约 88×88 的区域,其余浮层区域是 click-through。
- 怎么旋转? 右键按住拖动,或按住 Shift 再用左键拖动;松手后角度会记住,三种状态下通用。
- 状态不切换? 需要一个打开的会话;没有会话时默认显示睡觉。
- 想重置位置/角度? 清除
localStorage键fanggao-pet.position与fanggao-pet.rotation后刷新。
许可
MIT,见 LICENSE。
No comments yet. Be the first to write one.