用 Live2D 角色实时显示会话状态并接收指令
29.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add br0ny4/dsh-live2d-pet该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · desktop
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 42 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 21 处,展示前 18 条)
- 读取本地文件packages/dsh-live2d-pet/build.mjs:18
const PKG = JSON.parse(await readFile(join(ROOT, 'package.json'), 'utf8')) - 读取本地文件packages/dsh-live2d-pet/build.mjs:25
const bytes = await readFile(path) - 读取本地文件packages/dsh-live2d-pet/build.mjs:38
__PET_CSS__: JSON.stringify(await readFile(join(ROOT, 'src', 'client', 'pet.css'), 'utf8')), - 读取本地文件packages/dsh-live2d-pet/build.mjs:39
__PET_RIG__: await readFile(RIG, 'utf8'), - 写入本地文件packages/dsh-live2d-pet/build.mjs:58
await mkdir(dirname(OUT), { recursive: true }) - 写入本地文件packages/dsh-live2d-pet/build.mjs:59
await writeFile(OUT, bundle) - 删除本地文件递归packages/dsh-live2d-pet/build.mjs:67
await rm(CHARACTER_DEST, { recursive: true, force: true }) - 读取本地文件packages/dsh-live2d-pet/build.mjs:69
for (const entry of await readdir(CHARACTER_SOURCE, { withFileTypes: true })) { - 读取本地文件packages/dsh-live2d-pet/lib/characters.js:39
return roots.filter((root) => existsSync(root)) - 读取本地文件packages/dsh-live2d-pet/lib/characters.js:45
const manifest = JSON.parse(await readFile(join(dir, 'character.json'), 'utf8')) - 读取本地文件packages/dsh-live2d-pet/lib/characters.js:83
entries = await readdir(root, { withFileTypes: true }) - 读取本地文件packages/dsh-live2d-pet/lib/characters.js:96
if (manifest.atlas === null || !existsSync(join(dir, manifest.atlas))) continue - 读取本地文件packages/dsh-live2d-pet/lib/characters.js:97
} else if (!existsSync(join(dir, manifest.pet)) || !existsSync(join(dir, manifest.rig))) { - 读取本地文件packages/dsh-live2d-pet/lib/characters.js:114
const atlas = await readFile(join(character.dir, character.atlas)) - 写入本地文件packages/dsh-live2d-pet/lib/index.js:439
await mkdir(dir, { recursive: true }) - 写入本地文件packages/dsh-live2d-pet/lib/index.js:440
await writeFile(file, `${JSON.stringify({ - 删除本地文件packages/dsh-live2d-pet/lib/index.js:464
await rm(join(bridgeDir(), 'bridge.json'), { force: true }) - 发起网络请求packages/dsh-route-failover/lib/index.js:130
const response = await fetch(PROBE_URL, { signal: controllerProbe.signal, redirect: 'follow' })
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 实时显示会话状态
- 接收指令
- 系统全局悬浮外壳
DeepSeek Harness 的 Live2D 桌宠:页面内插件 + 系统全局悬浮外壳,状态与 harness 实时绑定
README
由 DeepSeek 最新模型翻译生成dsh-live2d-pet
给 DeepSeek Harness 用的 Live2D 桌宠:浮在系统桌面上,看得见它在干活,点一下就能下指令。
License: MIT
Version
Tests
这是什么
一只角色,两种存在方式:
| | 页面内桌宠 | 系统全局桌宠 |
| 形态 | 注册进 shell.overlay 插槽的悬浮层 | 透明、置顶、鼠标穿透的 Electron 窗口 |
| 覆盖范围 | harness 窗口内 | 整个桌面,浮在其他应用之上 |
| 状态来源 | useSessions 快照 | 插件 Host 半边的回环桥(SSE 实时推送) |
| 适用 | Web GUI、官方桌面端 | 想让角色待在屏幕上、不占 harness 窗口时 |
两边共用同一个角色引擎,所以是同一只角色,不是两套实现。
它做三件事:
- 看着 harness:从真实 Host 事件推出「思考中 / 调用工具 / 搁置 / 完成 / 报错」,用动作、徽标和气泡同时表达;
- 替你下指令:点一下角色弹出气泡,把话送进选中的会话,支持排队与插话两种投递模式;
- 不碍事:窗口默认整窗鼠标穿透,只在光标真正落在角色身上时才接管点击。
展开完整文档(README 剩余 1 节)
dsh-live2d-pet
给 DeepSeek Harness 用的 Live2D 桌宠:浮在系统桌面上,看得见它在干活,点一下就能下指令。
License: MIT
Version
Tests
这是什么
一只角色,两种存在方式:
| | 页面内桌宠 | 系统全局桌宠 |
| 形态 | 注册进 shell.overlay 插槽的悬浮层 | 透明、置顶、鼠标穿透的 Electron 窗口 |
| 覆盖范围 | harness 窗口内 | 整个桌面,浮在其他应用之上 |
| 状态来源 | useSessions 快照 | 插件 Host 半边的回环桥(SSE 实时推送) |
| 适用 | Web GUI、官方桌面端 | 想让角色待在屏幕上、不占 harness 窗口时 |
两边共用同一个角色引擎,所以是同一只角色,不是两套实现。
它做三件事:
- 看着 harness:从真实 Host 事件推出「思考中 / 调用工具 / 搁置 / 完成 / 报错」,用动作、徽标和气泡同时表达;
- 替你下指令:点一下角色弹出气泡,把话送进选中的会话,支持排队与插话两种投递模式;
- 不碍事:窗口默认整窗鼠标穿透,只在光标真正落在角色身上时才接管点击。
状态绑定
状态全部来自 harness 的真实事件,没有轮询私有接口:
| 相位 | 触发 | 桌宠表现 |
| thinking | agent/status → running | 快速上下浮动、张嘴 |
| tool | session/event tool/call | 气泡显示正在调用哪个工具 |
| done | turn/end completed | 跳一下,绿色徽标 |
| error | turn/end 非 completed、agent/error | 抖动,红色徽标 + 原因 |
| waiting | running 但 45 秒无事件 | 几乎静止、呼吸变慢、黄色徽标 |
| idle | 其余 | 常态呼吸 + 随机眨眼 |
waiting(搁置)是刻意做成“看起来就不一样”的:忙是动的,卡住是静的。完整的事件映射与可调窗口见 docs/ARCHITECTURE.md。
快速开始
环境要求
- Node.js ≥ 20
- 已安装 DeepSeek Harness(dsh 在 PATH 上)
- 系统全局桌宠需要 Electron,随 pnpm install 装好
1. 页面内桌宠
git clone https://github.com/br0ny4/dsh-live2d-pet.git
cd dsh-live2d-pet
pnpm install
pnpm build
dsh plugin --profile web add ./packages/dsh-live2d-pet
重启 dsh 后,界面右下角出现桌宠。卸载:
dsh plugin --profile web remove dsh-live2d-pet
2. 系统全局桌宠
cd packages/dsh-pet-shell
pnpm start
外壳的接入策略是自动选:先找已经在跑的 harness(也就是你正在用的那个),找到就直接接上去,状态与指令都通到那些会话;找不到才自己起一个 dsh web --port 0。
npx electron . --attach-only # 只接入,不自己起 harness
npx electron . --dsh /path/to/dsh # 指定 dsh 可执行文件
npx electron . --profile web # 指定 profile
npx electron . --dev # 详细日志
托盘菜单提供连接状态、重新连接、开关桌宠、打开 Harness 界面。
交互
| 操作 | 结果 |
| 单击角色 | 打开 / 收起指令气泡 |
| 拖动角色 | 移到桌面任意位置 |
| 移动鼠标 | 角色的眼睛跟着光标 |
| ⌘/Ctrl + Enter | 直接发送 |
| 气泡里的模式按钮 | 在「排队」(排在当前回合之后)与「插话」(打断正在执行的回合)之间切换 |
角色
自带两个,也接受你自己的:
| DeepSeek 鲸鱼娘(默认,网格形变 + 真眨眼) | 咕咕嘎嘎(帧动画图集) |
在指令气泡的「角色」下拉框里切换。要用自己的三视图:
node scripts/character.mjs add --from ~/我的角色.png --id my-character --name "我的角色"
白底三视图和已抠好的透明 PNG 都吃,会自动抠图、自动绑骨,并输出一张骨架叠图供你核对(推导不准时可以写 rig.overrides.json 局部修正)。完整说明见 docs/CHARACTERS.md。
它是怎么动起来的角色是一张扁平立绘,渲染器把它当作可形变网格——骨架用椭圆区域标出头发、呆毛、鳍、裙摆、躯干、双眼、嘴,每个网格顶点按覆盖它的区域权重位移。在此之上还有一层行为:
| 行为 | 表现 |
| 情绪 | 思考 / 执行 / 搁置 / 完成 / 报错各自不同的体态 |
| 打盹 | 长时间待命后闭眼、呼吸变慢、飘出 z |
| 戳一下 | 点角色它会跳一下并冒感叹号 |
| 拖动 | 移动窗口时下半身滞后于身体 |
| 视线 | 眼睛跟随光标;没人理它时自己东张西望 |
| 徽记 | 完成冒星、报错冒汗滴,都是矢量绘制,不依赖素材 |
真 Live2D 模型是更好的答案,本项目也生产了一个:resources/live2d/models/whale-maid/ 里有完整的 Cubism 4 模型族(.moc3 + .model3.json + .cdi3.json + physics3.json + 6 秒循环待机与眨眼/点头/摇头动作 + 4096² 图集 + 可二次编辑的 .cmo3),由 live2d-pipeline/ 从分层 PSD 经 psd2live 自动绑骨导出。
目前插件渲染的仍是网格形变,Cubism 渲染后端尚未接入。渲染后端只需要满足四个方法,换后端不用动 UI:
createCharacter(canvas, { rig, sprite }) -> {
setMood(mood), setTalking(bool), setPointer(x, y, active), dispose()
}
也可以直接使用官方免费样例模型:pnpm assets:live2d 会从 Live2D 官方渠道下载 Cubism Core 与 8 个样例模型(Hiyori、Haru、Mao、Mark、Natori、Ren、Rice、Wanko)。这些素材不入库,理由见许可。
仓库结构
packages/
dsh-live2d-pet/ 插件包(可发布到 npm) lib/index.js Host 半边:事件订阅 + 回环桥 + 发现文件 src/client/pet.js 页面内桌宠:悬浮层 + 指令气泡 src/client/engine.js WebGL 网格形变渲染器 test/bridge.test.mjs Host 半边自测(34 项) build.mjs esbuild → 内联样式表与立绘 dsh-pet-shell/ 系统桌面外壳(Electron,不发布) src/main/index.js 窗口 / 托盘 / 接入策略 src/main/bridge.js 发现文件 + SSE 客户端 src/main/harness.js 查找 dsh、拉起 harness、等桥就绪 src/renderer/pet.js 全局桌宠 UI + 逐像素命中测试 test/smoke.mjs 端到端冒烟(9 项) scripts/ character.mjs 角色 CLI:list / build / add(自带三视图导入) lib/matte.mjs 抠图:白纸参考稿与透明图两条路 lib/rig.mjs 自动绑骨:轮廓、双眼、喙/嘴、躯干、鳍、脚 fetch-live2d-assets.mjs 抓取 Cubism Core 与官方样例模型 fetch-gugu-assets.mjs 抓取咕咕嘎嘎帧动画图集并生成来源说明 make-doc-images.mjs 合成 README 用图 live2d-.sh psd2live 构建与运行 docs/ ARCHITECTURE.md 两层结构、桥协议、状态派生、渲染取舍 CHARACTERS.md 角色来源、自定义导入、骨架修正 VERSIONING.md 版本管理计划 resources/ characters/whale-maid/ 内置角色:立绘、骨架、原画 characters/gugu/ 内置角色:帧动画图集(含 PROVENANCE.md) live2d/models/whale-maid/ 自产的 Cubism 4 模型 live2d-pipeline/ 分层 PSD → .moc3 的生产流水线(独立 README)
开发
pnpm install
pnpm build # 构建插件客户端 bundle 与外壳渲染进程 bundle
角色
pnpm characters # 列出全部角色
pnpm characters:build # 重建立绘与桌宠小图(保留既有骨架)
pnpm characters:rerig # 重新推导骨架,再核对 debug-overlay.png
node scripts/character.mjs add --from --id # 导入自己的角色
Live2D 官方素材
pnpm assets:live2d # 下载 Cubism Core + 官方样例模型
pnpm assets:live2d:list # 列出可下载的样例模型
改了插件源码后,重新 pnpm build 并重启 dsh 即可。开发外壳时可以用 test/mock-bridge.mjs 起一个假 harness,不必真的跑一遍:
DSH_HOME=/tmp/pet-dev node packages/dsh-pet-shell/test/mock-bridge.mjs &
DSH_HOME=/tmp/pet-dev npx electron packages/dsh-pet-shell --attach-only --dev
测试
pnpm test # 全部 100 项断言bash
pnpm test:bridge # Host 桥 43 项
pnpm test:harness # 真 harness 端到端 11 项(无 dsh 时自动跳过)
pnpm test:shell # 外壳端到端 13 项
pnpm test:harness # 真 harness 端到端 11 项
pnpm test:failover # 路由故障切换 9 项
pnpm test:model # 模型结构 23 项
test:shell 是真正的集成测试:它拉起一个只实现三条路由的假 harness,再把真的 Electron 外壳跑起来接上去,校验接入日志、零渲染错误、角色加载、截图的尺寸与格式。它唯一判断不了的是角色好不好看——那需要人眼看 PNG(加 --keep-shot 会保留截图路径)。
渲染进程的错误会直接判定测试失败。这条规则不是装饰:徽记层曾经因为「WebGL 画布拿不到 2D 上下文」每帧抛异常,而界面看起来完全正常,正是这条断言把它抓出来的。
文档
| 文档 | 内容 |
| docs/ARCHITECTURE.md | 两层结构的由来、harness 接入点、状态派生、桥协议规格、渲染取舍 |
| docs/CHARACTERS.md | 角色来源、导入自己的三视图、骨架修正、角色查找顺序 |
| docs/VERSIONING.md | 版本号规则、桥协议版本、兼容性矩阵、发布流程、分支策略 |
| CHANGELOG.md | 变更记录 |
| live2d-pipeline/README.md | 分层 PSD → .moc3 的完整生产流程与复现命令 |
| packages/dsh-live2d-pet/README.md | 插件包的使用与打包细节 |
兼容性
| 插件版本 | 最低 DSH | 宿主 | 说明 |
| 0.1.x | 0.1.5-rc.2 | Web GUI、官方桌面端 | 首个可用版本 |
DeepSeek Harness 目前处于预发布(0.1.5-rc.2),客户端插件 API 没有兼容承诺。若 harness 升级导致 dsh.client.inject 依赖项或插槽契约变化,插件会发 minor 版本并在上表标注新的最低版本。详见 docs/VERSIONING.md。
已知限制
这份清单是如实的,不是待办宣传:
- 默认角色是网格形变,不是真 Live2D。.moc3 已产出并通过 23 项结构校验,但渲染后端尚未接入。
- 模型只在中性姿态下验证过像素级正确。分层 PSD 重新合成与源图逐像素相等(max|Δ| = 0),但眨眼、口型、物理在真实渲染器里的表现尚未目视确认。
- PSD 的语义标签有一部分是启发式近似。原画没有真正的分层信息,头发前后、头饰、尾鳍、额头的切分来自几何与颜色规则;其中“发丝搭在深蓝衣服上”那一处最弱,中性姿态看不出,让这些部件单独形变时会露馅。
- 原画没有眉毛(被刘海完全遮住)。要做眉毛动画需要先补画。
- 换角色需要重新构建:立绘与骨架在构建时内联进 bundle。
- 官方桌面端尚未发布安装包。官方仓库里已有 apps/desktop,但 npm 上还没有包、也没有安装包。插件本身在官方桌面端里能跑(同一套客户端运行时),系统全局悬浮窗口那部分要等它放出窗口 API。
许可
MIT。
本仓库不包含以下第三方素材,它们由 pnpm assets:live2d 按机器从官方渠道抓取:
- Live2D Cubism Core 与官方样例模型(Hiyori、Haru、Mao、Mark、Natori、Ren、Rice、Wanko)是株式会社 Live2D 的专有素材。按 Live2D 的许可,它们可以随应用分发,但不能作为独立文件再分发——所以由脚本按机器获取,不入库。
- DeepSeek Harness(@deepseek-ai/)作为依赖使用,不在此仓库内。
resources/live2d/models/whale-maid/ 是本项目自己的产出(由本仓库的角色立绘经 psd2live 生成),随仓库分发。
角色立绘的来源
「DeepSeek 鲸鱼娘 / 大肥鱼」与「咕咕嘎嘎」都是社区二创角色,不是本项目的原创作品,也不代表任何官方授权或认可。
resources/characters/whale-maid/ 下的立绘来自第三方项目,按其许可随仓库分发:
| 作者 | YunYueSama |
| 仓库 | https://github.com/YunYueSama/codex-deepseek-pet |
| 许可 | 大肥鱼项目署名许可 1.0(全文) |
许可允许使用、修改、分享与商用,条件是保留署名、保留完整许可文本、并说明修改内容 —— 三者都记录在 LICENSE-ASSET.md(由 scripts/fetch-whale-maid-art.mjs 生成,随素材一起更新)。
「咕咕嘎嘎」的情况更要如实说明:形象基础是《明日方舟:终末地》的「管理员」二创企鹅,底层 IP 属 Hypergryph;定义性图片的 B 站创作者已完成著作权登记,字节跳动也登记了美术形象著作权——三方主张并存,任何人都无法给出干净授权。素材取自无许可证的帧动画图集仓库,按项目所有者的明确决定使用;PROVENANCE.md 记录了全部事实,分发时请保留。
旧版内置角色「企鹅 Pip」已按所有者要求移除(可在 git 历史中找回)。
项目地址:https://github.com/br0ny4/dsh-live2d-pet预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
br0ny4/dsh-live2d-pet
用 Live2D 角色实时显示会话状态并接收指令
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,125已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,465已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,457已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,710已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,378已汉化DSH
70.2
这是你的仓库?认领条目