为 DSH Web 界面加入 1~4 只像素小猫皮肤,原始 UI 不变,可拖拽、可换装、会互动。
- 语言
- TypeScript
- License
- MIT
- 分支
- main
安装
$ dsh plugin --profile web add --allow-build=dskin github:dancingmemory/dskin在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
对话式安装
帮我安装 DeepSeek Harness 插件 dancingmemory/dskin:先查看仓库 https://github.com/dancingmemory/dskin 确认安全性,然后执行安装命令并验证插件加载成功。
把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。
一句话定位
为 DeepSeek Harness (DSH) Web 界面叠加一层卡通像素小猫皮肤,原始界面零改动,小猫在屏幕底部散步、相遇玩耍、可拖拽甚至挂顶。
核心能力
- 在屏幕底边随机生成 1~4 只像素小猫(大橘 / 小白 / 玄猫 / 花猫),数量可调、单只品种可换
- 小猫之间会互动:相遇停下面对面蹦跳,然后各自散开;点击单只可让它跳起来
- 鼠标可以拖拽小猫到任意位置;拖到屏幕顶边小猫会倒挂着不掉下来,再拉下来才落地
- 鼠标悬停小猫会冒出爱心 ♥;选中小猫头顶出现 ★,10 秒后自动取消选中
- 右下角 🐾 按钮打开面板,可加减数量、随机全员换装、切换静音;偶尔有小猫冒出随机语录(来自 1000+ 条中文箴言)
- 内置升级检查:每 6 小时后台读一次 GitHub releases,发现新版本在面板里提示一键打开升级页
技术实现
- 语言: TypeScript
- 关键依赖: @deepseek-ai/cordis(peer 类型)、CSS Modules(样式作用域)、Web Audio API(喵叫合成)
- 架构模式: 遵循 dsh.client 客户端插件契约,导出
apply(ctx),所有 DOM 写入通过ctx.effectdisposer 在卸载时收回;cordis.patch.yml 向 web 图谱插入 ui-skin-dskin 行 - 入口文件: src/index.ts(host 端空实现)+ src/client/index.ts(浏览器主逻辑
apply(ctx))
适用场景
想让长时间打开的 DSH Web 页面多一些陪伴感的用户;不想动界面布局、只想加一点"养眼"小细节的人。不适合追求严肃生产效率或希望 DSH 跑得更轻量的用户——多几只小猫会持续占用 requestAnimationFrame。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 未声明 | 走 dsh.client 契约,未在 package.json 写 dsh 版本约束 |
| Node | 未声明 | 未声明 engines,按 DSH CLI 当前要求 |
| 平台 | 跨平台 | 仅在 DSH Web 浏览器端运行;所有能力基于浏览器 DOM / Web Audio |
| 原生模块 | 无 | 无 node-gyp 依赖,无系统级编译 |
安装方式
dsh plugin --profile web add --allow-build=dskin github:dancingmemory/dskin
配置项
本插件无需额外配置。所有用户偏好(猫数量、每只品种、是否静音、首选猫种)都自动写入浏览器 localStorage,由插件内部管理:
- 数量与品种:键
dskin-cats,保存{ count, types[] } - 首选猫种:键
dskin-kitten,保存当前选中的猫种 id - 静音开关:键
dskin-sound,"1"= 开,"0"= 关
常见问题
Q: 安装后页面没有任何变化?
A: 插件是按 dsh.client 契约加载的,必须安装到 web profile 下并重启 dsh web 才会注入;如果用的是 pnpm ≥ 10 且首次安装失败,把 allowBuilds: dskin: true 加到 ~/.dsh/profiles/web/pnpm-workspace.yaml 后重跑安装命令。
Q: 小猫会不会挡住界面操作?
A: 不会。CSS 显式把活动区限定在屏幕底部(bottom: 4px、高度 160 px 的 home zone),所有小猫 z-index 固定在最高层但体积小、不吃事件,点击穿透交给原 UI。
Q: 卸载后能恢复原样吗?
A: 可以。dsh plugin --profile web remove dskin 后重启 dsh web,ctx.effect 的 disposer 会把 body 上的 data-dsh-dskin 属性、所有 DOM 节点和 CSS Modules 样式全部收回。
Q: 这会影响 DSH 跟大模型的对话吗?
A: 不会。插件不注入 cordis 服务、不发送 cordis 事件、不读取或转发聊天内容;唯一的对外网络请求是每 6 小时读一次 api.github.com/repos/dancingmemory/dskin/releases/latest 检查新版本,失败时回退到 raw package.json。
Q: 喵叫声很烦人怎么关?
A: 点右下角 🐾 按钮打开面板,点 🔊 猫叫 切换成 🔇 静音,状态会写入 dskin-sound 永久生效。声音用 Web Audio 实时合成,无音频文件、无网络流量。
Q: 能不能增加更多品种的小猫?
A: 目前版本(1.0.17)内置 4 种小猫;想增加需要在源码 src/client/mascots.ts 增加帧数据和 KITTENS 数组,然后重新构建。
Q: 小猫卡住不动怎么办?
A: 代码里有 stuck watchdog(4 秒无位移自动回到底边修复),平时不会出现真卡死;如果浏览器标签进入后台或节能模式,requestAnimationFrame 被节流,回来后小猫会自然恢复。
上手难度
入门 — 安装一条命令即可,零配置项,所有交互通过右下角 🐾 面板完成,普通用户可直接使用。
已知问题与限制
- pnpm ≥ 10 首次安装 git 依赖可能拒绝执行构建脚本,需要手动把
allowBuilds: dskin: true写入 profile 的pnpm-workspace.yaml(README.md:103-104) - 拖拽小猫到屏幕极顶部会进入倒挂"hang"状态;源码注释(src/client/index.ts:586-600)特别处理了松手位置过低的回退,但仍存在用户误以为小猫"卡住"的体验边界
- 挂顶小猫偶尔需要向下拖 40 px 以上才能解锁(
UNHANG_DRAG = 40,src/client/index.ts:121) - 浏览器必须支持 Web Audio API 才能发声;不支持或被静音时喵叫自动退化为无操作
- 升级提示依赖 GitHub API 可达;网络受限或 GitHub 限流时检查静默失败,不影响主体功能
- localStorage 被禁用(隐私模式 / 企业策略)时,猫数量和品种选择不会跨会话保存,但当前会话内功能正常
🐱 DSKIN · 像素小猫派对
DeepSeek Harness(DSH)专用卡通像素皮肤插件
A cartoon pixel kitten plugin made exclusively for the DeepSeek Harness (DSH) Web GUI
界面零改动,只养猫。 DSKIN 不加外框、不改背景、不动布局——页面底边住着 1~4 只像素小猫(数量可调、品种可换),它们散步、玩耍、可以被你抓住拖来拖去。
纯皮肤插件:不注入服务、不发事件、不触碰模型请求。遵循官方
dsh.client客户端插件契约,可热插拔、可卸载,卸载后完整还原。
✨ 特性 / Features
| 🐱 1~4 随机小猫 | 每次刷新随机出现 1~4 只(大橘 / 小白 / 玄猫 / 花猫),可手动加减 |
| 🤝 猫咪互动 | 相遇会面对面玩耍、蹦跳,然后各自散开;点击一只,它跳起来 |
| 🎨 每只独立换装 | 面板里点一只小猫(选中),再点品种,只改那一只 |
| 🖐️ 可拖拽 + 挂顶 | 抓住小猫到处拖;拖到屏幕顶边会倒挂住不落,再抓住拉下来即可 |
| 💕 摸猫冒爱心 | 鼠标停在猫身上,它会开心蹦跶并冒出 ♥ |
| 🐾 爪爪面板 | 右下角 🐾:− N + 加减小猫数量,品种按钮给选中的小猫换装,全部记住 |
| 📏 不挡视线 | 活动区限定在屏幕底部,无外框无背景,界面完全原生 |
🐱 四只小猫 · 特写 / Kitten Close-ups
四只可切换的像素小猫(DSKIN 在 DSH Web 中实装):
| 🐱 大橘 | 🐱 小白 |
|---|---|
![]() | ![]() |
| 🐱 玄猫 | 🐱 花猫 |
|---|---|
![]() | ![]() |
🎮 玩法 / Play
- 看它们玩:小猫在屏幕底部散步、眨眼、到边转身;两只靠近时会停下来面对面蹦跳,然后散开。
- 拖拽:按住小猫拖到任意位置——它会在半空挣扎(摇摆 + "!" 气泡);拖到屏幕顶边会倒挂住,松手也不会掉下来,抓住拉下来才回地面。
- 摸:鼠标悬停在猫身上,它开心蹦跶并冒爱心 ♥。
- 点击:猫跳一下。
- 切换品种:右下角 🐾 面板——先点一只小猫选中,再点品种按钮只给那只换装;
− +可以加减小猫数量。
🤖 一键安装(丢给 AI)/ One-Click Install (hand to your AI)
复制下面这句话,发给你的 AI 助手(例如 opencode / Claude / 或 DSH 自带的智能体):
请给我的 DSH 安装 https://github.com/dancingmemory/dskin 插件,并在插件工具中显示。
AI 应该按以下步骤执行:
# 1. 安装插件(写入 web profile)
dsh plugin --profile web add github:dancingmemory/dskin
# 2. 若 pnpm ≥ 10 提示构建脚本被阻止,把下面内容追加到
# ~/.dsh/profiles/web/pnpm-workspace.yaml 后重跑第 1 步
# allowBuilds:
# dskin: true
# 3. 重启 web 服务,插件进入加载图谱
dsh web
# 4. 验证:设置 → 插件 中应看到 dskin(ui-skin-dskin),
# 页面右下角出现 🐾 爪爪按钮,屏幕底边有小猫散步
📦 安装 / Install
要求:DeepSeek Harness dsh CLI(或 npx @deepseek-ai/dsh)。
# GitHub 安装(推荐)
dsh plugin --profile web add github:dancingmemory/dskin
# 源码安装
git clone https://github.com/dancingmemory/dskin.git
cd dskin && pnpm install
dsh plugin --profile web add .
pnpm ≥ 10 首次安装 git 依赖可能拒绝执行构建脚本,dsh 会提示你把
allowBuilds: dskin: true写进 profile 的pnpm-workspace.yaml,重跑即可。
🚀 使用 / Usage
dsh web # 安装后重启,让新插件行进入加载图谱
打开 http://127.0.0.1:3080,小猫已经在你屏幕底边等你了。
还原:dsh plugin --profile web remove dskin 再重启。
🔒 安全边界 / Privacy & Scope
DSKIN 只在你自己的 DSH Web 应用页面内运行(默认 http://127.0.0.1:3080):
- 不是浏览器扩展:不会在其他网站运行,不修改任何网页、主页、搜索引擎或浏览器设置
- 不收集数据:无统计、无追踪、无第三方脚本;只读/写 DSH 页面自己的 localStorage(猫咪配置)
- 唯一的联网请求:每 6 小时一次只读检查 GitHub 是否有新版本;升级按钮仅在点击后才打开 GitHub
- 卸载即还原:
dsh plugin --profile web remove dskin+ 重启,页面完整还原
🔍 发现 / Discoverability
本仓库已打上官方 dsh-plugin 主题标签,可在
github.com/topics/dsh-plugin 下被索引到,
另带 dsh / deepseek-harness / pixel-art 等标签。
⭐ Star 趋势 / Star History
图表由 GitHub Actions 每日自动重绘并提交到本仓库(脚本
scripts/gen-star-chart.py), 随 ⭐ 增长实时更新。 The chart is regenerated daily by GitHub Actions (scripts/gen-star-chart.py) and auto-committed, so it tracks the ⭐ count automatically.
喜欢 DSKIN?点个 ⭐ 支持一下。 Like DSKIN? Hit ⭐ and help the curve grow.
🛠️ 开发 / Development
pnpm install # 安装依赖 + prepare 自动构建
pnpm build # tsdown: lib/index.js (host) + lib/client.js (browser bundle)
pnpm test # vitest: apply/dispose/拖拽 契约测试
├── package.json # dsh.bundle 补丁 + dsh.client 清单(官方插件契约)
├── cordis.patch.yml # 向 web 图谱插入 ui-skin-dskin 行
├── skin.json # 皮肤元数据
├── tsdown.shared.ts # 官方 clientBundle 构建预设的独立移植(自包含)
├── web-platform.ts # 官方平台模块表(bundle external 判定)
├── src/client/
│ ├── index.ts # apply(ctx) + 小猫状态机(idle/walk/互动/拖拽/回巢)
│ ├── mascots.ts # 4 只小猫 × 4 帧像素 SVG(scripts/gen-mascots.mjs 生成)
│ └── dskin.module.css # 样式,全部作用域于 body[data-dsh-dskin]
├── tests/apply.spec.ts # 契约测试
├── assets/ # banner / logo / 实拍截图
└── scripts/ # 猫帧 / 预览图 / 宣传图生成器
皮肤契约(官方标准):纯呈现层;样式全部挂在 body[data-dsh-dskin];
apply(ctx) 写什么就在 ctx.effect disposer 里收回什么;CSS Modules 由加载器
注入/移除;不携带静态资源(小猫为内联 SVG)。
📄 许可 / License
MIT License。Logo 与小猫像素画为原创;参考了 DeepSeek 鲸鱼吉祥物形象。
查看使用指南 →
该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。
收录徽章
[](https://deepseek-plugin.org/plugins/dancingmemory/dskin)把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。



