在 DSH Web 界面右下角养一只鲸鱼娘养成系宠物:模型会话活动驱动动画切换,摸头喂食攒亲密度升级,自带命名、拖动、隐藏与召唤。
- 语言
- TypeScript
- License
- Apache-2.0
- 分支
- main
安装
$ dsh plugin --profile web add github:CAPTAIN1275/dsh-ui-web/packages/dsh-pet在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
一句话定位
在 DeepSeek Harness Web 界面的右下角养一只鲸鱼娘养成系宠物:模型在思考、等待、调工具、完成时她会自动切换动画,你可以摸头、喂食、改名、拖动她,亲密度会从幼鲸一路涨到「深海羁绊」。
核心能力
- 跟随模型会话状态切换动画:思考 / 调用工具时她"工作"、等待时她待机、完成时她跳跃庆祝、空闲时她呼吸
- 摸头(10 秒冷却,+1 好感)与喂食(30 秒冷却,+5 好感、-1 小鱼干)两种互动,进度实时气泡反馈
- 亲密度 4 级养成:幼鲸 → 伙伴 → 挚友 → 深海羁绊(100 点封顶),跨级时弹出"升级啦!"提示
- 小鱼干经济:每完成 3 个模型回合 +1 条,每过 30 分钟自然 +1 条,库存上限 20 条
- 自定义命名(1–20 字符)、悬浮面板喂食/改名/隐藏、按住拖动重定位(位置持久化)、隐藏后输入框出现"召唤{名字}"按钮
- 全局浮层:会话生命周期外(新建会话空屏)也始终挂在右下角,不依赖某个会话或 UI 槽位
技术实现
- 语言: TypeScript(带 JSX)+ Node.js(host 半区)+ React 18(browser 半区)
- 关键依赖:
@deepseek-ai/cordis(插件框架)、@deepseek-ai/dsh-host-webserver(挂/api/pet/*与/pet/whale/*路由)、@deepseek-ai/dsh-client-runtime+@deepseek-ai/dsh-client-ui-settings(浏览器半区 + 设置卡)、schemastery(DSH 设置 schema 校验)、React 18(由 DSH 外壳注入) - 架构模式: 双半区 cordis bundle。
src/index.ts是 host 半区,导出name='pet'与 cordisapply:构造PetService监听session/event(turn/start、step/start、tool/call、turn/end 派发到 idle/waiting/thinking/tool/done 五个相位),通过installSettingsSection注册名为pet的设置分区,按 enabled 状态挂载路由。src/client/index.ts是 browser 半区,createRoot → document.body全局挂载浮层,每 800ms 轮询/api/pet/state,配合visibilitychange在标签页回到前台时立即拉取,注册中英字典并把设置卡挂到web-ui.plugin.item槽位 - 入口文件: host 半区
packages/dsh-pet/src/index.ts,browser 半区packages/dsh-pet/src/client/index.ts,bundle 声明在packages/dsh-pet/cordis.patch.yml:8-10(插入id: pet),浏览器依赖注入在packages/dsh-pet/package.json:37-49
适用场景
长时间盯着 DSH Web 跑模型任务、想要一点陪伴感的用户:模型思考时鲸鱼娘在脚下工作,完成时跳一下庆祝,亲密度随使用时长和工作回合自然增长。也适合想给 DSH 界面增加一点"养成感"、又不需要复杂配置的人——安装即用,关闭、隐藏、改名都能在设置里直接搞定。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH 宿主 | 0.1.0-rc.6+ | peerDependencies 锁到 @deepseek-ai/dsh-* ^0.1.0-rc.6;运行时只依赖 4 个浏览器端 @deepseek-ai/dsh-client-* 包 |
| Node.js | ^22.19.0 或 >=24.0.0 | engines.node 字段明确要求 |
| 平台 | web(DSH 浏览器端) | 包内 dsh.client.platform: "web",无桌面/终端适配 |
| 原生模块 | 无 | 运行时只引入 clsx + schemastery(纯 JS);CSS Modules 由 lightningcss 内联为 <style data-plugin> |
| React | ^18.2.0 | peerDependency,由 DSH 外壳注入 |
安装方式
dsh plugin --profile web add github:CAPTAIN1275/dsh-ui-web/packages/dsh-pet
配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| 启用宠物(enabled) | 开关 | 插件总开关:关闭后浮层、轮询、API 路由一起停用 | 开 |
| 显示宠物(visible) | 开关 | 是否在屏幕上显示浮层;关闭后聊天输入区出现"召唤{名字}"按钮 | 开 |
| 大小(size) | 数字(32–512,px) | 宠物显示尺寸,等于图集单格高度 | 160 |
| 距右侧(right) | 数字(0–10000,px) | 距视口右边界的水平偏移(拖动时实时同步) | 24 |
| 距底部(bottom) | 数字(0–10000,px) | 距视口底边的垂直偏移(拖动时实时同步) | 20 |
| 名字(name) | 字符串(1–20 字符) | 宠物的显示名,会出现在悬浮面板和"召唤{名字}"按钮上 | "鲸鱼娘" |
| 摸头冷却 | 内部常量(affinity.petCooldownMs) | 两次摸头之间的最小间隔,源码可调 | 10000 ms |
| 喂食冷却 | 内部常量(affinity.feedCooldownMs) | 两次喂食之间的最小间隔,源码可调 | 30000 ms |
| 小鱼干上限 | 内部常量(treats.maxTreats) | 库存硬上限 | 20 |
| 亲密度上限 | 内部常量(affinity.AFFINITY_MAX) | 累计好感点的封顶 | 100 |
说明:冷却时间、小鱼干经济参数、亲密度上限是源码内置在
affinity.ts/treats.ts里的常量,普通用户用默认即可;如需调整可由 host 在PetConfig中传入affinity/treats字段覆盖。
常见问题
Q: 安装之后右下角没看到宠物怎么办?
A: 先确认已经重启了 dsh web——cordis bundle 的注入只在 host 启动时生效。如果还是不显示,打开浏览器控制台看有没有 pet.state transport error,再到设置 → 插件配置 → 宠物把"启用宠物"打开。
Q: 摸头 / 喂食没反应,是不是坏了?
A: 大概率是冷却中。摸头 10 秒内重复点击、喂食 30 秒内重复点击,鲸鱼娘会发气泡提示"今天摸够啦"或"吃饱饱啦",冷却结束前都不会再生效。喂食还可能因为小鱼干库存为零被拒绝。
Q: 小鱼干用完了怎么补?
A: 不能直接充值。两条补给路径:每完成 3 个模型回合自动 +1 条,每过 30 分钟自然 +1 条。存满 20 条后不再涨,但亲密度仍会随时间缓慢增长(每 30 分钟 +1 点)。
Q: 卸载插件会丢掉亲密度和小鱼干吗?
A: 不会。所有状态(命名、亲密度、库存、位置、自定义)都写在 $DSH_HOME/pet.json(默认 ~/.dsh/pet.json),卸载插件不会删这个文件,重新安装后进度自动恢复。
Q: 能换成自己的角色或加多只宠物吗?
A: 当前版本不支持。本插件只内置了鲸鱼娘这一只,没有多宠物注册表或自定义图集投放机制;想换角色需要直接改源码中的 spritesheet.ts 几何定义与图集资源。
Q: 设置里看不到宠物配置卡怎么办?
A: 说明当前 DSH 版本没有把 pet 这个设置命名空间暴露到设置页(少数部署会限定 WEB_SETTINGS_NAMESPACES 白名单)。遇到这种情况可以直接编辑 $DSH_HOME/settings.yaml,或在 dsh-host-apiproxy 的白名单里加上 pet 后重启。
Q: 宠物的命名能改吗?有长度限制吗?
A: 能在悬浮面板的"改名"入口里直接改,1–20 字符,不能全是空白。改名后召唤按钮、悬浮面板都会同步显示新名字。
上手难度
入门 — 安装即用,零配置启动;可选的高级设置(尺寸、位置、命名)都在设置卡片里点几下就能改,不需要接触代码或配置文件。
已知问题与限制
failed动画已经在 9 状态图集契约里占了一行(row 5),但当前 rc.6 还没有任何 DSH 事件源能点亮它,模型失败时表现等同于 idle- 插件依赖 rc.6 的
session/event(turn/start、step/start、tool/call、turn/end)派生动画相位;如果宿主版本低于 rc.6 或会话事件缺失,宠物会一直停在 idle pet.json文件损坏时,插件会静默回退到默认值继续运行;用户的亲密度、命名、库存、位置会丢失但不会报错提示packages/dsh-pet/package.json声明"license": "Apache-2.0",但子包内的LICENSE文件是 BSD-3-Clause——许可证元数据不一致,使用前以仓库根LICENSE为准- 浏览器半区在 apply 与 mount 时会向控制台输出
console.log和console.warn调试日志,正式使用场景里会留下噪声
基于 zhu1090093659/dsh-web-ui(Apache-2.0)开发的 DeepSeek Harness(DSH)Web UI 插件套件。全套 22 个包已发布到 npm(
@captain1275/*)。
DSH Web UI 全家桶为 DeepSeek Harness 的 Web 界面提供一系列插件与皮肤:极光毛玻璃皮肤、任务看板、 SSH 运维、右侧文件/变更面板、Git 图谱、移动端远程控制、DeepSeek 娘看板娘(养成系)、实时令牌统计, 以及皮肤中心。所有插件既可独立安装,也可通过聚合包一次装齐。
极光 Aurora 皮肤效果(沉浸光感 / 深色 / 浅色)



特性
极光(Aurora)皮肤(支持动态背景)
- 毛玻璃输入框:高斯模糊(backdrop-filter 30px)+ 半透明玻璃底 + 细边框 + 内高光
- 自定义背景:URL / 本地图片 / 动图(GIF/WebP)/ 视频(mp4/webm) / 透明度 / 模糊调节,
深浅两套极光渐变;视频背景支持静音开关、本地文件持久化(存
~/.dsh/skin-aurora-media/,刷新不丢) - 仿Claude Code推理等级滑块:点击模型菜单的「推理等级」弹出 Effort 滑块面板——无极拖动、松手吸附、 WebGL 火焰跟随、OFF/MAX 刻度、Low/Medium/High/Ultracode 状态

- 用户消息气泡毛玻璃:与输入框统一的玻璃质感
DeepSeek 看板娘(养成系)
- 图片资源(社区同人资源,codex-pet-DeepSeek-girl)
- 养成系统:亲密度 4 级成长(幼鲸 / 伙伴 / 挚友 / 深海羁绊)、升级庆祝气泡、进度条、 Token 零食经济、使用时长成长(每 30 分钟 +1)
- 待机随机气泡:空闲时随机说话(live2d 风格文案)
- 摸头 / 喂食 / 改名 / 拖动,召唤按钮(live2d 同款贴边滑出)
Skill 人格设定
- 设置「人格设定」:开关启用/禁用常驻人格,编辑技能名、描述与人格正文
- 一键生效:保存后写入用户级技能
~/.dsh/skills/catgirl-rp/SKILL.md,DSH 技能系统实时加载, 所有新对话自动以该人格回应(含语气、动作表达、互动规则) - 内置猫娘人格:默认提供「小咪」猫娘人格(常驻生效、好感度系统、模式切换指令),可自由改写
- 可临时退出:对话中说「退出角色扮演模式」即切回普通助手,说「进入角色扮演模式」恢复

用量看板
- 彩色统计卡:累计 token、调用次数、缓存命中、估算费用(按 DeepSeek 官方定价)
- 近 14 天趋势:每日 token 消耗柱状图
- 模型分布:各 provider/model 用量环形图 + 图例
- 会话排行:Top 20 会话(标题 / 模型 / 调用数 / token / 费用)
- 自动记录:对话时自动采集 token 用量(会话快照替换语义,不双计),存
~/.dsh/usage.json - 侧边栏入口:彩色柱状按钮打开全屏看板
功能插件
| 插件 | 功能 |
|---|---|
| dsh-task-board | 侧边栏任务看板:多列 kanban、真实执行(驱动 agent 会话)、定时执行(cron) |
| dsh-ssh | SSH 运维:主机管理、远程执行、SFTP 传输、隧道、集群并发、Web 终端 |
| dsh-aionui-panel | 右侧「预览 / 文件 / 变更」面板:文件树、多格式预览、git 操作、文件拖拽 |
| dsh-git-graph | 会话头部 git 分支选择器 + 提交图 |
| dsh-live-stats | 实时 token 估算与生成速度 |
| dsh-full-stats | 完整统计行:覆盖官方统计(不省略)+ 运行状态指示 + 自定义状态文本(含替换官方 Deep diving...) |
| dsh-usage-dashboard | 用量看板:彩色统计卡 / 近 14 天趋势 / 模型分布 / 会话排行 / 费用估算 |
| dsh-web-ui-settings | 设置页「Web UI 插件」配置组 + 「人格设定」+「关于」版权页 |
| dsh-web-ui-all | 聚合包:一键安装全部插件 |
皮肤中心
10 套皮肤(ths / xp / blue-fantasy / dragon-heir / minecraft / miku / trading / whale-song / aurora / skin-center),支持皮肤启用互斥管理与一键切换。
其余皮肤(ths / xp / blue-fantasy / dragon-heir / minecraft / miku / trading / whale-song) 为上游 dsh-web-ui 自带皮肤。
安装
方式一:npm(推荐,已发布)
# 在 DSH profile 目录(~/.dsh/profiles/web)安装聚合包
npm install @captain1275/dsh-web-ui-all@0.2.8
然后在 profile 的 package.json 里把 @captain1275/dsh-web-ui-all 加入
dsh.profile.bundles:
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"@captain1275/dsh-client-ui-skin-aurora",
"@captain1275/dsh-full-stats",
"@captain1275/dsh-web-ui-all"
]
}
}
}
重启 DSH 即生效。
方式二:从源码(开发)
git clone <your-repo-url> dsh-web-ui
cd dsh-web-ui
pnpm install
pnpm -r build
# 把本地包链接进 profile(junction)
node scripts/link-profile.mjs
开发
- 构建:
pnpm -r build(或pnpm --filter <package> build) - 新增皮肤:参考
packages/skins/aurora(skin.json+src/client+cordis.patch.yml), 然后用node scripts/skin-center-bundles重新生成注册表 - 聚合包 patch:编辑
packages/dsh-web-ui-all/aggregate.yml后node scripts/aggregate.mjs - 皮肤资产同步:
node packages/dsh-skins/build.mjs
目录结构
packages/
├─ dsh-task-board / dsh-ssh / dsh-aionui-panel / dsh-git-graph
├─ dsh-pet / dsh-live-stats / dsh-full-stats
├─ dsh-web-ui-settings / dsh-web-ui-all / dsh-skins
└─ skins/ # 皮肤源码(aurora、miku、ths 等)
scripts/ # 构建 / 注册表 / 链接工具
shared/ # 共享构建预设(tsdown.client.ts)
版权与许可
- 主体代码:zhu1090093659/dsh-web-ui,Apache-2.0
- 增强优化:@captain1275
- DeepSeek 娘精灵图:xpy12367/codex-pet-DeepSeek-girl, 社区同人资源,版权归原作者
- 人形图标:Font Awesome 6.7.2,CC BY 4.0
- 样式参考:live2d-widget(GPL-3.0,仅参考视觉风格,未搬用代码)
- 商标:DeepSeek 及其相关标识均为 DeepSeek 官方资产;本插件为社区开发者独立维护的非官方同人项目, 不代表 DeepSeek 官方立场。