在桌面上养一只会随会话状态互动的动画宠物
29.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add qiqibabyy/dsh-pet-desktop该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · desktop
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 46 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 46 处,展示前 38 条)
- 发起网络请求client.js:55
const res = await fetch(API + path, body ? { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(body) } : undefined - 读取本地文件src/registry.js:115
if (!existsSync(file) || !statSync(file).isFile() || statSync(file).size > 64 * 1024) return { entry: undefined, warnings: [`missing or oversized pet. - 读取本地文件src/registry.js:115
if (!existsSync(file) || !statSync(file).isFile() || statSync(file).size > 64 * 1024) return { entry: undefined, warnings: [`missing or oversized pet. - 读取本地文件src/registry.js:116
raw = JSON.parse(readFileSync(file, 'utf8')) - 读取本地文件src/registry.js:131
if (!existsSync(path.join(dir, sheet))) return { entry: undefined, warnings: [`spritesheet "${sheet}" missing in ${dir}`] } - 读取本地文件src/registry.js:185
if (!existsSync(file) || statSync(file).size > 64 * 1024) return undefined - 读取本地文件src/registry.js:185
if (!existsSync(file) || statSync(file).size > 64 * 1024) return undefined - 读取本地文件src/service.js:77
const raw = JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件src/service.js:175
mkdirSync(path.dirname(this.file), { recursive: true }) - 写入本地文件src/service.js:177
writeFileSync(tmp, JSON.stringify(this.state, null, 2)) - 写入本地文件src/service.js:178
renameSync(tmp, this.file) - 发起网络请求src/service.js:477
fetch(`http://127.0.0.1:${port}/api/dsh-usage/overview`, { signal: AbortSignal.timeout(4000) }) - 读取本地文件src/routes.js:75
const f = JSON.parse(readFileSync(path.join(runtimeDir(), 'desktop-pet-window.json'), 'utf8')) - 写入本地文件src/routes.js:142
writeFileSync(path.join(runtimeDir(), 'desktop-pet-window.json'), JSON.stringify(merged)) - 读取本地文件src/routes.js:156
const stat = statSync(file) - 读取本地文件src/routes.js:165
return res.end(readFileSync(file)) - 写入本地文件src/supervisor.js:31
try { mkdirSync(dir, { recursive: true }) } catch { } - 读取本地文件src/supervisor.js:39
existsSync(path.join(packageDir, 'electron.local')) && readFileSync(path.join(packageDir, 'electron.local'), 'utf8').trim(), - 读取本地文件src/supervisor.js:39
existsSync(path.join(packageDir, 'electron.local')) && readFileSync(path.join(packageDir, 'electron.local'), 'utf8').trim(), - 读取本地文件src/supervisor.js:43
for (const candidate of candidates) if (candidate && existsSync(candidate)) return candidate - 读取本地文件src/supervisor.js:76
quitIntent: existsSync(path.join(runtimeDir(), '.quit-intent')), - 读取本地文件src/supervisor.js:83
if (existsSync(path.join(runtimeDir(), '.quit-intent'))) return - 执行外部命令来自配置/变量src/supervisor.js:97
child = spawn(exe, [this.companionDir, `--base=http://127.0.0.1:${port}`], { detached: true, stdio: 'ignore', windowsHide: true }) - 读取本地文件src/supervisor.js:122
if (!existsSync(pidFile)) continue - 执行外部命令固定命令src/supervisor.js:128
if (process.platform === 'win32') spawnSync('taskkill', ['/pid', String(old), '/T', '/F']) - 删除本地文件src/supervisor.js:133
try { rmSync(pidFile, { force: true }) } catch { } - 删除本地文件src/supervisor.js:140
try { rmSync(path.join(runtimeDir(), '.quit-intent'), { force: true }) } catch { } - 执行外部命令固定命令src/supervisor.js:162
if (process.platform === 'win32') spawnSync('taskkill', ['/pid', String(pid), '/T', '/F']) - 写入本地文件companion/main.cjs:28
try { fs.mkdirSync(dir, { recursive: true }) } catch { } - 读取本地文件companion/main.cjs:49
try { return JSON.parse(fs.readFileSync(f, 'utf8')) } catch { } - 读取本地文件companion/main.cjs:55
let settingsMtime = (() => { try { return fs.statSync(SETTINGS_FILE).mtimeMs } catch { return 0 } })() - 写入本地文件companion/main.cjs:58
fs.writeFileSync(SETTINGS_FILE, JSON.stringify(settings)) - 读取本地文件companion/main.cjs:59
settingsMtime = fs.statSync(SETTINGS_FILE).mtimeMs - 读取本地文件companion/main.cjs:66
try { m = fs.statSync(SETTINGS_FILE).mtimeMs } catch { return } - 读取本地文件companion/main.cjs:70
try { next = JSON.parse(fs.readFileSync(SETTINGS_FILE, 'utf8')) } catch { return } - 发起网络请求companion/main.cjs:84
const req = http.request( - 写入本地文件companion/main.cjs:244
{ label: '退出', click: () => { try { fs.writeFileSync(path.join(RUNTIME_DIR, '.quit-intent'), '') } catch { } app.quit() } }, - 写入本地文件companion/main.cjs:364
try { fs.writeFileSync(path.join(RUNTIME_DIR, '.pid'), String(process.pid)) } catch { }
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 桌面动画宠物
- 好感度系统
- 活动气泡
DeepSeek Harness 的自包含桌面宠物插件——Codex 风格动态宠物,带好感度、活动气泡、贴边拖拽和智能点击穿透。无需网页宠物。
README
由 DeepSeek 最新模型翻译生成dsh-pet-desktop
DeepSeek Harness 桌面宠物插件 — 把 Codex 桌宠完整移植到 DSH 桌面上。
一个自包含的 DSH(DeepSeek Harness)插件:harness 启动时自动在你的桌面上养一只帧动画桌宠。它不依赖网页端桌宠,自带状态机、文案引擎与宠物注册表,直接订阅 harness 会话事件。
功能
- 🖥️ 桌面常驻:无边框、置顶、透明智能穿透可切换(开启后拖不动、摸不到、滚轮无效,唯独右键仍能唤出菜单关掉它,永不自锁);右键菜单(收起/召唤、缩放、鼠标穿透、退出);互动栏(名字/亲密度/喂食/改名)只在轻点她时出现,路过或悬停不打扰
- 📌 贴边拖拽:光标 1:1 跟手 + 触边吸附——撞上屏幕边的那刻钉住,回拉鼠标不会把她带离(重新按住才走)。
展开完整文档(README 剩余 1 节)
dsh-pet-desktop
DeepSeek Harness 桌面宠物插件 — 把 Codex 桌宠完整移植到 DSH 桌面上。
一个自包含的 DSH(DeepSeek Harness)插件:harness 启动时自动在你的桌面上养一只帧动画桌宠。它不依赖网页端桌宠,自带状态机、文案引擎与宠物注册表,直接订阅 harness 会话事件。
功能
- 🖥️ 桌面常驻:无边框、置顶、透明智能穿透可切换(开启后拖不动、摸不到、滚轮无效,唯独右键仍能唤出菜单关掉它,永不自锁);右键菜单(收起/召唤、缩放、鼠标穿透、退出);互动栏(名字/亲密度/喂食/改名)只在轻点她时出现,路过或悬停不打扰
- 📌 贴边拖拽:光标 1:1 跟手 + 触边吸附——撞上屏幕边的那刻钉住,回拉鼠标不会把她带离(重新按住才走)。气泡与设置卡随边自动翻向:左右贴边时向内生长,顶贴边时降到脚下,任何位置都不会被屏幕裁掉
- 🎬 Codex 宠物格式原生支持:宠物文件夹直接拷进 ~/.codex/pets 即用,自动发现 ~/.dsh/pets 与包内 assets/pets(pet.json + spritesheet.webp),9 条标准轨道(idle / running-right / running-left / waving / jumping / failed / waiting / running / review)+ 每宠物 tracks/sequences 覆盖
- 💬 活动气泡:直接监听 harness 会话事件,投影为 waiting / thinking / tool / review / done / failed 六相位;389 条内置中文文案按 4s 轮转,工具碎碎念(「」小气泡)带 9s/5s 冷却与 8s 上屏时限;多会话气泡栈 + +N 角标
- 💕 亲密度系统:摸头 +1(10s 冷却)、喂食 +5(消耗 1 小鱼干,30s 冷却)、完成对话 +1(按会话轮次幂等);小鱼干每 30 轮 +1、每 5 小时 +1、上限 20;亲密度永不衰减
- 🐋 装扮:内置小鲸鱼陪伴装饰层(随相位播放帧段),设置页可换/可关
- 📈 今日 token 用量:轻点卡片与设置页实时显示当天 tokens(输入/输出/缓存分桶 + 调用次数,本地零点归零,重启不丢);已安装 dsh-usage 时自动改用其当日台账——与用量面板同源同口径
- 📊 用量公告回显:若同时安装了网页端 dsh-pet/dsh-usage,余额/套餐公告会镜像到桌宠(纯回显,无依赖)
- ⚙️ 设置页集成:harness Web 设置 →「桌面宠物」:自动启动、状态与立即启动/停止、窗口控制(置顶/鼠标穿透/收起召唤/大小滑杆)、带精灵缩略图的宠物选择卡、装扮选择、electron 路径。鼠标穿透随时可在本页关回来——不存在救不回来的锁死
安装
需要 DSH Desktop(或任何带 web server 的 harness 宿主)。
dsh plugin --profile web add @qiqibabyy/dsh-pet-desktop
本地开发:
dsh plugin --profile web add link:../dsh-pet-desktop
Electron 运行时按以下顺序查找(任一命中即可):
1. 设置页「electron 路径」字段
2. 环境变量 DSH_PET_ELECTRON
3. 本包 node_modules/electron/dist/electron.exe(在包目录 npm i electron 过)
4. 全局 npm:%APPDATA%/npm/node_modules/electron(Windows)
找不到 Electron 时,设置页会红字提示;装一个 npm i -g electron 即全部解决。
宠物与装扮
宠物文件夹格式见 assets/pets/README.md。同名 id 后者覆盖前者,发现顺序:
1. 本包 assets/pets/
2. ${CODEX_HOME:-~/.codex}/pets/ — Codex 原生目录
3. ${DSH_HOME:-~/.dsh}/pets/ — 用户目录(装扮也扫这里的 decorations/)
4. 插件配置 petDirs 列出的额外目录
renderer: live2d / frames2d 的宠物按设计跳过(本插件渲染 sprite2d 图集)。
从 Codex 移植宠物
零转换直接拷:把 Codex 的宠物文件夹(pet.json + 图集)整个放进 ~/.codex/pets// 即被自动发现(CODEX_HOME 环境变量同样生效)。宠物定义兼容 Codex 两代 manifest——旧版扁平格式(hatch-pet)与 v2 sprite2d 块。换宠物不用碰命令行:harness 设置 →「桌面宠物」→ 形象分组,缩略图卡片点选,桌宠即时换装。
段位(亲密度点数)
| 点数 ≥ | 段位 | 星迹 |
| 0 | 幼鲸 | |
| 25 | 伙伴 | |
| 50 | 挚友 | * |
| 80 | 深海羁绊 | ** |
| 200 | 心有灵犀 | |
| 500 | 传说羁绊 | * |
| 2000 | 神话羁绊 | * |
| 10000 | 永恒之契 | ** |
| 100000 | 鲸生共渡 | *** |
开发
npm install # 只有 schemastery 一个运行时依赖
node scripts/smoke.mjs # 无宿主烟测:注册表 / 账本 / 文案引擎 / 事件投影
目录结构:
| 路径 | 作用 |
| index.js | 插件装配(cordis host 半边) |
| src/service.js | 状态机 + 亲密度账本 + 事件投影(~/.dsh/desktop-pet.json 原子持久化) |
| src/chatter.js | 文案引擎(389 条,逐条移植自 dsh-pet,Apache-2.0) |
| src/registry.js | 宠物与装扮发现(Codex v1/v2 manifest 兼容) |
| src/routes.js | /api/desktop-pet/ loopback 路由(含图集/装扮静态资产) |
| src/supervisor.js | Electron 伴生窗口的查径、启动、接管、守护 |
| client.js | 设置页卡片(模块宿主 CJS 工厂格式,免构建) |
| companion/ | Electron 伴生窗口(主进程 + 渲染层,零 npm 依赖) |
| assets/decorations/ | 内置装扮(whale,MIT,见其 LICENSE.txt) |
许可
- 代码:Apache-2.0(见 LICENSE)
- src/chatter.js 文案池与 assets/decorations/whale 装扮衍生自 dsh-web @linxin666/dsh-pet (代码 Apache-2.0;whale 装扮按其清单声明为 MIT)
- 桌宠交互概念与宠物格式向 Codex Desktop Pet 致敬预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
qiqibabyy/dsh-pet-desktop
在桌面上养一只会随会话状态互动的动画宠物
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,111已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,341已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,449已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,532已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,353已汉化DSH
70.2
这是你的仓库?认领条目