🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

桌面宠物 qiqibabyy/dsh-pet-desktop

DeepSeek Harness
qiqibabyy46 天前有提交已提供中文文档扫描:含敏感能力

在桌面上养一只会随会话状态互动的动画宠物

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
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 46 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
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 致敬
预览分享卡片长什么样 ↓qiqibabyy/dsh-pet-desktop
分享 · DeepSeek Harness Hub
qiqibabyy/dsh-pet-desktop

在桌面上养一只会随会话状态互动的动画宠物

这是你的仓库?认领条目

回到顶部