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

桌面大肥鱼 ysppwn721/better-dsh-pet

DeepSeek Harnessv0.3.6
ysppwn72132 天前有提交已提供中文文档扫描:含敏感能力

🐋 better-dsh-pet

35.5/100
综合分
8
GitHub 星标
826
npm 周下载
—/5
用户评分

数据截至 2026/10/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add better-dsh-pet
npm 源 · better-dsh-pet 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · tool
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 32 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包better-dsh-pet @ 0.3.6
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 22:53:47

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 57 处,展示前 45 条)
  • 读取本地文件
    lib/index.js:261
    if (!existsSync(file)) {
  • 读取本地文件
    lib/index.js:270
    const { size } = await stat(file)
  • 读取本地文件
    lib/index.js:276
    const stream = createReadStream(file)
  • 读取密钥环境变量
    lib/index.js:391
    let apiKey = process.env.DEEPSEEK_API_KEY
  • 读取本地文件
    lib/index.js:405
    const text = readFileSync(join(home, '.credentials.yaml'), 'utf8')
  • 请求外部主机api.deepseek.com
    lib/index.js:441
    const response = await fetch('https://api.deepseek.com/chat/completions', {
  • 发起网络请求
    lib/index.js:441
    const response = await fetch('https://api.deepseek.com/chat/completions', {
  • 请求外部主机api.deepseek.com
    lib/index.js:481
    const response = await fetch('https://api.deepseek.com/chat/completions', {
  • 发起网络请求
    lib/index.js:481
    const response = await fetch('https://api.deepseek.com/chat/completions', {
  • 请求外部主机api.deepseek.com
    lib/index.js:531
    const response = await fetch('https://api.deepseek.com/chat/completions', {
  • 发起网络请求
    lib/index.js:531
    const response = await fetch('https://api.deepseek.com/chat/completions', {
  • 请求外部主机api.deepseek.com
    lib/index.js:593
    const response = await fetch('https://api.deepseek.com/chat/completions', {
  • 发起网络请求
    lib/index.js:593
    const response = await fetch('https://api.deepseek.com/chat/completions', {
  • 请求外部主机api.deepseek.com
    lib/index.js:629
    const response = await fetch('https://api.deepseek.com/user/balance', {
  • 发起网络请求
    lib/index.js:629
    const response = await fetch('https://api.deepseek.com/user/balance', {
  • 发起网络请求
    lib/client.js:171
    fetch(CONFIG_ENDPOINT, { cache: 'no-store' })
  • 发起网络请求
    lib/client.js:199
    const response = await fetch(CONFIG_ENDPOINT, {
  • 发起网络请求
    lib/client.js:235
    const response = await fetch(FESTIVAL_PLAY_ENDPOINT, {
  • 读取本地文件
    lib/pet-helper-process.js:46
    if (!list.some((value) => existsSync(value))) {
  • 读取本地文件
    lib/pet-helper-process.js:50
    return list.find((value) => existsSync(value))
  • 读取本地文件
    lib/pet-helper-process.js:55
    if (!existsSync(script)) return undefined
  • 执行外部命令来自配置/变量
    lib/pet-helper-process.js:57
    const result = spawnSync(process.execPath, [script], {
  • 读取本地文件
    lib/pet-helper-process.js:64
    return existsSync(exe) ? exe : undefined
  • 执行外部命令来自配置/变量
    lib/pet-helper-process.js:108
    const child = spawn(command, args, {
  • 读取本地文件
    lib/sensevoice.js:41
    return existsSync(model) && existsSync(tokens)
  • 读取本地文件
    runtime/electron-helper/main.js:49
    return candidates.find((candidate) => existsSync(candidate))
  • 执行外部命令来自配置/变量
    runtime/electron-helper/main.js:59
    const child = spawn(desktopPath, [], {
  • 执行外部命令固定命令
    runtime/electron-helper/main.js:159
    execFile('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', script], {
  • 执行外部命令固定命令
    runtime/electron-helper/main.js:279
    execFile('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', script], {
  • 读取本地文件
    runtime/electron-helper/main.js:311
    const pkg = JSON.parse(readFileSync(path.join(__dirname, '..', '..', 'package.json'), 'utf8'))
  • 发起网络请求
    runtime/electron-helper/main.js:328
    const response = await fetch(registries[index], { signal: controller.signal })
  • 执行外部命令固定命令
    runtime/electron-helper/main.js:362
    execFile('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', script], {
  • 请求外部主机ipwho.is
    runtime/electron-helper/main.js:420
    const ipRes = await fetch('https://ipwho.is/', { signal: AbortSignal.timeout(8000) })
  • 发起网络请求
    runtime/electron-helper/main.js:420
    const ipRes = await fetch('https://ipwho.is/', { signal: AbortSignal.timeout(8000) })
  • 请求外部主机wttr.in
    runtime/electron-helper/main.js:427
    const wRes = await fetch(`https://wttr.in/${lat},${lon}?format=j1`, { signal: AbortSignal.timeout(8000) })
  • 发起网络请求
    runtime/electron-helper/main.js:427
    const wRes = await fetch(`https://wttr.in/${lat},${lon}?format=j1`, { signal: AbortSignal.timeout(8000) })
  • 请求外部主机nominatim.openstreetmap.org
    runtime/electron-helper/main.js:449
    const geoRes = await fetch(`https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(name)}&format=json&limit=1`, {
  • 发起网络请求
    runtime/electron-helper/main.js:449
    const geoRes = await fetch(`https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(name)}&format=json&limit=1`, {
  • 请求外部主机wttr.in
    runtime/electron-helper/main.js:460
    const wRes = await fetch(`https://wttr.in/${lat},${lon}?format=j1`, { signal: AbortSignal.timeout(8000) })
  • 发起网络请求
    runtime/electron-helper/main.js:460
    const wRes = await fetch(`https://wttr.in/${lat},${lon}?format=j1`, { signal: AbortSignal.timeout(8000) })
  • 请求外部主机geocoding-api.open-meteo.com
    runtime/electron-helper/main.js:478
    const geoRes = await fetch(`https://geocoding-api.open-meteo.com/v1/search?name=${encodeURIComponent(name)}&count=1&language=zh&format=json`, { signal
  • 发起网络请求
    runtime/electron-helper/main.js:478
    const geoRes = await fetch(`https://geocoding-api.open-meteo.com/v1/search?name=${encodeURIComponent(name)}&count=1&language=zh&format=json`, { signal
  • 请求外部主机api.open-meteo.com
    runtime/electron-helper/main.js:487
    const wxRes = await fetch(`https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lon}&current_weather=true&timezone=auto`, { signal: Abor
  • 执行外部命令固定命令
    runtime/electron-helper/main.js:532
    execFile('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', script], {
  • 执行外部命令固定命令
    runtime/electron-helper/main.js:608
    const child = spawn('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', script], {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:api.deepseek.com、ipwho.is、wttr.in、nominatim.openstreetmap.org、geocoding-api.open-meteo.com 等 6 个

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-home-paths@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-slots
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

6 张 · 点击查看大图

README

由 DeepSeek 最新模型翻译生成
🐋 better-dsh-pet 一只住在 Windows 桌面上的大肥鱼,由 DeepSeek Harness 真实工作状态驱动。 透明 · 置顶 · 会吐槽 · 会番茄钟 · 会喂食 · 会语音 · 会执行任务 · 会陪你干活 如果这个大肥鱼让你开心,给个 ⭐ 支持一下吧~ 📑 目录 - 🎬 视频推广 - 📖 项目简介 - ✨ 功能特性 - 📸 效果预览 - 🚀 快速开始 - ⬇️ 下载说明 - 🖱️ 使用指南 - ⚙️ 配置说明 - 🎭 情绪系统 - 🤖 任务执行机制 - 🎙️ 语音说明 - ❓ 常见问题 - 🛠️ 开发 / 发布 - 📌 二创声明 - 🔎 相关链接 - 📄 许可 🎬 视频推广 📹 点击观看 better-dsh-pet 演示视频: ▶️ B站:一行命令,把大肥鱼放到桌面 📖 项目简介 better-dsh-pet 是一个 DSH 桌面宠物插件,基于 PC2005-cloud/dsh-pet 二创增强。
展开完整文档(README 剩余 1 节)
🐋 better-dsh-pet

一只住在 Windows 桌面上的大肥鱼,由 DeepSeek Harness 真实工作状态驱动。

透明 · 置顶 · 会吐槽 · 会番茄钟 · 会喂食 · 会语音 · 会执行任务 · 会陪你干活

如果这个大肥鱼让你开心,给个 ⭐ 支持一下吧~

📑 目录

- 🎬 视频推广
- 📖 项目简介
- ✨ 功能特性
- 📸 效果预览
- 🚀 快速开始
- ⬇️ 下载说明
- 🖱️ 使用指南
- ⚙️ 配置说明
- 🎭 情绪系统
- 🤖 任务执行机制
- 🎙️ 语音说明
- ❓ 常见问题
- 🛠️ 开发 / 发布
- 📌 二创声明
- 🔎 相关链接
- 📄 许可

🎬 视频推广

📹 点击观看 better-dsh-pet 演示视频:

▶️ B站:一行命令,把大肥鱼放到桌面

📖 项目简介

better-dsh-pet 是一个 DSH 桌面宠物插件,基于 PC2005-cloud/dsh-pet 二创增强。

它和普通网页桌宠最大的区别是:

- 🪟 使用 独立透明置顶窗口 运行,不占用 DSH 网页界面
- 🧠 能感知 DSH 的真实工作状态:思考 / 工作 / 等待 / 完成 / 出错
- 🎞️ 内置 91 个透明动画,全部开箱即用
- 🎙️ 支持 本地语音识别 / 语音唤醒 / 语音闲聊(SenseVoice,离线运行)
- 🤖 识别到任务时填入输入框手动确认,再在 DSH 中开启真实会话执行
- 🎛️ 提供大量自定义玩法:动作选择、播放顺序、移动频率、番茄钟、喂食、吐槽、余额、节日、情绪系统

简单说:DSH 在干活,大肥鱼在陪你。

✨ 功能特性

🧠 DSH 状态联动

- 监听 DSH 会话事件,实时感知 Agent 状态
- 状态变化自动切换动画和气泡文案
- 支持状态:空闲、思考、工作、等待确认、完成、出错
- 支持子 Agent 状态选择(可关闭)
- 自动统计 Token 用量,并在对话结束后刷新余额

🖥️ 独立桌面气泡

- 透明、无边框、始终置顶
- 不占用网页界面
- 支持点击穿透,不挡鼠标
- 可拖拽到屏幕任意位置
- 支持系统托盘:显示 / 隐藏 / 退出
- 置顶看门狗:定期重新置顶,防止被资源管理器 / 全屏应用顶掉
- 全屏自动隐藏:仅在全屏游戏 / 视频时自动隐藏,不影响日常使用
- Helper 看门狗:桌宠进程意外退出后自动重新拉起

🎞️ 91 个透明动画

包含但不限于:

- 待机呼吸、东张西望、打瞌睡、伸懒腰
- 写代码、照镜子、玩魔方、敲桌面
- 吃白饭、吃火锅、吃大闸蟹、吃汤圆、吃饺子
- 放风筝、堆雪人、放烟花、放孔明灯
- 拆礼物、变鸽子、扑克魔术、撸猫、骑木马
- 小提琴、女仆舞、宅舞、摇摆舞
- 点击回应:开心、害羞、傲娇、挠痒、元气挥手

全部 91 个透明动画 见仓库:assets/thumb/

🚶 屏幕漫游

- 可开启 / 关闭行走
- 可调节移动频率
- 支持螃蟹走路、原地漂浮踏步、向左奔跑
- 移动和动画节奏同步

🍚 喂食互动

- 右键菜单一键喂食
- 随机播放吃饭动画
- 显示“谢谢投喂”气泡
- 增加心情和精力

💰 余额显示

- 自动读取 DeepSeek 账户余额
- 气泡中显示余额,如 余额 ¥11.06
- 每次对话结束后自动刷新
- 每 5 分钟定时刷新
- 点击余额气泡可手动刷新

🍅 番茄钟

- 自定义工作时长 / 休息时长
- 气泡显示倒计时
- 结束时播放 MP3 闹钟 + 抖动
- 可随时停止
- 完成番茄钟会增加心情和精力

💬 对话吐槽

- 根据当前对话生成俏皮吐槽
- 可手动触发
- 可开启自动吐槽(会消耗 Token)
- 自动吐槽可一键关闭

🎙️ 语音聊天与唤醒

- 本地 SenseVoice 语音识别(sherpa-onnx-node,无需联网)
- 可自定义唤醒词,默认“大肥鱼”
- 说“大肥鱼 + 指令”即可控制:喂食、番茄钟、余额、闲聊
- 语音识别为任务时,不会自动发送,而是填入输入框并显示「执行任务」按钮,等你确认后再执行,避免误识别白烧 Token
- 支持自动录音、断句静音时长、自动发送开关

🤖 真实任务执行

- 识别到复杂任务后,在 DSH 中新建真实会话执行(方案三)
- 可配置任务工作目录(taskCwd,留空默认用户主目录)
- 任务执行前需要手动点击「执行任务」确认
- 任务会话被归档时会自动停止,避免「以为关了还在跑」烧 Token

🎭 情绪系统

- 心情 / 精力 / 焦虑 / 无聊 四维情绪
- 互动、喂食、番茄钟、DSH 状态都会影响情绪
- 情绪会改变空闲动作和气泡文案
- 情绪值自动保存,重新打开桌宠不会重置

📅 节日模式

- 支持阳历 + 农历节日识别
- 可一键播放节日祝福动画
- 可开启节日自动播放
- 内置元旦、春节、元宵、劳动节、儿童节、端午、七夕、中秋、重阳、腊八、国庆、圣诞等

🎛️ 自定义动作

- 右键勾选要播放的动作
- 支持自定义播放顺序
- 支持动作切换间隔
- 支持移动频率
- 支持动画播放速度(1.0x~2.0x)

⚙️ 行为设置

- 宠物大小(px)
- 角色大小百分比
- 气泡大小
- 移动频繁度
- 动作切换间隔
- 播放速度
- 行走开关
- 自动吐槽开关
- 语音开关 / 唤醒词 / 自动录音 / 自动发送
- 任务工作目录
- 节日开关

📸 效果预览

动画为透明背景;GIF 预览中透明部分显示为页面底色,实际播放为透明。

😴 待机 / 日常

🏃 移动

🍜 吃东西

🎮 玩耍 / 才艺

🎉 节日 / 季节

🖱️ 点击回应

🚀 快速开始

环境要求

| 项目 | 要求 |
| 操作系统 | Windows 10 / 11 |
| DSH | 已安装 DeepSeek Harness(DSH) |
| Node.js | 可用(用于 DSH / pnpm 插件安装) |
| Electron | 不需要手动安装,首次启动自动下载到 ~/.dsh/electron/ |

安装

dsh plugin --profile web add better-dsh-pet

如果刚发布新版本不到 24 小时,pnpm 11 的 minimumReleaseAge 安全策略可能不会自动选最新版,而是退回旧版。此时请指定精确版本安装:

dsh plugin --profile web add better-dsh-pet@0.3.6

pnpm 会自动把该版本加入 minimumReleaseAgeExclude 并完成安装;也可以等待 24 小时后直接用上面的普通命令。

启动

dsh web

启动后,桌面右下角会出现大肥鱼。

首次启动时插件会自动探测 / 下载 Electron,可能需要一点时间,请耐心等待。

卸载

dsh plugin --profile web remove better-dsh-pet

⬇️ 下载说明

better-dsh-pet 有两类下载:

1. Electron:桌宠窗口运行环境,首次启动自动下载;
2. SenseVoice 语音模型:本地离线语音识别模型,需要手动下载(可选增强)。

路径会自动识别 DSH 主目录:DSH_HOME 环境变量 → 从插件安装路径自动推断 → 默认 ~/.dsh。所以在不同电脑、不同 DSH 安装目录下都能保持一致。

Electron 自动下载

- 首次启动 DSH / 桌宠时,如果找不到 Electron,会自动下载到: C:\Users\Administrator\.dsh\electron\electron.exe

- 下载进度会显示在:
- 终端(如果你用 dsh web 启动且能看到宿主输出)
- 日志文件:C:\Users\Administrator\.dsh\logs\better-dsh-pet-electron.log
- 查看最新进度: Get-Content "C:\Users\Administrator\.dsh\logs\better-dsh-pet-electron.log" -Tail 20

手动触发下载(可在终端直接看进度):

node "C:\Users\Administrator\.dsh\profiles\web\node_modules\better-dsh-pet\scripts\ensure-electron.mjs"

SenseVoice 语音模型下载

语音模型不会自动下载,需要手动执行一次:

cd C:\Users\Administrator\.dsh\profiles\web\node_modules\better-dsh-pet
npm run download:sensevoice

脚本会自动尝试多个镜像源,哪个可用就用哪个:

1. GitHub 官方
2. ghproxy.net
3. ghfast.top
4. gh-proxy.com

下载进度显示在终端,也会写入:

C:\Users\Administrator\.dsh\logs\better-dsh-pet-sensevoice.log

查看进度:

Get-Content "C:\Users\Administrator\.dsh\logs\better-dsh-pet-sensevoice.log" -Tail 20

模型下载完成后位于:

C:\Users\Administrator\.dsh\voice\sensevoice\model.int8.onnx
C:\Users\Administrator\.dsh\voice\sensevoice\tokens.txt

如何判断下载完成

| 项目 | 完成标志 |
| Electron | C:\Users\Administrator\.dsh\electron\electron.exe 存在(约 215MB) |
| 语音模型 | C:\Users\Administrator\.dsh\voice\sensevoice\model.int8.onnx 和 tokens.txt 存在 |
| 下载日志 | 日志末尾出现 下载完成 |

重新下载 / 清除缓存

删除 Electron Remove-Item "C:\Users\Administrator\.dsh\electron" -Recurse -Force

删除语音模型 Remove-Item "C:\Users\Administrator\.dsh\voice" -Recurse -Force

然后重新启动 DSH 或重新运行上面的下载命令。

下载失败排查

- Electron 解压报“文件正由另一进程使用”:
- 先关闭 DSH / 桌宠,再重新下载;
- 或手动运行 ensure-electron.mjs。
- 语音模型一直 0% / 进度条半天不动:
- 脚本会在 30 秒无数据后自动切换到下一个镜像;
- 如果所有镜像都失败才会报错;
- 也可以手动指定镜像: $env:DSH_VOICE_MODEL_URL = "https://ghfast.top/https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2024-07-17.tar.bz2"
npm run download:sensevoice

- 升级时提示 EPERM:
- 先完全退出 DSH / 桌宠,再执行:
dsh plugin --profile web add better-dsh-pet@0.3.6

🖱️ 使用指南

右键菜单

右键点击大肥鱼,可以看到:

| 菜单项 | 作用 |
| 情绪状态 | 实时显示心情 / 精力 / 焦虑 / 无聊 |
| 喂食 | 播放吃饭动画 + 感谢气泡 |
| 开始番茄钟 / 开始短休息 | 启动番茄钟 |
| 停止番茄钟 | 停止当前番茄钟 |
| 让大肥鱼吐槽一下 | 手动生成一条吐槽 |
| 语音控制 | 开始一次语音指令识别 |
| 开启/关闭语音唤醒 | 切换「大肥鱼 + 指令」唤醒 |
| 闲聊 | 打开聊天面板,支持语音 / 文字 / 任务确认 |
| 检查更新 | 检查 GitHub 新版本 |
| 设置… | 打开完整设置页(外观、动作、番茄钟、语音、任务目录、节日等) |
| 本次隐藏 | 隐藏本次大肥鱼 |
| 本次关闭 | 关闭本次大肥鱼 |

聊天面板

- 点击右键菜单「闲聊」打开聊天面板
- 支持文字输入、语音输入
- 识别为普通问题 → 直接聊天
- 识别为任务 → 填入输入框,显示「执行任务」按钮,手动确认后才执行
- 任务模式下隐藏普通「发送」按钮,按回车也等于执行任务

语音控制

常用指令示例:

大肥鱼,开始番茄钟大肥鱼,喂食大肥鱼,看看余额大肥鱼,打开聊天

也可以直接点右键菜单「语音控制」说一次指令。

节日祝福

- 在设置中开启「节日祝福」
- 遇到节日时,右键菜单会出现「播放节日祝福」
- 也可开启自动播放,节日当天自动播放对应动画

⚙️ 配置说明

DSH 设置页

设置 → 插件 → 插件配置 → Better DSH Pet(大肥鱼增强版)

也可以在桌宠右键菜单 →「设置…」中直接修改。

| 配置项 | 说明 | 默认 |
| enabled | 是否启用大肥鱼 | true |
| petSize | 宠物宽度(px) | 460 |
| scale | 角色大小(70%~140%) | 100% |
| bubbleScale | 气泡大小(80%~120%) | 100% |
| activityLevel | 空闲微动作频率 | normal |
| reducedMotion | 减少动态效果 | false |
| bubbleMode | 气泡显示模式 | always |
| bubbleStates | 自定义气泡状态 | SUCCESS/ERROR/WAITING |
| includeSubagents | 是否响应子 Agent | false |
| walkEnabled | 是否允许走动 | true |
| moveChance | 移动频繁度(%) | 20 |
| actionDelayMs | 动作切换间隔(ms) | 0 |
| playbackRate | 动画播放速度(1.0x~2.0x) | 1 |
| enabledActions | 自定义待机动作 | [](全部) |
| actionOrder | 自定义播放顺序 | [](随机) |
| roastEnabled | 自动吐槽(耗 Token) | false |
| workMinutes | 番茄钟工作时长 | 25 |
| breakMinutes | 番茄钟休息时长 | 5 |
| voiceEnabled | 启用语音(麦克风) | true |
| voiceWakeAutoStart | 启动时自动开启语音唤醒 | false |
| voiceSilenceMs | 语音断句静音时长(ms) | 1200 |
| voiceAutoSend | 语音识别后自动发送 | true |
| voiceAutoRecord | 闲聊时说唤醒词自动开始录音 | true |
| wakeWord | 语音唤醒词 | 大肥鱼 |
| holidayEnabled | 启用节日祝福(阳历 + 农历) | false |
| taskCwd | 复杂任务工作目录(留空=用户主目录) | |

🎭 情绪系统

大肥鱼有四维情绪:

| 情绪 | 范围 | 说明 |
| 心情 Mood | -100 ~ 100 | 负=低落,正=开心 |
| 精力 Energy | 0 ~ 100 | 越低越容易犯困 |
| 焦虑 Anxiety | 0 ~ 100 | 越高越紧张 |
| 无聊 Boredom | 0 ~ 100 | 越高越想找事做 |

情绪如何变化

- 点击、喂食、番茄钟完成 → 心情和精力上升
- 空闲太久 → 越来越无聊、疲惫
- DSH 工作 / 思考 → 消耗精力
- DSH 等待确认 / 出错 → 焦虑上升

情绪影响

- 情绪强烈时,大肥鱼会优先播放对应情绪动作
- 会弹出心情气泡,例如:
- 开心:今天心情超好!
- 犯困:好累啊,让我趴一会儿…
- 焦虑:有点小紧张…
- 无聊:好无聊啊…

持久化

情绪值会自动保存到本地,重新打开桌宠不会重置。

🤖 任务执行机制

流程

1. 你对大肥鱼说 / 输入一个复杂任务
2. 插件先用 LLM 做意图分类
3. 如果识别为 task:
- 不会自动发送
- 把任务文本填入聊天输入框
- 显示「执行任务」按钮
- 等你确认后再执行
4. 点击「执行任务」后,插件会在 DSH 中新建一个真实会话,把任务作为首条消息发送
5. 任务在工作目录(taskCwd)中执行,默认是用户主目录

为什么需要手动确认

因为自动识别偶尔会出错,直接执行可能会白烧 Token。手动确认可以给你一个修改 / 取消的机会。

归档自动停止

如果任务会话被归档(隐藏),插件会自动取消正在运行的 Agent;如果 3 秒后仍在运行,会强制销毁,避免「以为关了还在跑」的情况。

🎙️ 语音说明

识别引擎

- 默认使用 Windows 系统语音识别(SAPI),开箱即用
- 可选安装 SenseVoice 本地模型 + sherpa-onnx-node,完全离线、更准、不上传音频
- 首次使用 SenseVoice 需要下载模型:

cd node_modules/better-dsh-pet
npm run download:sensevoice

模型会下载到 ~/.dsh/voice/sensevoice。
下载脚本会自动尝试多个镜像源,详细说明见 ⬇️ 下载说明。

唤醒词

默认唤醒词是 大肥鱼,可以在设置中修改。

开启语音唤醒后,说:

大肥鱼,开始番茄钟

大肥鱼就会执行对应指令。

语音闲聊

在聊天面板中点击 🎤,或说唤醒词后,大肥鱼会自动开始录音。

识别结果会进入聊天输入框:

- 普通内容 → 可修改后发送
- 任务内容 → 自动进入任务确认模式

❓ 常见问题

Q:为什么大肥鱼没有出现?

1. 确认安装的是 better-dsh-pet
2. 完全退出并重启 DSH
3. 检查设置里「启用大肥鱼」是否开启
4. 首次启动需要自动下载 Electron,请稍等片刻
5. 如果下载失败,可手动设置 DSH_PET_ELECTRON_PATH 指向 electron.exe

Q:DSH 升到 0.2.x 之后大肥鱼不见了?

0.3.5 及更早版本会有两处不兼容,升级到 0.3.6 即可:

1. peer 范围写在 ^0.1.0-rc.6(只覆盖 0.1.x)。DSH 装配 profile 时会校验 @deepseek-ai/dsh-* 的 peer 范围与运行时版本,不匹配就整个 bundle 被跳过——插件不加载、设置页也没有卡片。0.3.6 起放宽为 >=0.1.0-rc.6 <0.3.0。
2. DSH 0.2.0 桌面端把宿主跑在 ELECTRON_RUN_AS_NODE=1 下,该环境变量会继承给桌宠 Helper,使 electron.exe 退化为纯 Node 进程(require('electron') 报 MODULE_NOT_FOUND),窗口起不来、进程被反复重拉。0.3.6 起在 spawn Helper 前摘掉这个开关。

升级命令:

dsh plugin --profile web add better-dsh-pet@0.3.6

Q:为什么没有余额显示?

- 需要 DSH 中配置了 DEEPSEEK_API_KEY
- 插件会自动读取 ~/.dsh/.credentials.yaml
- 网络不通时不会显示

Q:余额多久刷新一次?

- 每次对话/任务结束后自动刷新
- 每 5 分钟定时刷新
- 点击余额气泡可手动刷新

Q:自动吐槽会消耗 Token 吗?

会。所以默认关闭,可以在设置或右键菜单中开启。

Q:如何让大肥鱼只播放指定动作?

右键 → 设置… → 在「自定义待机动作」中勾选要播放的动作。

Q:如何自定义播放顺序?

在设置页的「自定义播放顺序」中填写动作名,用逗号分隔。

Q:大小设置无效?

- 在设置页或右键「设置…」中修改
- 现在是实时生效的,不需要重启
- 如果没生效,确认保存成功后再看

Q:没有 DSH 桌面端能运行吗?

可以。

- 本插件不依赖 DSH Desktop.exe
- 只需要 DSH 本体(dsh web)正常运行
- 右键「打开 DSH 桌面版」只是可选功能,找不到桌面端也不影响桌宠本体

Q:其他电脑需要额外安装 Electron 吗?

不需要手动安装。

- 本插件不打包 Electron(npm 包体积限制)
- 首次启动会自动下载到 ~/.dsh/electron/electron.exe
- 下载方式 / 进度查看见 ⬇️ 下载说明
- 也可以通过环境变量指定: $env:DSH_PET_ELECTRON_PATH = "C:\path\to\electron.exe"

Q:插件会在没有 Electron 的电脑上崩溃吗?

不会导致 DSH 崩溃。首次启动会自动下载 Electron;如果下载失败,桌宠窗口无法显示,日志会提示:

better-dsh-pet: cannot resolve Electron executable.

Q:语音模型怎么下载?

语音模型是可选增强,不会自动下载。手动执行:

cd C:\Users\Administrator\.dsh\profiles\web\node_modules\better-dsh-pet
npm run download:sensevoice

详细说明见 ⬇️ 下载说明。

Q:没有语音模型能使用语音功能吗?

能。

- 没有 SenseVoice 模型时,会自动回退到 Windows 系统语音识别(SAPI)
- 下载 SenseVoice 后,会使用更准的本地离线识别

Q:为什么任务识别后没有自动执行?

这是故意的。识别为任务后需要你点击「执行任务」按钮确认,防止误识别白烧 Token。

Q:任务会话归档后还在跑怎么办?

已经修复:归档后会自动取消 Agent,3 秒兜底强杀。如果仍然遇到,请升级到最新版本。

Q:情绪值为什么还是重置?

请确认使用的是 0.3.0 及以上版本,并重启一次 DSH / 桌宠进程。旧版本没有情绪持久化。

🛠️ 开发 / 发布

本地调试

使用本地源码
dsh plugin --profile web add "D:\dsh-pet"

打包
npm pack

发布前检查
node scripts/prepack-check.js

发布到 npm
npm publish

目录结构

better-dsh-pet/
├── lib/ # 宿主半侧(DSH 插件逻辑) │ ├── index.js # 插件入口 │ ├── client.js # 浏览器半侧(DSH 设置卡片) │ ├── pet-reducer.js # DSH 状态 → 桌宠状态 │ ├── pet-helper-process.js # Electron Helper 进程管理 │ └── sensevoice.js # 本地语音识别 ├── runtime/electron-helper/ # Electron 桌面端 │ ├── main.js # 主进程(托盘 / 看门狗 / 全屏检测) │ ├── preload.js # 安全桥 │ └── renderer.js # 桌宠 UI / 动画 / 聊天 / 语音 ├── assets/ # 动画、音效、图标 ├── scripts/ # 下载、转码、发布检查 └── cordis.patch.yml # DSH bundle 挂载声明

📌 二创声明

本项目是基于 PC2005-cloud/dsh-pet 的二创修改版。

- 感谢原作者的桌宠动画与设计
- 本项目在保留原动画基础上,增加了 DSH 状态联动、桌面独立窗口、余额、番茄钟、吐槽、语音、任务执行、情绪、节日、自定义动作等能力
- 素材使用请遵守原作者仓库的许可说明

🔎 相关链接

- 社区插件目录:awesome-dsh-plugin.com
- DSH 官方仓库:deepseek-ai/DeepSeek-Harness
- 上游原版:PC2005-cloud/dsh-pet
- 上游 Windows 移植参考:MerZlin/dsh-pet-indesktop

📄 许可

- 代码:MIT
- 素材(动画 / 提示词 / 源视频):见仓库说明,禁止商用

如果这个大肥鱼让你开心,给个 ⭐ 支持一下吧~

🐋 DSH 在干活,大肥鱼在陪你。
预览分享卡片长什么样 ↓ysppwn721/better-dsh-pet
分享 · DeepSeek Harness Hub
ysppwn721/better-dsh-pet

🐋 better-dsh-pet

这是你的仓库?认领条目

回到顶部